小白兔不乖S2星评价
2020-10-13 14:11:53
当你从一个比特币地址向另一个比特币地址转账时,通常需要附加一笔额外的手续费给矿工。在比特币的底层协议中,并没有规定这笔手续费具体的数额是多少,只是要求地址中总输入不小于总输出,即你钱包中比特币的总量必须大于你要转账的数额加上手续费数额。
手续费的高低是由交易数据的大小和交易次数等因素决定的。在之前的区块链课堂中介绍过,比特币遵循的是UTXO模型,每笔交易都包含了若干笔交易输入和交易输出。而实际上,每笔未花费交易输出的组成方式都取决于你的交易输入,当你需要向其他地址转1个BTC的时候,它可能是由你交易输入中的5个0.2BTC组成,也可能是10个0.1BTC组成。
通常,一笔普通比特币交易是由一个输入两个输出(交易输出和找零输出)构成,大小在200字节左右,按每1000字节默认收费0.0001BTC计算,普通的比特币转账费用大概在0.001-0.002BTC之间;但是当单笔输入不足以支付输出时,就会出现上述的多个交易输入构成未花费输出的问题,此时其数据量就会变大。而未花费交易输出的构成越复杂,需要处理的字节就越多,手续费也就相应越高。
由于区块容纳交易记录的容量有限,矿工一般会优先打包手续费高的交易。当然,目前在使用比特币钱包进行转账时,大部分钱包可以根据网络数据,自动将手续费调整为最佳状态;但如果你的交易需要紧急确认,那么也可以选择自定义费用。
谭802648星评价
2020-10-12 14:16:52
当你使用Bitcoin客户端发送比特币的时候,整个过程大致分为以下步骤:
1. 筹备你要发送的比特币。
客户端负责收集你钱包里的比特币余额为支付做准备,因为你收到的每一笔比特币都存在你的钱包里面直到你花掉它们。
假如你收到3BTC与2BTC两次付款,它们在钱包的记录是相互独立的,即一个3BTC和一个2BTC,而不是合并为5BTC(钱包只记录交易明细,并不将余额合并,但是你在钱包的界面上可以看到总的余额)
随着时间的推移你的钱包里会积累许多这样数量不等的比特币,所以当你发送比特币的时候钱包必须决定用哪些比特币最适合用来本次发送。
在一次交易中你得到的比特币称为“输入(inputs)”,支出的比特币称为“输出(outputs)”,在你的钱包里存在多个输入和输出。
2. 阻止大量微额(dust)支付冲击网络。
如果你的输出(outputs)小于0.01BTC(包括你钱包内部的资金变动)的话,你必须要支付0.0001的手续费,即使是你自己转给你自己。
钱包在准备你的支付金额的时候有一个既定的规则,就是在众多输入(inputs)中筹备支付金额的时候尽量避免产生小于0.01BTC的金额变动(比如你要支付5.005BTC,钱包尽可能的选择3+2.005或者1+1+3.005,而不是5+0.005)。
3. 数额越大、币龄(age)越高优先级越高。
如果你发送金额太小或者是你的比特币刚开采出来不久,那么你的转账就不再免费之列。
每一个交易都会分配一个优先级,这个优先级通过币的新旧程度、交易的字节数和交易的数量。
具体来说,对于每一个输入(inputs)来讲,客户端会先将比特币的数量乘以这些币在块中存在的时间(币龄,age),然后将所有的乘积加起来除以此次交易的大小(以字节为单位),计算公式:priority = sum(input_value_in_base_units * input_age)/size_in_bytes,计算结果如果小于0.576,那么该交易就必须支付手续费。
如果你确实大量的小额输入,又想免费转出,这时候你可以加一个数额大的、币龄大的比特币金额,就会将平均优先级提高,从而可以免费转出比特币。
4. 每千字节的收费。
在转账的最后客户端会检测本次转账的大小(以字节为单位),大小一般取决于输入和输出的数额大小。
计算公式如下:148 * 输入数额 + 34 * 输出数额 + 10,如果该次转账的大小超过10000字节但是优先级符合免费的标准,那么仍然可以享受免费转账,否则需要支付手续费。
没1000字节的费用默认是0.0001BTC,但是你也可以在客户端里进行追加,依次打开选项卡“设置>选项>主要”进行手续费的调整。
如果你在设置的手续费小于0.0001BTC按0.0001算。