首先BTC的交易手续费和交易金额是没有关系的。不要误认为交易的金额越大手续费越高;
BTC的手续费每个时间段是不一样的,它取决于你交易产生的字节数大小和你设置的手续费率;
一、交易字节数计算
字节数,字节数代表着你这笔交易打包的大小,单位是byte
字节数的计算公式是:
btc交易:input*148+34*out+10
omni_usdt交易:input*144+34*out+10
以下
input的就是输入的地址数量为交易输入 input=1
out就是输出的地址数量为交易输出 out=3
字节数大小就是黑色的部分 也就是计算公式 : 1*144+34*3+10=256
注:input数量是根据UTXO进行计算的,某笔交易的输入必须是另一笔交易未被使用的输出
148字节来源(交易输入大小)
(32 字节)交易ID
(4 字节)输出索引,用于反推本次交易来源与之间的哪个交易输出
(1 字节)解锁脚本大小,1 ~ 9 字节,使用时选择 1。
(107 字节)scriptSig的长度为139个字节,或十六进制为8b
- (1 字节)DER 格式签名长度
- (72 字节)DER 格式签名
- (1 字节)公钥长度
- (33 字节)公钥
(4 字节)序列号
总共:148 字节
34字节来源(交易输出大小)
(8 字节)交易金额
(1 字节)锁定脚本大小,1 ~ 9 字节,计算式选择最小值 1
(25 字节)锁定脚本:25 字节
- (4 字节)4 个操作码,每个 1 字节
- (1 字节)公钥长度
- (20 字节)收款方公钥
总共:34 字节
10字节 来源
(4 字节)版本号
(4 字节)锁定时间
(1 字节)输入数量,1-9 字节可变长整型,用来显示交易输入数量。
(1 字节)输出数量,1-9 字节可变长整型,用来显示交易输出数量。
总共:10 字节
二、交易手续费计算
以上我们已经将字节数计算出来了,那么如何计算手续费呢?
手续费=字节数* X satoshis / byte
X的取值是我们自己设置的,那到底设置多少合适呢?
这个要根据当时交易池内的交易数量来定了,矿工优先打包字节费给的高的因此我们只要获取当时satoshis / byte是被优先打包的就可以;
下图为例:红色部分代表satoshis / byte 和多少时间内被确认,我们选择最优的13satoshis / byte 那么我们最有可能的交易下一个区块就会被打包,相对的手续费也会变高;
查看地址: https://bitcoinfees.earn.com/
此链接可查询比特币建议的手续费(satoshis / byte)
https://bitcoinfees.earn.com/api/v1/fees/recommended
{"fastestFee":102,"halfHourFee":102,"hourFee":88}
- FasterFee :当前将导致最快的交易确认(通常为0到1个块延迟)的最低费用(以每字节satoshis为单位)。
- halfHourFee :将在半小时内(以90%的概率)确认交易的最低费用(以字节为单位的字节数)。
- hourFee :将在一个小时内(以90%的概率)确认交易的最低费用(以字节计,单位为字节)。
上述返回的 每字节需要花费的聪(in satoshis per byte) ,而 settxfee设置的单位是每千节点需要花费的聪(FeePerKB),
所以settxfee需要计算的是 每千字节需要花费的btc,即为 satoPerByte / 100,000
通常我们在设置btc交易手续费率时,是以btc为单位,以下我们进行详解:
BTC单位:
1比特币(BTC)
0.01比特分(cBTC)
0.001毫比特(mBTC)
0.000001微比特(uBTC)
0.00000001聪(satoshi)(基本单位)
1 (BTC) = 1000 (mBTC) = 1000000 (uBTC) = 100000000 (聪)
即:1 (BTC) = 100000000 (聪)
BTC 手续费公式: (in*148+34 out + 10) X satoshis / byte
例如:
我们设置的手续费率为:0.0008 BTC/ kVB ;含义为:每0.0008BTC可交易1000 字节
目前有一笔256字节的交易,计算方式如下:
每字节(0.0008 * 100000000 / 1000)satoshis = 80 satoshis / byte
256字节即:80 * 256 / 100000000 = 0.0002048 BTC
当然计算出来的手续费有时候比实际的差几聪原因应该是有些币币龄比较大,输入的时候我们按照148算的,其实还有些地址是相对较小的一点的,具体是多少我不确定,计算出来的交易字节数上下会有些许浮动,所以有时候算出来的值会差几聪的。