要開發一個基于EOS區塊鍊的DAPP需要多少記憶體、CPU或帶寬資源?這是很多即将開始EOS項目的開發者關注的一個重要問題。本文将介紹如何估算EOS DAPP的記憶體/CPU/帶寬資源需求以及相應的成本。
在我們開始進入具體的EOS區塊鍊DApp的資源需求估算之前,先了解一下EOS中的資源類型、使用方法以及資源配置設定模型。如果你希望深入學習EOS DApp的開發,可以參考這個
EOS DApp開發教程 。1、EOS中的資源類型
在EOS區塊鍊上,有三種類型的資源供EOS賬号利用:
- 狀态存儲:RAM,即記憶體
- 帶寬及日志存儲:Bandwidth,即網絡帶寬
- 計算:CPU
2、EOS資源的利用方式
在EOS區塊鍊中,記憶體/RAM用于儲存區塊鍊的狀态,例如交易委托賬本和賬戶餘額等。這些狀态通常由應用程式邏輯來通路。
網絡帶寬計量你在過去3天内的平均帶寬消耗。每當你發送一個動作或交易都會暫時占用一些帶寬資源。
CPU計量你在過去3天裡的對計算資源的平均利用情況,機關為毫秒。每當你發送一個動作或交易,也會暫時消耗一些CPU資源。
3、EOS資源的配置設定模型
在EOS區塊鍊中,網絡帶寬和CPU資源是采用抵押方式擷取的。配置設定給你多少帶寬和CPU,取決于你抵押的EOS代币在過去3天裡EOS區塊鍊系統抵押合約持有的代币總量中占多大的比例。發送交易所消耗的網絡帶寬資源和CPU資源,會随時間流逝自動再釋放給你。
EOS中的RAM資源則需要以市場價格購買,該價格按Bancor算法自動調節。與CPU和網絡帶寬資源不同,已經占用的記憶體資源不會自動釋放,唯一的釋放辦法是從你的賬戶狀态存儲中删除資料,之後你就可以按市場價格出售這些空閑的記憶體資源。
4、資源價格電腦
要計算EOS記憶體資源的價格,需要使用
bancor算法。如果你希望學習如何在自己的EOS錢包産品中實作資源的價格計算,可以參考這個
EOS錢包開發教程首先用EOS的用戶端工具cleos指令擷取記憶體市場資料:
$ cleos -u http://nodes.get-scatter.com:80 get table eosio eosio rammarket
{
"supply": "10000000000.0000 RAMCORE",
"base": {
"balance": "35044821247 RAM",
"weight": "0.50000000000000000"
},
"quote": {
"balance": "3158350.8754 EOS",
"weight": "0.50000000000000000"
}
}
基于上面的記憶體市場資料,可以按如下公式計算記憶體價格:
記憶體價格 = Connector Balance / (Smart Token’s Outstanding supply × CW)
= 3158350.8754 EOS / 35044821247 RAM = 0.09 EOS/Kib
其中:
- Connector Balance = quote.balance
- Smart Token’s Outstanding supply = base.balance
- CW = quote.weight
- EOS是連接配接器(connector), RAMCORE是智能代币(smart token)
注意:在Bancor協定白皮書中有個錯誤,CW不是故意設定為50%,詳情參考
這裡網絡帶寬和CPU資源的價格依賴于出塊節點,彼此的價格都不一樣。下面以eosnewyorkio這個出塊節點為例說明。
還是先用cleos擷取基礎資料:
$ cleos -u https://api.eosnewyork.io/ get account eosnewyorkio
net bandwidth:
staked: 900.0000 EOS (total stake delegated from account to self)
delegated: 0.0010 EOS (total staked delegated to account from others)
used: 200 bytes
available: 578.4 MiB
limit: 578.4 MiB
cpu bandwidth:
staked: 900.0000 EOS (total stake delegated from account to self)
delegated: 0.0000 EOS (total staked delegated to account from others)
used: 10.91 ms
available: 1.864 min
limit: 1.864 min
計算公式如下:
Net Price = (Net Staked / Net Available) / 3
= 900.0000 / (578.4*1024) / 3 = 0.0005 EOS/KiB/Day
CPU Price = (CPU Staked / CPU Available) / 3
= 900.0000/(1.864*60*1000)/3 = 0.0025 EOS/ms/Day
你可以在這裡檢視這些資源的
實時價格5、估算EOS DApp的記憶體資源需求
首先我們估算記憶體資源的需求及成本。參考eos節點源碼eos/libraries/chain/eosio_contract.cpp:
The amount of code = code_size X setcode_ram_bytes_multiplier
code_size: size of wast file
setcode_ram_bytes_multiplier =10
另外:
overhead_per_row_pper_index = 32 + sizeof(key) + row data for all objects which stored in DB
這樣得到總計記憶體需求:
Ram for Dapp = Amount of code + overhead_per_row_pper_index
6、估算EOS DApp的CPU和帶寬資源需求
假設我們要開發一個EOS上的DApp,預計每天有1000個使用者通路,每個使用者每天進行5個交易。
通常一個交易需要消耗200位元組的帶寬和1ms的CPU。是以我們可以得到如下的結果:
total_cpu_dapp = 1ms*5*1000 = 5 000 ms/day
total_net_dapp = 0.2*5*1000 = 1000 KiB/day
結合前面的資源價格計算,我們得到如下的DApp資源成本資料:
Total EOS (CPU+NET) = 1000KiB * 0.0005 EOS/KiB/Day + 5 000 ms/Day *0.0025EOS/ms/Day
~ 13 EOS/day
也就是說,為了營運這個DApp,讓它可以支援每天5000人次的通路,我們每天需要保證合約賬戶上有13個EOS的資源抵押可用,這就是我們開發這個EOS DApp所需要的記憶體、CPU和帶寬資源的估算結果。如果你希望用熟悉的PHP來開發EOS DApp,可以下載下傳這個
EOS PHP開發包原文連結:
EOS DAPP資源需求計算方法 - 彙智網