主页 > imtoken钱包app > 比特币白皮书的简短版本
比特币白皮书的简短版本
原文作者是中本聪,我比较了国内的两个翻译版本。 一个版本由巴比特(Babbitt)翻译,另一个版本来自破碎星空(Broken Starry Sky)。 由于翻译大多是直译,有时会造成理解上的混乱,所以我做了整理和简化。 此外,公式等也被略过。 有兴趣的请直接阅读原文翻译。
由于水平有限,可能会有错误和疏漏。 之所以整理这篇文章,主要是为了自己学习的时候方便。
一、总结
通过第三方金融机构进行的交易存在制度性弱点,增加了交易成本,限制了小额交易,更重要的是,可能导致交易可逆。 我们需要一个新的电子支付系统,基于密码学原理而不是基于信用,不需要第三方信用中介,交易不可逆。 所提出的模型是点对点分布式的,使用时间服务器生成按顺序排列和记录的电子交易证书(分类帐)。 只要诚实计算节点的算力总和大于攻击者的算力总和,系统就是安全的。
2. 交易
电子货币是一系列的数字签名:当每个所有者将货币转移给下一个人时,他对前一个交易的哈希值和下一个所有者的公钥进行数字签名,并将这些附加到货币上。 之后。 收款人通过用私钥验证数字签名来确认链的所有者。
问题是收款人无法验证其中一位所有者是否两次花费同一枚硬币(双重支出)。 通常的做法是引入第三方信托机构进行检查,但这又带来了一个问题,即整个系统都被这个中介机构控制,就像银行一样。
为了排除第三方中介,需要建立一个系统,公开交易信息,让系统中的参与者达成共识。 这种共识是同意唯一的历史交易顺序。
3.时间戳服务器
建议的解决方案从时间戳服务器开始。 服务器通过时间戳和广播(公开宣布)交易数据块的散列来工作。 时间戳和区块形成一一对应关系,后一个时间戳和前一个时间戳形成一条链,每增加一个时间戳都会加强前一个时间戳。
4. 工作量证明
实现基于对等基础的分布式时间戳服务器需要工作量证明系统。 工作量证明的实现方式:在区块中加入一个随机数(Nonce),必须通过计算(如算法SHA-256)找到该随机数,才能建立下一个区块,从而构建工作量证明机制。 由于后面的区块是不断产生的,如果要改变这个区块,需要重做后面所有区块的工作量。
同时,工作量证明机制也解决了集体投票时谁占多数的问题。 “多数”决定表示为最长的链,因为最长的链包含最大的工作量。 如果大部分 CPU 由诚实节点控制,那么诚实链将以最快的速度扩展并超越其他竞争链。 如果要修改一个已经出现的区块,攻击者必须重新完成这个区块的工作量加上这个区块之后所有区块的工作量,最终赶上并超过诚实节点的工作量。 成功的概率将呈指数下降。
另一个问题:硬件计算速度在快速提升,参与节点的数量会出现波动。 解决方案是工作量证明困难。 如果块生成速度太快,难度会增加。 如果出块速度太慢,那么难度就会降低。
5.网络
运行网络的步骤如下:
1)新交易广播给所有节点;
2)每个节点将接收到的交易信息放入一个区块中;
3)每个节点尝试为该区块找到对应难度的工作量证明(计算随机数);
4)当节点找到工作量证明时,将其广播到全网;
5) 如果区块中的所有交易都有效且未被花费,节点将接受该区块的有效性;
6) 节点将本区块的哈希值作为上一个哈希值,开始竞争创建下一个区块,以延长链条;
节点总是将最长的链视为正确的链,并继续工作并扩展它。 如果两个节点同时广播不同版本的新区块,其他节点收到区块的时间就会有差异。 在这种情况下,他们将在最先收到的区块的基础上工作,但也会保留另一条链,以防后者成为最长的链。 而其中一条链被证明是较长的,则工作在另一条支链上的节点将转换阵营,开始在较长的链上工作。
块广播对丢弃的信息具有容错性。 如果一个节点没有收到一个特定的块,该节点将意识到它丢失了一个块并且可以请求自己下载该块。
6.动机
每个区块的第一笔交易是生成一种新的电子货币,由区块的创建者拥有,这是对节点支持网络的激励。 其结果是一种在没有中央发行货币的机构的情况下发行和分配电子货币进入流通的方法。 这种方法与开采金矿非常相似。 CPU 时间和功耗是消耗的资源。
另一个激励来源是交易费用。 如果一笔交易的输出值小于输入值,那么差额就是交易手续费,这笔交易手续费会加到区块的激励中。
如果一个贪婪的攻击者能够调动比所有诚实节点加起来更多的 CPU 计算能力,那么他将面临一个选择:要么将其用于诚实工作以生成新的电子货币,要么将其用于二元支付攻击。 然后他会发现遵守规则和诚实工作更有利可图。
7.回收硬盘空间
如果最近的事务已包含在足够的块中,则可以丢弃该事务之前的数据以回收磁盘空间。 为了保证不出错,将hash构建成Merkle树(Merkle tree),可以通过branch stubbing的方式对旧块进行压缩。
一个区块头大约有 80 个字节。 如果我们假设每十分钟生成一个块,那么一年就是 80 字节 * 6 * 24 * 365 = 4.2 兆字节。 2008 年销售的计算机的典型配置是 2GB 内存。 按照摩尔定律,每年增长1.2G。 即使所有的区块头都放在内存中,存储也不是问题。
8. 简化支付验证
无需运行完整的网络节点即可验证付款。 用户只需要保存一份最长工作量证明链的区块头。 他通过查询网络节点获得区块头,直到他确定它拥有最长的链。 通过merkle分支连接带时间戳的区块,可以查看这个区块。 是否被某个节点接受,之后加入一个新的区块来确认是否被全网接受。
只要诚实节点控制网络,验证机制就是可靠的。 当整个网络受到算力优势的攻击时,这种简化的验证方式将被攻击者伪造的交易所欺骗,因为攻击者可能会继续控制网络。 预防策略是:当检测到无效块时,立即发出告警,收到告警的节点立即下载问题块或完整交易信息,判断信息不一致。
频繁支付的企业可能仍希望运行自己的全节点以保持独立的安全性和更快的验证。
9.合并和拆分值
虽然可以单独处理数字货币,但这是一种笨拙的方法。 为了使价值易于组合和分割,交易被设计成包括多个输入和输出,但最多有两个输出:一个用于支付,一个用于找零(如果有)。
当一个事务依赖于多个先前的事务时没有任何问题,每个事务都依赖于多个事务。 因为这个工作机制不需要开始检查之前发生的所有交易历史。
10.隐私
虽然交易信息向全网广播,但隐私仍然可以得到保护:公钥保持匿名。 公众可以看到一个人向其他人转账,但没有任何信息可以将这笔交易与一个人联系起来。 这类似于证券交易所,公开交易的时间和规模比特币采用的工作量证明,但不公开交易各方的身份。
进一步的保障是用户可以为每笔交易使用一个新地址,确保这些交易不能追溯到一个共同的所有者。 但是由于并行输入的存在,一定量的回溯是不可避免的,这表明这些币都属于同一个所有者。 此时的风险在于,如果确定某个人的某个公钥属于他,那么这个人的很多其他交易都可以被追溯。
11.计算
想象一个场景,攻击者想要比诚实节点更快地生成替代链。 即使成功了,整个系统也不受攻击者的影响,比如攻击者不能凭空创造货币,攻击者也不能掠夺不属于自己的货币。 攻击者最多能做的就是更改自己的交易信息,并试图取回他刚刚付给别人的钱。
下面是实现该功能的数学模型和C语言代码。 感兴趣的可以阅读原文,此处略过。
12.结论
这里介绍的是一种不需要信用中介的电子支付系统。
首先讨论了电子货币的电子签名原理比特币采用的工作量证明,虽然为所有者提供了强有力的控制,但不足以防止双重支出(double spending)。 为了解决这个问题,我们提出了一个使用工作量证明机制来记录公共交易历史的点对点网络。 只要诚实节点控制了大部分 CPU 算力,攻击者就很难更改交易记录。
网络的优势在于结构简单,节点之间的大部分工作是相互独立的,只需要少量的协调。 每个节点不需要有明确的身份,因为对交易信息的传输路径没有要求,只需要尽可能的传播出去。 节点可以随时离开网络,重新加入网络非常容易,只需要补充和接收完整的工作量证明区块链。 节点通过自身的 CPU 算力投票,对有效区块的确认进行投票。 节点不断地扩展有效的区块链来表达他们的确认,并拒绝在无效的区块链之后扩展区块。
该框架包含点对点电子货币系统所需的所有规则和激励措施。