白话区块链技术第9讲|网络搭建

2020-02-20

点击蓝字关注我们

欢迎来到《王毅白话区块链技术》专栏第九讲:网络搭建

对于ripple程序来讲,官方推荐用linux系统来运行可执行程序。从github上我们也能下载到ripple的最新源码,https://github.com/ripple/rippled,对rippled的编译在git上也交代的很清楚。这里就不多讲述,相信这一步是不会有特别大的难点。我们主要讲搭建网络时的重要元素及关键配置,下面我们结合配置文件中的各个字段来描述一下ripple网络搭建的重点。

01

节点

1.1.身份

Ripple采用一对公私钥来标识一个节点的身份,私钥用来对自己发出的区块与交易集数据进行签名;公钥用来提供给其它节点,以使其它节点接受自己的意见。生成公私钥可以用编译出来的工具validator-keys,也可以用rippled主程序来直接生成,使用方法如下。

/validator-keys create_keys

/rippled validation_create

对第一种方式,使用工具直接生成公私钥,因为密钥对本质上与网络是无关的,在理论上是可以离线生成的。在用第二种方式时,因为配置文件还没设置好,所以启动rippled程序时加入-q参数,使程序先跑起来,然后再去生成key;只是这样跑起来的rippled程序是不规范的ripple节点,但是它已经能提供一些工具类型的功能。

1.2.设置

ripple网络中,有一个概念是非常重要的,那就是信任节点,Ripple网络在这一点上与比特币、以太坊是不同的。

比特币、以太坊的节点是可以自由接入,任意节点都可以成为挖矿节点,来生产一个有效的区块。

在ripple网络中,一个普通节点是没有权利生产有效区块的,这个并不是说普通节点在本地就不生成区块,而是指此节点生成的区块对网络上的其它节点没有影响。我们所谓的信任节点是指被另外的区块所信任的节点,是“被信任”的意思。A节点只有被另外的节点B信任,我们才能说A节点是B节点的信任节点,当然B节点反过来也可以被A节点信任。

信任节点概念的提出是与ripple网络的RPCA算法紧密相边的,RPCA算法简单来说就是:在区块生成前,一组节点共同决定一个区块中应该写入哪些交易,哪个区块是下一个有效区块。一个节点在生成交易集或者决定一个区块是否有效时,只会参考自己所信任的节点的意见,这个就是信任的本质。

普通节点是相对于信任节点提出的,普通节点一般不会主动去广播自己的交易集或者区块,即使广播也没人信任它。普通节点只是用来验证交易,提供客户端的查询,并不参与共识,但是会在本地按照共识规则来生成区块。普通节点所具有的功能,信任节点也具备。因此信任节点是普通节点的特殊表现形式,承担特殊的责任。

在网络初始架设的时候,我们要选定一组节点作为互相信任节点,这样每个节点发出来的交易集或区块就能被其它节点参考,这也是ripple网络架设的关键。

图1是一个单节点网络的典型配置,把本地的区块共识阈值validation_quorum设置为1,同时在validation_seed中填入本节点的私钥,这样本节点就有了可用的签名信息,可以自己生成区块了。Validation_public_key这个字段是可以选填的。

图1

图2是配置一个三个节点的ripple网络的典型配置,这里多出两个关键字段ips_fixed与validators,前者代表的是本节点想要信任的其它节点的地址,后者代表本节点想要信任的其它节点的公钥。说明本地节点在共识的环节要参考这些节点发来的信息。

图2

在配置多节点网络的时候,要注意在每个节点设置的validators所包含的其它节点的公钥个数得满足一定的比例,但是并不一定说是网络上除了自己以外的所有其它节点的公钥,满足算法规定的连通性即可,这个我们可以查阅ripple的白皮书得到进一步的资料,在我们配置简单的多节点网络时,通常在validators上包含除自己以外的其它节点的公钥,在ips_fixed里包含除自己以外的其它节点的地址信息。

图3是一个信任其它节点的普通节点的典型配置,自己节点不参与共识,只是参考别的节点发来的共识数据,因此就没必要配自己的validation_seed。

图3

总结一下这几个字段的涵义

Ips_fixed: 对方节点的IP与端口号。

Validators:对方节点的公钥。

Validation_public_key:己方节点的公钥。

Validation_seed:己方节点的私钥。

Validation_quorum:本地共识通过的阈值,在共识中并不是所有参与方都投赞成票,一个共识才能通过,而是超过一定比例后,我们就认为共识达成,这个参数就决定了共识所要满足的比例。

02

服务器

Ripple的每个节点默认会对外提供三个服务:

RPC服务:此服务采用http协议,主要满足客户端的访问需求。

WS服务:此服务采用websocket协议,同样是为了满足客户端的访问需求。与RPC不同的是,由于支持长连接,提供的对外功能更加丰富,比如订阅功能,客户端可以通过ws服务与ripple节点连接起来后,ripple会在每个区块生成的时候向客户端推送当前生成的区块的具体信息。本功能十分有用,ripple自己提供的hbase服务器就是通过此功能来接收区块数据,并依此进行分析统计的。

PEER服务,此服务采用ripple自己的peer协议,主要提供各个节点之间的相互通讯,是P2P底层协议的基础。交易的转发,交易集的生成,区块的共识都要通过此服务来达成。

图4

当然除了这三个服务器,ripple也提供了https与wss服务,可以在配置文件中加入字段并标明协议类型即可。

03

区块数据

配置文件中的ledger_history字段决定节点保留的区块数量,默认值为256个,即随着区块高度的增长,旧区块数据会被删除,新区块数据会保留下来。如果我们想保留链的全部数据,这里应该设置为full;如果只是想了解当然状态,不想要历史数据,这里应该设置为none.

04

启动

启动ripple单个节点时,除了提供必要的配置文件外,还可以加入其它的参数来满足不同的需要。

/rippled 直接启动方式,启动后,按配置文件中ips_fixed字段中设置的IP地址去连接对应节点,形成P2P网络系统;

/rippled --load 以load方式启动,在自己的私有ripple网络暂停再启动时,其中的一个引导节点应该以此方式启动,表示加载以前发生的历史数据;当然这里其它节点启动的时候就不能再加load参数了,而是以方式1直接启动,来与此节点组网;

/rippled –load ledger_index 指定区块号启动,此方式与方式2基本类似,方式2中会加载停止节点前最新的有效区块,而方式3是加载指定区块号的区块数据。

方式2与方式3其实已经违背了区块链的精髓,即区块链不受某一方或者某一中心控制的原则,这种启动方式也只是我们在本地调试,或者在搭建自己的私有网络时才使用,真正运行在公有环境的网络是不允许停止网络再重新启动的。

05

主账户

我们在启动ripple节点后,./rippled wallet_propose masterpassphase就可以看到主账户的详细信息了,当然wallet_propose后不接任何参数的话,意味着新生成一对公私钥数据。

本文并未提供一个配置ripple网络的完整教程,写出一步一步应该做什么,而只是给出了关键点,还是希望了解ripple网络的同学自己按官方说明自己配置,在这个过程中多思考,结合本文给出的解释,从而真正理解ripple网络。

往期课程

白话区块链技术 第1讲|非对称加密

白话区块链技术 第2讲|非对称加密

白话区块链技术 第3讲|账户

白话区块链技术 第4讲|钱包

白话区块链技术 第5讲|分布式系统与区块链

白话区块链技术 第6讲|认识Ripple网络

白话区块链技术 第7讲|Zilliqa(上)

白话区块链技术 第8讲|Zilliqa(下)

延伸阅读

比特币白皮书经典解读|第1讲

比特币的运行原理(上)|第2讲

比特币的运行原理(下)|第3讲

比特币的交易|第4讲

什么是区块链|第5讲

区块链技术(上)|第6讲

区块链技术(中)|第7讲

区块链技术(中)|第8讲

区块链技术(下)|第9讲

区块链3.0-供应链金融|第10讲

  

本期作者|王 毅

本期编辑|靳亚峰

祝你晚安早安午安心安

你可以上哪儿找我?

|欢迎转发到朋友圈|

在这个寒冷的时节里

因为有你的关注

而变得温暖

微信:tokentalk

币须说

长按二维码关注

王毅

赞赏

相关文章