EOS漏洞|EOS账户名竞拍系统的BUG跟鱼池创始人神鱼竟然有关?

剥开柚子1 - 一波三折的bidname

|作者:程剑宇

|欢迎添加作者微信 bitportal_Jamie 与他进行交流!未经授权禁止转载!

前言

剥开柚子系列是一系列技术日志,主要记录BitPortal团队在参与到EOS社区中的一些所见所闻所想。BitPortal与EOS社区内的其他团队一起见证了EOS从测试阶段到主网发布和上线,然后到当前不断进行迭代开发的过程。这是第一篇,主要讲讲围绕EOS的系统合约,尤其是bidname相关发生的事情。

未来,BitPortal也会抱着一个负责任的技术团队的态度,一方面参与技术社区的发展建设,一方面及时与社区沟通区块链里正在发生的事情。

上线

EOS是最近区块链发展的热点项目之一,其募集资金,开发实力,社区活跃程度都达到了相当的程度。“有人,有钱,有社区”的EOS可以说是含着金钥匙出生,在其链上数据中,其正式的激活是北京时间2018/6/20 22:44:52,这个时间用时间戳的形式记录在eosio的global表中,key名为thresh_activated_stake_time。然而很可惜的是,这个时间就如整个EOS上线后发生的一系列事件一样,是因为bug导致的,并不完全准确。

众所周知,EOS的真正激活时间应该是在北京时间2018年6月15日凌晨1点40分,当时老猫等五人聚在一起,给当时排第一的节点EOScanada投了近6%的票,让主网的投票率一下超过15%,EOS主网正式激活。

可是为什么系统里会出现这个错误时间呢?答案是,EOS系统合约里关于投票的部分有bug,这个bug会导致每次投票都会更新主网激活时间为最新时间。这个问题直到v1.0.5被部署到主网并且升级完系统合约后,才正式解决,所以EOS区块链里记录的时间就为2018/6/20 22:44:52这个时间点了。当然,中间EOS整个系统还停摆过一次。

具体的代码信息可见这里:https://github.com/EOSIO/eos/pull/4106。

也许你会问:
问:这个错误大概是什么水平呢?
答:抛开编程语法,逻辑上大概一个大学生细心一点就能够避免的水平。

问:为什么v1.0.4就merge了代码但是直到v1.0.5才正式部署?
答:因为v1.0.4的bug太多直接跳过没有被部署。

延迟开放的短名竞拍

这个问题同时引发了一些与此相关的问题,其中一个就是EOS的短命竞拍bidname机制。

当前,EOS只开放了12位短名的注册,而且只能包含数字1-5和小写字母a-z。对于短于12位的名字,需要通过bidname机制来竞拍。在文档上和大家的相互科普的文章里,EOS意图实现的bidname竞拍规则主要有以下几条:
1. 距离上一次全网短名成交已经超过24小时
2. 成交的短名需要在全网竞价中排名最高
3. 成交的短命需要有超过24小时无人再出价
4. 每次出价必须加价超过10%
5. 第一次成交将在EOS主网激活14天后开始

相信细心的朋友可以看出来了,没错,在代码里,激活时间正是以global表里的thresh_activated_stake_time来判断的,因为这个时间延后了5天多,bidname的开始时间也就因此延后了5天多才开始。

依旧不正常的bidname

然而bidname从此就正常工作了吗?让我们来看看当前最新的数据。

  1. 正在竞拍的名字(截止到:北京时间2018年9月2日晚上22点)

EOS漏洞|EOS账户名竞拍系统的BUG跟鱼池创始人神鱼竟然有关?_第1张图片

咦,排第一的是ex账户,上次竞拍时间是2018-08-14 20:52:49,已经超过24小时,那为什么还没成交呢?

  1. 上一次竞拍成功的名字(截止到:北京时间2018年9月2日晚上22点)

(图2)上一次竞拍成功的名字

上一次竞拍成功的名字是app,竞拍成功时间是2018-08-03 17:16:03。这都已经过去快一个月了。

综合上面2条信息,你会发现:ex应该符合所有需要成交的条件,但是就是没有成交,这是什么原因呢?

这个问题当时困扰了我许久,然后就去查了一查代码,并且在朋友的提醒下找出了原因:代码有bug。当然,后来我发现eos社区已经有人发现了这个bug而且已经在最新的合约里修复了,但这个合约还未被部署,因此主网上还未生效。

这是一个什么样的bug呢?触发的原因其实很简单,因为上一个竞拍成功的名字“app”还未被注册成新的账户。这个举动触发了EOS合约里一个多个因素合在一起导致的bug,即当之前竞拍成功的账户未被注册成新账户时,其依旧会参与下一轮竞拍的排序,这就导致排序后的结果“app”依旧排在第一位。所以ex会一直不成交,因为在系统看来其并非全网最高出价。

EOS漏洞|EOS账户名竞拍系统的BUG跟鱼池创始人神鱼竟然有关?_第2张图片

具体的代码细节可以关注此次修复的Pull Request:https://github.com/EOSIO/eosio.contracts/issues/21。需要注意的是,在eosio/eos这个repo中,该bug依旧存在,所以请务必使用eosio.contracts这个repo中的系统合约代码。

非常有意思的是,通过图2你可以看到,拍下该名字的不是别人,而是大家熟悉的f2pool(鱼池)的七彩神仙鱼(神鱼)。如果神鱼把“app”账户名注册了,EOS的bidname暂时也就运作正常了。我们无从得知神鱼是不是发现了这个bug而故意迟迟不注册“app”,但是如果是,我只想说“怼得漂亮”,毕竟EOS的系统合约出现这种bug,实属不应该。

放在最后

在写这篇文章的时候,我试图禀着不黑不吹的态度。但也许你看了本篇文章,会对EOS充满失望,这是因为EOS当前确实还需要时间来完善和成熟。只是不可否认的是,EOS目前依旧还是当前区块链里比较有活力的一个项目;而且围绕着EOS,已经建立起一个生态,相信EOS也会继续蓬勃发展下去。

而对于EOS的问题,我们要正视。EOS在软件质量控制上做得确实不尽如人意,整个项目依旧像保持在不停赶工的状态,出现开发接口变化,开发思路变化,低级bug也已经不是一次两次了,因此真正参与到EOS开发社区中依旧会很累(信息爆炸,预期差距)。

值得思考的是,EOS每一次做大的升级或改变,其实成本最高的并不是block.one或者BM和他的开发团队,而是其周边衍生的社区。毕竟,每次改变都需要社区花费很多精力来配合修改,长久以往,绝非好事。

最后,祝EOS能够实现自己的愿景,也祝福BitPortal团队能够在区块链的发展里做出属于自己的一份贡献。

作者介绍

程剑宇

BitPortal联合创始人&CEO

前比特币中国后端工程师

上海区块链开发者线下meetup-SHBD发起人之一

NEO,Bytom,Vechain,Kyber等项目早期投资人

更多关于 BitPortal 钱包信息

点击这里下载:

https://fir.im/bitportal

Media:

官网:https://www.bitportal.io/

电报群: https://t.me/BitPortal_official_EN

官方QQ群:121446100

微博:BitPortal币通

小秘书微信号:BitPortal_jamie​​​​

你可能感兴趣的:(剥开柚子系列)