重新创造比特币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

重新创造比特币8:基于UTXO的系统重构

作者:何岩,由 recreating.org发行。 1.重构交易模型 # 中本聪在脑中,模拟运行着UTXO的设计:“现在的设计应该没有大的缺陷了,可以进入交易模型的设计啦”。 Gilfoyle:“UTXO的确优雅,交易模型的改动会很大” 所谓交易模型的设计,就是说,通过重新构建交易模型,来承载UTXO机制。 新的交易模型,分为四个部分: 1.TXID:交易的Hash值(关于Hash是什么,后续会详细介绍,现在可以简单理解为:任何数据作为参数,输入到Hash函数中,... Continue →