BSV网络上的拍卖合约

我们在 BSV 网络上设计并实现了一个安全的拍卖合约。 它是公开透明的,每个人都可以参加,竞标结束后出价最高的竞标者将中标。 投标人受其出价的约束,而拍卖人则受拍卖结果的约束。

实现



// Auction: highest bid before deadline wins
contract Auction {
    @state
    PubKeyHash bidder;

    PubKey auctioner;
    int auctionDeadline;

    // bid with a higher offer
    public function bid(PubKeyHash bidder, int bid, int changeSats, SigHashPreimage txPreimage) {
        require(Tx.checkPreimage(txPreimage));

        int highestBid = SigHash.value(txPreimage);
        require(bid > highestBid);

        PubKeyHash highestBidder = this.bidder;
        this.bidder = bidder;

        // auction continues with a higher bidder
        bytes stateScript = this.getStateScript();
        bytes auctionOutput = Utils.buildOutput(stateScript, bid);

        // refund previous highest bidder
        bytes refundScript = Utils.buildPublicKeyHashScript(highestBidder);
        bytes refundOutput = Utils.buildOutput(refundScript, highestBid);

        bytes changeScript = Utils.buildPublicKeyHashScript(bidder);
        bytes changeOutput = Utils.buildOutput(changeScript, changeSats);

        bytes output = auctionOutput + refundOutput + changeOutput;

        require(hash256(output) == SigHash.hashOutputs(txPreimage));
    }

    // withdraw after bidding is over
    public function close(Sig sig, SigHashPreimage txPreimage) {
        require(Tx.checkPreimage(txPreimage));
        require(SigHash.nLocktime(txPreimage) >= this.auctionDeadline);
        require(checkSig(sig, this.auctioner));
    }
}
  • bid (竞价)函数逻辑:如果找到更高的出价,则更新当前的中标者,并退款给之前的最高出价者。
  • close (成交)函数逻辑:拍卖者可以在到期后关闭拍卖并接受要约。

可能的扩展

有很多方法可以扩展此基本合同。 例如,如果拍卖的物品被标记并存储在 UTXO(例如 NFT)中,可以要求交易 Tx 的一个输入是通证的 UTXO,通过一个输出将其转移给买主,从而使得成交操作是原子性的,不可能作弊。

  • 2
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论 3

打赏作者

sCrypt 智能合约

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值