IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 比特币白皮书中文翻译:【比特币:一种点对点的电子现金系统】 -> 正文阅读

[区块链]比特币白皮书中文翻译:【比特币:一种点对点的电子现金系统】

比特币:一种点对点的电子现金系统

摘要

一种纯粹的点对点电子现金将允许在线支付从一方直接发送到另一方,而不需要通过金融机构。数字签名提供了部分解决方案,但如果仍然需要可信的第三方来防止重复消费,那么主要的好处就失去了。我们提出了一种使用点对点网络来解决双重花费问题的方法。网络通过将事务散列到一个正在进行的基于散列的工作量证明链中,形成一条不重新进行工作量证明就不能更改的记录,从而给事务打上时间戳。最长的链不仅证明了事件发生的顺序,还证明了它来自最大的CPU功率池。只要拥有大部分算力的节点不和攻击者合作,它们就会生成最长的链,超过攻击者。网络本身需要最小的结构。消息以最大的努力为基础广播,节点可以随意离开或重新加入网络,接受最长的工作量证明链作为它们离开时发生的事情的证明。

点对点,数字签名,POW工作量证明、哈希、算力、最长合法链

简介

互联网上的贸易受到基于金融机构作为可信第三方的信任模型的限制:无法实现完全不可逆的交易,因为金融机构不可避免地会出面调节纷争。金融机构的存在,增加了交易的成本,限制了最小交易规模与小额交易。商家需要提放自己的客户,需要向客户索要不必要的信息。

这些成本和支付的不确定性可以通过使用实物货币来避免,但没有一种机制可以在没有可信方的情况下通过通信渠道进行支付。

需要一种电子支付系统:用加密代替信任,不需要可信第三方的存在。

那些在计算上不太可能逆转的交易将保护卖方免受欺诈,而常规的托管机制可以很容易地实施以保护买方。

在本文中,我们提出了一种解决双花问题的方法,使用点对点分布式时间戳服务器生成交易时间顺序的计算证明。只要诚实的节点控制的CPU算力比任何协作的攻击节点组都要高,系统就是安全的。

交易Transactions

image-20220628091710695

一枚电子货币是这样的一串数字签名:每一位所有者通过对前一次交易和下一位拥有者的公钥签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。而收款人通过对签名进行检验,就能够验证该链条的所有者,

该过程的问题在于,收款人将难以检验之前的某位所有者,是否对这枚电子货市进行了双重支付。通常的解决方案,就是引入信得过的第三方权威,或者类似于造币厂的机构,来对每一笔交易进行检验,以防止双重支付。在每一笔交易结束后,这枚电子货币就要被造市厂回收,而造币厂将发行一枚新的电子货币:而只有造币厂直接发行的电子货布,才算作有效,这样就能够防止双垂支付。可是该解决方案的问题在于,整个货币系统的命运完全依赖于运作造币厂的公司,因为每一笔交易都要经过该造市厂的确认,而该造市
厂就好比是一家银行。

我们需要收款人有某种方法,能够确保之前的所有者没有对更早发生的交易实施签名。:从逻辑上看,为了达到目的,实际上我们需要关注的尺是于本交易之前发生的交易,而不需要关注这笔交易发生之后是否会有双重支付的尝试。为了确保某一次交易是不存在的,那么唯一的方法就是获悉之前发生过的所有交易。在造币厂模型里面,造币厂获悉所有的交易,并且决定了交易完成的先后顺序。如果想要在电子系统中排除第三方中介机构,那么交易信息就应当被公开宣布,我们需要整个系统内的所有参与者,都有唯一公认的历史交易序列。,收款人需要确保在交易期间绝大多数的节点都认同该交易是首次出现。

时间戳服务器

image-20220628111059875

本解决方案首先提出一个“时间戳服务器”。时间戳服务器通过对以区块形式存在的一组数据实施随机散列而加上时间载,并将该随机散例进行广播显然:该时间戳能够证实特定数据必然于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间藏都对之前的一个时间戳进行增强,这样就形成了一个链条。

PoW工作量证明

为了在点对点的基础上构建一组分布式的时间戳服务器,我们还需要一个类似于亚当·柏克提出的工作量证明系统。在进行随机散列运算时,工作量证明机制引入了对某一个特定值的扫描工作,比方说SHA-256下,随机散列值以一个或多个0开始。那么随着0的数目的上升,找到这个解所需要的工作量将呈指数增长,而对结果进行检验则仅需要一次随机散列运算。

image-20220628141626025

对于我们的时间戳网络,我们通过在块中增加一个nonce(随机数)来实现工作量证明,直到找到一个值,该值为块的散列提供所需的零位。我们通过反复尝试来找到这个随机数,直到找到为止,这样我们就构建了一个工作量证明机制。只要该CPU耗费的工作量能够满足该工作量证明机制,那么除非重新完成相当的工作量,该区块的信息就不可更改。由于之后的区块是链接在该区块之后的,所以想要更改该区块中的信息,就还需要重新完成之后所有区块的全部工作量。

工作量证明还解决了多数决策中确定代表性的问题。如果大多数人都是基于一个IP地址一票的原则,那么任何一个拥有多个IP地址的人都可以推翻这一原则。工作证明本质上是一个CPU一票。多数决策由投入了最多工作量的最长的链代表。如果大部分CPU算力由诚实的节点控制,诚实的链将增长最快,超过任何竞争链。要修改过去的一个块,攻击者必须重做该块和它之后的所有块的工作量证明,然后追赶并超越诚实节点的工作。

硬件运算速度在高速增长,节点参与网络的程度会有所起伏,为了解决这个问题,PoW的难度指向每小时生成区块的速度趋于一个预定的平均值。如果区块生成速度过快,那么难度会提升。

网络

运行网络的步骤如下

1?? 新的交易会被广播给所有的节点

2?? 每一个节点会将收到的新的交易信息纳入到一个区块中

3?? 每个节点都尝试在自己的区块中找到一个难度PoW

4?? 当一个节点找到了一个PoW,就会向全部的节点广播

5?? 只有当一个区块内所有的交易信息都是合法的且没有被花费的,其才会被其他的节点认可

6?? 节点通过在链中创建下一个区块来表示接受该区块,将被接受区块的随机散列值视为先于新区快的随机散列值

节点们认为最长的链是正确的,并且会不断地去延长这条链。如果遇上两个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上将存在先后差别。在这个情况下,他们将在最先收到的区块基础上进行工作,但也会保留另外一个链条,以防后者变成最长的链条。该僵局的打破要等到下一个PoW被发现,如果其中的一条链被证实为较长的一条,那么在另一条分支上工作的节点将会转移到更长的链上工作。

新的交易的广播不需要到达所有节点,只要交易信息能够抵达足够多的节点,那么他们将很快被整合进一个区块中。而区块的广播对被丢弃的信息是具有容错能力的。如果个节点没有收到某特定区块,那么该节点将会发现自己缺失了某个区块,也就可以提出自己下载该区块的请求,

激励Incentive

按照惯例,区块中的第一个交易是特殊的,它开启了由区块创造者拥有的新货币。这增加了节点支持网络的动力,并提供了一种最初将硬币分发到流通中的方式,因为没有中央权威机构来发行它们。稳定地添加一定量的新硬币,就像淘金者花费资源在流通中添加黄金一样。在这个例子中,消耗的是CPU时间和电力。

这种激励也可以用交易费来资助。如果一笔交易的产出值小于它的输入值,那么差额就是一笔交易费用,加到包含该交易的区块的激励价值中。一旦预定数量的硬币进入流通,这种激励可以完全转变为交易费用,完全不受通货膨胀的影响。

这种激励可能有助于鼓励节点保持诚实。如果一个贪婪的攻击者能够集结比所有诚实的节点更多的CPU算力,他将不得不做出选择:要么利用这些算力用于诚实工作产生新的电子货币,要么用于进行双花攻击。他会发现遵守规则是更有利可图的,即可以获得更多的电子货币。

回收磁盘空间

一旦某个货币的最新交易已经被足够多的区块覆盖,这之前的支付交易就可以被丢弃以节省磁盘空间。为便于此而又不破坏区块的哈希值,交易将被哈希进默克尔树 ,有根节点被纳入到区块的哈希值。老的区块可通过剪除树枝的方式被压缩。树枝内部的哈希不需要被保存。

image-20220629104648103

每个不包含交易的区块头大约是 80 bytes。如果每 10 分钟生成一个区块,每年生成80 bytes * 6 * 24 * 365 = 4.2 MB,区块头如果要存在内存中,内存不会成为限制因素。

简化的支付认证

在不运行整个网络节点的情况下验证交易是可行的。用户只需拥有一个最长工作量证明链的区块头副本,他可以通过向其他网络节点查询以确认他拥有了最长的链,获得连接交易和它的时间戳所在区块的Merkle分支。虽然他自己不能核实这个交易,但如果交易已经链接到到链中的某个位置,就说明一个网络节点已经接受了此交易,而其后追加的区块进一步确认网络已经接受了它。

image-20220629111930297

因此,只要诚实节点控制着网络,验证就是可靠的,但如果网络被攻击者控制,验证就是更脆弱的。尽管网络节点本身可以验证交易,但只要攻击者控制网络,这种简化验证的方法会被攻击者编造的交易欺骗。防止这种情况的一种策略是接收网络节点的警示:当他们检测到无效块的时候,提示用户软件下载整个区块,并且提醒确认交易的一致性。频繁接收支付的企业可能为了更独立的安全性和更快的验证,仍然想运行他们自己的节点。

合并和分割交易额

尽管单独处理每个货币是可行的,但将一次转账按每一个货币拆成多次交易是笨拙的。为允许交易额被分割和合并,交易将包含多个输入和输出。通常来说,不是一个来自之前较大交易的输入就是多个较小输入值的组合,而且最多两个输出值:一个作为支付,另一个作为找零(如果有的话,退还给支付发送方)。

image-20220629113642477

需要注意的是,扇形输出(一个交易依赖于多个交易,而这些交易又依赖于更多交易)在这里不是问题。不需要提取事务历史记录的完整独立副本。

隐私

传统的银行模型通过限制相关方和可信的第三方对信息的访问来实现一定程度的隐私。公开宣布所有交易的话就不能使用这种方法,但隐私仍然可以通过在另一个地方中断信息流来维护:保持公钥的匿名。公众可以看到有人向其他人发送了一笔金额,但是不能将交易关联到某个人。这和证券交易所发布的信息级别类似,每笔交易的时间和交易量,即行情是公开的,但是不会显示交易双方是谁。

image-20220629142216345

作为一个额外的防火墙,应该为每个交易使用一个新的密钥对,以防止它们被链接到一个公共所有者。对于多输入交易,某些链接仍然是不可避免的,这必然会显示它们的输入是同一个所有者。风险在于,如果密钥的所有者被泄露,链接可能会泄露属于同一所有者的其他交易。

计算

我们考虑一个攻击者试图生成一条比诚实链更快的替代链的情况。即使这个目标达到了,也不会使系统变得可以任意修改,比如凭空创建货币或拿走不属于他的钱。节点将不会接受无效的交易作为支付,而且诚实节点永远不会接受一个包含无效交易的区块。攻击者只可能改变他自己的某笔交易来拿回他不久前已经支出的钱(双花攻击)。

诚实链与攻击者链之间的竞争可描述为二叉树随机漫步(Binomial Random Walk)。

成功事件是诚实节点被延长一个区块,两条链的差距加 1,失败事件是攻击者的链延长一个区块,两条链的差距减 1。

攻击者从某一落后位置赶上诚实链的概率类似于赌徒破产理论。设想一个拥有无限信用的赌徒从一定亏损开始,进行可能无限次的赌博试图达到盈亏平衡。我们可以计算他达到盈亏平衡,即一个攻击者赶上诚实链的概率,如下 :

p p p:诚实节点找到下一个区块的概率

q q q:攻击者找到下一个区块的概率

q z q_z qz?:攻击者从落后 z 个区块赶上诚实链的概率
q z = { 1 i f ? p ≤ q ( q / p ) z i f ? p > q q_z=\begin{cases} 1&if\ p\le q\\ (q/p)^z&if\ p>q \end{cases} qz?={1(q/p)z?if?pqif?p>q?
我们假设 p > q,概率将随着攻击者需要赶上的区块数增加而呈指数下降。 由于形势对他不利,如果他没有在早期幸运地快速赶上,他落得越远赶上的机会就越渺茫。

现在考虑一个新交易的收款人要等多久才能确保付款人不能再改变这个交易。我们假设付款人是想让收款人相信他暂时已经付款,然后在一段时间后改变成支付回他自己。这时收款人会收到警告,但付款人希望警告已为时已晚。

收款人生成一个新密钥对并将公钥给付款人,这样付款人就无法提前对交易签名。这能防止付款人通过持续工作直到他足够幸运获得大幅领先的方式预先准备一条区块链,然后执行交易。一旦交易被发出,不诚实的付款人就开始秘密地在一条包含了他的替换版交易的平行链上工作。收款人等到交易被加到区块中且其后追加了 z 个区块。他不知道攻击者确切的进度,但是假设诚实的区块按期望的平均时间生成,攻击者可能的进度将是一个泊松分布,其期望值为:
λ = z q p \lambda=z\frac{q}{p} λ=zpq?
为计算攻击者现在仍然能赶上的概率,我们给每个他可能达到的进度的泊松密度乘以他在那个进度能赶上诚实链的概率:
∑ k = 0 ∞ λ k e ? λ k ! ? { 1 i f ? k ≤ z ( q / p ) ( z ? k ) i f ? k > z \sum_{k=0}^\infty\frac{\lambda ^ke^{-\lambda}}{k!}\cdot\begin{cases} 1&if\ k\le z\\ (q/p)^{(z-k)}&if\ k>z \end{cases} k=0?k!λke?λ??{1(q/p)(z?k)?if?kzif?k>z?
变换以避免对分布的无限尾部求和
1 ? ∑ k = 0 z λ k e ? λ k ! { 1 ? ( q / p ) ( z ? k ) } 1-\sum_{k=0}^z\frac{\lambda ^ke^{-\lambda}}{k!}\{1-(q/p)^{(z-k)}\} 1?k=0z?k!λke?λ?{1?(q/p)(z?k)}

#include<math.h>
double AttackerSuccessProbability(double q, int z) {
	double p = 1.0 - q;
	double lambda = z * (q / p);
	double sum = 1.0;
	int i, k;
	for (k = 0; k <= z; k++)     {
		double poisson = exp(-lambda);
		for (i = 1; i <= k; i++)
			poisson *= lambda / i;
		sum -= poisson * (1 - pow(q / p, z - k));
	}
	return sum;
}

image-20220629152916656

p<0.1%的解

image-20220629171147714

结论

我们已经提出了一种不依赖信任的电子交易系统。我们从通用的数字签名货币体系开始,这体系提供了强有力的所有权控制,但由于缺乏防止双重支付的方法而不完善。为解决这个问题,我们提出一种使用工作量证明来记录公共交易历史的点对点网络。只要诚实节点控制了多数的 CPU 算力,对于对攻击者,交易历史将很快变得在计算上不可更改。网络因其结构简洁性而健壮。节点只需很少的协调就能同时工作。它们不需要被认证,因为信息不会被发送到某个特殊的位置,只需被尽力传播。节点可以随时离开和重新加入网络,只需接受最长的工作量证明链作为它们离开时发生事件的证据。节点使用 CPU 算力来投票,通过致力于延长有效区块来表达对其接受,通过拒绝在无效区块上工作来表达对其抵制。任何需要的规则和激励都可通过这个共识机制(consensus mechanism)来加强

参考资料

1、比特币白皮书-中文版

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:58:41  更:2022-07-04 22:58:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:27:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码