在介绍完比特币交易和区块的相关内容后,这篇文章记录网络节点是如何协同工作共同记账的。
[学习笔记] 比特币的区块和区块链
比特币的交易,会被“整理”到区块中。
网络活动不断产生新交易,不断“整理”出新区块来记录“这一段时间内”的交易。
为了能彼此关联,每个区块都会记录它的前一个区块是什么,这相当于,区块按先来后到的顺序被“摞”在一起,形成了一条“链”。
一个区块,可以用高度标识,也可以用哈希标识。
随着时间的推移,链不断延长,这条区块链,记录了截至目前为止所有的比特币交易,是比特币网络的总账本。
我们说一笔交易被写入账本,就是说这笔交易通过了验证,已经被“整理”进区块,并得到了全网络的认可。
这篇文章,介绍比特币的区块和区块链。
[学习笔记] 比特币的地址
Alice 向 Bob 支付比特币:
- 使用 P2PK 交易,需要知道 Bob 的公钥,锁定脚本为
[Bob的公钥] OP_CHECKSIG
- 使用 P2PKH 交易,需要知道 Bob 的公钥或 Bob 的公钥哈希,锁定脚本为
OP_DUP OP_HASH160 [Bob的公钥哈希] OP_EQUALVERIFY OP_CHECKSIG
- 使用 P2SH 交易,需要知道 Bob 的脚本哈希,锁定脚本为
OP_HASH160 [Bob的脚本哈希] OP_EQUAL
了解了交易的细节,你可能会疑惑,这与日常收发比特币时的情况好像不太一样。
接收比特币时,通常会使用一串跟银行卡号类似的“神奇代码”,作为收款“地址”,形如1BJhat1AMGYbT9HYJxVekoCaPaqB9ZyTyF
。
这篇文章介绍地址是怎么计算的。
[学习笔记] OP_RETURN
比特币交易的全球总帐本,是公开的,匿名的,不可篡改的。
账本记录了每笔交易的具体内容,以及他们被写入账本的确定的时间点(时间戳)。
如果能将现实世界的数据埋进交易,一同写到账本里,事情就变得有些微妙了,比特币系统的潜在应用将不只局限于支付,多了很多“可玩性”。
[学习笔记] 比特币交易的数据结构
比特币的交易,由一个或多个输出和一个或多个输入(Coinbase 交易是一种特殊情况)构成。
交易的每个输出上,都会附上一个加密难题,定义将来在花费这笔 UTXO 时需要满足的条件。
交易的每个输入上,都要提供一个解锁脚本,解决或满足之前附在这笔 UTXO 上的加密难题或条件,解锁 UTXO 用于支付。
如果你从前面的文章一路看过来,理解了比特币交易的细节,你应该能设计出下面的数据结构。
对交易的每个输出 TxOut,需要有
- 这个 UTXO 的币值
- 锁定脚本
对交易的每个输入 TxIn,需要有
- 这笔 UTXO 来自之前哪笔交易的第几个输出(需要表达交易链条)
- 解锁脚本
对交易,需要有
- 这笔交易的哈希(数据指纹),用于标识和索引这笔交易
- TxIn 数组,表示这笔交易的所有输入
- TxOut 数组,表示这笔交易的所有输出
这样的设计能满足需求,同时又足够精简。这篇文章,介绍比特币交易的数据结构。
[学习笔记] 比特币交易的脚本
上篇文章讲到,比特币交易的输出,可以被“绑定”到收款方的公钥或公钥的哈希(数字指纹)上。
在之后需要消费这个 UTXO 时,除非提供了正确的证明和授权信息(签名),否则无法支付。
通过交易链条,任何人都可以验证交易的合法性。
这篇文章记录与比特币脚本有关的细节,说说验证交易的工具。