费用是比特币费用估算计划。与比特币核心的费用估计不同,费用利用了当前的MEMPOOL状态和交易到达率,从而使其能够响应交通潮流。收费估计值可以在这里看到。
费用的费用估计是基于模型的;估计是从比特币网络排队模型的蒙特卡洛模拟获得的。从本质上讲,我们找到了一个问题的解决方案:“如果我们假设矿工按费用率优先考虑交易的优先级,则需要最大块规模和最小费用,并且交易的价格与过去一小时相同,然后给定当前的MEMPOOL规模,在X块中确认交易需要什么费用(成功概率P)?”
这允许估计算法适应网络条件下的变化。例如,如果在一个小时内没有发现一个块,并且有大量的孟买积压,则该算法应认识到这一点并提高费用估算。或者,如果每天都在交易到达率中拖延,则费用估计也应反映出这一点,从而使用户可以在休息期间支付较低的费用。
Feesim通过比特币Core JSON-RPC API收集比特币网络数据,并计算出:
(txFeerate, txSize)
*请参阅提交D895E64
与当前的MEMPOOL状态一起,它们用于执行模拟并获得费用估算。可以在此处看到采矿政策估计,并且可以在此处看到交易到达字节率随费率的函数。
在正常运行期间,Feesim将预测每次交易的确认时间,并保留满足预测的交易比例。如果模型准确,则该比例应接近成功概率(默认为90%)。这些分数可以在这里看到。
使用至少1.6从源安装:
$ go get github.com/bitcoinfees/feesim
Feesim使用GO 1.5供应商实验,因此,您可以通过设置环境变量GO15VENDOREXPERIMENT=1
来安装GO 1.5。
Feesim需要JSON-RPC访问比特币核心节点(版本> 0.13.0,可以修剪)。 RPC设置应在config.yml
中指定:
bitcoinrpc :
username : myusername
password : mypassword
# host: localhost
# port: 8332
配置文件应放在数据目录中:
~/.feesim
~/Library/Application Support/Feesim
%LOCALAPPDATA%Feesim
运行feesim start
后,程序将启动数据收集,然后一旦有足够的数据开始运行模拟。它需要一直在线,因为它收集了无法通过离线分析获得的mempool数据。
feesim status
显示程序状态:
$ feesim status
result : Tx estimation window size was 0s, should be at least 600s
txsource : Tx estimation window size was 0s, should be at least 600s
blocksource : Block coverage was only 0/2016, should be at least 1008/2016.
mempool : OK
result
表明费用估算是否可用。默认情况下,费用估计需要至少10分钟的交易数据,以及来自最后一个2016年块的1008个数据。
一旦有足够的数据,模拟将开始运行并产生费用估算。该界面反映了bitcoin-cli estimatefee
的接口:
$ feesim estimatefee 1
0.00030112
这显示了要在1块中确认的交易的最低费用率,概率为90%(可配置)。
与bitcoin-cli
不同,如果输入参数是命令或0,则返回所有确认时间的估计值:
$ feesim estimatefee
1: 0.00030138
2: 0.00026738
3: 0.00020492
4: 0.00015988
5: 0.00012805
6: 0.00011478
7: 0.00010616
8: 0.00010001
9: 0.00007519
10: 0.00005020
11: 0.00005000
12: 0.00005000
基本的JSON-RPC API与比特币核心兼容,因此Feesim可以用作estimatefee
API的倒入替换:
$ bitcoin-cli -rpcport=8350 estimatefee 1
0.00030138
Feesim当前假设矿工的Minrelaytxfee与您的节点相同,因此不要将其设置得太低,否则低费用的等待时间估算将是不准确的。与默认值保持联系应该可以。有关详细信息,请参见COMMIT D895E64。
您可能需要将比特币核心的maxmempool
配置为低于默认值,因为这将使模拟更快并需要更少的内存。如果您坚持使用默认费用设置(特别是MaxBlockConfirms),则maxmempool=100
可以。缺点是拥有较不全面的孟买数据。
模拟是CPU密集型的,而数据收集不是,因此您可能不想一直在收集数据时一直运行SIM。为此,请使用feesim pause
来暂停模拟,而feesim unpause
才能恢复。
默认情况下,每分钟更新费用估算。但是,由于CPU资源不足或交易流量不足,单个模拟运行可能需要长达一分钟。通常,这不会引起任何重大问题。它仅导致费用估计的定期更新。但是,通过降低配置中的maxblocksconfirms
或numiters
来减少模拟运行时间。
您可以使用feesim metrics
监视模拟运行时间; sim.X
是纳秒中的运行时间统计信息,大约是最后一个X
模拟运行。
请参阅此存储库中的config.yml
有关示例配置文件。
如前所述,默认情况下,Feesim需要从过去1008个块中的数据(必须在发现块时在线时进行在线数据才能记录数据时)。这大约是1周;如果您不想等待那么长时间,则可以与我联系以获取块数据的副本。