转出数量字段
特定输出的第一个字段是其金额,在Bitcoin Core中也称为“value”。这是一个8字节的有符号整数,表示要转移的satoshis数量。Satoshis是比特币链上交易中可以表示的最小单位。1比特币等于1亿satoshis。
比特币的共识规则允许输出的值最小为零,最大为2100万比特币(2.1千万亿satoshis,比特币限制了总量为2100万比特币不变)。
不经济的输出和不允许的小额资金
尽管没有价值,但零价值的输出可以根据与任何其他输出相同的规则进行消费。但是,消费输出(将其用作交易的输入)会增加交易的大小,从而增加需要支付的费用。如果输出的价值小于额外费用的成本,则消费它就没有经济意义。这样的输出被称为不经济的输出。
零价值的输出始终是不经济的输出;即使交易的费率为零,它也不会为花费它的交易提供任何价值。然而,许多其他价值较低的输出也可能是不经济的,甚至是无意中的。例如,在当前网络上的典型费率下,一个输出可能会给交易增加更多的价值,而花费它的成本则更高——但是明天,费率可能会上升,使输出变得不经济。
全节点需要跟踪所有的未使用交易输出(UTXO),如“Outpoint”中所述,这意味着每个UTXO都会使全节点的运行变得稍微困难。对于包含大量价值的UTXO,有动机最终将它们花费掉,因此它们不会成为问题。但是,对于控制不经济的UTXO的人来说,没有动机花费它,这可能使其成为全节点运营者的永久负担。因此,比特币核心等几种全节点实现通过影响未确认交易的中继和挖矿来阻止不经济的输出的创建。 针对中继或挖矿创建新不经济输出的政策被称为尘埃政策,基于将具有非常小价值的输出与非常小尺寸的粒子进行比喻。比特币核心的尘埃政策很复杂,包含了几个任意的数字,因此我们所知道的许多程序简单地假定小于546个聪的输出是尘埃,不会默认中继或挖矿。有时会有降低尘埃限制的提案,以及提高尘埃限制的反对提案,因此我们鼓励使用预签名交易或多方协议的开发人员检查政策是否在本书出版后发生了变化。
自比特币问世以来,每个全节点都需要保留每个UTXO的副本,但这可能并不总是情况。几位开发人员一直在开发Utreexo项目,该项目允许全节点存储对UTXO集合的承诺,而不是数据本身。最小的承诺可能只有一两千字节大小——与比特币核心截至本书撰写时存储的逾五千兆字节相比,这是非常小的。
然而,Utreexo仍然需要一些节点存储所有UTXO数据,特别是为矿工和其他需要快速验证新区块的操作提供服务的节点。这意味着即使在可能的未来大多数节点使用Utreexo的情况下,不经济的输出仍然可能成为全节点的问题。
比特币核心关于尘埃的策略规则有一个例外:以OP_RETURN开头的输出脚本,称为数据载体输出,可以具有零值。 OP_RETURN操作码导致脚本立即失败,无论之后发生什么,因此这些输出永远无法被花费。这意味着全节点不需要跟踪它们,比特币核心利用这一特性,允许用户在区块链中存储少量任意数据,而不会增加其UTXO数据库的大小。由于这些输出是不可花费的,它们并不是不经济的——分配给它们的任何聪将永久不可花费——因此允许金额为零可确保没有聪被销毁。
Last updated