Transactions
比特币的交易过程:
-
Payer:
Sign ( Hash ( Last Transaction Data + Payee’s Public Key ) )
-
Payee:
Verify with payer’s public key
Proof-of-Work
每个 Block 包含:
- 上一个 Block Hash
- 随机数 Nonce
- Tx 记录
Proof-of-Work 机制要求 Block Hash 开头的数个 bit 为零。
矿工需要不断尝试 Nonce,直到找到符合要求的随机数,并将结果广播。
比特币网络
比特币网络工作流程:
- 新的 Tx 广播至所有节点
- 每个节点收集 Tx 合并到一个 Block
- 每个节点计算 Nonce
- 找到符合要求的 Nonce 后将此 Block 广播至所有节点
- 其他节点收到新 Block 后对其进行校验
- 如果其他节点确认接受新的 Block,则会在其基础上计算后续的 Block。
问题:
由于网络送达率不会达到 100%,在上述流程中一定会出现:
- 网络中同时存在多个不同版本的区块链
- 新的 Tx 无法送达所有节点
解决方法:
比特币节点认定最长链为有效,如果发现网络中存在比自己正在计算的链更长的版本,则会切换过去。
Merkle Tree & SPV
比特币网络节点可以利用 Merkle Tree 减少存储空间并对 Tx 进行验证
Thin Client 只需保存 Block Header,验证 Tx 时获取所需的 Sibling Node Hash 即可完成校验。
Combining & Splitting
Transaction 中可以包含多个 Inputs 和 至多 两个 Outputs
一个 Output 支付给 Payee,另一个找零给 Payer。
Privacy
比特币使用两种方式降低用户被追踪的可能性:
- 使用经过 Hash 之后的 Public Key 作为地址
- 每个 Tx 都使用新的 Key Pair