net和cpu资源价格的估算
EOS系统中,cpu和net资源是通过抵押eos获取的。抵押的时候只记录了抵押cpu/net对应的eos数量,获取到的资源不是固定的,而是在使用的时候会按照当前你所抵押eos的数量占全网抵押总量的比例实时计算的,最终体现为 limit 的值。实时计算由 eos/libraries/chain/resource_limits.cpp 中 get_account_net_limit_ex 和 get_account_cpu_limit_ex 方法实现。
用 /v1/chain/get_account API 可以查看账户资源情况,返回的 Response 中显示
"cpu_weight": 54320,
"cpu_limit": {
"used": 1142,
"available": 6896,
"max": 8038
}
价格计算:
CPU价格 = ( cpu_limit.max / 1000 ) / ( cpu_weight / 10000 ) = 1.48 ms/EOS
- cpu_limit.max/1000 ms 总毫秒数 8.038 ms
- cpu_weight/10000 EOS 总抵押 5.432 EOS,就是抵押的数量token数量
同理 Net 可以是这样获取
RAM资源价格计算器
要计算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%,详情参考这里。