BM亲自下场,指导竞猜DAPP的解决方案

昨天,BM在Medium发表了一篇标题为《Developing Efficient Contracts》的文章,提出了解决目前CPU短缺问题的三点建议。文章不长,不过我想很多人在看这篇文章之前,还是得先补一补关于EOS CPU的基础知识。

EOS中主要有三种资源:RAM(内存)、CPU(计算)、NET(带宽),其中CPU和NET是可恢复资源,用完不要紧,它会自动补充回来,只要你愿意等,24小时能完全恢复。

每一笔交易都需要消耗CPU,CPU就相当于燃料,比如在下面这笔交易中,就消耗了719 μs的CPU(CPU以时间为单位)。

那由谁来支付CPU燃料费呢?

现在都是由交易的发起者来买单的。A给B转一笔账,就是从A账号的CPU和NET可用余额中扣去那一部分。但这样用户在玩某个DAPP的时候,尤其是菠菜这种需要频繁转账的游戏,自己的CPU一旦不够,就会觉得卡了,而且这是常有的事,非常影响用户体验。

CPU不够了,用户就要到一个“当铺”(eosio.stake),通过抵押EOS来换取CPU,但具体1个EOS能换回多少CPU,还需要由EOS网络的忙碌程度决定——越忙,换回的CPU就越少;越闲,换回的CPU就越多。

于是媒体就有了这样的报道:

EOS主网一直存在CPU资源使用紧张的状况,导致CPU抵押价格存在较大幅度的波动。根据DAppTotal 数据,Top10 DApps消耗的CPU占据了全网CPU资源的84.15%,且全部都是竞猜类DApp游戏。受此影响,前天的CPU抵押价格最高达到了3EOS/ms,意味着玩家玩一次游戏(以BetDice为例)约需要抵押4个EOS。

显然,它的意思是说,由于竞猜类DAPP的频繁转账,导致网络变得繁忙,于是按照上面的理论,每个人无论是正常转账还是玩游戏,抵押1个EOS能换回的CPU就越来越少。

这么说是没错,但BM看不下去了,显然以BM的脑子,认为这个事情的解决方案简直是简单得一塌糊涂,这也拿出来说道?媒体真的是没东西可写了。

以下为BM文章翻译(附解读):

EOS用户面临的一个主要问题就是CPU资源的短缺。有两种方法可以解决这个问题:提高CPU的容量,或者通过提高效率来降低CPU的需求。BlockOne正在致力于增加容量,但编写更有效率的智能合约是开发者的事。

解决资源短缺,基本思路就是开源节流。BlockOne这边开源,让用户拥有更多CPU;开发者这边节流,优化代码,让用户少花CPU。

我最近审查了一笔只有单一操作的交易,其产生了28个子操作,这些子操作包括10次传输(涉及给发送者/接收者的通知),3次发布,以及4个相关合约之间的通信。

这个应用的设计使用了大量复制粘贴来的代码来作为其token合约,结合了大量涉及EOS和DICE token的小额支付。这种模块化设计有一些安全方面的好处,但它是以耗费大量CPU为代价的。每个操作必须设置它自己的执行环境,验证自己的权限,并且做一些其他多余的计算。上述所有操作加起来需要花费5.37ms的CPU时间(平均每个内联操作花费0.2ms)。

而通过以下改变,我们也可以实现相同的效果:

1.将几个独立合约(betdicetoken、betdicegroup和betdicelucky)合并为单个合约;

2.一旦合并成功,所有合约之间的通信都可以消除。DICE token可以在不创建任何内联操作的情况下发行,并存入各个账户中;

3.允许用户用betdicegroup保存存款,这样用户可以存款一次、押注多次、取款一次,也就不用频繁地与eos.io token进行合约通信了。用户账户余额可在betdice合约内部快速而有效地更新,而不必为每次小额支付通知发送方/接收方。

BM的这套方案,就是在“简化”。

一是简化代码,省去“内联操作”。

什么叫“内联操作”? 就是为了实现某个结果,串联调用几个不同的合约,一口气执行下去。这就像你到一家公司办点事,可能要跑不同的部门、敲不同的门,只要在一处卡住,事情就办不下去了,而你跑来跑去这段时间就相当于用掉的CPU。但如果这些部门都在同一间办公室,你就不用来回跑,效率自然就提高了。

二是简化游戏流程。

以前玩家都是用自己的账户玩,每玩一次都要往betdice发一笔钱,耗费一点CPU。而在BM的方案中,玩家把本金打到betdicegroup这个系统账户,接下来每次押注就只是智能合约内部的事,不涉及转账,就用不着CPU,直到玩家某一刻不想再玩下去了,把剩下的本金和奖金从系统账户中取回来,这才第二次用到CPU。

在应用层进行少量优化之后,我猜这个骰子游戏所需要的CPU可以降低80%甚至更多,和以前相比,用户可以用同等的CPU资源玩5倍的游戏。

在不久之后的EOSIO升级中,我们将让应用开发者按每笔交易支付CPU。这意味着用户不再需要任何CPU就能玩游戏,而开发者可以通过其他途径赚取CPU。在当下,高效的合约开发可以将成本降低80%,而今天的这些DAPP却将这些成本推给用户,用户必须购买或租赁CPU才能使用这些应用。

注意,未来EOS将做一个很大的改动——由开发者承担CPU成本。这样即便开发者们不听BM的建议,吃亏的也是他们自己。牵扯到自己的利益,他们才更容易自觉主动地节能。

现在是时候让开发者们慎重考虑其设计效率了,否则他们将被更高效、更低成本的方案所取代。

英特尔、苹果和微软只能通过改进硬件和操作系统来提高应用程序的性能,开发者们从高性能中得到了最大的收益,区块链应用也是如此。

注:Betdice是一款掷骰子游戏,DICE是它的分红币,用户可以用EOS或DICE押注一个号码,开出来的号码比这个小,就算中奖。

BM是真的有头脑,你对他这套方案有什么看法?欢迎留言讨论。

最后小诸葛还想念叨一句,熊市不开打赏,喜欢文章,就转发下呗!

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();