交易的输入和输出
比特币交易中的基础构建单元是交易输出。
比特币完整节点跟踪所有可找到的和可使用的输出,称为 “未花费的交易输出”(unspent transaction outputs),即 UTXO。
因此,用户的比特币“余额”是指用户钱包中可用的 UTXO 总和,而他们可能分散在数百个交易和区块中。
UTXO 是面值为“聪”的离散(不连续)且不可分割的价值单元,一个UTXO 只能在一次交易中作为一个整体被消耗。
交易输出
交易输出包含两部分:
- 一定量的比特币,面值为“聪”(satoshis) ,是最小的比特币单位;
- 确定花费输出所需条件的加密难题(cryptographic puzzle)
交易输入
输入包含四个元素:
- 一个交易 ID,引用包含正在使用的 UTXO 的交易
- 一个输出索引(vout),用于标识来自该交易的哪个 UTXO 被引用(第一个为零)
- 一个 scriptSig(解锁脚本),满足放置在 UTXO 上的条件,解锁它用于支出
- 一个序列号(稍后讨论)
交易费
大多数交易包含交易费(矿工费),这是为了确保网络安全而给比特币矿工的一种补偿。
交易费作为矿工打包(挖矿)一笔交易到下一个区块中的一种激励;同时作为一种抑制因素,通过对每一笔交易收取小额费用来防止对系统的滥用。
交易费是基于交易的千字节规模来计算的,而不是比特币交易的价值。交易费影响矿工处理交易的优先级
脚本构建
锁定脚本是放置再输出上面的花费条件:它指定了今后花费这笔输出必须要满足的条件。。由于锁定脚本往往含有一个公钥或比特币地址(公钥哈希值),在历史上它曾被称为脚本公钥(scriptPubKey)。
解锁脚本是每一笔比特币交易输入的一部分,而且往往含有一个由用户的比特币钱包(通过用户的私钥)生成的数字签名。但并非所有解锁脚本都一定会包含签名。
P2PKH(Pay-to-Public-Key-Hash)
由 P2PKH 脚本锁定的输出可以通过提供一个公钥和由相应私钥创建的数字签名来解锁(使用)。
数字签名
数字签名的作用
1.签名证明私钥的所有者,即资金所有者,已经授权支出这些资金。
2.授权证明是不可否认的(不可否认性)
3.签名证明交易(或交易的具体部分)在签字之后没有也不能被任何人修改。