比特币

比特币由这些构成:

  • 个去中心化的点对点网络(比特币协议)
  • 个公共的交易账簿(区块链)
  • 个去中心化的数学的和确定性的货币发行(分布式挖矿)
  • 个去中心化的交易验证系统(交易脚本)

比特币交易的基本单位是未经使用的一个交易输出,简称UTXO 实际上,并不存在储存比特币地址或账户余额的地点,只有被所有者锁住的、分散的UTXO。“一个用户的比特币余额”,这个概念是一个通过比特币钱包应用创建的派生之物。比特币钱包通过扫描区块链并聚合所有属于该用户的UTXO来计算该用户的余额。

几乎所有的输出都能创造一定数量的可用于支付的比特币,也就是UTXO。 交易输入是指向UTXO的指针。 被交易消耗的UTXO被称为交易输入,由交易创建的UTXO被称为交易输出。通过这种方式,一定量的比特币价值在不同所有者之间转移,并在交易链中消耗和创建UTXO。一笔比特币交易通过使用所有者的签名来解锁UTXO,并通过使用新的所有者的比特币地址来锁定并创建UTXO。 交易输出包含两部分:

  • 一定量的比特币,被命名为“聪”,是最小的比特币单位;
  • 一个锁定脚本,也被当作是“障碍”,提出支付输出所必须被满足的条件以“锁住”这笔总额。

若想支付UTXO,一个交易的输入也需要包含一个解锁脚本,用来满足UTXO的支付条件。解锁脚本通常是一个签名,用来证明对于在锁定脚本中的比特币地址拥有所有权。

对于上面的话的理解: 对于比特币交易, 先搜索找到可用的 UTXO, 由于 utxo 必然诞生于某一次输出, 所以里面包含了一个这个输出对应地址的签名的锁定脚本. 本次交易过程中, 需要生成”输入”的时候, 也要写一个解锁脚本过去(或者钱包应用帮你干了这事)

对于一笔交易来说, 先有输出(比如挖矿奖励, 就纯粹是输出), 再有输入

对于交易来说,交易费(因为没有这个字段, 它只是输入输出的差额)是一个很让人摸不着头脑的元素,但又是很重要的问题。因为如果你要构造你自己的交易,你必须确认你没有疏忽地包含了一笔少于输入的、量非常大的费用。这意味着你必须计算所有的输入,如果必要的话进行找零,不然的话,结果就是你给了矿工一笔可观的劳动费(keep the change)!

高交易费不是因为Eugenia付的钱很多,而是因为她的交易很复杂并且尺寸很大——交易费是与参加交易的比特币值无关的。

没有父交易的交易不会被立刻丢弃, 而是存入孤立池(有上限, 超过上限会随机抛出)

UTXO是永久性地记录在区块链中的,因此它不会因一笔新交易所发起的无效尝试而变化或受影响。只有一笔有效的能准确满足UTXO条件的交易才会导致UTXO被标记为“已使用”,然后从有效的(未使用)UTXO集中所移除。

解锁脚本拼到锁定脚本前面, 形成一个低级语言的表达式, 运算结果为真即为通过 比如 解锁脚本是2, 锁定脚本是3 OP_ADD 5 OP_EQUAL 拼起来就是 2 3 OP_ADD 5 OP_EQUAL 一个支付实例: (pay-to public-key-hash -> P2PKH) OP_DUP OP_HASH160 OP_EQUAL OP_CHECKSIG

P2PK 等方式更简单, 详细看书