【技术实现步骤摘要】
一种轻节点验证区块链状态转移的方法
[0001]本申请涉及区块链安全
,具体涉及一种轻节点验证区块链状态转移的方法。
技术介绍
[0002]区块链系统中的区块数据持续增长,使得作为全节点同步所有区块数据的代价持续加大,例如根据ycharts.com的统计,以太坊的区块数据在过去一年增长超过400G字节。区块数据的来源真实性可以通过交易的签名验证,区块数据的内容完整性可以通过合法出块节点对区块内容的hash签名,以及前后区块的hash衔接验证。虽然上述区块数据的真实性和完整性验证均简便易行,但是如果要验证区块内交易执行导致的状态转移,由于交易执行依赖全局状态提供的上下文信息,现有技术要求同步全部区块数据及全局状态之后,方可在本地执行区块中的交易序列,验证交易序列执行导致的状态迁移结果,进一步才有能力参与共识。随着区块数据和状态的不断膨胀,验证代价的攀高将导致公有链面临共识节点日益中心化风险;另一方面,现有的区块链分片扩容方案,由于分片之间的状态隔离,基于上述约束导致无法进行跨分片的状态转移验证,分片更加容易被恶意节点劫持,伪造恶意的状态转移结果,导致分片内部面临更高的安全风险。
[0003]现有的简单支付验证(SPV:Simple Payment Verification)技术仅仅能够对交易在区块中的存在性进行验证,无法验证区块执行导致的状态转移的正确性,即区块包含的签名交易序列执行的状态转移结果,与区块包含的全局状态梅克尔树根代表的状态的转移是否一致。综上所述,实现轻节点无需同步区块数据及状态,对区块的 ...
【技术保护点】
【技术特征摘要】
1.一种轻节点验证区块链状态转移的方法,其特征在于,该方法包括如下步骤:步骤201、为轻节点集成合约容器,并采用加载验证的状态读写接口Shim API Verify代替的直接读写状态的接口;步骤202、轻节点向全节点请求并获得待验证区块block、区块状态转移证明proof_block;轻节点从proof_block中提取合约证明数组proof_contracts,并逐条验证合约证明数组proof_contracts中的每条合约名、合约代码与对应的全局状态的梅克尔证明是否一致;如果不一致,返回验证失败并结束验证过程;如果一致,使用合约容器加载并执行合约;步骤203、轻节点向全节点请求并获取待验证区块的前一区块的区块头bh_prev,该区块头包含了前一区块的全局状态梅克尔树根mr_prev,设置i为初始序号1,并将签名交易tx_i执行前的全局状态梅克尔树根b_mr_i设置为前一区块的全局状态梅克尔树根mr_prev;步骤204、轻节点按照区块内交易序列顺序逐条加载并执行签名交易tx_i,签名交易中指定了调用的合约名、合约方法名及方法参数,轻节点依据合约方法名加载合约逻辑,传入方法参数执行合约逻辑,合约逻辑执行过程中,用命令模式的状态读写接口执行对区块链状态的读写;步骤205、轻节点比对待验证区块的区块头包含的本区块的全局状态梅克尔树根mr_block与最后一笔交易的梅克尔状态树根e_mr_i是否一致,其中,梅克尔状态树根e_mr_i中i取值为区块包含的交易总数N;如果不一致,返回验证失败并结束验证过程;如果一致返回验证成功并结束验证过程。2.根据权利要求1所述的方法,其特征在于,在步骤204中,所述用命令模式的状态读写接口执行对区块链状态的读写,具体包括:在读取状态时,依据该状态的名称sr_i_j_name,从交易状态转移证明proof_trans中找到对应的状态值sr_i_j_value、该状态的梅克尔证明sr_i_j_proof;轻节点首先对sr_i_j_name、sr_i_j_value、sr_i_j_proof执行梅克尔验证,比对计算结果与b_mr_i是否一致,如果不一致,返回验证失败并结束验证过程;如果一致,用sr_i_j_value作为状态读取的结果,继续合约逻辑执行;在写入状态时,依据该状态的名称sw_i_k_name,从交易状态转移证明proof_trans中找到对应的状态值sw_i_k_value、该状态的梅克尔证明sw_i_k_proof;轻节点首先对sw_i_k_name、sw_i_k_value、sw_i_k_proof执行梅克尔验证,比对计算结果与proof_block中当前交易结束时梅克尔状态树根e_mr_i是否一致,如果不一致,返回验证失败并结束验证过程;如果一致,继续合约逻辑执行。3.根据权利要求2所述的方法,其特征在于,步骤204还包括:当本条交易tx_i正常执行完毕,将执行签名交易tx_i前的区块链全局状态梅克尔树根b_mr_i设置为当前交易结束时的全局状态梅克尔树根e_mr_i,将交易序号i+1,重复执行步骤204直到待验证区块的最后一条交易执行完毕。4.根据权利要求1所述的方法,其特征在于,所述区块状态转移证明proof_block的生成包括如下步骤:步骤101、全节点的合约容器为读写状态的接口Shim API Prove增加状态记录和状态证明生成能力;
步骤102、全节点在部署合约时,将合约名
‑
合约代码通过所述读写状态的接口写入全局状态;步骤103、全节点在执行区块的交易序列前,依据交易调用的合...
【专利技术属性】
技术研发人员:陈胜,蒋步云,
申请(专利权)人:北京连琪科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。