Skip to main content

Bài 15: Marlowe ký quỹ - Từng bước một

Hướng dẫn tạo hợp đồng dựa trên hợp đồng ủy thác.

Hợp đồng 1. Khoản tiết kiệm cố định.

Mục tiêu:

  • Tiết kiệm một số tiền cho tương lai.

Quy tắc:

  • Alice có từ thời điểm 0 đến thời điểm 10 để gửi tiền (cam kết) 500 ADA.
  • Tiền sẽ bị khóa cho đến thời điểm 100.
  • Chỉ sau thời gian 100 tiền sẽ được lấy lại.

Khóa tiết kiệm

Mã Marlowe:

CommitCash (IdentCC 1) 1
(ConstMoney 500)
10 100 Null Null

Các trường hợp thử nghiệm:

  • Ada không thể được cam kết sau thời gian 10
  • Ada không thể được lấy lại trước thời gian 100
  • Ada có thể được lấy lại sau thời gian 100

Hợp đồng 2. Thanh toán đơn giản với thời hạn yêu cầu.

Mục tiêu:

  • Trả tiền cho một sản phẩm hoặc dịch vụ.

Quy tắc:

  • Alice có từ thời điểm 0 đến thời điểm 10 để gửi 500 ADA.
  • Bob có thể yêu cầu thanh toán từ lần 11 đến lần 100.
  • Alice có thể đổi tiền sau thời gian 100 nếu Bob không yêu cầu thanh toán.

Khóa tiết kiệm

Mã Marlowe:

CommitCash (IdentCC 1) 1
(ConstMoney 500)
10 100
(Pay (IdentPay 1) 1 2
(AvailableMoney (IdentCC 1))
100 Null)
Null

Các trường hợp thử nghiệm:

  • Tiền mặt không thể được cam kết sau thời gian 10.
  • Ada có thể được yêu cầu bất cứ lúc nào sau khi cam kết và trước khi đạt đến thời gian 100.
  • Ada không thể được lấy lại trước thời gian 100.
  • Chỉ người thứ 2 mới có thể yêu cầu thanh toán.
  • Ada có thể được lấy lại sau thời gian 100.

Hợp đồng 3. Ủy quyền thanh toán

Mục tiêu:

  • Thanh toán cho một sản phẩm hoặc dịch vụ nhưng việc thanh toán phải được người mua ủy quyền.

Quy tắc:

  • Alice có từ thời điểm 0 đến thời điểm 10 để gửi 500 ADA.
  • Alice có từ thời điểm 11 đến thời điểm 40 để chọn xem cô ấy có thực sự ủy quyền thanh toán cho Bob hay không.
  • Nếu Alice chọn thanh toán, Bob có thể yêu cầu thanh toán từ lần 41 đến lần 100.
  • Alice có thể đổi tiền sau thời gian 100.

Khóa tiết kiệm

Mã Marlowe:

CommitCash (IdentCC 1) 1
(ConstMoney 500)
10 100
(When (PersonChoseThis (IdentChoice 1) 1 1)
40
(Pay (IdentPay 1) 1 2
(AvailableMoney (IdentCC 1))
100 Null)
(RedeemCC (IdentCC 1) Null))
Null

Các trường hợp thử nghiệm:

  • Alice ủy quyền thanh toán
  • Alice không ủy quyền

Hợp đồng 4. Thanh toán trừ khi bị từ chối rõ ràng

Mục tiêu:

  • Trả tiền cho Bob trừ khi Alice từ chối khoản thanh toán một cách rõ ràng.

Quy tắc:

  • Alice có từ thời điểm 0 đến thời điểm 10 để gửi 500 ADA.
  • Alice có từ thời điểm 11 đến thời điểm 40 để chọn nếu cô ấy từ chối thanh toán.
  • Nếu Alice chọn không thanh toán, tiền có thể đổi được.
  • Nếu Alice chọn thanh toán hoặc không lựa chọn, Bob có thể yêu cầu từ lần 41 đến lần 100.
  • Alice có thể đổi tiền sau thời gian 100.

Khóa tiết kiệm

Mã Marlowe:

CommitCash (IdentCC 1) 1
(ConstMoney 500)
10 100
(When (PersonChoseSomething (IdentChoice 1) 1)
40
(Choice (PersonChoseThis (IdentChoice 1) 1 0)
(RedeemCC (IdentCC 1) Null)
(Pay (IdentPay 1) 1 2
(AvailableMoney (IdentCC 1))
100 Null))
(Pay (IdentPay 2) 1 2
(AvailableMoney (IdentCC 1))
100 Null))
Null

Các trường hợp thử nghiệm:

  • Bob có thể thu thập ngay cả khi Alice không đưa ra chỉ dẫn.
  • Alice có thể hủy thanh toán
  • Bob không thể yêu cầu thanh toán trước khối 40 hoặc sự chấp thuận từ Alice.

Hợp đồng 5. Ký quỹ đơn giản

Mục tiêu:

  • Trả tiền cho Bob khi hai trong số ba người bỏ phiếu thanh toán,
  • Hoàn tiền cho Alice khi có 2/3 người bỏ phiếu không thanh toán.

Quy tắc:

  • Alice có từ thời điểm 0 đến thời điểm 10 để gửi 500 ADA.
  • Alice có từ thời điểm 11 đến thời điểm 40 để bỏ phiếu nếu cô ấy chấp thuận hoặc từ chối khoản thanh toán.
  • Bob có từ thời điểm 11 đến thời điểm 60 để bỏ phiếu nếu ông ấy chấp thuận hoặc từ chối khoản thanh toán.
  • Carol có từ thời điểm 11 đến thời điểm 60 để bỏ phiếu nếu cô ấy chấp thuận hoặc từ chối khoản thanh toán.
  • Nếu hai trong số ba người tham gia bỏ phiếu không trả tiền, tiền sẽ được lấy lại sau thời gian 100.
  • Nếu hai trong số ba người tham gia bỏ phiếu đồng ý thanh toán, Bob có thể yêu cầu thanh toán từ lần 61 đến lần 100.
  • Alice có thể đổi tiền sau thời gian 100.

Khóa tiết kiệm

Mã Marlowe:

CommitCash (IdentCC 1) 1
(ConstMoney 500)
10 100
(When (OrObs (AndObs (PersonChoseThis (IdentChoice 1) 1 1)
(PersonChoseThis (IdentChoice 1) 2 1))
(OrObs (AndObs (PersonChoseThis (IdentChoice 1) 1 1)
(PersonChoseThis (IdentChoice 1) 3 1))
(AndObs (PersonChoseThis (IdentChoice 1) 2 1)
(PersonChoseThis (IdentChoice 1) 3 1))))
100
(Pay (IdentPay 1) 1 2
(AvailableMoney (IdentCC 1))
100 Null)
Null)
Null

Các trường hợp thử nghiệm:

  • Thanh toán chỉ có thể được yêu cầu khi 2 trong số 3 người tham gia đã bỏ phiếu thanh toán.
  • Alice và Bob đồng ý trả tiền
  • Bob và Carol đồng ý trả tiền
  • Alice và Carol đồng ý trả tiền
  • Chỉ người thứ 2 (bob) mới có thể yêu cầu thanh toán.
  • Ada có thể được lấy lại sau khối 100

Hợp đồng 6. Ký quỹ hoàn thành

Mục tiêu:

  • Trả tiền cho Bob khi hai trong số ba người bỏ phiếu thanh toán,
  • Hoàn tiền cho Alice khi có 2/3 người bỏ phiếu không thanh toán.
  • Cải thiện Hợp đồng 5 để cho phép Alice được hoàn trả sớm hơn nếu kết quả bỏ phiếu không được thanh toán.

Quy tắc:

  • Alice có từ thời điểm 0 đến thời điểm 10 để gửi 500 ADA.
  • Alice có từ thời điểm 11 đến thời điểm 40 để bỏ phiếu nếu cô ấy chấp thuận hoặc từ chối khoản thanh toán.
  • Bob có từ thời điểm 11 đến thời điểm 60 để bỏ phiếu nếu ông ấy chấp thuận hoặc từ chối khoản thanh toán.
  • Carol có từ thời điểm 11 đến thời điểm 60 để bỏ phiếu nếu cô ấy chấp thuận hoặc từ chối khoản thanh toán.
  • Nếu hai trong số ba người tham gia bỏ phiếu không trả tiền, tiền sẽ được lấy lại ngay lập tức.
  • Nếu hai trong số ba người tham gia bỏ phiếu đồng ý thanh toán, Bob có thể yêu cầu thanh toán từ lần 61 đến lần 100.
  • Alice có thể đổi tiền sau thời gian 100.

Khóa tiết kiệm

cây quyết định

Khóa tiết kiệm

Mã Marlowe:

CommitCash (IdentCC 1) 1
(ConstMoney 500)
10 100
(When (OrObs (OrObs (AndObs (PersonChoseThis (IdentChoice 1) 1 1)
(PersonChoseThis (IdentChoice 1) 2 1))
(OrObs (AndObs (PersonChoseThis (IdentChoice 1) 1 1)
(PersonChoseThis (IdentChoice 1) 3 1))
(AndObs (PersonChoseThis (IdentChoice 1) 2 1)
(PersonChoseThis (IdentChoice 1) 3 1))))
(OrObs (AndObs (PersonChoseThis (IdentChoice 1) 1 0)
(PersonChoseThis (IdentChoice 1) 2 0))
(OrObs (AndObs (PersonChoseThis (IdentChoice 1) 1 0)
(PersonChoseThis (IdentChoice 1) 3 0))
(AndObs (PersonChoseThis (IdentChoice 1) 2 0)
(PersonChoseThis (IdentChoice 1) 3 0)))))
100
(Choice (OrObs (AndObs (PersonChoseThis (IdentChoice 1) 1 1)
(PersonChoseThis (IdentChoice 1) 2 1))
(OrObs (AndObs (PersonChoseThis (IdentChoice 1) 1 1)
(PersonChoseThis (IdentChoice 1) 3 1))
(AndObs (PersonChoseThis (IdentChoice 1) 2 1)
(PersonChoseThis (IdentChoice 1) 3 1))))
(Pay (IdentPay 1) 1 2
(AvailableMoney (IdentCC 1))
100 Null)
(RedeemCC (IdentCC 1) Null))
Null)
Null

Các trường hợp thử nghiệm:

  • Kiểm tra xem khi cả Alice và Carol chọn KHÔNG thanh toán, Alice có thể đổi tiền ngay lập tức.

Picture