BM親自下場,指導競猜DAPP的解決方案

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

昨天,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是真的有頭腦,你對他這套方案有什麼看法?歡迎留言討論。

最後小諸葛還想念叨一句,熊市不開打賞,喜歡文章,就轉PO下唄!

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!