比特币白皮书-学习笔记
个人感觉,先对区块链或比特币有个基本了解之后,再配合比特币白皮书食用更佳。
1.简介(Introduction)
比特币这种电子支付系统,基于密码学原理而不基于信用。
点对点交易,不存在第三方中介的参与。
杜绝交易回滚的可能,防止欺诈。
2.交易(Transactions)
定义一枚电子货币就是一串数字签名链(coin as chain),每一位发送者通过对前一次交易和接收者的公钥(public key)进行哈希运算后数字签名,并将这个签名附加到这枚电子货币的末尾,电子货币就发送给了接收者。
接收者使用发送者的公钥校验是否是正确的发送者发送的。
由于交易中有接收者的公钥,所以只有接收者使用自己的私钥才能解锁并将该货币传递下去。
但是这里的交易过程无法解决双重支付问题。为了避免双重支付,即收款人有方法确保之前的所有者没有对更早发送的交易进行签名,实际上需要关注的只是于本交易之前发生的交易,而不需要关注这笔交易发生之后是否会有双重支付的尝试。解决办法就是“时间戳服务器”。
3.时间戳服务器(Timestamp server)
时间戳服务器通过对 以区块(block)形式存在的一组数据实施随机哈希并加上时间戳,并将该哈希广播。
每个时间戳应当将前一个时间戳纳入其随机哈希值中,这样就形成一个链条。
4.工作量证明(Proof-of-Work)
在区块中添加一个随机数(Nonce),将随机数与区块头一起计算随机哈希值,使得该哈希值满足以N个0开头(N为变量,N越大,寻找随机数的难度越大),即为“挖矿”。
保证了区块的不可篡改性,因为修改了某一区块,就需要重新完成后面所有区块的工作量。
工作量证明的本质是一CPU一票(传统一IP一票会对能够分配大量IP的人有利),如果大多数的CPU为诚实节点,那么正确的链条将以最快速度增长。
5.网络(Network)
比特币的运行网络步骤:
- 新的交易被广播到全部的节点;
- 每个节点把新的交易收集进入到一个区块;
- 每个节点都为自己的那个区块进行工作量证明;
- 当一个节点找到它的区块的工作量证明,就将此区块广播给所有节点;
- 如果那个区块上的所有交易都是合法的并且没有被双花,节点才接受这个区块;
- 节点们接受这个区块的表现为:将这个区块的哈希作为下一个区块的“前哈希”,在这个区块后继续创造区块。
其中只有最长的链被认可,并且不断在这个“最长链”上添加区块。
如果两个节点同时完成工作量证明并广播了两个不同版本的新区块,那么其它节点接收到该区块的时间存在先后差别,即会产生两条不同的链。出现这种情况时,节点将在率先收到的区块基础上工作,同时保留另一条链,直到下一个工作量证明被发现,证实了其中一条是较长链,那么在另一条分支链上工作的节点将转移到较长链上工作。
6.激励(Incentive)
- 规定了每个区块的第一笔交易作为节点完成工作量证明的激励,这个激励是一定量新产生的电子货币。
- 另一个激励来源是交易费。如果某笔交易的输出值小于输入值,差额就是交易费。如果2100万枚比特币全部流通,激励将完全靠交易费。
激励系统也有助于鼓励节点诚实。因为遵循规则用算力挖矿的收益很可能高于破坏系统得到的收益。
7.回收硬盘空间(Reclaiming Disk Space)
交易信息的随机哈希值被构成Merkle树的形态,只需要根节点与路径即可验证交易的正确性。用户只需要存储含有Merkle root的区块头,在需要时获取Merkle树的路径即可验证一笔交易。
不含交易信息的区块头大小只有80字节,区块的生成速率为每10分钟一个,每年产生的数据为4.2MB。
8.简化支付验证(Simplified Payment Verification)
可以在不运行完整网络节点的情况下,实现对支付的验证。
9.价值的组合与分割(Combining and Splitting Value)
为了使得价值易于组合和分割,交易被设计成可以纳入多个输入和输出,可以有多个输入,但是最多只有两个输出:一个用于支付,一个用于找零(如果有的话)。
10.隐私(Privacy)
使用公钥的哈希生成地址,公众能得知的信息只有某人将一定数量的比特币发送给另一个人,但无法确定是谁。
11.计算(Calculations)
因为节点不会接受无效的交易,诚实的节点不会接受一个包含无效信息的区块,因此攻击者无法凭空创造价值或者掠夺他人的货币,最多只能更改自己的交易(即双重支付)。