重新创造比特币13:P2P网络

作者:何岩,由 recreating.org发行。

0.前言 #

中本聪在生命体上找到了Bitcoin演进的灵感,下一步是将技术落地。

生命体演进的顺序是从单细胞到多细胞,之后才出现器官,最后才是大脑。
换句话说,生命可以没有大脑,没有器官,但不能没有生殖细胞。

中本聪开始着手设计事关Bitcoin生存的基础(漩涡模型的内环),即,点对点的记账网络。

点对点,英文是:peer-to-peer ,缩写为:P2P。

Bitcoin的定义从此可以变为:一个点对点电子现金系统。

当然,未来Bitcoin的定义还会发生变化,也许是:一个点对点的通用计算机、一个点对点的超级智能体、或者世界之根:元网(Metanet)。

anyway,有点扯远了,我们回到脚下,开始记账网络的落地。

1.从2个节点开始 #

中本聪:“现在运行着的Bitcoin服务端,就可以看成是一个单节点。”

Gilfoyle:“可以把它看成是一个单细胞生命体吗?”

中本聪:“不能,它和单细胞生命有着本质的区别。因为,单细胞是生活在同类之间形成的群系统中的,例如之前我们讨论过的费氏孤菌。而当前的Bitcoin是一个世界上孤零零的一个单细胞,在自然界中孤独的单细胞是无法生存下去的。我们的Bitcoin之所以可以生存至今,是因为有我们在维护着它,给他供电,换一种说法,它的生存不可持续。所以,它还不算是一个自治系统。而我们现在要做的事,就是将它升级成一个自治的群系统,这样它就可以靠着自己存活下去,甚至自我演化下去。”

中本聪:“我们先从最简单的场景开始,加入一个新节点,让Bitcoin系统发生质变,成为拥有2个节点的极简群系统。”

Gilfoyle:“我们需要一个新的服务器,正好我家里有台多余的主机,我这就去抱过来”

中本聪:“太棒啦!我还在愁这个月没有闲钱买新主机呢!”
过了一会,Gilfoyle将一个老旧的主机放到了咖啡桌上,现在他们拥有了两台服务器啦。

直接装载之前Bitcoin的服务端代码,是没有效果的,因为两台主机会认为自己是世界上唯一的Bitcoin系统,互相老死不相往来。

中本聪:“首先,我们要让这两个节点连接上,彼此感知到对方的存在。”

Gilfoyle:“然后,还要让他俩实现通信,让账本文件在这两个节点之间,保持同步一致。”

中本聪:“对,问题还会很多,我们先走一步看一步。”

2.节点的连接 #

Gilfoyle:“两个Bitcoin节点,如何能够像两个神经元细胞一样产生连接呢?”

图片 1.png

大脑神经元连接

图片 1.png

两个神经元细胞组成的网络

我们先来看看神经元细胞之间如何建立连接。

每个神经元细胞,同时具有树突(接收端)和轴突(传送端)。

树突的作用是接受其它神经元发出的信号。

轴突的作用是将自己产生的信号发送出去。(见下图)

图片 1.png

神经元细胞

一个神经元细胞向外伸展着它的触手,它的树突会触摸到其它神经元细胞的轴突,俩者会通过一种神奇的方式互相抓住对方,一个连接就此产生。同时它的轴突也向外伸展,连接上其它神经元细胞的树突。

图片 1.png

神经细胞在传输信号

信号可以通过轴突与树突之间的连接进行自由传递。

中本聪说:“我们可以用TCP/IP网络协议来实现同样的能力"。

IP可以类比神经元细胞的位置坐标。

Socket Server类比神经元的轴突,即消息发送端。

Socket Client类比神经元的树突,即消息接受端。

一个节点需要具有独立的IP,还要最少创建一个Socket Server和一个Socket Client。

Socket Client可以主动去连接某个IP地址对应的Socket Server,就好像神经细胞的树突连接到了另一个神经细胞的轴突。

1个Socket Server可以被多个Socket Client连接,就好像一个轴突可以被多个树突连接。

Socket Client与Socket Server连接成功,信息通道就会产生,消息可以在两个节点之间双向传输。这就好像两个神经元细胞一旦连接上了,就会一直手拉着手保持下去。

中本聪根据上面的思路,改好了代码,并将其部署在了两台服务器上,一个最简单的P2P网络就此诞生啦!(见下图)

图片 1.png

2个节点组成的P2P网络

中本聪将两个节点的IP写死到了代码里,这样节点一启动,就会根据IP主动连接上彼此。

当然,将IP写死在代码里很不优雅,后续再改进吧,现在节点不多,先这么运行着。

2个节点形成的网络也许看着没有感觉,我们来3个节点是什么效果(见下图)

图片 1.png

3个节点组成的P2P网络

中本聪:“未来随着Bitcoin节点数量的增加,点对点网络的复杂度会呈指数级增长”

Gilfoyle:“这正是群系统和传统精确系统的本质不同”

3.客户端由web模式改为P2P模式 #

服务端改成了点对点的网络模式,客户端也需要改成点对点的网络模式。
因为之前的web架构模式存在单点问题,单点就在那个网址:bitcoin.org。(见下图)

web架构下节点2永不会被访问到

用户打开浏览器,输入网址:bitcoin.org,浏览器跳转到公网上访问公共的DNS服务器,DNS服务器中配置了bitcoin.org对应的服务器IP,这是在之前中本聪买域名的时候配置好的。因为DNS的网只能映射到唯一的IP地址,所以永远都会是节点1被访问。如果杀死了节点1,Bitcoin就死掉了。

所以说,群系统不可以存在单点环节。只要存在单点,系统就可以通过破坏单点导致系统死亡。

中本聪:“判断一个系统是否为一个群系统,就看系统中是否存在单点”

中本聪:“传统架构模式下集群系统,虽然自称为分布式系统,但其实是不彻底的分布式,因为传统架构中总会有一个类似负载均衡或者服务发现的节点,来负责分配访问的路径”(见下图)

图片 1.png

传统的分布式架构

为了去掉单点,Bitcoin的客户端也要改造成点对点的模式,即放弃使用浏览器,客户端也需要是一个节点,客户端节点直接连接记账网络的节点。由于客户端节点不需要储存全部账本,所以称其为:轻节点,又因为轻节点需要依靠自身的轻量级存储实现独立的交易简单校验(简单校验需要用到Merkle Tree的概念,后续章节会讨论),所以英文叫做:Simplified Payment Verification,简称SPV。

客户端由浏览器变成了轻节点,这意味着用户需要在自己的设备上,安装一个独立应用。这就意味着,Bitcoin的代码工程要一分为二,分别是记账节点和轻节点。

中本聪搞定了轻节点的编码,并将其编译成应用安装文件,最后将其上传到网站,提供给用户下载安装。

轻节点的代码中也同样写死了记账节点的IP,作为临时方案。轻节点启动后通过这些IP,连接到记账节点,这样整体网络架构变成了下面这样(见下图)

图片 1.png

整体的点对点网络架构

这时候,如果杀死任何记账节点,只要还剩一个记账节点存活,系统就还会正常为客户提供服务。

当然,现在这个系统还不能正常使用。两个节点虽然连接上了,但在记录交易的时候各自为政,会导致账本不一致。很容易出现这样的情况:用户访问节点1时候发现自己的余额是100,访问节点2的时候余额就变成90了,用户会很困惑。

如何实现节点之间的账本同步一致呢?这是中本聪和Gilfoyle要面对的下一个问题。

另外,轻节点之间也会在未来演化成点对点的连接,轻节点的功能也会发展出转账之外的逻辑,正是由于轻节点拥有自身算法的可变异空间,Bitcoin才可能自我演化成为一个超级智能体,这就好像生命的演化基于个体的基因变异。(见下图)

图片 1.png

轻节点与轻节点的点对点网络

如果将群系统比喻成漩涡,内环转动外环涌现。那么未来承载外环涌现的主角必然是轻节点网络。当然,这个太超前了,我们现在只需要关注Bitcoin的生存:记账网络的构建。

4.后记 #

在下一本书中将讨论:轻节点SPV之间的P2P网络,即Alice和Bob之间可以点对点的转账,不用通过记账网络作为中介

本篇完,下一篇将会讨论,记账节点间交易如何同步一致。

下一篇:重新创造比特币14:交易的同步

相关链接 #

重新创造比特币:前言

Part One : 交易
重新创造比特币1:从一个简单的web交易系统开始
重新创造比特币2:第一个版本上线啦
重新创造比特币3:舍弃账户模型
重新创造比特币4:数字签名
重新创造比特币5:公钥和私钥
重新创造比特币6:第二个版本上线啦
重新创造比特币7:UTXO
重新创造比特币8:基于UTXO的系统重构
重新创造比特币9:万物皆交易
重新创造比特币10:交易脚本

Part Two : 群系统
重新创造比特币11:群系统(上)
重新创造比特币12:群系统(下)
重新创造比特币13:P2P网络
重新创造比特币14:交易的同步
重新创造比特币15:账本的同步
重新创造比特币16:Block Chain
重新创造比特币17:网络的弹性
重新创造比特币18:工作量证明(上)
重新创造比特币19:工作量证明(下)
重新创造比特币20:分叉之重组与分裂

书面设计矢量图_36.png

英文版Amazon.com在售 : Recreating Bitcoin

BSV打赏:
1Djc4TdVBi8urzmSXKHwg8cpEAYKcRQxgY

©2019 - Recreating.org all rights reserved

 
0
Kudos
 
0
Kudos

Now read this

Recreating Bitcoin 14:Synchronizing Transactions

Epilogue # In the last chapter, Satoshi and Gilfoyle complete the simplest P2P network but have not achieved the synchronization of the ledger across network. The first step to solve the problem is to synchronize the transactions.... Continue →