尋夢新聞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下唄!