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

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

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

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

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

拍卖人通过构造器SimpleAuction()发起拍卖,提供拍卖持续时间和受益人账户地址参数,拍卖人可以是商品主人也可以是代理人。

参与人通过调用bid()方法进行举牌。举牌是一个需要耗币的过程,并且每次举牌的金额必须高于当前举牌的最大金额。该方法会记录当前的举牌人账户地址和金额。

如果参与人的举牌金额在下一轮被超越了,就会将上一轮的举牌人和举牌金额记录在pendingReturns字典中以便在拍卖结束返还给参与人。

任意用户调用auctionEnd()触发交易结束。也许你会问如果是任意用户可以结束交易,那交易不就可以提前结束了么?该方法的代码已经做了时间判断,只有等到拍卖的时间结束调用此方法才能成功,并且通过设置ended变量来控制只能结束一次。

拍卖一结束,合约就会调用beneficiary.transfer(highestBid)将当前举牌的最大金额转入受益人账户。

其它未中标的参与人可以调用withdraw()方法从合约账户中取回自己的竞拍金额。

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

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

阅读相关文章,关注微信公众号/知乎专栏/头条号【码洞】

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 摘要 本文将以具有代表性的...
    ee7acbee6c0e阅读 4,535评论 0 1
  • 以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译:巨蟹 、少平 译者注:中文读者可以到以太坊爱...
    车圣阅读 9,200评论 1 7
  • 【中文版】以太坊白皮书 翻译:少平、 Seven当中本聪在 2009 年 1 月启动比特币区块链时,他同时向世界引...
    __Seven__阅读 9,814评论 0 10
  • The summary of 《Why change classroom assessment》 This art...
    真真卒迹阅读 4,662评论 0 0
  • 继于周日的活跃气氛,善意的提出给孩子们也创造一场学习外的有意义的活动。 晚上,考虑自己当初班里分组不周,...
    梦凡妈妈阅读 1,729评论 0 0

友情链接更多精彩内容