How to: 如何计算 max_virtual_bandwidth / How to calculate the max_virtual_bandwidth?
今天遇到一个有意思的问题。我计划查询账户的可用带宽(bandwidth),原本以为和读账户其它信息如reputation、vesting_shares等一样可以直接读取到,但是调用get_account()
后,却没法找到可用带宽信息。
(图源 :pixabay)
直接获取失败
只有类似如下信息:
'average_bandwidth': '117344254786',
'average_market_bandwidth': 3461867185,
'last_bandwidth_update': '2018-01-25T10:35:06',
'last_market_bandwidth_update': '2018-01-23T13:06:24',
'lifetime_bandwidth': '8459927000000',
'lifetime_market_bandwidth': '653650000000',
我期望直接拿到类似下边的百分比:
或者找到类似如下信息也可以:
可惜都没法拿到,也就是说我们没法直接拿到用户的带宽信息。
用户可用带宽公式
既然没法直接通过get_account ()
拿到,那么只好看看有没有什么方式计算出来。用户是否有可用带宽的计算方式为:
has_bandwidth = ( account_vshares * max_virtual_bandwidth ) > ( account_average_bandwidth * total_vshares );
由上述公式变换个方式:
用户可用带宽为: account_vshares / total_vshares* max_virtual_bandwidth
可以理解为,你的有效SP占总SP多大比例,那么你就可以使用带宽池中多大比例的带宽
好,我们以前做程序的时候知道account_vshares
、total_vshares
是可以分别通过get_account()
以及get_dynamic_global_properties()
获取的,如果max_virtual_bandwidth
也可以通过get_dynamic_global_properties()
获取,那就简单了。
结果瞪大眼睛找半天发现根本没有max_virtual_bandwidth
,看来只好计算了。
计算max_virtual_bandwidth
去代码里找了半天,总算找到计算max_virtual_bandwidth
的代码:
其中,max_block_size
以及current_reserve_ratio
可以通过get_dynamic_global_properties()
获取。
剩下的一堆看起来是常量,应该可以用get_config()
获取。
结果程序一运行,出错啦,提示RESERVE_RATIO_PRECISION
不存在,去代码中找了一下
原来是在代码中直接定义的,这不科学,不过直接拿来用吧。
算出来的总带宽为:17103052162990080000
而steemd上读到的带宽为:
你问我为啥不一样?当然是总带宽一直在变喽,除非我能保证程序获取带宽和刷新网页完全同时操作。
总结
- 用户可用带宽无法通过
get_account()
直接获取 - 用户可用带宽计算公式:
account_vshares / total_vshares * max_virtual_bandwidth
max_virtual_bandwidth
无法直接用get_dynamic_global_properties()
获取max_virtual_bandwidth
计算公式见正文部分RESERVE_RATIO_PRECISION
代码中硬编码为:((int64_t)10000)
- 计算总可用带宽需要用到如下API
get_dynamic_global_properties()
get_config()
Good Article for increasing virtual band width.
If it posted in English lot of other people also get benefits.
Thanx
you know what I really didn't understand what you said. pls type in English
请教下 除了发文章要用到 带宽还有什么用处呢
如果没可用带宽为零,那么应该做不了任何操作,比如说power up、transfer
我800k的带宽 还是99 说明不够活跃啊....
太及时了,我还真正琢磨这个bandwidth到底是什么东东。转啦,谢谢分享!
不必客气
请教下大神,1. 带宽是做什么用的啊?2. 带宽的数值受什么影响?谢谢!:-)
不是大神😳
随便回答:
1, 所有操作都要消耗带宽,带宽为0,就啥也做不了啦
2,用户可用带宽为:
account_vshares / total_vshares* max_virtual_bandwidth
可以理解为,你的有效SP占总SP多大比例,那么你就可以使用带宽池中多大比例的带宽
好的,谢谢解答。主要是,感觉大家的带宽都不怎么消耗,所以有点奇怪它的作用。
涨姿势了,感谢!
我还是不明白,因为乐队的动作太快了,但是我有一些奇怪的事情发生了。我今天早上想把钱转到另一个账户。他没有离开我。所以我确认了我有多少百分比。 ,我有-150%这是为什么?我应该等多久?等一整天知道发生了什么事
Nice post.I respect you very much because you contribute to steemit.I will do activities like you.I would like to extend the steemit.
its great
follow me