Coin Toss
承诺揭示式抛硬币。toss 会校验 Alice 与 Bob 揭示的 nonce 是否分别匹配 self.aliceHash 和 self.bobHash。两个 nonce 相同,或 Alice 揭示哨兵值 self.N 时由 Bob 签名;否则由 Alice 签名。
txt
# 承诺揭示式抛硬币:双方都必须揭示此前承诺过的字节串。
Contract CoinToss:
def toss(aliceNonce: hex, bobNonce: hex, sig: hex):
# 任意一方揭示值与保存的哈希不匹配时立即拒绝。
EqualVerify(Hash256(aliceNonce.Clone()), self.aliceHash)
EqualVerify(Hash256(bobNonce.Clone()), self.bobHash)
# 双方揭示相同,或 Alice 揭示哨兵值时,由 Bob 签名通过。
if Or(Equal(aliceNonce.Clone(), bobNonce), Equal(aliceNonce, self.N)) == 1:
CheckSigVerify(sig, self.bob)
else:
CheckSigVerify(sig, self.alice)