CN109859044A - 一种区块链构造方法 - Google Patents

一种区块链构造方法 Download PDF

Info

Publication number
CN109859044A
CN109859044A CN201910033675.9A CN201910033675A CN109859044A CN 109859044 A CN109859044 A CN 109859044A CN 201910033675 A CN201910033675 A CN 201910033675A CN 109859044 A CN109859044 A CN 109859044A
Authority
CN
China
Prior art keywords
block chain
generation
nt
bt
chain node
Prior art date
Application number
CN201910033675.9A
Other languages
English (en)
Inventor
田海博
刘鲁
Original Assignee
中山大学
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 中山大学 filed Critical 中山大学
Priority to CN201910033675.9A priority Critical patent/CN109859044A/zh
Publication of CN109859044A publication Critical patent/CN109859044A/zh

Links

Abstract

本发明涉及一种基于有向无环图和权益证明的区块链构造方法,涉及客户端、区块链节点两类逻辑主体。区块链节点把时间划分为不同的世代,在每个世代的开始根据节点权益等信息确定该世代的区块链节点列表,客户端节点通过分布式应用DAPP产生应用消息,封装为净交易NT,并通过网络发送给多个区块链节点;之后区块链节点接收NT,封装为区块链交易BT,并通过网络发给其它区块链节点,当区块链节点接收到BT,形成有向无环图,更新不稳定NT的权重证明,当权重证明超过权重门限后,NT稳定,区块链节点通过合约执行稳定NT所含应用消息,更新NT所属账户的状态。该发明能够并行的确认交易,具有较好的安全性和效率。

Description

一种区块链构造方法

技术领域

本发明涉及信息安全领域,特别是涉及一种区块链的构造方法,该方法基于有向无环图技术和权益证明技术。

背景技术

中本聪提出一种点到点的现金系统,并在2009年公开了源代码。之后,出现了如莱特币、点点币、名字币等密码货币。Gavin在2014年提出对比特币做两个改进:第一个是提供以太坊虚拟机(EVM),用于执行任意用户自定义的代码,实现智能合约;第二个就是把比特币中存放在未花费输出交易(UTXO)中的货币转而和一些状态、代码存放在一个账户下面,即账户模型。IBM开发的Fabric避开以太坊,构造联盟链,在企业中运行。Fabric的特点是不用密码货币,用节点背书。每个参与者身份可以识别。目前在大部分应用中,例如银行、供应链、积分、税务等场景,采用了联盟链的模式。

上述这三种区块链结构依旧采用了以块为单位,把区块链接起来的基本机构。IOTA(希腊字母艾欧塔)项目率先提出取消区块的束缚,采用有向无环图(简称DAG)的结构形成区块链。使用该结构的一个好处在于先提交的交易可以优先处理,无需等待一个区块形成后再确认,潜在的可以提高交易的处理速度。然而IOTA项目基于节点挖矿获得的小权重,依赖诚实节点的交易速度,在安全性上存疑。后续的Byteball项目采用了见证节点,优化了有向无环图(DAG)中各个节点的功能,希望能够提供更好的处理速度。然而这种思路之下的见证节点成了集中化的节点,具有信任集中的趋势。

发明内容

本发明意在提供一种新的区块链构造方法,以各个节点的权益值作为节点维护区块链的基本动力和信任源泉,为有意愿维护区块链且权益较高的用户分配非零权重,并分析有向无环图(DAG)中每个交易被引用的权重分布情况,当权重超过权重门限后判定交易稳定。本发明通过动态的权益分布和固定的活动区块链节点数目的限制形成动态的活动区块链节点,解决背景技术中信任集中的问题;通过识别权重来源,限制活动区块链节点对每个交易的有效引用来解决背景技术中依赖交易速度,安全性存疑的问题。

为实现上述目的,本发明给出以下方法:

1、本发明包括客户端节点、区块链节点两类逻辑节点。一台计算设备可以同时充当客户端节点和区块链节点。所述区块链节点划分为三类:用于发出区块链交易BT的活动区块链节点、不发出区块链交易BT但准备成为活动区块链节点的准区块链节点、和不发出区块链交易也不准备成为活动区块链节点的静默区块链节点;其中,客户端节点包含网络模块、净交易NT模块和分布式应用DAPP模块;区块链节点包含网络模块、NT/BT模块、节点管理模块、合约模块、状态数据库模块、交易数据库/缓存模块;其中符号“/”表示和的关系;预付权益数是客户端节点为此次处理NT预付的权益的数量;权益是客户端节点的资产,以整数的形式存储在客户端节点的公钥所指向的账户中,该账户存储在区块链节点的状态数据库中;

所述网络模块完成网络通信的功能;

所述NT模块封装DAPP的应用消息、生成NT;

所述DAPP模块提供面向用户的应用;

所述净交易NT是客户端节点向区块链节点发送的内容,至少包括应用消息、预付权益数、NT的生成时间、客户端节点的计数器、客户端节点的公钥、客户端的数字签名等;

所述状态数据库模块用于存储所有账户的权益、计数器等状态;

所述NT/BT模块用于解析并封装NT、生成BT;

所述区块链交易BT是一个活动区块链节点向其它区块链节点发出的内容,至少包括NT、 2个或多个其它BT的哈希值、该区块链节点的公钥、区块链交易的生成时间,该区块链节点的计数器,该区块链节点的数字签名等;

所述节点管理模块用于改变区块链节点的类别,从静默区块链节点成为准区块链节点,从准区块链节点成为活动区块链节点;

合约模块用于执行净交易及其中的应用消息,改变状态数据库中账户的内容;合约变量是在区块链节点的合约模块使用的参数;

所述交易数据库/缓存模块用于缓存BT和存储BT;

所述方法包含如下步骤:

S1)区块链节点把时间按照时间周期T划分为不同的时间段,每个时间段称为世代,T 是一个大于0的实数;把最开始的时间段作为第一个世代,称为世代0;接下来的第二个世代称为世代1,以此类推;第i+1个世代表示为世代i,i为大于等于1的正整数;

在每个世代开始的时间点确定该世代的所有活动区块链节点并形成该世代的活动区块链节点列表,每个世代的活动区块链节点列表的长度有固定的上限NC,所述NC表示一个正整数;

区块链节点还在除第一个世代外的每个世代开始的时间点确定该世代之前形成的状态数据库的默克尔根;

S2)客户端节点通过DAPP产生应用消息,并通过NT封装应用消息,发送NT给多个当前世代的活动区块链节点;当前世代的活动区块链节点接收NT,判断NT的合法性;如果合法就封装为BT,插入本地的交易数据库,并经由网络发给当前其它区块链节点;发送NT 的时间点所在的世代称为当前世代;

S3)区块链节点接收BT,验证BT的合法性,验证不通过放弃处理该BT;否则通过交易数据库和缓存形成区块链交易的有向无环图,采用发送BT的区块链节点的权重来更新其包含的不稳定NT和其直接、间接引用的BT所包含的不稳定NT的权重证明;当权重证明超过权重门限后,NT稳定;

权重是活动区块链节点的一个属性值,该值为大于等于0的整数。权重门限是一个实数,具体取值是所有活动区块链节点权重之和与一个安全参数的乘积。安全参数是一个实数,取值范围大于等于0,小于等于1。权重证明是一个正整数,是NT在区块链节点的一个属性。不稳定的NT是权重证明没有超过权重门限的NT。BT中包含2个或多个其它BT的哈希值,这些哈希值的原像是BT直接引用的BT。BT之间的直接引用关系在部分BT中建立了严格偏序关系,BT大于其直接引用的BT。任意给定一个BT,在与其具有严格偏序关系的BT集合中,除了该BT直接引用的BT外,所有小于该BT的BT都称为该BT的间接引用BT。对于所有BT而言,具有偏序关系的最小的一个BT称为创世交易,包含世代开始的时间点、世代 0的区块链节点列表、默认状态数据库的默克尔根等信息;

S4)区块链节点通过合约模块执行稳定的NT,更新该NT所含公钥对应账户的状态,更新根据合约代码授权更改的账户状态。

2、在每个世代开始的时间点确定该世代的所有活动区块链节点并形成该世代的活动区块链节点列表。对于任意的世代i,在世代i开始的时间点,把世代i-1的准区块链节点列表中前NC个准区块链节点拷贝到世代i的活动区块链节点列表中,作为世代i的活动区块链节点列表;

所述世代i-1的准区块链节点列表由世代i-1的活动区块链节点列表和世代i-1的所有准区块链节点决定,准区块链节点列表的长度大于NC,至少是2倍NC的大小;

所述世代i-1的准区块链节点列表首先包含世代i-1的活动区块链节点列表,其次,在世代i-1,每个区块链节点都能通过节点管理模块生成NT,并封装为BT发送给其它区块链节点;在世代i-1,每个区块链节点接收到BT后,如果其封装的NT是节点管理模块发送的,且应用消息部分包含该BT所属账户的节点标识,且世代i-1的准区块链节点列表未满或者满足准入条件,就将该BT所属账户的节点标识放入准区块链节点列表中,否则如果该BT是活动区块链节点发送的,且应用消息部分为空,则将该活动区块链节点的节点标识从准区块链节点列表中移除;

所述节点标识是一个可以路由的标识,任意节点都可以通过某个节点的节点标识向该节点发送消息;

所述准入条件首先是按照区块链节点的权益排序,权益大的区块链节点优先,其次在权益相同时,按照做为活动区块链节点的世代数量排序,充当活动区块链节点的世代数量大的区块链节点优先,最后按照节点标识的哈希值排序,哈希值看作一个大整数,数值小的优先;

所述准区块链节点列表中的节点按照准入条件排序。

3、区块链节点还在除第一个世代外的每个世代开始的时间点确定该世代之前形成的状态数据库的默克尔根。对于第一个世代,世代0,状态数据库的默克尔根是创世交易所包含的默认状态数据库的默克尔根;

对于世代1到世代D-1的世代,在世代开始的时间点确定该世代之前形成的状态数据库的默克尔根依旧是创世交易所包含的默认状态数据库的默克尔根,其中符号D是一个正整数, D的取值使得D*T大于等于下述两个时间的和:一个是NT稳定所需的时间,一个是执行NT 及其包含的应用消息所需的时间;

对于世代D及其后续的世代,默克尔根计算时,默克尔树的叶子节点的数据来自状态数据库中的稳定状态;

所述稳定状态是,如果某个NT的生成时间所在的世代为世代i,则在世代D+i开始的时间点把该NT产生的状态做为稳定状态,其中“NT的生成时间所在的世代为世代i”的判断方法是NT的生成时间大于世代i的开始时间点,小于等于世代i+1的开始时间点。

4、客户端节点通过DAPP产生应用消息,并通过NT封装应用消息,发送NT给多个当前世代的活动区块链节点。如果客户端没有当前世代的活动区块链节点列表,从区块链启动节点中随机选择一个或多个节点,建立安全连接,获得当前世代的活动区块链节点列表;

所述区块链启动节点是写入客户端软件中的系列区块链节点,这些节点向客户端提供当前区块链节点列表;

客户端用符号NL表示当前世代的区块链节点列表实际包含的区块链节点数量,NL是一个正整数,小于等于NC;

客户端选择安全参数α>0.5,随机选择个活动区块链节点,将NT发送给所选择的每一个活动区块链节点,其中符号表示大于等于αNL的最小整数;

如果发送NT后,客户端接收到的响应消息的数量小于个,则从活动区块链节点列表中未曾选择的活动区块链节点中再随机选择至少1个,发送NT,直到响应的活动区块链节点总数目大于等于(2α-1)NL个,其中符号表示小于等于(2α-1)NL的最大整数。

5、当前世代的活动区块链节点接收NT,判断NT的合法性;如果合法就封装为BT,插入本地的交易数据库,并经由网络发给当前其它区块链节点。活动区块链节点接收到NT后,验证NT的生成时间与本地时间相差小于一个固定值DT0,验证不通过则退出,其中符号DT0代表一个大于0的实数,如果验证通过则活动区块链节点使用NT的公钥验证NT的数字签名,验证不通过则退出;如果验证通过则活动区块链节点使用NT的公钥从状态数据库中读取该公钥对应的账户状态,获取该账户的计数器和权益状态,如果获取失败则退出;如果验证通过则活动区块链节点验证上述账户的计数器值与接收到的NT包含的计数器的值相等,并且上述账户的权益大于等于接收到的NT包含的预付权益数,验证失败则退出;如果验证通过活动区块链节点判断NT合法,继续把状态数据库中上述账户的计数器加1,并冻结账户数目为预付权益数的权益,把NT封装为BT;

活动区块链节点封装的BT除了包括NT、2个或多个末端BT的哈希值、该区块链节点的公钥、BT的生成时间,该区块链节点的计数器,该区块链节点的数字签名等信息外,还包括默克尔根,该默克尔根是BT的生成时间所在的世代开始的时间点确定的,其中BT的生成时间在某个世代的判断条件是大于该世代的开始时间,小于等于下一世代的开始时间;

所述末端BT指活动区块链节点的交易数据库中所有BT形成的有向无环图中处于末端,未曾被其它BT引用的BT;

如果末端BT的数量小于等于1,则引用本地被引用次数最小的BT。

活动区块链节点封装BT后,区块链节点将其插入本地的交易数据库;

活动区块链节点经由网络将BT发给其它区块链节点;

活动区块链节点向客户端返回附有该活动区块链节点数字签名的响应,确认NT已经被接收。

6、区块链节点接收BT,验证BT的合法性,验证不通过放弃处理该BT。区块链节点接收到BT之后,验证BT的生成时间与本地时间的差值小于一个固定值DT1,验证不通过则退出,其中符号DT1代表一个大于0的实数;

如果BT所含公钥对应的区块链节点不在当前活动区块链节点列表中,就停止处理该BT;否则用BT所含的公钥验证BT的数字签名,验证不通过则退出;

如果验证通过则使用BT所含的公钥从状态数据库中读取该公钥对应的账户状态,获取该账户的计数器,如果该计数器与BT所含计数器不一致,则退出;如果验证通过该计数器加1,之后验证BT所含的默克尔根,如果该值与BT生成时所在世代的默克尔根不一致,就将该BT所含公钥放入一个异常集合,如果异常集合的数量大于个就启动默克尔根矫正机制,其中β≥0.5是该区块链节点的安全参数,NL是当前区块链节点列表中活动区块链节点的数量;

否则继续执行,使用该BT所属账户的权重更新该BT所包含的不稳定NT的权重证明;

之后检查BT所引用的末端BT是否都在交易数据库中,如果不是,则该BT放入缓存,否则把该BT放入交易数据库。

7、默克尔根矫正机制的步骤包括:如果触发默克尔根矫正机制的异常集合中,BT所处的最早的世代为世代i,那么活动区块链节点的节点管理模块把i-D世代开始到世代i所处理的所有NT的所有哈希值打包为一个NT,称之为矫正NT,并封装该矫正NT为BT,之后经由网络发送到其它区块链节点;其中符号D是一个正整数,D的取值使得D*T大于等于下述两个时间的和:一个是NT稳定所需的时间,一个是执行NT及其包含的应用消息所需的时间;

每个活动区块链节点接收到矫正NT后,通过该节点的节点管理模块构造相应世代的矫正NT,并向其它区块链节点发送矫正NT;

当一个区块链节点接收到所有其它活动区块链节点的矫正NT,或者超过了一个最大的网络延迟时间后,该区块链节点对这D个世代的NT进行多数判决,即如果大于等于100β%个世代i的活动区块链节点都有某个NT,则保留该NT,其中β是区块链节点的安全参数,是一个大于0小于1的实数;

判决完成后,如果某个区块链节点缺少某些NT,则向其它活动区块链节点发起请求,获取这些NT;

之后,从i-D世代开始时的状态开始,重新计算D个世代的状态;

被更新的状态做为i-D世代开始的D个世代的被矫正状态,保留在状态数据库中;

在状态更新过程中,如果存在某个账户生成了两个或两个以上的NT,且这些NT中包含相同的计数器,则停止执行该账户从i-D世代开始到当前世代的所有NT,并将其列入一个待观察账户名单中,该名单中的账户为存疑账户;

如果某个账户已经在待观察账户名单中,将把该账户的权益平分给当前区块链节点,并清空该账户的状态。

8、区块链节点通过交易数据库和缓存形成区块链交易的有向无环图。当区块链节点的交易数据库收到新的BT时,扫描缓存中的BT;如果缓存中的某个BT所引用的末端BT都在交易数据库中,则把该BT从缓存移动至交易数据库;交易数据中的交易根据直接引用关系,以BT为顶点,以直接引用为边,形成有向无环图;采用发送BT的区块链节点的权重来更新其包含的不稳定NT和其直接、间接引用的BT所包含的不稳定NT的权重证明;当权重证明超过权重门限后,NT稳定。

9、区块链节点采用发送BT的区块链节点的权重来更新其包含的不稳定NT和其直接、间接引用的BT所包含的不稳定NT的权重证明。每一个不稳定NT都记录更新过其权重证明的BT所含的公钥;

当BT触发某个不稳定NT更新其权重证明时,NT会首先检查该BT所属公钥是否已经记录过,如果是,则放弃更新;

否则更新权重证明,所述更新权重证明是把权重证明的数字加上发送BT的活动区块链节点的权重。

当权重证明超过权重门限后,净交易稳定。所有活动区块链节点的权重可以相同,例如均设为1,也可以不同,按照各自的权益比例设置。更新权重证明是把权重证明的数字加上发送BT的区块链节点的权重。

10、区块链节点通过合约模块执行稳定的NT,更新该NT所含公钥对应账户的状态,更新根据合约代码授权更改的账户状态。区块链节点通过合约模块解析稳定的NT,执行稳定的 NT所含的应用消息,更新NT所含公钥对应的账户状态,更新根据合约代码授权更改的账户状态;

在合约模块执行时会不断减少NT所含公钥对应账户的冻结权益值,当冻结权益为0且合约未执行完毕时,异常退出;

否则按照实际的开销减少冻结权益,并解冻权益余额给NT所含公钥对应的账户;

NT执行后,所消耗的冻结权益转入包含该NT的BT所含公钥对应的账户中,如果存在多个BT包含该NT,则将所消耗的冻结权益按照BT的数量均分,或者按照BT所含公钥对应账户的权益比例划分。

附图说明

图1一种区块链构造方法;

图2客户端节点

图3区块链节点

具体实施方式

本发明根据应用场景的不同,可以实现公链和联盟链,两个场景下区块链节点之间的信任关系不同,设置的参数不同,性能和安全性之间会有一个平衡。

为了陈述的方便,我们把本发明中可调整的参数列举如下:

1)客户端节点通过净交易(NT)封装应用消息后,发送给至少两个区块链节点,我们用符号NS代表一个正整数,表示实际发送给区块链节点的数量,NS≥2;

2)世代的时间周期是一个实数T,单位为秒;

3)区块链节点的上限确定为一个正整数常数NC;

4)NT的稳定状态与一个正整数D相关;

5)NL表示某个世代所有的活动区块链节点的数量;

6)客户端的安全参数α;

7)区块链节点的安全参数β;

8)区块链节点形成的区块链交易(BT)中包含2个或多个末端区块链交易(BT)的哈希值,我们用符号NR代表一个正整数,表示区块链交易(BT)中实际包含的末端交易的数量;

9)在判断区块链交易和净交易的生成时间是否异常时,需要两个常数参数,分别用符号 DT0和DT1标识;

10)最大的网络延迟表示为DL秒。

实施例1

1、本实施例是一个公链场景,设置NS=2,T=60,NC=10,D=2,NL=NC,α=0.6,β=0.6, NR=2,DT0=DT1=3,设置网络为P2P(点到点)网络,DL=3秒。

1)本实施例中每个计算设备同时充当客户端节点和区块链节点,计算设备的数量远大于 10。每个计算设备包括本发明中明确的各个模块。每台计算设备的用户通过以太坊等链外平台完成原始权益的分配,并映射到本实施例中,存储在状态数据库各自的账户下。

公链的总权益数包含在创世交易中,该创世交易还包括默认的全0默克尔根,世代0的活动区块链节点列表,世代的开始时间,周期等信息。

区块链节点运行起来后,根据创世交易中世代的开始时间和周期信息自动在本地计算所在的世代,并进行世代更迭。如果发现本地的交易数据库中缺少从创世交易到达当前世代的交易,则从其它区块链节点中获取缺失的BT,并更新状态数据库、活动区块链节点列表等信息。

区块链节点与其它区块链节点同步交易数据库后,在一个新的世代开始的时间点,区块链节点确定该世代的所有活动区块链节点并形成该世代的活动区块链节点列表和状态数据库的默克尔根。

2)客户端节点通过DAPP产生应用消息,并通过NT封装应用消息,发送NT给多个当前世代的活动区块链节点。当前世代的活动区块链节点接收NT,判断NT的合法性。如果合法就封装为BT。插入本地的交易数据库,并经由网络发给当前其它区块链节点。

3)区块链节点接收BT,验证BT的合法性,验证不通过放弃处理该BT。否则通过交易数据库和缓存形成区块链交易的有向无环图。设置发送BT的区块链节点的权重为1。采用发送BT的区块链节点的权重来更新其包含的不稳定NT和其直接、间接引用的BT所包含的不稳定NT的权重证明。当权重证明超过权重门限6后,NT稳定。

4)区块链节点通过合约模块执行稳定的NT,更新该NT所含公钥对应账户的状态,更新根据合约代码授权更改的账户状态。

2、在每个世代开始的时间点确定该世代的所有活动区块链节点并形成该世代的活动区块链节点列表。对于任意的世代i,在世代i开始的时间点,把世代i-1的准区块链节点列表中前NC个准区块链节点拷贝到世代i的活动区块链节点列表中,作为世代i的活动区块链节点列表。准区块链节点列表的长度是20。

世代i-1的准区块链节点列表首先包含世代i-1的活动区块链节点列表,其次,在世代i-1,每个区块链节点都能通过节点管理模块生成NT,并封装为BT发送给其它区块链节点;在世代i-1,每个区块链节点接收到BT后,如果其封装的NT是节点管理模块发送的,且应用消息部分包含该BT所属账户的节点标识,且世代i-1的准区块链节点列表未满或者满足准入条件,就将该BT所属账户的节点标识放入准区块链节点列表中,否则如果该BT是活动区块链节点发送的,且应用消息部分为空,则将该活动区块链节点的节点标识从准区块链节点列表中移除。

3、对于世代0、世代1,在世代开始的时间点确定的该世代的状态数据库的默克尔根为全0。对于大于1的世代,默克尔根计算时,默克尔树的叶子节点的数据来自状态数据库中的稳定状态,例如把世代2的状态数据库的默克尔根计算为世代0接收到的NT所形成的状态数据库,一般来看,如果某个NT的生成时间所在的世代为世代i,则在世代2+i开始的时间点把该NT产生的状态做为稳定状态。

4、客户端节点通过DAPP产生应用消息,并通过NT封装应用消息,发送NT给2当前世代的活动区块链节点。如果客户端没有当前世代的活动区块链节点列表,从区块链启动节点中随机选择1个节点,建立安全连接,获得当前世代的活动区块链节点列表;客户端随机选择6个活动区块链节点,将NT发送给所选择的每一个活动区块链节点。

如果发送NT后,客户端接收到的响应消息的数量小于2个,则从活动区块链节点列表中未曾选择的活动区块链节点中再随机选择至少1个,发送NT,直到响应的活动区块链节点总数目大于等于2个。

5、当前世代的活动区块链节点接收NT,判断NT的合法性;如果合法就封装为BT,插入本地的交易数据库,并经由网络发给当前其它区块链节点。活动区块链节点接收到NT后,验证NT的生成时间与本地时间相差小于一个固定值1,验证不通过则退出。如果验证通过则活动区块链节点使用NT的公钥验证NT的数字签名,验证不通过则退出。如果验证通过则活动区块链节点使用NT的公钥从状态数据库中读取该公钥对应的账户状态,获取该账户的计数器和权益状态,如果获取失败则退出。如果验证通过则活动区块链节点验证上述账户的计数器值与接收到的NT包含的计数器的值相等,并且上述账户的权益大于等于接收到的NT包含的预付权益数,验证失败则退出。如果验证通过活动区块链节点判断NT合法,继续把状态数据库中上述账户的计数器加1,并冻结账户数目为预付权益数的权益,把NT封装为 BT。封装过程中,如果末端BT的数量小于等于1,则引用本地被引用次数最小的BT。活动区块链节点封装BT后,区块链节点将其插入本地的交易数据库,之后经由网络将BT发给其它区块链节点,之后向客户端返回附有该活动区块链节点数字签名的响应,确认NT已经被接收。

6、区块链节点接收BT,验证BT的合法性,验证不通过放弃处理该BT。区块链节点接收到BT之后,验证BT的生成时间与本地时间的差值小于一个固定值1,验证不通过则退出。如果BT所含公钥对应的区块链节点不在当前活动区块链节点列表中,就停止处理该BT;否则用BT所含的公钥验证BT的数字签名,验证不通过则退出;如果验证通过则使用BT所含的公钥从状态数据库中读取该公钥对应的账户状态,获取该账户的计数器,如果该计数器与BT所含计数器不一致,则退出;如果验证通过该计数器加1,之后验证BT所含的默克尔根,如果该值与BT生成时所在世代的默克尔根不一致,就将该BT所含公钥放入一个异常集合,如果异常集合的数量大于4个就启动默克尔根矫正机制,否则继续执行,使用该BT所属账户的权重更新该BT所包含的不稳定NT的权重证明,之后检查BT所引用的末端BT是否都在交易数据库中,如果不是,则该BT放入缓存,否则把该BT放入交易数据库。

7、如果触发默克尔根矫正机制的异常集合中,BT所处的最早的世代为世代i,那么活动区块链节点的节点管理模块把i-2世代开始到世代i所处理的所有NT的所有哈希值打包为一个矫正NT,并封装该矫正NT为BT,之后经由网络发送到其它区块链节点。每个活动区块链节点接收到矫正NT后,通过该节点的节点管理模块构造相应世代的矫正NT,并向其它区块链节点发送矫正NT。当一个区块链节点接收到所有其它活动区块链节点的矫正NT(非活动区块链节点收到10个,活动区块链节点收到9个),或者超过了3秒后,该区块链节点对这2个世代的NT进行多数判决,即如果大于等于6个世代i的活动区块链节点都有某个NT,则保留该NT。判决完成后,如果某个区块链节点缺少某些NT,则向其它活动区块链节点发起请求,获取这些NT。之后,从i-2世代开始时的状态开始,重新计算2个世代的状态。被更新的状态做为i-2世代开始的2个世代的被矫正状态,保留在状态数据库中。

在状态更新过程中,如果存在某个账户生成了两个或两个以上的NT,且这些NT中包含相同的计数器,则停止执行该账户从i-2世代开始到当前世代的所有NT,并将其列入一个待观察账户名单中,该名单中的账户为存疑账户。如果某个账户已经在待观察账户名单中,将把该账户的权益平分给当前区块链节点,并清空该账户的状态。

8、区块链节点通过交易数据库和缓存形成区块链交易的有向无环图。当区块链节点的交易数据库收到新的BT时,扫描缓存中的BT;如果缓存中的某个BT所引用的末端BT都在交易数据库中,则把该BT从缓存移动至交易数据库;交易数据中的交易根据直接引用关系,以BT为顶点,以直接引用为边,形成有向无环图;采用发送BT的区块链节点的权重来更新其包含的不稳定NT和其直接、间接引用的BT所包含的不稳定NT的权重证明;当权重证明超过权重门限后,NT稳定。

9、区块链节点采用发送BT的区块链节点的权重来更新其包含的不稳定NT和其直接、间接引用的BT所包含的不稳定NT的权重证明。每一个不稳定NT都记录更新过其权重证明的BT所含的公钥;当BT触发某个不稳定NT更新其权重证明时,NT会首先检查该BT所属公钥是否已经记录过,如果是,则放弃更新;否则更新权重证明,所述更新权重证明是把权重证明的数字加上发送BT的活动区块链节点的权重,即权重证明的数字加1。

当权重证明超过6后,净交易稳定。

10、区块链节点通过合约模块执行稳定的NT,更新该NT所含公钥对应账户的状态,更新根据合约代码授权更改的账户状态。区块链节点通过合约模块解析稳定的NT,执行稳定的 NT所含的应用消息,更新NT所含公钥对应的账户状态,更新根据合约代码授权更改的账户状态。在合约模块执行时会不断减少NT所含公钥对应账户的冻结权益值,当冻结权益为0 且合约未执行完毕时,异常退出。否则按照实际的开销减少冻结权益,并解冻权益余额给NT 所含公钥对应的账户。NT执行后,所消耗的冻结权益转入包含该NT的BT所含公钥对应的账户中,如果存在多个BT包含该NT,则将所消耗的冻结权益按照BT的数量均分。

实施例2:

本实施例是一个联盟链场景,设置NS=2,T=360,NC=10,D=2,NL=NC,α=0.9,β=0.9, NR=2,DT0=DT1=1,设置网络为多播组实现的多播网络,DL=1秒。我们设置T=360是因为联盟链场景下的基本假设是节点偶尔会出故障,区块链节点列表变化缓慢。

实施例2与实施例1在执行流程是相同的,唯一的不同在于具体参数上使用上述设定的参数,各个实施步骤中与具体参数相关的数值会发生对应的变化。

实施例3:

本实施例采用公链的参数设置,执行流程与实施例1是相同的,不同之处在于,当前活动区块链列表中节点的权重是一个与节点权益成比例的数值,等于节点权益;客户端在选择活动区块链节点发送NT时,如果知道各个节点的权益,则按照权益的顺序选择,否则随机选择;权重门限等于当前活动区块链节点的总权益与安全参数α的乘积。

Claims (10)

1.一种区块链构造方法,包括客户端节点、区块链节点两类逻辑节点,所述区块链节点划分为三类:用于发出区块链交易BT的活动区块链节点、不发出区块链交易BT但准备成为活动区块链节点的准区块链节点、和不发出区块链交易也不准备成为活动区块链节点的静默区块链节点;其中,客户端节点包含网络模块、净交易NT模块和分布式应用DAPP模块;区块链节点包含网络模块、NT/BT模块、节点管理模块、合约模块、状态数据库模块、交易数据库/缓存模块;
所述网络模块完成网络通信的功能;
所述NT模块封装DAPP的应用消息、生成NT;
所述DAPP模块提供面向用户的应用;
所述净交易NT是客户端节点向区块链节点发送的内容,至少包括应用消息、预付权益数、NT的生成时间、客户端节点的计数器、客户端节点的公钥、客户端的数字签名等;
所述状态数据库模块用于存储所有账户的权益、计数器等状态;
所述NT/BT模块用于解析并封装NT、生成BT;
所述区块链交易BT是一个活动区块链节点向其它区块链节点发出的内容,至少包括NT、2个或多个其它BT的哈希值、该区块链节点的公钥、区块链交易的生成时间,该区块链节点的计数器,该区块链节点的数字签名等;
所述节点管理模块用于改变区块链节点的类别,从静默区块链节点成为准区块链节点,从准区块链节点成为活动区块链节点;
合约模块用于执行净交易及其中的应用消息,改变状态数据库中账户的内容;合约变量是在区块链节点的合约模块使用的参数;
所述交易数据库/缓存模块用于缓存BT和存储BT;
所述方法包含如下步骤:
S1)区块链节点把时间按照时间周期T划分为不同的时间段,每个时间段称为世代,T是一个大于0的实数;把最开始的时间段作为第一个世代,称为世代0;接下来的第二个世代称为世代1,以此类推;第i+1个世代表示为世代i,i为大于等于1的正整数;
在每个世代开始的时间点确定该世代的所有活动区块链节点并形成该世代的活动区块链节点列表,每个世代的活动区块链节点列表的长度有固定的上限NC,所述NC表示一个正整数;
区块链节点还在除第一个世代外的每个世代开始的时间点确定该世代之前形成的状态数据库的默克尔根;
S2)客户端节点通过DAPP产生应用消息,并通过NT封装应用消息,发送NT给多个当前世代的活动区块链节点;当前世代的活动区块链节点接收NT,判断NT的合法性;如果合法就封装为BT,插入本地的交易数据库,并经由网络发给当前其它区块链节点;
S3)区块链节点接收BT,验证BT的合法性,验证不通过放弃处理该BT;否则通过交易数据库和缓存形成区块链交易的有向无环图,采用发送BT的区块链节点的权重来更新其包含的不稳定NT和其直接、间接引用的BT所包含的不稳定NT的权重证明;当权重证明超过权重门限后,NT稳定;
S4)区块链节点通过合约模块执行稳定的NT,更新该NT所含公钥对应账户的状态,更新根据合约代码授权更改的账户状态。
2.根据权利要求1所述的一种区块链构造方法,其特征在于:“在每个世代开始的时间点确定该世代的所有活动区块链节点并形成该世代的活动区块链节点列表”的具体步骤为:
对于任意的世代i,在世代i开始的时间点,把世代i-1的准区块链节点列表中前NC个准区块链节点拷贝到世代i的活动区块链节点列表中,作为世代i的活动区块链节点列表;
所述世代i-1的准区块链节点列表由世代i-1的活动区块链节点列表和世代i-1的所有准区块链节点决定,准区块链节点列表的长度大于NC,至少是2倍NC的大小;
所述世代i-1的准区块链节点列表首先包含世代i-1的活动区块链节点列表,其次,在世代i-1,每个区块链节点都能通过节点管理模块生成NT,并封装为BT发送给其它区块链节点;在世代i-1,每个区块链节点接收到BT后,如果其封装的NT是节点管理模块发送的,且应用消息部分包含该BT所属账户的节点标识,且世代i-1的准区块链节点列表未满或者满足准入条件,就将该BT所属账户的节点标识放入准区块链节点列表中,否则如果该BT是活动区块链节点发送的,且应用消息部分为空,则将该活动区块链节点的节点标识从准区块链节点列表中移除;
所述节点标识是一个可以路由的标识,任意节点都可以通过某个节点的节点标识向该节点发送消息;
所述准入条件首先是按照区块链节点的权益排序,权益大的区块链节点优先,其次在权益相同时,按照做为活动区块链节点的世代数量排序,充当活动区块链节点的世代数量大的区块链节点优先,最后按照节点标识的哈希值排序,哈希值看作一个大整数,数值小的优先;
所述准区块链节点列表中的节点按照准入条件排序。
3.根据权利要求1所述的一种区块链构造方法,其特征在于:“区块链节点还在除第一个世代外的每个世代开始的时间点确定该世代之前形成的状态数据库的默克尔根”的具体步骤为:
对于第一个世代,世代0,状态数据库的默克尔根是创世交易所包含的默认状态数据库的默克尔根;
对于世代1到世代D-1的世代,在世代开始的时间点确定该世代之前形成的状态数据库的默克尔根依旧是创世交易所包含的默认状态数据库的默克尔根,其中符号D是一个正整数,D的取值使得D*T大于等于下述两个时间的和:一个是NT稳定所需的时间,一个是执行NT及其包含的应用消息所需的时间;
对于世代D及其后续的世代,默克尔根计算时,默克尔树的叶子节点的数据来自状态数据库中的稳定状态;
所述稳定状态是,如果某个NT的生成时间所在的世代为世代i,则在世代D+i开始的时间点把该NT产生的状态做为稳定状态,其中“NT的生成时间所在的世代为世代i”的判断方法是NT的生成时间大于世代i的开始时间点,小于等于世代i+1的开始时间点。
4.根据权利要求1所述的一种区块链构造方法,其特征在于:“客户端节点通过DAPP产生应用消息,并通过NT封装应用消息,发送NT给多个当前世代的活动区块链节点”的具体步骤为:
如果客户端没有当前世代的活动区块链节点列表,从区块链启动节点中随机选择一个或多个节点,建立安全连接,获得当前世代的活动区块链节点列表;
所述区块链启动节点是写入客户端软件中的系列区块链节点,这些节点向客户端提供当前区块链节点列表;
客户端用符号NL表示当前世代的区块链节点列表实际包含的区块链节点数量,NL是一个正整数,小于等于NC;
客户端选择安全参数α>0.5,随机选择个活动区块链节点,将NT发送给所选择的每一个活动区块链节点,其中符号表示大于等于αNL的最小整数;
如果发送NT后,客户端接收到的响应消息的数量小于个,则从活动区块链节点列表中未曾选择的活动区块链节点中再随机选择至少1个,发送NT,直到响应的活动区块链节点总数目大于等于(2α-1)NL个,其中符号表示小于等于(2α-1)NL的最大整数。
5.根据权利要求1所述的一种区块链构造方法,其特征在于:“当前世代的活动区块链节点接收NT,判断NT的合法性;如果合法就封装为BT,插入本地的交易数据库,并经由网络发给当前其它区块链节点”的具体步骤为:
活动区块链节点接收到NT后,验证NT的生成时间与本地时间相差小于一个固定值DT0,验证不通过则退出,其中符号DT0代表一个大于0的实数,如果验证通过则活动区块链节点使用NT的公钥验证NT的数字签名,验证不通过则退出;如果验证通过则活动区块链节点使用NT的公钥从状态数据库中读取该公钥对应的账户状态,获取该账户的计数器和权益状态,如果获取失败则退出;如果验证通过则活动区块链节点验证上述账户的计数器值与接收到的NT包含的计数器的值相等,并且上述账户的权益大于等于接收到的NT包含的预付权益数,验证失败则退出;如果验证通过活动区块链节点判断NT合法,继续把状态数据库中上述账户的计数器加1,并冻结账户数目为预付权益数的权益,把NT封装为BT;
活动区块链节点封装的BT除了包括NT、2个或多个末端BT的哈希值、该区块链节点的公钥、BT的生成时间,该区块链节点的计数器,该区块链节点的数字签名等信息外,还包括默克尔根,该默克尔根是BT的生成时间所在的世代开始的时间点确定的,其中BT的生成时间在某个世代的判断条件是大于该世代的开始时间,小于等于下一世代的开始时间;
所述末端BT指活动区块链节点的交易数据库中所有BT形成的有向无环图中处于末端,未曾被其它BT引用的BT;
如果末端BT的数量小于等于1,则引用本地被引用次数最小的BT。
活动区块链节点封装BT后,区块链节点将其插入本地的交易数据库;
活动区块链节点经由网络将BT发给其它区块链节点;
活动区块链节点向客户端返回附有该活动区块链节点数字签名的响应,确认NT已经被接收。
6.根据权利要求1所述的一种区块链构造方法,其特征在于:“区块链节点接收BT,验证BT的合法性,验证不通过放弃处理该BT”的具体步骤为:
区块链节点接收到BT之后,验证BT的生成时间与本地时间的差值小于一个固定值DT1,验证不通过则退出,其中符号DT1代表一个大于0的实数;
如果BT所含公钥对应的区块链节点不在当前活动区块链节点列表中,就停止处理该BT;否则用BT所含的公钥验证BT的数字签名,验证不通过则退出;
如果验证通过则使用BT所含的公钥从状态数据库中读取该公钥对应的账户状态,获取该账户的计数器,如果该计数器与BT所含计数器不一致,则退出;如果验证通过该计数器加1,之后验证BT所含的默克尔根,如果该值与BT生成时所在世代的默克尔根不一致,就将该BT所含公钥放入一个异常集合,如果异常集合的数量大于个就启动默克尔根矫正机制,其中β≥0.5是该区块链节点的安全参数,NL是当前区块链节点列表中活动区块链节点的数量;
否则继续执行,使用该BT所属账户的权重更新该BT所包含的不稳定NT的权重证明;
之后检查BT所引用的末端BT是否都在交易数据库中,如果不是,则该BT放入缓存,否则把该BT放入交易数据库。
7.根据权利要求6所述的一种区块链构造方法,其特征在于:“默克尔根矫正机制”的具体步骤为:
如果触发默克尔根矫正机制的异常集合中,BT所处的最早的世代为世代i,那么活动区块链节点的节点管理模块把i-D世代开始到世代i所处理的所有NT的所有哈希值打包为一个NT,称之为矫正NT,并封装该矫正NT为BT,之后经由网络发送到其它区块链节点;其中符号D是一个正整数,D的取值使得D*T大于等于下述两个时间的和:一个是NT稳定所需的时间,一个是执行NT及其包含的应用消息所需的时间;
每个活动区块链节点接收到矫正NT后,通过该节点的节点管理模块构造相应世代的矫正NT,并向其它区块链节点发送矫正NT;
当一个区块链节点接收到所有其它活动区块链节点的矫正NT,或者超过了一个最大的网络延迟时间后,该区块链节点对这D个世代的NT进行多数判决,即如果大于等于100β%个世代i的活动区块链节点都有某个NT,则保留该NT,其中β是区块链节点的安全参数,是一个大于0小于1的实数;
判决完成后,如果某个区块链节点缺少某些NT,则向其它活动区块链节点发起请求,获取这些NT;
之后,从i-D世代开始时的状态开始,重新计算D个世代的状态;
被更新的状态做为i-D世代开始的D个世代的被矫正状态,保留在状态数据库中;
在状态更新过程中,如果存在某个账户生成了两个或两个以上的NT,且这些NT中包含相同的计数器,则停止执行该账户从i-D世代开始到当前世代的所有NT,并将其列入一个待观察账户名单中,该名单中的账户为存疑账户;
如果某个账户已经在待观察账户名单中,将把该账户的权益平分给当前区块链节点,并清空该账户的状态。
8.根据权利要求1所述的一种区块链构造方法,其特征在于:“否则通过交易数据库和缓存形成区块链交易的有向无环图”的具体步骤为:
当区块链节点的交易数据库收到新的BT时,扫描缓存中的BT;
如果缓存中的某个BT所引用的末端BT都在交易数据库中,则把该BT从缓存移动至交易数据库;
交易数据中的交易根据直接引用关系,以BT为顶点,以直接引用为边,形成有向无环图;
采用发送BT的区块链节点的权重来更新其包含的不稳定NT和其直接、间接引用的BT所包含的不稳定NT的权重证明;当权重证明超过权重门限后,NT稳定。
9.根据权利要求1所述的一种区块链构造方法,其特征在于:“采用发送BT的区块链节点的权重来更新其包含的不稳定NT和其直接、间接引用的BT所包含的不稳定NT的权重证明”的具体步骤为:
每一个不稳定NT都记录更新过其权重证明的BT所含的公钥;
当BT触发某个不稳定NT更新其权重证明时,NT会首先检查该BT所属公钥是否已经记录过,如果是,则放弃更新;
否则更新权重证明;
所述更新权重证明是把权重证明的数字加上发送BT的活动区块链节点的权重。
10.根据权利要求1所述的一种区块链构造方法,其特征在于:“区块链节点通过合约模块执行稳定的NT,更新该NT所含公钥对应账户的状态,更新根据合约代码授权更改的账户状态”的具体步骤为:
区块链节点通过合约模块解析稳定的NT,执行稳定的NT所含的应用消息,更新NT所含公钥对应的账户状态,更新根据合约代码授权更改的账户状态;
在合约模块执行时会不断减少NT所含公钥对应账户的冻结权益值,当冻结权益为0且合约未执行完毕时,异常退出;
否则按照实际的开销减少冻结权益,并解冻权益余额给NT所含公钥对应的账户;
NT执行后,所消耗的冻结权益转入包含该NT的BT所含公钥对应的账户中,如果存在多个BT包含该NT,则将所消耗的冻结权益按照BT的数量均分,或者按照BT所含公钥对应账户的权益比例划分。
CN201910033675.9A 2019-01-15 2019-01-15 一种区块链构造方法 CN109859044A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910033675.9A CN109859044A (zh) 2019-01-15 2019-01-15 一种区块链构造方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910033675.9A CN109859044A (zh) 2019-01-15 2019-01-15 一种区块链构造方法

Publications (1)

Publication Number Publication Date
CN109859044A true CN109859044A (zh) 2019-06-07

Family

ID=66894779

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910033675.9A CN109859044A (zh) 2019-01-15 2019-01-15 一种区块链构造方法

Country Status (1)

Country Link
CN (1) CN109859044A (zh)

Similar Documents

Publication Publication Date Title
Dhamdhere et al. The Internet is flat: modeling the transition from a transit hierarchy to a peering mesh
CN103999430B (zh) 用于软件定义的网络中灵活及可扩展流处理的转发元件
Bentov et al. Snow White: Provably Secure Proofs of Stake.
Di Crescenzo et al. Non-interactive and non-malleable commitment
Gervais et al. On the security and performance of proof of work blockchains
Alur et al. Distinguishing tests for nondeterministic and probabilistic machines
FI106420B (fi) Palvelun ohjaus tietoliikenneverkossa
Peng et al. Congestion influence on bidding strategies in an electricity market
Minsky The imposition of protocols over open distributed systems
Halpern et al. Knowledge, probability, and adversaries
Baird The swirlds hashgraph consensus algorithm: Fair, fast, byzantine fault tolerance
US6088687A (en) Billing procedure and system for data transmission networks
Chen et al. iPass: an incentive compatible auction scheme to enable packet forwarding service in MANET
Nault et al. Eating your own lunch: Protection through preemption
Bano et al. Consensus in the age of blockchains
CN102708073B (zh) 存储装置以及数据处理方法
Natoli et al. The blockchain anomaly
Eyal et al. Bitcoin-ng: A scalable blockchain protocol
EP3257191B1 (en) Registry and automated management method for blockchain-enforced smart contracts
Courcoubetis et al. Markov decision processes and regular events
Sompolinsky et al. Accelerating bitcoin’s transaction processing
Kumaresan et al. How to use bitcoin to play decentralized poker
WO2006103096A2 (de) Rechnernetzwerksystem zum aufbauen,synchronisieren und/oder betreiben einer zweiten datenbank aus/mit einer ersten datenbank sowie vorgehensweisen hierfür
Malavolta et al. Concurrency and privacy with payment-channel networks
CN106534317B (zh) 一种基于区块链技术的灾备云存储系统构建方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination