一笔比特币交易包含什么?看懂输入、输出与找零

一笔比特币交易包含什么?看懂输入、输出与找零

A
一笔比特币交易包含输入和输出:输入指向钱从哪里来,输出指明收款地址与金额,输入减输出的差额成为矿工费,多余金额以找零形式回到自己钱包。

一笔比特币交易,核心包含输入和输出两类数据:输入说明钱从哪里来,输出说明钱到哪里去。除这两部分外,还有付款人的数字签名、版本号和可选的锁定时间。

一笔比特币交易包含哪些信息

区块上保存的不是给某个账户增加或扣减余额,而是一条条交易记录。把这条记录拆开,真正起作用的字段很有限。

部分作用
版本号告诉全网节点按哪一代规则校验这笔交易
输入引用以前某笔交易生成的“未花费输出”,并附上私钥签名,证明付款人有权花掉这笔钱
输出写明收款方和金额;输出可以有多个,剩余资金也会作为一个输出留在链上
矿工费交易数据里没有单独一栏,它等于输入总额减去输出总额
锁定时间可选字段,规定交易最早可以被打包的时间或区块高度

每个输入都必须指向一个尚未被花掉的输出,这个输出就是 UTXO。比特币网络不记余额,只记一份“还没花掉的输出”清单;你的钱包余额,其实是该钱包能支配的 UTXO 价值汇总。总之一笔比特币交易包含的输入和输出,必须一一对应才能通过校验。

输入、输出和手续费是怎么拼在一起的

组装一笔交易可以看成三步。

  1. 凑钱。钱包在 UTXO 集合里选出足够多的未花费输出,让总和覆盖“付款金额+手续费”。这个挑选过程可以同时使用多个输入。
  2. 写输出。给收款方写一个输出,包含地址和金额;如果输入总额超过应付金额,就额外写一个输出,把多出来的钱送回自己钱包,这就是找零。
  3. 签名并广播。用对应私钥对整个交易签名,签名覆盖交易的关键内容,尤其是输出和金额。只要有人改动任意一个数字,签名就会失效。交易随后广播到全网,进入待打包状态。

和银行转账相比,差在哪

很多人把比特币交易理解成“用钱包给别人转钱”,但底层的记账方式很不一样。

银行转账比特币交易
账户有一个中心化的余额,转账时余额被直接加或减账本没有余额,只有一堆未花费输出(UTXO)
收付款双方的身份由账号识别输出由地址或脚本锁定,谁能提供对应私钥谁就能花
交易由银行校验和结算交易由全网节点独立校验,矿工负责打包
一笔转账记录通常只有两个当事人一笔交易可包含多输入、多输出,找零地址看起来也像收款地址

由于没有余额,“资产”并不是放在钱包里的东西;钱包只是替你保存私钥,并用私钥控制链上 UTXO。

签名只需要付款人

这里有一点值得记住:收款时不需要收款人签名。你看不到收款人的签名,不代表数据缺失,而是因为这笔交易要证明的是“花输入的人有权花”,所以只要付款人的私钥签名就够了。等到收款人将来花这笔钱时,他提供的是另一段签名。

常见问题

为什么在区块浏览器里看不到“余额”

区块链上有交易记录,没有“账户余额”字段。所谓余额是钱包扫描自己控制的未花费输出后加总的结果;换个钱包,只要私钥相同,看到的余额仍然一致。

交易里的找零是谁发起的

找零是付款时输入总额大于输出总额形成的剩余输出,它会写回到付款人控制的地址,在链上与正常收款没有外观区别。

一笔交易能同时付给多人吗

能。一个交易可以包含很多输出,每个输出对应一个地址和一笔金额;多人分摊、批量付款都可以放到同一笔交易里完成。

交易广播以后,收款人能改金额吗

不能。交易已经用付款人的私钥签名,任何改地址、改金额的操作都会破坏签名;没有有效签名的新交易无法通过节点校验。

打开区块浏览器检查任意一笔交易,先看输入和输出两个列表。输入会指向较早的交易编号,输出会列出收款地址与金额;把输入总额减去输出总额,剩下的差额就是矿工费。其余字段只是协助节点校验,看懂这两个列表,就理解了比特币交易的骨架。

本文最初由 Bit.Fan 发布。 欲了解更多加密货币新闻与市场洞察,请访问 www.bit.fan.
2800

免责声明:

本平台展示的市场信息、项目资料与第三方内容仅用于行业信息分享,不构成任何形式的投资建议或收益承诺。

加密资产交易具有较高风险,用户应充分评估自身风险承受能力并独立作出决策,相关盈亏及法律责任由用户自行承担。