一行程式碼改動緩解 EOS 主網資源短缺問題
可能是最靠譜不忽悠的 區塊鏈 資訊平臺
背景
隨著 EOS dapp 的日益流行,EOS 主網資源( CPU ,NET,RAM)短缺的問題也日益凸顯。
這也是 EOSLaoMao 團隊很早就立項 Bank of Staked 專案的原因。我們希望通過該專案,釋放更多的 EOS 用於租賃,從而降低開發者和使用者的資源成本。
在開發 Bank of Staked 的過程中,我們對 EOS 系統合約做了大量的研究和測試,積累了一定的經驗。比如我們將系統合約的解除抵押到賬時間從預設的 3 天改成了 1 分鐘,從而可以更方便地測試 Bank of Staked 的自動解抵押功能。
解抵押中的 EOS 的再利用
在測試系統合約的過程中,我們(以及很多其他開發者)發現了系統合約的一個特殊的行為,或者說功能:
當用戶給自己的賬戶抵押的時候,系統合約會優先使用解抵押中的 EOS(unstaking EOS)。只有當解抵押中的 EOS 不夠的時候,才會使用餘額中的 EOS 進行補足。
讓我們看一個例子:
假設我們有一個賬戶 eoslaomaocom
,該賬戶的可用餘額有 200 EOS
,同時還有一筆解抵押中的 300 EOS:
$ cleos get account eoslaomaocom EOS balances: liquid:200.0000 EOS staked:0.0000 EOS unstaking:300.0000 EOS total:500.0000 EOS
我們用該賬戶給自己抵押 400 EOS
的 CPU:
cleos system delegatebw eoslaomaocom eoslaomaocom "0 EOS" "400 EOS"
抵押成功之後,我們會看到如下的輸出:
executed transaction: xxxxxxxxxxxxxxxx144 bytes893 us #eosio <= eosio::delegatebw{"from":"eoslaomaocom","receiver":"eoslaomaocom","stake_net_quantity":"0.0000 EOS","stake_cpu_quantity":"400.0000 EOS", "transfer": 0} #eosio.token <= eosio.token::transfer{"from":"eoslaomaocom","to":"eosio.stake","quantity":"100.0000 EOS","memo":"stake bandwidth"} #voter1 <= eosio.token::transfer{"from":"eoslaomaocom","to":"eosio.stake","quantity":"100.0000 EOS","memo":"stake bandwidth"} #eosio.stake <= eosio.token::transfer{"from":"eoslaomaocom","to":"eosio.stake","quantity":"100.0000 EOS","memo":"stake bandwidth"}
下面是 eoslaomaocom
賬戶最終的狀態:
$ cleos get account eoslaomaocom EOS balances: liquid:100.0000 EOS staked:400.0000 EOS unstaking:0.0000 EOS total:500.0000 EOS
我們可以看到,這筆 400 EOS 的抵押操作,由解抵押中的 300 EOS 和餘額中的 100 EOS 構成。也就是說,系統合約會優先利用解抵押中的 EOS 給自身賬戶做抵押。
這個功能對使用者來說非常棒,因為當他們給自己做抵押的時候,賬戶中解抵押中的 EOS 可以直接使用,而不會受到 3 天的回款期的限制。
可惜的是,這個功能只有在賬戶給自己做抵押的時候才有效。在我們的例子中,當 eoslaomaocom
給其他賬戶抵押的時候,系統合約將只從 eoslaomaocom
的賬戶餘額中扣除全部的抵押金額。
這裡是這個功能的 程式碼 實現: eosio.system/src/delegate_bandwidth.cpp
在給其他賬戶抵押的時候,也想優先使用解抵押中的 EOS?只要一行程式碼改動!
為了讓在給其他賬戶抵押的時候也能使用解抵押中的 EOS,我們深入研究了系統合約程式碼,發現只需要一行程式碼改動,就可以實現這個目的。
這裡是程式碼改動的截圖和 diff:

eosio.system/src/delegate_bandwidth.cpp code diff
針對改動之後的系統合約,我們在本地測試網路做了詳盡的測試,功能完全符合我們的預期。
近期我們將推動這一改動在麒麟測試網路上的部署和測試。我們也希望 社群 的開發者們也都來參與測試,並提供測試結果和反饋。
如果未來的測試沒有問題,我們將發起 proposal 將這個惠及所有 EOS 賬戶的改動部署到 EOS 主網上。
我們相信這個改動,可以讓 EOS 主網釋放更多的資源,進而最終降低開發者和使用者的資源成本。
By EOSLaoMao 團隊
BP節點賬號:eoslaomaocom
官方網站:https://eoslaomao.com/
CPU&NET 資源租賃:BankofStaked
幣乎:EOSLaoMao
Telegram: EOSLaoMao
Twitter:EOSLaoMao
GitHub: EOSLaoMao
Steemit: EOSLaoMao
給 EOSLaoMao 投票,請認準我們的主網節點ID:eoslaomaocom