今天准备部署乾天计划中的一个主要的事件,就是在太乙村兑换资源的一个事件合约。本以为对这个事件思考过很多次,驾轻就熟,会比较容易地部署上大荒,结果发生了一些出乎意料的事情。
大荒乾天计划要想顺利开展,初期要完成一个最简单的经济循环,将资源产出,并能够获得通货(道理)。这就好比产生生命,最基础的那几个生化循环,来让营养产生能量,让能量再去推动获得营养。
这个经济循环是一个很简单的闭环,即:“购买/铸造新角色--》成长/挖取资源--》兑换道理--》购买新角色”。铸造新角色需要缴纳道理,道理收入太乙岛金库。所有资源要么质量守恒,要么质能互换,不会凭空出现,需要角色们花费时间和体力去采集,去挖。初期道理按劳分配,你用资源可以兑换出一定量的道理。
“兑换道理”这一个操作,就需要角色在太乙村找村长上缴一定量的各种资源(金石木织药),村长兑换给你一定量的道理。这是在一个事件中就可以做到的。
上午11点30分,完成新事件60514编码,太乙村兑换资源事件。现在需要一个村长经手资金,于是我们用启动资金购买铸造了一个新角色,取名“罗达”。
上午11点40分,我们部署了事件60514,并且让罗达入驻事件成为经手人。接下来,我们做了一个比较大胆的动作。
目前道理已经发行了300个,算是定向拨款。计划发行100万道理,那么接下来我们直接将99万9千7百道理一次发行完毕,并全部交给了罗达。
下午1点28分,所有道理资金全部转给了罗达。
至此,百万道理印钞完毕,已经交给大荒太乙村村长罗达管理。
这里要说明一下,罗达作为NFT,其Owner已经是事件60514的地址,事件合约开源,且在区块链浏览器上验证。任何人都无法私自控制罗达,只有这个事件本身,在时间线噎明的触发下工作。
任何人都可以通过链上开源代码和数据来检验这个事件合约,事件入驻的经手人是20号角色NFT,就是罗达。除非代码有重大漏洞,根据区块链不可篡改的特性,事件60514和罗达的未来行为已经无可辩驳地规定下来了。这些规则将不受任何人控制,即“不以人类意志为转移”。当然,太乙世界是要能够持续健康发展的,太乙岛上众师傅可以通过赏善罚恶令系统投票进行事件的更替。
到此为止,一切都还进行得不错。接下来,我们让位于太乙村的韩湘子挖点资源去兑换点道理试试看。如果一切顺利,乾天计划基本上就可以顺利开展大规模建设了。
然而,下午1点50分,事情有点不对头。我们试着让韩湘子触发事件60154,让村长罗达兑换韩湘子手上的全部木材。
失败!
执行脚本发现,事件的常规许可检查都通过不了!
啊完了完了,检查代码发现60514合约代码有bug!
由于角色位置检查代码写错,造成了角色位置不在太乙村才可以兑换资源,而角色在太乙村反而无法兑换。韩湘子目前的位置在太乙村,因此兑换事件许可检查失败,无法执行60514。
目前的情况是,虽然兑换可以进行,但是逻辑不对了,后面建设不好搞啊。检查了本机的自动化测试用例代码,发现没有覆盖到这部分逻辑。按照建设规范,接下来就得重新部署这个事件合约。
罗达这个人算是废了,因为我们的事件编码规范目前还未支持从事件中再把角色提取出来,辞职或者换人。但是罗达身上这么大一笔资金,也是我们乾天计划所有的资金,应该怎么办呢?如果是正式线上,势必会在社区引起极大的恐慌。这里是第一次实战测试,我们得想办法把钱搞出来。目前能想到的办法有:
把罗达角色从60514提取出来。但是这些事件还没有做取人换人的接口(因为安全性不能随便走人,旧规范的遗留问题),所以罗达实际上是废掉了,取不出来。
直接操作罗达身上的资金。这需要测试环境部署的“后门”,我们可以直接操作盘古角色,盘古角色在测试环境也具有噎明的权限,理论上有没有可能直接从罗达身上取出这些币。然而我们检查了60514的合约代码,发现盘古也是无法操作这个罗达的。
如果在正式线上,任何新事件,在部署好后,均要开源并被区块链浏览器验证,接受社区的检查。接着,社区会掀起会议或者讨论,各方面势力的高手检查核实部署的新事件的合约代码。之后,才会由太乙岛出面,各位师傅在赏善罚恶令系统投票,将新的事件链接进大荒的时间线。总之是个很麻烦的事情,不过web3这种奇葩的建设方式也是在区块链的安全性和持久性下的必然结果,大荒世界的合约网络也就像是忒修斯之船一样,在建设中运行,在运行中建设,不断升级,不断通过大量的事件合约来构造这个世界的因果历史。
给文明以岁月,不如给岁月以文明。
下午3点08分,用修正了的60514代码新实现了一个60515事件,执行入口特别增加了如下一段:
这个事件部署后,代码就会被验证并公开,大家都看得到,然后执行逻辑,也只有大荒时间线的噎明神才能在事件合约中有权转移罗达的资金。之后60514就属于垃圾事件了,罗达身上没钱,也无法再在60514产生有意义的历史。
下午3点56分,本机的自动化测试用例已经覆盖了这几个情况,并且测试通过。
事件60515需要新的村长,我们铸造了一个新人,取名“罗门”。事件60515在首次被触发时,罗达身上的所有道理就应该被一次性转到罗门身上。
下午4点21分,事件60515合约部署完毕,接下来对60515进行浏览器源码验证。
接下来执行关键一步,就是用韩湘子触发首次太乙村兑换,如果兑换成功,咋们马上再来确认罗达和罗门的资金情况。
下午4点28分,小脚本执行成功,提示韩湘子兑换前共有木材75个多,准备检查链上情况。
链上交易数据看起来正常,合约内部发生了多次转账交易。首先发生了99万多个道理的转账(罗达转款),再发生了75个多木材的转账(韩湘子上缴),再发生了0.75个多道理的转账(罗门付钱)。
根据大荒世界资源合约随机初始化的贫瘠程度,我们将木材兑换价格设定的是每单位兑换0.01道理,75个多木材确实能兑出来0.75个道理。
至此,顺利将大额建设资金从罗达转移到了罗门手上。
下午4点48分,检查道理Token的分布,正常。
现在,已经形成了“购买/铸造新角色--》成长/挖取资源--》兑换道理--》购买新角色”,这一最简单的经济循环系统,为大荒的大规模建设奠定了基础。