Skip to content

Commit f7b6137

Browse files
berryjamgitbook-bot
authored andcommitted
GITBOOK-76: No subject
1 parent 3b53df5 commit f7b6137

File tree

36 files changed

+363
-284
lines changed

36 files changed

+363
-284
lines changed

.gitbook/assets/A.1.png

78 KB
Loading

.gitbook/assets/A.10.png

13 KB
Loading

.gitbook/assets/A.11.png

9.25 KB
Loading

.gitbook/assets/A.2.png

14 KB
Loading

.gitbook/assets/A.3.png

16.7 KB
Loading

.gitbook/assets/A.4.png

85.4 KB
Loading

.gitbook/assets/A.5.png

53.4 KB
Loading

.gitbook/assets/A.6.png

8.4 KB
Loading

.gitbook/assets/A.7.png

28.1 KB
Loading

.gitbook/assets/A.8.png

8.42 KB
Loading

.gitbook/assets/A.9.png

2.33 KB
Loading

SUMMARY.md

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -299,20 +299,23 @@
299299
* [闪电网络传输和路径查找](di-shi-si-zhang-.-er-ceng-ying-yong/lu-you-zhi-fu-tong-dao-shan-dian-wang-luo/shan-dian-wang-luo-chuan-shu-he-lu-jing-cha-zhao.md)
300300
* [闪电网络的好处](di-shi-si-zhang-.-er-ceng-ying-yong/lu-you-zhi-fu-tong-dao-shan-dian-wang-luo/shan-dian-wang-luo-de-hao-chu.md)
301301

302-
## 附录A. 比特币白皮书(by中本聪)
303-
304-
* [Icons](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong/icons.md)
305-
* [Buttons](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong/buttons.md)
306-
* [Inputs](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong/inputs.md)
307-
308-
## 附录B. 比特币白皮书勘误表
309-
310-
* [Icons](fu-lu-b.-bi-te-bi-bai-pi-shu-kan-wu-biao/icons.md)
311-
* [Buttons](fu-lu-b.-bi-te-bi-bai-pi-shu-kan-wu-biao/buttons.md)
312-
* [Inputs](fu-lu-b.-bi-te-bi-bai-pi-shu-kan-wu-biao/inputs.md)
313-
314-
## 附录C. 比特币改进建议
315-
316-
* [Icons](fu-lu-c.-bi-te-bi-gai-jin-jian-yi/icons.md)
317-
* [Buttons](fu-lu-c.-bi-te-bi-gai-jin-jian-yi/buttons.md)
318-
* [Inputs](fu-lu-c.-bi-te-bi-gai-jin-jian-yi/inputs.md)
302+
## 附录A. 比特币白皮书(by中本聪)翻译
303+
304+
* [比特币 - 一种点对点的电子现金系统](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/README.md)
305+
* [介绍](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/jie-shao.md)
306+
* [交易](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/jiao-yi.md)
307+
* [时间戳服务器](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/shi-jian-chuo-fu-wu-qi.md)
308+
* [工作量证明(PoW)](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/gong-zuo-liang-zheng-ming-pow.md)
309+
* [网络](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/wang-luo.md)
310+
* [激励](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/ji-li.md)
311+
* [回收磁盘空间](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/hui-shou-ci-pan-kong-jian.md)
312+
* [简化支付验证(Simplified Payment Verification,SPV)](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/jian-hua-zhi-fu-yan-zheng-simplified-payment-verificationspv.md)
313+
* [合并和拆分价值](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/he-bing-he-chai-fen-jia-zhi.md)
314+
* [隐私](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/yin-si.md)
315+
* [计算](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/ji-suan.md)
316+
* [结论](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/jie-lun.md)
317+
* [引用](fu-lu-a.-bi-te-bi-bai-pi-shu-by-zhong-ben-cong-fan-yi/bi-te-bi-yi-zhong-dian-dui-dian-de-dian-zi-xian-jin-xi-tong/yin-yong.md)
318+
319+
## 附录B. 比特币改进建议(Bitcoin Improvement Proposals,BIP)
320+
321+
* [综合介绍](fu-lu-b.-bi-te-bi-gai-jin-jian-yi-bitcoin-improvement-proposalsbip/zong-he-jie-shao.md)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
description: 这是原始白皮书,完整地翻译了2008年10月由中本聪发布的内容。
3+
---
4+
5+
# 比特币 - 一种点对点的电子现金系统
6+
7+
Satoshi Nakamoto 
8+
9+
10+
11+
www.bitcoin.org
12+
13+
**摘要。**一种纯粹的点对点版本的电子现金将允许在线支付直接从一方发送到另一方,而无需经过金融机构。数字签名提供了部分解决方案,但如果仍然需要信任的第三方来防止双重支付,则主要优势将会丧失。我们提出了使用点对点网络解决双重支付问题的方案。网络通过将交易的时间戳散列到基于哈希的工作量证明的持续链中来记录交易,形成一个不能在不重新执行工作量证明的情况下更改的记录。最长的链不仅作为事件序列的证明,而且作为它来自最大的CPU计算能力池的证明。只要大多数CPU计算能力被不合作攻击网络的节点所控制,它们就会生成最长的链并超越攻击者。网络本身需要最少的结构。消息以尽力而为的方式广播,节点可以随意离开和重新加入网络,接受最长的工作量证明链作为它们离线期间发生的事情的证明。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# 工作量证明(PoW)
2+
3+
为了在点对点基础上实现分布式时间戳服务器,我们将需要使用类似于Adam Back的Hashcash的工作量证明系统,而不是使用报纸或Usenet帖子。工作量证明涉及扫描一个值,使其哈希(例如,使用SHA-256)以一定数量的零位开始。所需的平均工作量随所需的零位数量呈指数增长,并且可以通过执行单个哈希来验证。对于我们的时间戳网络,我们通过在区块中递增一个随机数(nonce)来实现工作量证明,直到找到一个值,使得区块的哈希具有所需的零位。一旦CPU投入了足够的工作量使其满足工作量证明,区块就无法更改,除非重新进行这项工作。随着后续区块的链接,要更改该区块需要重新做所有后续区块的工作。
4+
5+
<figure><img src="../../.gitbook/assets/A.3.png" alt=""><figcaption></figcaption></figure>
6+
7+
工作量证明还解决了确定多数决策中的代表性的问题。如果多数决策基于一个IP地址一票,那么任何能够分配多个IP的人都可以篡改它。工作量证明本质上是一个CPU一票制。多数决策由最长的链表示,该链在其中投入了最大的工作量证明努力。如果多数CPU算力由诚实节点控制,那么诚实链将增长最快,并超过任何竞争链。要修改过去的区块,攻击者必须重新做该区块以及其后的所有区块的工作量证明,然后赶上并超过诚实节点的工作量。我们将在后面展示,随着后续区块的添加,较慢的攻击者追赶的概率呈指数级下降。&#x20;
8+
9+
为了补偿硬件速度的增加和随时间变化的节点运行兴趣的差异,工作量证明的难度由一个移动平均数确定,以达到每小时平均区块数量的目标。如果生成得太快,难度就会增加。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# 合并和拆分价值
2+
3+
虽然可以单独处理硬币,但对于每一分钱都进行单独交易将会很不方便。为了允许价值的拆分和合并,交易包含多个输入和输出。通常情况下,会有一个较大的前一笔交易作为单一输入,或者多个输入合并较小的金额,最多有两个输出:一个用于支付,另一个将余额(如果有)退回给发送者。
4+
5+
<figure><img src="../../.gitbook/assets/A.6.png" alt=""><figcaption></figcaption></figure>
6+
7+
应该注意的是,扇出(即一笔交易依赖于多笔交易,而这些交易又依赖于更多的交易)在这里并不是一个问题。这里从不需要提取一笔交易的完整独立历史记录。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# 回收磁盘空间
2+
3+
一旦一个币的最新交易被足够多的区块深埋之后,该币之前的已花费交易就可以被丢弃以节省磁盘空间。为了实现这一点而不破坏区块的哈希,交易被哈希成一个默克尔树,在区块的哈希中只包含根。旧的区块可以通过截断树的分支来压缩。内部哈希值不需要被存储。
4+
5+
<figure><img src="../../.gitbook/assets/A.4.png" alt=""><figcaption></figcaption></figure>
6+
7+
一个没有交易的区块头大约是80字节。假设每10分钟生成一个区块,那么每年大约是80字节 \* 6 \* 24 \* 365 = 4.2MB。截至2008年,计算机系统通常配备2GB的RAM,而摩尔定律预测当前每年增长1.2GB,即使区块头必须保留在内存中,存储也不应该是一个问题。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# 激励
2+
3+
根据惯例,区块中的第一笔交易是一笔特殊的交易,用于创建一个由该区块的创建者拥有的新币。这为节点支持网络提供了激励,并为最初将币分配到流通中提供了一种方式,因为没有中央机构来发行它们。持续不断地增加一定数量的新币相当于金矿工耗费资源将金添加到流通中。在我们的情况下,耗费的资源是CPU时间和电力。
4+
5+
激励也可以通过交易费来资助。如果一笔交易的输出价值小于其输入价值,那么差额将作为交易费添加到包含该交易的区块的激励价值中。一旦预定数量的币进入流通,激励可以完全过渡到交易费,并且完全不受通货膨胀的影响。
6+
7+
激励可能有助于鼓励节点保持诚实。如果一个贪婪的攻击者能够聚集比所有诚实节点更多的CPU算力,他将不得不在利用它来欺骗他人通过窃取回他的支付,或者用它来生成新的币之间做出选择。他应该会发现,遵循规则更有利于他,这些规则给予他的新币比其他人加在一起的要多,而不是破坏系统和他自己财富的有效性。
8+
9+
\
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# 计算
2+
3+
\
4+
我们考虑的情况是攻击者试图比诚实链更快地生成替代链。即使成功,也不会使系统对任意更改敞开大门,比如凭空创造价值或获取从未属于攻击者的资金。节点不会接受无效的交易作为支付,而诚实的节点永远不会接受包含这些交易的区块。攻击者只能尝试改变自己的一笔交易,以取回最近花费的资金。&#x20;
5+
6+
诚实链和攻击者链之间的竞赛可以被描述为一个二项随机游走。成功事件是诚实链被延长一块,其领先优势增加 +1,而失败事件是攻击者链被延长一块,使差距减少 -1。&#x20;
7+
8+
攻击者从给定的落后位置赶上的概率类似于《赌徒破产问题》。假设一个信用无限的赌徒从赤字开始,并进行可能无限次的尝试来达到盈亏平衡。我们可以计算他是否会达到盈亏平衡,或者攻击者是否会赶上诚实链的概率,如下所示:&#x20;
9+
10+
p = 诚实节点找到下一个区块的概率&#x20;
11+
12+
q = 攻击者找到下一个区块的概率&#x20;
13+
14+
qz = 攻击者从 z 个区块落后赶上的概率
15+
16+
<figure><img src="../../.gitbook/assets/A.8.png" alt=""><figcaption></figcaption></figure>
17+
18+
鉴于我们假设 p > q,随着攻击者需要赶上的区块数量增加,概率呈指数下降。面对不利的情况,如果攻击者在早期没有幸运地迈出重要的一步,随着他落后的距离增加,他的机会将变得微乎其微。&#x20;
19+
20+
现在我们考虑新交易的接收方需要等待多久才能足够确信发送方无法更改交易。我们假设发送方是一名攻击者,他希望让接收方相信他已经付款了一段时间,然后在一段时间后将其更改为支付给自己。当接收方发现时,他已经晚了,但发送方希望这会太晚。&#x20;
21+
22+
接收方在签名前不久生成一个新的密钥对,并将公钥提供给发送方。这样可以防止发送方提前准备好一连串的区块,不断地工作直到他幸运地领先一段距离,然后在那一刻执行交易。一旦交易发送出去,不诚实的发送方会秘密地开始在一个平行链上工作,其中包含他交易的另一个版本。&#x20;
23+
24+
接收方等待直到交易被添加到一个区块中,并且之后链接了 z 个区块。他不知道攻击者取得了多少进展,但是假设诚实的区块需要平均预期时间来生成,攻击者的潜在进展将服从泊松分布,其期望值为:
25+
26+
<figure><img src="../../.gitbook/assets/A.9.png" alt=""><figcaption></figcaption></figure>
27+
28+
为了得到攻击者现在仍然有可能赶上的概率,我们将他可能已经取得的每一次进展的泊松密度与他从那一点上赶上的概率相乘:
29+
30+
<figure><img src="../../.gitbook/assets/A.10.png" alt=""><figcaption></figcaption></figure>
31+
32+
重新排列以避免对分布的无限尾部求和...
33+
34+
<figure><img src="../../.gitbook/assets/A.11.png" alt=""><figcaption></figcaption></figure>
35+
36+
转换为C代码...
37+
38+
<pre class="language-c"><code class="lang-c">#include &#x3C;math.h>
39+
double AttackerSuccessProbability(double q, int z)
40+
{
41+
double p = 1.0 - q;
42+
<strong> double lambda = z * (q / p);
43+
</strong> double sum = 1.0;
44+
int i, k;
45+
for (k = 0; k &#x3C;= z; k++)
46+
{
47+
<strong> double poisson = exp(-lambda);
48+
</strong> for (i = 1; i &#x3C;= k; i++)
49+
<strong> poisson *= lambda / i;
50+
</strong> sum -= poisson * (1 - pow(q / p, z - k));
51+
<strong> }
52+
</strong> return sum;
53+
}
54+
</code></pre>
55+
56+
运行一些结果,我们可以看到概率随着 z 呈指数级下降。
57+
58+
```
59+
q=0.1
60+
z=0 P=1.0000000
61+
z=1 P=0.2045873
62+
z=2 P=0.0509779
63+
z=3 P=0.0131722
64+
z=4 P=0.0034552
65+
z=5 P=0.0009137
66+
z=6 P=0.0002428
67+
z=7 P=0.0000647
68+
z=8 P=0.0000173
69+
z=9 P=0.0000046
70+
z=10 P=0.0000012
71+
q=0.3
72+
z=0 P=1.0000000
73+
z=5 P=0.1773523
74+
z=10 P=0.0416605
75+
z=15 P=0.0101008
76+
z=20 P=0.0024804
77+
z=25 P=0.0006132
78+
z=30 P=0.0001522
79+
z=35 P=0.0000379
80+
z=40 P=0.0000095
81+
z=45 P=0.0000024
82+
z=50 P=0.0000006
83+
```
84+
85+
解决 P 小于 0.1% 的情况...
86+
87+
```
88+
P < 0.001
89+
q=0.10 z=5
90+
q=0.15 z=8
91+
q=0.20 z=11
92+
q=0.25 z=15
93+
q=0.30 z=24
94+
q=0.35 z=41
95+
q=0.40 z=89
96+
q=0.45 z=340
97+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# 简化支付验证(Simplified Payment Verification,SPV)
2+
3+
用户只需保留最长工作量证明链的区块头副本即可验证支付,他可以通过查询网络节点获取这些副本,直到确信自己拥有了最长的链,并获取将交易链接到其时间戳位置的默克尔分支。虽然用户无法自行验证交易,但通过将其与链中的某个位置关联起来,他可以看到网络节点已接受该交易,并且之后添加的区块进一步确认了网络已接受该交易。
4+
5+
<figure><img src="../../.gitbook/assets/A.5.png" alt=""><figcaption></figcaption></figure>
6+
7+
因此,只要诚实的节点控制着网络,验证就是可靠的,但如果网络被攻击者压倒性地控制,则更容易受到攻击。虽然网络节点可以自行验证交易,但简化的方法可能会被攻击者伪造的交易欺骗,只要攻击者能够继续压倒网络。保护措施之一是接受来自网络节点的警报,当它们检测到无效区块时,提示用户的软件下载完整区块和警报交易以确认不一致之处。经常收到支付的企业可能仍然希望运行自己的节点,以获得更独立的安全性和更快的验证速度。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# 交易
2+
3+
我们将电子硬币定义为一系列数字签名。每个所有者通过对上一笔交易的哈希和下一位所有者的公钥进行数字签名,并将它们添加到硬币的末尾来将硬币转移给下一个所有者。收款人可以验证这些签名以验证所有权链。
4+
5+
<figure><img src="../../.gitbook/assets/A.1.png" alt=""><figcaption></figcaption></figure>
6+
7+
问题当然是收款人无法验证其中一个所有者是否曾经双重支付了该硬币。一个常见的解决方案是引入一个可信的中央机构或者铸币厂,来检查每一笔交易是否存在双重支付。在每笔交易之后,硬币必须被退回给铸币厂以发行新的硬币,而只有直接由铸币厂发行的硬币才被信任不会被双重支付。这种解决方案的问题在于整个货币系统的命运取决于运行铸币厂的公司,每笔交易都必须通过他们进行,就像银行一样。
8+
9+
我们需要一种方法让收款人知道前任所有者没有签署任何早期的交易。对于我们而言,最早的交易才是重要的,所以我们不关心后来的双重支付尝试。确认没有交易存在的唯一方法是了解所有交易。在基于铸币厂的模型中,铸币厂知道所有交易,并决定哪些先到达。为了在没有可信方的情况下实现这一点,交易必须公开宣布,而且我们需要一个参与者能够就它们被接收的顺序达成一致意见的系统。收款人需要证明,在每笔交易时,大多数节点都同意它是第一次接收的。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# 结论
2+
3+
我们提出了一种在不依赖信任的情况下进行电子交易的系统。我们从通常的由数字签名制成的硬币框架开始,这提供了对所有权的严格控制,但在没有防止双重支付的方式的情况下是不完整的。为了解决这个问题,我们提出了一种使用工作证明的点对点网络,用于记录交易的公共历史,如果诚实的节点控制了大多数 CPU 计算能力,那么这种记录将很快变得计算上不可行,以防止攻击者修改交易历史。这个网络以其非结构化的简单性而稳健。节点一起工作,几乎不需要协调。它们不需要被识别,因为消息不会被路由到任何特定的位置,只需要尽力而为地传递。节点可以随意离开和重新加入网络,接受工作证明链作为他们离开时发生的事情的证据。它们通过CPU计算能力来表达对有效区块的接受,通过继续扩展有效区块并拒绝在无效区块上工作来拒绝无效区块。任何必要的规则和激励措施都可以通过这种共识机制来执行。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# 介绍
2+
3+
互联网上的商务几乎完全依赖于金融机构作为可信第三方来处理电子支付。虽然该系统对于大多数交易已经运作得足够好,但它仍然受到基于信任模型的固有弱点的影响。完全不可逆转的交易实际上是不可能的,因为金融机构无法避免调解纠纷。调解的成本增加了交易成本,限制了最小的实际交易规模,并且割断了小额休闲交易的可能性,且在无法进行非可逆支付的非可逆服务上也存在更广泛的成本。由于可能发生逆转,信任的需求扩散开来。商家必须警惕他们的客户,麻烦他们提供比他们本来需要的更多的信息。一定比例的欺诈被接受为不可避免的。这些成本和支付不确定性可以通过使用实物货币面对面进行避免,但是在没有可信第三方的通信渠道上进行支付没有任何机制存在。
4+
5+
所需要的是一种基于加密证明而不是信任的电子支付系统,允许任何两个愿意的当事人直接进行交易而无需信任第三方。计算上不可逆转的交易将保护卖家免受欺诈,而常规的第三方担保机制可以轻松实现以保护买家。在本文中,我们提出了使用点对点分布式时间戳服务器来生成交易时间顺序的计算证明来解决双重支付问题的方案。只要诚实的节点共同控制的CPU算力多于任何合作的攻击者节点组,系统就是安全的。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# 时间戳服务器
2+
3+
<figure><img src="../../.gitbook/assets/A.2.png" alt=""><figcaption></figcaption></figure>
4+
5+
我们提出的解决方案始于一个时间戳服务器。时间戳服务器的工作方式是对要进行时间戳处理的数据块进行哈希,并广泛发布该哈希值,比如在报纸或Usenet帖子中\[2-5]。时间戳证明了数据必须在某个时间点存在,显然,为了被包含在哈希中。每个时间戳在其哈希中包含了前一个时间戳,形成一个链条,每个额外的时间戳都加强了之前的时间戳。

0 commit comments

Comments
 (0)