【区块链启示录:中本聪文集】一:前言 | 比特币的工作原理(下)
02-比特币的工作原理
哈希函数——数字指纹
- 加密哈希是一种执行简单任务的复杂算法,可以将任意长度的文字转化成固定长度的随机字符串。哈希函数的输出结果通常成为信息摘要,被视为文件的指纹。可以看到,只更改了下面输入的一个字符,输出结果便会看起来完全不同。
- 生成摘要很容易,但是不可能从摘要中推导出原式文本。 于是,哈希函数是实现比特币的理想选择。矿工寻找问题答案时常常需要数百万次哈希计算才能找到正确的模式,但其他矿工验证答案的正确性则只需要一次哈希计算。
- 理想的哈希函数有四个主要属性:
- 计算任何给定消息的哈希值要简单
- 不可能依据给定的哈希值生成消息
- 不可能只修改消息而保持哈希值不变
- 不可能找到具有相同哈希值的两条消息
- 用户要对比特币系统的文档或文本进行数字签名,哈希函数是这个过程的一部分。
- 比特币采用的是用于工作量证明的
S
H
A
?
256
SHA-256
SHA?256 以及用户比特币地址的
R
I
P
E
M
D
?
160
RIPEMD-160
RIPEMD?160。哈希函数是工作量证明的核心。
矿工的工作量证明
- 每个矿工在任何时刻都以解答难题的方式积极从事生成下一个即将加入区块链的区块工作,这就是工作量证明。第一个完成工作量证明的矿工获得的奖励包括新筑的比特币以及产出区块交易费的总和。当比特币都铸造完毕后,矿工将仅以交易费作为奖励。
- 因此,可以认为工作量证明是比特币矿工之间的竞赛,竞相发现将要生成区块的具有某种特征的
S
H
A
?
256
SHA-256
SHA?256 哈希值。矿工的目标就是通过生成符合特征的哈希值来解答问题。
- 为了简单起见,假设输出哈希值的取值范围为
0
~
1
e
6
0\sim 1e6
0~1e6,第一个算出小于
1
e
4
1e4
1e4 哈希值的矿工胜出。这里
1
e
4
1e4
1e4 就是阈值,每个比特币区块都含有一个数字,其唯一目的就是帮助达到阈值。这个数字被称为临时数(
n
o
n
c
e
nonce
nonce)。矿工不断增加临时数的值,直到区块的哈希值小于阈值。由于不同矿工的区块有不同的信息,因此相同的临时数会产生不同的哈希值。每台矿工计算机上运行的比特币软件控制着比特币协议不断调整问题的难度,确保大约每
10
10
10 分钟才会有一个矿工解答完问题。
- 比特币系统的这一要求导致了一场硬件竞赛,所有人都想创造出每秒能计算出更多哈希值的硬件。如果难度级别确定,更多的矿工加入会让每秒计算出更多的哈希值。一定区块过后,比特币协议评估区块产生的速度来加大或者减小难度级别。
- 一旦矿工发现能产生正确哈希值的临时数,就将该区块广播出去,其他的矿工在验证后接纳它,并开始着手下一个区块。
矿工共识与孤块
- 比特币的正常运行很大程度上依赖于共识。当两个矿工几乎同一时间完成区块时,共识开始发挥作用。这时,两个区块会被其他所有矿工接收和保留,但是矿工们会在先收到的那个区块的基础上计算下一个区块。
- 这时,两个区块中哪一个会成为真正区块链的一部分取决于下一个区块解答得有多快,以及解出下一个区块的矿工先收到哪一位矿工的区块,此节点上存在着两个版本的区块链。快的成为正式链,另一个成为孤块。
比特币的工作原理
- 前面讨论了比特币的工作原理,但是并没有阐明为什么要这么做。我们要先理解以下概念:
- 比特币是开源软件
- 比特币软件制定了矿工和钱包客户端必须遵从的操作指令
- 比特币软件定义和运行了一套通信协议
- 区块链的分布式文件共享容许开放记账
比特币的影响
- 作为一种货币系统,比特币的影响巨大。人们通过它可以进行全球汇款,可以网上购物和网上捐赠。
03-中本聪的论文
论文地址为:Bitcoin: A Peer-to-Peer Electronic Cash System
|