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.
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.
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.
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.
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.
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.
cây quyết định
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.