比特币白皮书-学习笔记

个人感觉,先对区块链或比特币有个基本了解之后,再配合比特币白皮书食用更佳。

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)

比特币的运行网络步骤:

  1. 新的交易被广播到全部的节点;
  2. 每个节点把新的交易收集进入到一个区块;
  3. 每个节点都为自己的那个区块进行工作量证明;
  4. 当一个节点找到它的区块的工作量证明,就将此区块广播给所有节点;
  5. 如果那个区块上的所有交易都是合法的并且没有被双花,节点才接受这个区块;
  6. 节点们接受这个区块的表现为:将这个区块的哈希作为下一个区块的“前哈希”,在这个区块后继续创造区块。

其中只有最长的链被认可,并且不断在这个“最长链”上添加区块。

如果两个节点同时完成工作量证明并广播了两个不同版本的新区块,那么其它节点接收到该区块的时间存在先后差别,即会产生两条不同的链。出现这种情况时,节点将在率先收到的区块基础上工作,同时保留另一条链,直到下一个工作量证明被发现,证实了其中一条是较长链,那么在另一条分支链上工作的节点将转移到较长链上工作。

6.激励(Incentive)

  1. 规定了每个区块的第一笔交易作为节点完成工作量证明的激励,这个激励是一定量新产生的电子货币。
  2. 另一个激励来源是交易费。如果某笔交易的输出值小于输入值,差额就是交易费。如果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)

因为节点不会接受无效的交易,诚实的节点不会接受一个包含无效信息的区块,因此攻击者无法凭空创造价值或者掠夺他人的货币,最多只能更改自己的交易(即双重支付)。

posted @ 2019-06-09 17:50 KRDecad3 阅读(...) 评论(...) 编辑 收藏