示例Vyper 中文文档
安全远程购买
通过双方押金机制确保买卖双方在无信任环境下完成交易。
安全远程购买合约:通过双方押金机制确保买卖双方在无信任环境下完成交易。
学习用途
本示例仅用于学习目的。请勿在未经充分审查和测试的情况下用于生产环境。
概览
交易流程:
- 卖方发布商品并提交双倍商品价值的押金(余额 = 2x)
- 买方以商品价值购买并额外提交等额押金(余额 = 4x)
- 卖方发货
- 买方确认收货 — 买方退还押金(x),卖方退还押金(2x)+ 商品价值(x)
完整合约代码
vyper
#pragma version >0.3.10
# Safe Remote Purchase
value: public(uint256)
seller: public(address)
buyer: public(address)
unlocked: public(bool)
ended: public(bool)
finalized: public(bool)
@deploy
@payable
def __init__():
assert (msg.value % 2) == 0
assert msg.value > 0
self.value = msg.value // 2
self.seller = msg.sender
self.unlocked = True
@external
def abort():
assert not self.finalized
assert self.unlocked
assert msg.sender == self.seller
self.finalized = True
assert self.balance > 0 and self.balance == 2 * self.value
send(self.seller, self.balance)
@external
@payable
def purchase():
assert not self.finalized
assert self.unlocked
assert msg.value == (2 * self.value)
self.buyer = msg.sender
self.unlocked = False
@external
def received():
assert not self.finalized
assert not self.unlocked
assert msg.sender == self.buyer
assert not self.ended
self.ended = True
self.finalized = True
send(self.buyer, self.value)
assert self.balance == 3 * self.value
send(self.seller, self.balance)代码解析
押金机制
构造函数要求卖方发送偶数金额的 ETH 作为双倍押金。value 存储商品的实际价值(发送金额的一半)。
abort() — 取消交易
仅卖方可在买方购买前取消,退回全部押金。
purchase() — 买方购买
买方必须发送恰好双倍商品价值的 ETH(一份是商品价格,一份是押金)。购买后合约锁定。
received() — 确认收货
买方确认收货后,合约按规则分配资金:买方拿回押金(1x),卖方拿回押金加商品价值(3x)。
本页目录