自己的沙场:全同态加密研究分享 http://blog.sciencenet.cn/u/chzg99 不要对我说生命中无聊的事,不要对我说失败是命运的事。

博文

最清晰的比特币白皮书解析-网络

已有 6573 次阅读 2018-9-23 10:18 |个人分类:信息安全|系统分类:科研笔记

 

 

5. 网络

 

白皮书前面说了,为了构造一个分布式时间戳,需要对一个区块去求解满足要求的哈希值。求解哈希值时,唯一可以调整的参数是随机数(nounce)。交易就存放在这个区块里。那么问题就来了,各个节点是如何收到交易的呢?如何把交易放到区块里呢?所有这一切都是依赖于互联网的。这节就讲了交易如何在网络中的传播以及如何形成区块。

 

白皮书第一段如下:

The steps to run the network are as follows:

.    1)  New transactions are broadcast to all nodes. 


.    2)  Each node collects new transactions into a block. 


.    3)  Each node works on finding a difficult proof-of-work for its block. 


.    4)  When a node finds a proof-of-work, it broadcasts the block to all nodes. 


.    5)  Nodes accept the block only if all transactions in it are valid and not already spent. 


.    6)  Nodes express their acceptance of the block by working on creating the next block in the 
chain, using the hash of the accepted block as the previous hash. 


 

   比特币网络运行的步骤如下: 

1) 新的交易通过全网向所有节点广播; 

2) 每一个节点将收到的新的交易信息放入一个区块中; 

3) 每个节点都为自己的区块执行工作量证明,以发现一个满足难度要求的哈希值;

4) 当一个节点发现了一个满足难度要求的哈希值,它就向全网进行广播该区块; 

5) 当且仅当包含在该区块中的所有交易都是有效的且之前没有双花过,其他节点才接受承认该区块; 

.    6) 其他节点接受该区块后,就在该区块之后制造新的区块以延长该链条。并将被接受区块的哈希值写入新区块中前一区块哈希值(previous hash

)的位置。 

 

上述过程把交易的传播和块的形成,描述的非常简洁和清楚。由于网络的传播是有时延的,如果两个节点同时广播自己的区块,那么有些节点可能收到的是这个区块,另外节点可能收到的是另一个区块,那么就会造成链的分叉,如何处理呢?

 

白皮书紧接着说

 

Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one.

所有节点都将最长的链条视为正确的链条,并在最长的链条上继续工作从而延长它。如果有两个节点同时广播了不同的新区块,那么先收到哪个新区块,对于有些节点是有差异的。在此情况下,节点将在自己收到的第一个新区块上进行工作,但也会保留另外一个产生分叉的链,以防后者变成最长的链。当下一个新区块诞生后,其中一个链将会被延长,从而分叉的局面被打破。而在另一条链上的节点将转移到最长链上工作。

 

到这里有个问题,原本以为节点不知道除了自己工作的链以外还有其它的分支链。但是从上面的叙述可知,当出现分叉的时候,节点会知道有分叉出现的,而且还会保存另外的分叉链,以备将来转换。

 

交易在网络中的广播,是不是必须所有节点都收到后才可能被装入到新区块中(注意新区块诞生的方法)?同样,新区块的广播是不是所有节点都必须收到才可以,如果新区块在传播过程中丢失了,有的节点没收到怎么办?白皮书下面说了这个问题。

 

New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one.

 

新交易在广播过程中,未必需要到达全部的节点。只要它们能够到达大多数的节点,那么这些新交易很快会出现在链上的一个新区块中。为什么呢?因为大多数节点收到了新交易,那么节点挖出区块的概率也会以极大的可能落到大多数节点中的某个节点。所以很快该新交易就会出现在链上。如果挖出区块的节点碰巧不在这些大多数节点中,那么该新交易就不会出现在链上的新区块中。但是同样以极大的概率出现在下一个新区块中。

 

而区块的广播对于传播过程中丢失区块也具有容错能力。如果一个节点没有收到新区块,那么该节点在收到新区块之后的区块到来时,将会发现自己缺少前一个区块,从而会请求接收那个缺少的区块。

 

以上给出了交易和区块在网络中广播可能出现的一些情况及对策。但是细节并没有讲到,只是给出了大致的框架。如果学过计算机网络原理,对以上的过程就不会陌生。根据一些资料显示,比特币网络采用的是P2P网络架构,节点之间连接使用的是TCP协议。TCP协议是一种面向连接的可靠协议,它具有处理网络丢包,重传,校验等功能。

 

 

文章首发在微信公众号:btc201800

weixin.qq.com/r/GC8UDDj (二维码自动识别)

相应的音频,已发布到喜马拉雅“解读区块链白皮书”上,欢迎收听。

m.ximalaya.com/42927243(二维码自动识别)

 

 




https://blog.sciencenet.cn/blog-411071-1136499.html

上一篇:最清晰的比特币白皮书解析-工作量证明
下一篇:最清晰的比特币白皮书解析-激励
收藏 IP: 39.185.201.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-23 06:34

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部