以太坊合约分析之拍卖算法

原文发布于微信公众号 – 码洞(codehole)

文章来源:https://cloud.tencent.com/developer/article/1186340

原文发表时间:2018-03-02

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

拍卖的基本流程很简单,一般就是拍卖人亮出一件商品,拼命的宣传吹嘘商品的价值,然后进入一轮又一轮的竞价过程,待拍卖时间结束,价高者和拍卖人一手交货一手交钱。

现场拍卖和数字拍卖略微不同,现场拍卖等待的时间不能太长,不能冷场,拍卖参与的人数也很有限,拍卖程序进行的很快,连喊几声无人加价就结束了。

数字拍卖一般是限定时间段,活动时间到了拍卖才算结束,或者拍卖人觉得拍卖的价钱已经很不错了就提前结束。

下面我们分析一个简单的拍卖合约代码



  1. 拍卖人通过构造器SimpleAuction()发起拍卖,提供拍卖持续时间和受益人账户地址参数,拍卖人可以是商品主人也可以是代理人。
  2. 参与人通过调用bid()方法进行举牌。举牌是一个需要耗币的过程,并且每次举牌的金额必须高于当前举牌的最大金额。该方法会记录当前的举牌人账户地址和金额。 如果参与人的举牌金额在下一轮被超越了,就会将上一轮的举牌人和举牌金额记录在pendingReturns字典中以便在拍卖结束返还给参与人。
  3. 任意用户调用auctionEnd()触发交易结束。也许你会问如果是任意用户可以结束交易,那交易不就可以提前结束了么?该方法的代码已经做了时间判断,只有等到拍卖的时间结束调用此方法才能成功,并且通过设置ended变量来控制只能结束一次。 拍卖一结束,合约就会调用beneficiary.transfer(highestBid)将当前举牌的最大金额转入受益人账户。
  4. 其它未中标的参与人可以调用withdraw()方法从合约账户中取回自己的竞拍金额。

上面这个简单的合约有一个不足,参与人如果向加价竞拍的话,需要重复支付全量金额,如果重复加价N次,需要付出N倍的金额。

还有就是没有限定加价最低间隔,会导致后面的参与人使用微弱的价格增量就可以抢夺商品的购买权,因为合约的执行确认需要一定时间,在活动临近结束时,当前最高竞价者持有的商品购买权很容易被抢占。

文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享