|作者:程剑宇
|欢迎添加作者微信 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从此就正常工作了吗?让我们来看看当前最新的数据。
咦,排第一的是ex账户,上次竞拍时间是2018-08-14 20:52:49,已经超过24小时,那为什么还没成交呢?
上一次竞拍成功的名字是app,竞拍成功时间是2018-08-03 17:16:03。这都已经过去快一个月了。
综合上面2条信息,你会发现:ex应该符合所有需要成交的条件,但是就是没有成交,这是什么原因呢?
这个问题当时困扰了我许久,然后就去查了一查代码,并且在朋友的提醒下找出了原因:代码有bug。当然,后来我发现eos社区已经有人发现了这个bug而且已经在最新的合约里修复了,但这个合约还未被部署,因此主网上还未生效。
这是一个什么样的bug呢?触发的原因其实很简单,因为上一个竞拍成功的名字“app”还未被注册成新的账户。这个举动触发了EOS合约里一个多个因素合在一起导致的bug,即当之前竞拍成功的账户未被注册成新账户时,其依旧会参与下一轮竞拍的排序,这就导致排序后的结果“app”依旧排在第一位。所以ex会一直不成交,因为在系统看来其并非全网最高出价。
具体的代码细节可以关注此次修复的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