比特币相关技术

Table of Contents

中本聪初始论文

paper
https://bitcoin.org/bitcoin.pdf

这篇论文写得并不算好,忽略了很多细节,所以建议配合bitcoin.org的官方文档来食用。

首先确定一些基础设定:比特币是一串交易序列,储存在大量的节点上,以p2p的方式进行通信,又名分布式账本。在一定的条件下(刻意进行攻击的节点算力比例不超过51%)可以让所有节点达成共识。

Transaction(交易)

数据结构
https://en.bitcoin.it/wiki/Transaction
开发者指南
https://developer.bitcoin.org/devguide/transactions.html
例子
https://blockexplorer.com/txs/81ec83ccb823f03982bd030999580cc9ecde9916e1797b276eb60dc00a371ab7

transaction-propagation.png

Figure 1: 交易的传播 来源: bitcoin.org

买家可以通过卖家的公钥来验证这笔交易,但是它无法确定卖家是否double spend(双重支付)了这笔钱,一种方式是引入可信的第三方(例如银行)进行验证,但这样就失去了中立性。另一种方式则是引入区块链的概念,将所有的交易历史暴露给大众,以某种机制去中心化地保证每笔交易的合法性。

Block(区块)

数据结构
https://en.bitcoin.it/wiki/Block
开发者指南
https://developer.bitcoin.org/devguide/block_chain.html
例子
https://blockexplorer.com/blocks/79235

一个区块包含了一组带时间戳的交易,区块之间以链式链接:每一个区块记录前一个区块的hash值。 每笔交易产生之后(A->B),A和B都会向其它机器广播这个交易的细节,接收到交易信息的节点将会把这个交易记在它们正在处理的区块中。

Proof-of-work(工作量证明)

一个节点接收到未验证过的交易信息之后,首先可以根据交易历史推断一笔交易是否有效(余额是否小于零),然后把有效的交易接上上一个区块的hash组成一个新的block:

pow.png

Figure 2: 来源: bitcoin paper

只有开头有若干个0的区块是被认为有效的,对于一个未经验证的block(包含若干未验证的交易信息),我们需要从0开始枚举一个变量Nonce,将其与上一个区块的hash值和当前区块的交易信息拼接起来,计算SHA-256值,直到达到开头有若干个0的要求为止,详见bitcoin wiki1

每挖出一个新的有效的区块,节点将会全网广播,这个区块可能跟同期的其它节点产生的区块产生冲突(同一个前驱,但是内容不同),不一定会被接收。所有诚实(按照协议行动)的节点总是延伸最长的链(同等长度下最早)。每个被挖出的区块在其后累计产生了5个区块之后被认为是有效的。

以上计算hash的过程被称之为工作量证明,得到整个区块的过程被称之为为挖矿2,由于得到开头为0的SHA256值几率很低,因此造假的成本较高,比特币的机制可以保证,当50%的算力都掌握在诚实的节点上时,真实的交易链将会是最长的。

Incentive(激励机制)

挖出一个区块奖励一定数量的BTC,产出数量随时间增长减半,总量为2100万个BTC。

TODO Merkle Tree

Footnotes:

Author: expye(Zihao Ye)

Email: expye@outlook.com

Date: 2021-07-28 Wed 00:00

Last modified: 2021-10-25 Mon 21:58

Licensed under CC BY-NC 4.0