区块链节点的网络拓扑(目标节点通信地址加入区块链网络配置文件中可以进行区块同步)
区块链节点的网络拓扑(目标节点通信地址加入区块链网络配置文件中可以进行区块同步)此外,对于待加入区块链网络的目标节点,区块链网络可以先受理并调用智能合约执行用于请求将目标节点加入区块链网络的节点加入交易,在将目标节点记载到智能合约维护的当前节点列表中之后,才会许可目标节点同步区块。为此,在本说明书的一个或多个实施例中,在用于使目标节点加入区块链网络的网络配置文件中,增加区块链网络的至少一个当前节点的通信地址,从而使得即便在各个创世节点已经退出区块链网络的情况下,目标节点也可以进行区块同步,根据网络配置文件中包含的当前节点的通信地址,请求从区块链网络的当前节点同步区块。目前的区块链网络的创建流程为,分别在各创世节点的本地部署区块链的创世块,创世块中记载了各创世节点的通信地址。后续如果有新节点想要加入区块链网络,则可以在该新节点的本地部署网络配置文件。需要说明的是,网络配置文件通常是指用于对将要加入区块链网络的节点进行配置的文件。网络配置文件所提供的配置功能有很多,例如包
目前的区块链网络的创建流程为,分别在各创世节点的本地部署区块链的创世块,创世块中记载了各创世节点的通信地址。
后续如果有新节点想要加入区块链网络,则可以在该新节点的本地部署包含创世块信息的网络配置文件,该新节点根据网络配置文件,在本地部署创世块,进而根据创世块中记载的创世节点的通信地址,请求从创世节点同步区块链中除创世块之外的其他区块,从而可以加入区块链网络。然而,新节点有时难以进行区块同步。
问题解决
区块链技术区别于传统技术的去中心化特点之一,就是在各个节点上进行记账,或者称为分布式记账,而不是传统的集中式记账。区块链系统要成为一个难以攻破的、公开的、不可篡改数据记录的去中心化诚实可信系统,需要在尽可能短的时间内做到分布式数据记录的安全、明确及不可逆。不同类型的区块链网络中,为了在各个记录账本的节点中保持账本的一致,通常采用共识算法来保证,即前述提到的共识机制。例如,区块链节点之间可以实现区块粒度的共识机制,比如在节点(例如某个独特的节点)产生一个区块后,如果产生的这个区块得到其它节点的认可,其它节点记录相同的区块。再例如,区块链节点之间可以实现交易粒度的共识机制,比如在节点(例如某个独特的节点)获取一笔区块链交易后,如果这笔区块链交易得到其他节点的认可,认可该区块链交易的各个节点可以分别将该区块链交易添加至自身维护的最新区块中,并且最终能够确保各个节点产生相同的最新区块。共识机制是区块链节点就区块信息(或称区块数据)达成全网一致共识的机制,可以保证最新区块被准确添加至区块链。当前主流的共识机制包括:工作量证明(Proof ofWork,POW)、股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法,HoneyBadgerBFT算法等。
目前的区块链网络的创建流程为,分别在各创世节点的本地部署区块链的创世块,创世块中记载了各创世节点的通信地址。
后续如果有新节点想要加入区块链网络,则可以在该新节点的本地部署网络配置文件。需要说明的是,网络配置文件通常是指用于对将要加入区块链网络的节点进行配置的文件。网络配置文件所提供的配置功能有很多,例如包括安装签名证书、安装虚拟机、安装协议等等。对于后续请求加入区块链网络的节点来说,提供给该节点的网络配置文件也可以包含创世块信息,该节点可以根据其中的创世节点的通信地址(例如IP地址),从创世节点同步除创世块之外的其他区块,从而可以加入区块链网络。
区块链网络被创建之后,可以加入新节点。此外,区块链网络的创世节点后续也可能退出区块链网络。因此,可能出现区块链网络的每个创世节点都已退出区块链网络的情况,这意味着,根据创世块中记载的各创始节点的通信地址,很可能无法从创世节点处同步最新区块。
为此,在本说明书的一个或多个实施例中,在用于使目标节点加入区块链网络的网络配置文件中,增加区块链网络的至少一个当前节点的通信地址,从而使得即便在各个创世节点已经退出区块链网络的情况下,目标节点也可以进行区块同步,根据网络配置文件中包含的当前节点的通信地址,请求从区块链网络的当前节点同步区块。
此外,对于待加入区块链网络的目标节点,区块链网络可以先受理并调用智能合约执行用于请求将目标节点加入区块链网络的节点加入交易,在将目标节点记载到智能合约维护的当前节点列表中之后,才会许可目标节点同步区块。
图4是本说明书提供的一种区块同步方法的流程示意图,包括如下步骤:
S400:获取网络配置文件。
图4所述方法应用于待加入区块链网络的目标节点。
在有些实施例中,目标节点可以从互联网途径下载用于加入区块链网络的网络配置文件。
在另一些实施例中,可以在线下为目标节点部署网络配置文件。
S402:在所述区块链网络的每个创世节点已退出网络的情况下,根据所述区块链网络的至少一个当前节点的通信地址,请求从当前节点同步区块链中的区块。
在有些实施例中,网络配置文件可以不包含区块链网络的创世块信息。如此,在步骤S402中,目标节点可以请求从当前节点同步区块链中的全部区块。
在有些实施例中,网络配置文件可以包含区块链的创世块信息,如此,在步骤S402中,目标节点可以请求从当前节点同步区块链中除创世块之外的其他区块。
此外,在步骤S402中,若所述网络配置文件包含所述区块链网络的多个当前节点的通信地址,则可以根据其中至少两个当前节点的通信地址,请求从不同的当前节点同步区块链中的不同区块。如此,可以通过多个并行的区块同步线程进行区块同步,提升区块同步的效率。
另外,在所述区块链网络中存在至少一个创世节点的情况下,根据创世块信息确定至少一个创世节点的通信地址,并请求从创世节点同步区块链中的区块。
图5是本说明书提供的一种节点加入区块链网络的方法的流程示意图,包括如下步骤:
S500:获取节点加入交易。
图5所示方法应用于区块链网络,可以理解为是由区块链网络的每个当前节点执行的。
节点加入交易用于请求区块链网络同意将目标节点加入区块链网络中。
区块链网络中可以部署有智能合约,智能合约用于维护所述区块链网络的当前节点列表。可以理解,区块链网络在运行过程中,可能有节点退出,也可能有节点加入,而当前节点列表需要根据节点退出事件与节点加入事件而更新。需要说明的是,节点退出事件与节点加入事件类似,可以是通过向区块链网络提交调用智能合约的交易来触发(节点加入交易或节点退出交易)。
S502:根据所述节点加入交易,调用所述智能合约执行交易。
在步骤S502中,调用智能合约执行的步骤为,若确定待加入所述区块链网络的目标节点具有加入资格,则以所述目标节点为所述区块链网络的一个当前节点,更新所述当前节点列表。
其中,目标节点是否具有加入资格的判断规则,可以根据实际需要在智能合约中进行配置。当然,也可以将任何请求加入区块链网络的节点都认定为具有加入资格。
节点加入交易通常需要携带用于判断是否具有加入资格的待审核信息,例如目标节点对应的控制方的资质文件等。
如果目标节点不具有加入资格,则可以拒绝更新当前节点列表。
S504:在确定所述当前节点列表中记载有所述目标节点的情况下,许可所述目标节点从所述区块链网络中的当前节点同步区块。
许可目标节点从区块链网络的当前节点同步区块,意味着在图4所示方法中,被请求同步区块的区块链网络中的当前节点同意目标节点的请求,进而向目标节点传输区块数据。
此外,在确定所述当前节点列表中未记载有所述目标节点的情况下,拒绝所述目标节点从所述区块链网络中的当前节点同步区块。
图6是本说明书提供的一种区块同步装置的结构示意图,应用于待加入区块链网络的目标节点,所述装置包括:
获取模块601,获取网络配置文件;所述网络配置文件包含所述区块链网络的至少一个当前节点的通信地址;
第一请求同步模块602,在所述区块链网络的每个创世节点已退出网络的情况下,根据所述区块链网络的至少一个当前节点的通信地址,请求从当前节点同步区块链中的区块。
所述网络配置文件还包含区块链的创世块信息;
所述第一请求同步模块602,在所述区块链网络的每个创世节点已退出网络的情况下,请求从当前节点同步区块链中除创世块之外的其他区块。
通信地址包括:IP地址。
所述第一请求同步模块602,若所述网络配置文件包含所述区块链网络的多个当前节点的通信地址,则根据其中至少两个当前节点的通信地址,请求从不同的当前节点同步区块链中的不同区块。
还包括:
第二请求同步模块603,在所述区块链网络中存在至少一个创世节点的情况下,根据创世块信息确定至少一个创世节点的通信地址,并请求从创世节点同步区块链中的区块。
本说明书还提供一种区块链网络,所述区块链网络中部署有智能合约,所述智能合约用于维护所述区块链网络的当前节点列表;
所述区块链网络中每个当前节点,获取节点加入交易;根据所述节点加入交易,调用所述智能合约执行:若确定待加入所述区块链网络的目标节点具有加入资格,则以所述目标节点为所述区块链网络的一个当前节点,更新所述当前节点列表;在确定所述当前节点列表中记载有所述目标节点的情况下,许可所述目标节点从所述区块链网络中的当前节点同步区块;
所述区块链网络中每个当前节点,在确定所述当前节点列表中未记载有所述目标节点的情况下,拒绝所述目标节点从所述区块链网络中的当前节点同步区块。