Skip to content

Coin Toss

承诺揭示式抛硬币。toss 会校验 Alice 与 Bob 揭示的 nonce 是否分别匹配 self.aliceHashself.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)