CN116248287A - 状态数据的提交方法、节点和区块链系统 - Google Patents

状态数据的提交方法、节点和区块链系统 Download PDF

Info

Publication number
CN116248287A
CN116248287A CN202211610741.2A CN202211610741A CN116248287A CN 116248287 A CN116248287 A CN 116248287A CN 202211610741 A CN202211610741 A CN 202211610741A CN 116248287 A CN116248287 A CN 116248287A
Authority
CN
China
Prior art keywords
contract
node
transaction
parameter
transactions
Prior art date
Legal status (The legal status 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 status listed.)
Pending
Application number
CN202211610741.2A
Other languages
English (en)
Inventor
陶友贤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Ant Love Technology Co ltd
Original Assignee
Hangzhou Ant Love Technology Co ltd
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 Hangzhou Ant Love Technology Co ltd filed Critical Hangzhou Ant Love Technology Co ltd
Priority to CN202211610741.2A priority Critical patent/CN116248287A/zh
Publication of CN116248287A publication Critical patent/CN116248287A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/465Distributed object oriented systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1087Peer-to-peer [P2P] networks using cross-functional networking aspects
    • H04L67/1089Hierarchical topologies

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种状态数据的提交方法、节点和区块链系统。所述方法应用于区块链系统中的第一节点,世界状态的状态树的叶子节点包括合约账户节点和多个合约参数节点,所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且合约账户节点与多个合约参数节点的更新互不影响;第一节点中包含控制进程和N个计算进程,所述方法包括:控制进程获取基于多个交易各自的预执行读写集对所述多个交易进行分组得到的M个交易分组;将涉及第一合约的不同合约参数的交易分组分别发送至不同计算进程;第一计算进程执行接收到的涉及任一合约参数的交易分组中的各个交易,并提交获得的任一合约参数的状态值,以更新所述任一合约参数对应的合约参数节点。

Description

状态数据的提交方法、节点和区块链系统
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种状态数据的提交方法、节点和区块链系统。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。用户可以通过区块链节点参与实现区块链的相关事务,例如,区块链系统中分别对应不同用户的多个区块链节点,可以基于同态加密、零知识证明等隐私技术针对某一节点的私有数据进行安全多方计算(Secure Multi-Party Computation,SMPC)。再例如,基于区块链网络可以在不同用户账户之间实现转账;再例如,还可以基于区块链网络发行数字画作、数字头像、GIF等数字藏品对应的NFT(Non-Fungible Token,非同质化代币),以便NFT所承载的数字藏品的所有权能够在区块链网络的用户之间流通,从而产生对应于数字藏品的价值。
发明内容
本发明的目的在于提供一种状态数据的提交方法、节点和区块链系统。
第一方面,提供了一种状态数据的提交方法,应用于区块链系统中的第一节点,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;第一节点中包含控制进程和N个计算进程,所述方法包括:
所述控制进程获取M个交易分组,所述M个交易分组基于多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N均为正整数,所述预执行读写集涉及若干合约参数;
所述控制进程将所述M个交易分组中涉及第一合约的不同合约参数的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程在接收到涉及第一合约中任一合约参数的交易分组的情况下,执行接收到的交易分组中的各个交易,获得所述任一合约参数的状态值并提交,以更新所述任一合约参数在所述状态树中对应的合约参数节点记录的所述任一合约参数的状态值。
第二方面,提供了一种区块链系统中的第一节点,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;第一节点中包含控制进程和N个计算进程,其中:
所述控制进程用于获取M个交易分组,所述M个交易分组基于多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N均为正整数,所述预执行读写集涉及若干合约参数;
所述控制进程用于将所述M个交易分组中涉及第一合约的不同合约参数的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程用于在接收到涉及第一合约中任一合约参数的交易分组的情况下,执行接收到的交易分组中的各个交易,获得所述任一合约参数的状态值并提交,以更新所述任一合约参数在所述状态树中对应的合约参数节点记录的所述任一合约参数的状态值。
第三方面,提供了一种区块链系统,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;所述区块链系统包括第一节点和第二节点,第一节点中包含控制进程和N个计算进程,其中:
第二节点用于向第一节点发送多个交易各自的预执行读写集,所述预执行读写集涉及若干合约参数;
第一节点用于通过所述控制进程获取M个交易分组,所述M个交易分组基于多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N均为正整数,所述预执行读写集涉及若干合约参数;通过所述控制进程将所述M个交易分组中涉及第一合约的不同合约参数的交易分组分别发送至所述N个进程中的不同计;以及,通过第一计算进程在接收到涉及第一合约中任一合约参数的交易分组的情况下,执行接收到的交易分组中的各个交易,获得所述任一合约参数的状态值并提交,以更新所述任一合约参数在所述状态树中对应的合约参数节点记录的所述任一合约参数的状态值。
根据本说明书一个或多个实施例的第四方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面中任一项所述的方法。
根据本说明书一个或多个实施例的第五方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面中任一项所述方法的步骤。
通过上述实施例,第一智能合约中不同合约参数的状态值由状态树中不同的合约参数节点分别记录,而且第一合约对应的合约账户节点及其各个合约参数分别对应的合约参数节点的更新互不影响,从而允许同一合约中不同合约参数的状态值可以被分别更新,互不影响。基于此,分别由不同的计算进程执行涉及第一合约中不同合约参数的交易分组中的交易,不仅使得调用同一智能合约的多个交易可以被不同的计算进程并发执行,从而提升交易的执行效率。而且调用同第一合约的不同交易的执行过程相互独立,两执行过程不会产生针对相同合约参数的状态数据,使得多个计算进程可以并行提交针对同一合约中不同合约参数的状态值,有助于加快包含调用同一合约的多个交易的区块的生成速度。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是一示例性实施例提供的一种区块链系统的示意图。
图2是一示例性实施例提供的一种区块链数据的存储结构示意图。
图3是一示例性实施例提供的一种区块链系统中任意两个节点的结构示意图。
图4是一示例性实施例提供的一种状态数据的提交方法的流程图。
图5是一示例性实施例提供的一种区块链系统中的第一节点的结构示意图。
图6是一示例性实施例提供的一种设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
图1是一示例性实施例提供的一种区块链系统的示意图。如图1所示,区块链系统是通过多个节点(Node)来建立的分布式网络,其包含任意两个节点间通过点对点(Peer-to-Peer,P2P)网络实现在应用层的通信连接,例如其包含的节点n1~节点n5中的任意两个节点间均可通过P2P网络实现在应用层的通信连接。区块链系统利用链式区块结构构造的去中心化(或称为多中心化)的分布式账本,保存于分布式的区块链网络中的每个节点(或大多节点上,如共识节点)上,因此区块链系统需要解决去中心化(或多中心化)的多个节点上各自的账本数据的一致性和正确性的问题。鉴于此,区块链系统的每个节点上都运行着区块链程序,在一定容错需求的设计下,通过共识(consensus)机制保证所有忠诚节点具有相同的交易,从而保证所有忠诚节点对相同交易的执行结果一致,将交易打包成区块并基于相同交易的执行结果更新世界状态。其中当前主流的共识机制包括但不限于:工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、实用拜占庭容错(PracticalByzantine Fault Tolerance,PBFT)算法,蜜獾拜占庭容错(HoneyBadgerBFT)算法等等。
区块链系统中的账户通常被划分为用户账户/外部账户(Externally ownedaccount)和合约账户(contract account)两种类型;其中合约账户用于存储智能合约的合约代码以及相关状态的值,其通常只能通过外部账户进行激活和调用。外部账户和合约账户的设计实际上是账户地址到账户状态的映射。账户状态通常可以包括但不限于Nonce、Balance、Storage_Root、CodeHash等字段,其中Nonce、Balance在外部账户和合约账户中都存在,而CodeHash和Storage_Root属性通常仅在合约账户上有效。前述各个字段中,Nonce表征计数器,对于外部账户而言其取值代表从账户地址发送的交易的数量;对于合约账户而言其取值代表账户创建的智能合约的数量。Balance的取值表征对应的外部账户拥有的数字资源的数量。Storage_Root表征一个MPT(Merkle Patricia Tree)树根节点的哈希,该MPT用于对合约账户的状态变量的存储进行组织。CodeHash表征合约代码的哈希值,对于合约账户而言其是智能合约被哈希计算并存储的代码,对于外部账户而言由于不包括智能合约,因此其可以是空字符串或全0字符串。
MPT是结合了Merkle Tree(默克尔树)和Patricia Tree(压缩前缀树,一种更节省空间的Trie树,字典树)的一种树形结构。Merkle Tree,默克尔树算法对每个交易都计算一个Hash值,然后两两连接再次计算Hash,一直到最顶层的Merkle根。以太坊中采用改进的MPT树,例如是16叉树的结构,通常也简称为MPT树。其中以太坊MPT树的数据结构包括状态树(state trie)。状态树中包含以太坊中每个账户所对应的存储内容的键值对(Key andValue pair)。状态树中的“键(Key)”可以是一个长度为160bit的标识符(如以太坊账户的地址),这个账户地址分布于从状态树的根节点开始到叶子节点的存储中。状态树中的“值(Value)”是通过对以太坊账户的信息进行编码(使用递归长度字典编码(Recursive-Length Prefix encoding,RLP)方法)生成的。如前所述,对于外部账户而言,值可以包括Nonce和Balance;对于合约账户而言,值可以包括Nonce、Balance、CodeHash和Storage_Root等。
合约账户用于存储智能合约相关的状态。智能合约在区块链系统中完成部署后,会被分配一个相应的合约账户。这个合约账户一般会具有一些状态,这些状态由智能合约中状态变量所定义并在智能合约创建、执行过程中产生新的状态值。本说明书所述智能合约通常是指在区块链环境中以数字形式定义的能够自动执行条款的合约。一旦某个事件触发合约中的条款(满足执行条件),代码即可以自动执行。
在相关技术中,对于状态树中的单个合约账户来说,其Storage_Root指向另一棵同为MPT形式的存储树,所述存储树用于存储合约执行涉及的状态变量(state variable)的数据,所述Storage_Root的取值通常为存储树的根节点的hash值。但是,由于同一智能合约的各个合约参数都被记录在该合约对应的存储树中,所以在执行区块链交易产生针对不同合约参数的状态数据(包括合约状态数据和世界状态数据)后,需要先提交合约状态数据以获得合约账户的Storage_Root,再更新状态树中相关合约账号的Storage_Root,然后提交世界状态数据以获得状态树的State_Root。显然,在该方式下,同一智能合约中的不同合约参数的状态值需要顺序更新,而无法并行更新,限制了状态树的更新效率和出块速度。
对此,本说明对上述状态树进行改造,在状态树中创建分别对应于同一智能合约中不同合约参数的合约参数节点,其中任一合约参数节点用于记录相应合约参数的状态值。下面结合附图对该系统及其对应的数据提交方案进行说明。
本说明书所述的区块链系统维护的世界状态对应于状态树。其中,存储树也是一个MPT树形结构,存储了状态地址到状态值的Key-Value映射。从存储树的根节点到叶子节点存储有一个状态的地址,一个叶子节点中存储一个状态的值。智能合约的相关状态即可记录在所述状态树中,具体的,所述状态树的叶子节点中可以包括至少两类节点:合约账户节点和合约参数节点。其中,任一合约账户节点可以用于记录所述区块链系统中部署的一个智能合约的合约账户、合约参数节点可以用于记录任一智能合约中的一个合约参数的状态值。需要说明的是,区块链系统中部署的任一智能合约可以包含一个或多个合约参数,其中任一合约参数可以对应于状态树中的一个合约参数节点;而在该合约包含多个合约参数的情况下,各合约参数可以分别对应于不同的合约参数节点。换言之,区块链系统中所部属智能合约包含的合约参数,可以与状态树中的各个合约参数节点一一对应。通过该方式,可以将任一智能合约中的合约参数单独作为一个叶子节点记录在状态树中,以便后续实现对该合约参数的独立更新,从而便于实现对属于相同或不同智能合约的多个合约参数的并行更新,提升状态树的更新效率。可见,对于本方案所述状态树中的合约账户节点和合约参数节点,其中任意两个节点的更新都互不影响。
状态树的叶子节点除了包含合约账户节点和合约参数节点这两类节点之外,还可以包含外部账户节点,这类节点可以用于记录所述区块链系统中创建的外部账户的账户信息,如任一外部账户节点可以用于记录一个外部账户的账户地址、账户余额等账户信息。当然,在任一外部账户包含至少一个外部账户参数的情况下,还可以在状态树中创建用于记录各个外部账户参数的账户参数节点,不再赘述。
图2是一示例性实施例提供的一种区块链数据的存储结构示意图。单个区块的区块头中可以包含若干字段.如图2所示,区块N的区块头中可以包含上一区块哈希Previous_Hash(图中的Prev Hash,或称为父hash),随机数Nonce(在一些区块链系统中这个Nonce不是随机数,或者在一些区块链系统中不启用区块头中的Nonce),时间戳Time Stamp,区块号Block Num,交易根哈希Transaction_Root,状态根哈希State_Root,收据根哈希Receipt_Root等。其中,后一区块(如区块N)的区块头中的Prev Hash指向前一区块(如区块N-1),所述Prev Hash即为前一区块的hash值。通过这种方式,区块链上通过区块头实现了后一区块对前一区块的锚定。
需要特别说明的是,State_Root是当前区块中所有账户的状态组成的MPT树的根的哈希值,即指向State_Root的为一棵MPT形式的状态树。这个状态树的根节点可以为一个扩展节点(Extension Node)或一个分支节点(Branch Node),State_Root的取值可以为这个根节点的hash值。从该状态树的根节点到叶子节点中每个节点的一部分值按照顺序串联起来可以构成账户地址并作为Key,叶子节点中存储的账户信息为这个账户地址对应的Value,这样,构成了Key-Value键值对。Key可以是sha3(Address),即账户地址的hash值(hash算法例如采用sha3算法),其存储的值Value可以为rlp(Account),即账户信息的rlp编码。其中账户信息可以是[Nonce,Balance,CodeHash,Storage_Root]构成的四元组。
如前所述,对于外部账户来说,一般只有Nonce和Balance两项,而Storage_Root、CodeHash字段默认存储空字符串/全0字符串。对于合约账户来说,合约账户可以包括Nonce,Balance,CodeHash,Storage_Root等。此外,不论是外部账户还是合约账户,其账户信息一般都位于一个单独的叶子节点(Leaf Node)中。从根节点的扩展节点/分支节点到每个账户的叶子节点,可能中间会经过若干个分支节点以及扩展节点。
如图2所示,账户1为外部账户,该账户对应的外部账户节点中记录有账户1的Nonce和Balance字段的取值。账户2为合约账户,该账户对应的合约账户节点中记录有账户2的Nonce,Balance,CodeHash等字段的取值。其中,本说明书所述合约账户节点中还可以记录Storage_Root字段的取值(如图2中虚线框所示的Storage_Root);或者,为了尽量节省合约账户节点所占用的存储空间,合约账户节点也可以不记录Storage_Root字段的取值。假设账户2包含参数A和参数B等至少两个合约参数,则其中参数A和参数B分别对应于状态树中不同的合约参数节点。其中,任一合约参数对应的合约参数节点用于记录该合约参数的状态值,如参数A和对应的合约参数节点用于记录参数A的状态值,参数B和对应的合约参数节点用于记录参数B的状态值。如图2所示,任一合约参数的状态值可以以Key-Value键值对的形式存储,不再赘述。
根节点到叶子节点的路径上存储的一部分数据连起来构成Key,叶子节点中存储Value。在任一智能合约中任一合约参数的状态值被按照Key-Value键值对记录在相应的合约参数节点中的情况下,该合约参数的key可以通过所述任一智能合约的合约信息和所述任一合约参数的参数信息计算得到。另外,同一智能合约中不同合约参数分别对应的合约参数节点,可以与该智能合约的合约账户节点具有相同的父节点。如参数A和参数B分别对应的合约参数节点,与账户2对应的合约账户节点均连接至同一分支节点。
对于调用智能合约的区块链交易,区块链系统中的各个区块链节点通过执行这类交易得到的状态数据中可以包含所述智能合约中合约参数的状态值。对其,区块链节点可以将自身上述状态值提交至状态树中对应于相应合约参数的合约参数节点。其中,本说明书所述的区块链交易可以是用于创建合约的交易,该合约可以用于在区块链网络中发行NFT;或者,所述区块链交易也可以是转账交易,所述转账交易可以用于购买至少一个NFT。下面以区块链系统中第一节点为例,对交易执行和数据提交方案进行说明。
图3是一示例性实施例提供的一种区块链系统中任意两个节点的结构示意图。图3所示的节点n1和节点n2分别为本方案所述的第一节点和第二节点,其中,节点n2可以为区块链系统中的主节点,节点n1可以为区块链系统中的从节点。节点n1和节点n2中可以分别运行多个进程以提供多种服务,如图3所示,节点n1和节点n2各自运行用于提供接入服务的接入进程(如节点n1中运行的接入进程1和节点n2中运行的接入进程2,下述进程编号与此类似,不再赘述)、用于提供缓存服务的缓存进程、用于提供预执行服务的预执行进程、用于提供网络服务的网络进程、用于提供共识服务的共识进程、用于提供区块管理服务的控制进程和用于提供存储服务的存储进程。此外,作为从节点的节点n1还可以运行用于提供计算服务的多个计算进程,如计算进程11、计算进程12和计算进程13。
其中,本说明书所述进程是指应用中具有一定独立功能的程序关于一个数据集合的一次运行活动,即进程是计算机中通过由CPU顺序执行应用程序中的指令而进行的一个过程,而每个进程在创建时被分配自己的内存地址空间。任一节点中的多个进程可以为多个计算设备或虚拟计算节点中的多个进程。此外需要说明的是,本说明书实施例提供的方案并不局限于主从架构的区块链系统;换言之,本方案所述的节点n1和节点n2可以为所述区块链系统中的任意两个区块链节点。
接入进程可以用于接收来自用户设备的交易,进而由接入进程调用缓存进程实现将其接收的交易加入待处理的交易队列中进行缓存。
节点n2的预执行进程2可以调用缓存进程2来实现从待处理的交易队列中按顺序读取其缓存的交易并对该交易进行验证,例如验证用户设备对该交易的签名,并将经验证的交易返回给缓存进程2。此外,节点n2还可以通过其网络进程2向其余节点的网络进程广播其缓存进程2中存储的经验证的交易;从而,节点n1通过其网络进程1接收的来自节点n2的交易,可以由其缓存进程1缓存加入到待处理的交易队列中。由此节点n1的缓存进程1通过其内存缓存的待处理的交易队列,不仅包括通过其接入进程1接收的交易,还包括通过其网络进程1接收的来自其它节点(如节点n2)的交易。
节点n2的预执行进程2也可以调用缓存进程2来实现从待处理的交易队列中按顺序读取其缓存的交易,并至少对来自与节点n2连接的用户设备的交易进行验证。此外节点n2的预执行进程2还可以对其从缓存进程2按顺序接收的交易进行预执行以得到该交易的预执行信息,其中预执行信息可以包括预执行读集、预执行写集和资源消费信息(用于表征执行该交易所需消耗的数字资源/计算资源的数量)等。其中,本说明书所述的预执行读写集包括所述预执行读集和/或所述预执行写集。进而节点n2的预执行进程2还可以在其每完成对一批交易的预执行后,将该批交易的预执行信息返回给缓存进程2以缓存到待共识的交易队列中进行缓存。
在一实施例中,节点n2的缓存进程2的内存中还可以缓存有部分状态数据;对于由节点n2的预执行进程2预执行的任一交易而言,在对该任一交易进行预执行的过程中,预执行进程2可以首先调用缓存进程2查询其缓存的状态数据中是否包括将要读取的第一合约参数的状态值:如果是,则获得缓存进程2返回的该合约参数的状态值;如果否,则预执行进程2可以调用存储进程2从已提交到状态数据库的状态数据中查询该合约参数的状态值。
另外,由于节点n2的预执行进程2会将其预执行的交易的预执行信息返回给缓存进程2,因而其缓存进程2还可以基于其接收的预执行读写集对应更新该缓存进程2缓存的状态数据。此外还需要特别说明的是,由于预执行进程2可以按顺序从缓存进程2缓存的待处理的交易队列中依次读取交易并对其进行预执行,因而缓存进程2还可以基于其缓存的待处理的交易队列在其内存中对应缓存由预执行进程2预执行的多个交易的预执行顺序。其中,所述多个交易即为需要打包生成当前区块的多个交易。
预执行读集中可以包含若干唯一键(Key),还可以包括从已提交的世界状态中读取的与前述各个Key相对应的键值(Value)。预执行写集中也包含若干唯一键(Key),还包括期望提交的与前述各个Key相对应的键值(Value)。此外,如果某个交易对世界状态中的某个Key进行删除处理,则预执行写集中还会对被删除的Key记录相应的标记。需要特别说明的是,如果被预执行的交易是用于调用智能合约的合约调用交易,则其预执行读写集中可能不仅仅包含与外部账户相关的状态参数,还可能涉及与智能合约的合约状态相关的若干合约参数。
下面示例性描述节点n2依次对交易Tx1~交易Tx5进行预执行的过程,其中假设交易Tx1和交易Tx2为用于外部账户A1和外部账户A2分别发起的用于调用智能合约C1的合约调用交易,并且假设智能合约C1对应合约账户B1;此外假设交易Tx3是外部账户A1发起的指向外部账户A3的转账交易,交易Tx4是外部账户A4发起的指向外部账户A5的转账交易,交易Tx5是外部账户A6发起的指向外部账户A7的转账交易。节点n2通过其预执行进程2对交易Tx1~交易Tx5进行预执行可以得到预执行读写集。示例性,交易Tx1~交易Tx5各自的预执行读写集可以参见下表1。
表1
交易 预执行读集 预执行写集
交易Tx1 k1=v11,k2=v21 k1=v12,k2=v22
交易Tx2 k3=v31,k4=v41 k3=v32,k4=v42
交易Tx3 k1=v12,k5=v51 k1=v13,k5=v52
交易Tx4 k6=v61,k7=v71 k6=v62,k7=v72
交易Tx5 k8=v81,k9=v91 k8=v82,k9=v92
对于前述表1中示例性提供的各个参数,例如k1表征外部账户A1的Balance的Key,k2表征合约账户B1下的某个状态参数的Key,k3表征外部账户A2的Balance的Key,k4表征合约账户B1下的某个状态参数的Key,k5~k9依次表征外部账户A3~外部账户A7下的Balance的Key。其中v11、v12、v13以及v21~v92分别表征其各自对应的Key的值。需要特别说明的是,由于交易Tx3在交易Tx1之后执行,因此交易Tx3的预执行读集中k1的值为交易Tx1的预执行写集中k1的值。由此可见,交易Tx1和Tx2分别调用同一合约(即智能合约C1),而且两交易执行过程分别涉及该合约中的不同合约参数(即交易Tx1涉及k2所表征的合约参数,交易Tx2涉及k4所表征的合约参数)。
节点n2的共识进程2可以调用其缓存进程2,从待共识的交易队列中按顺序读取多个交易以及其相关数据来生成共识提议,其中该共识提议中例如可以包括该多个交易各自对应的预执行信息、该多个交易的共识顺序(该多个交易的共识顺序与该多个交易的预执行顺序相同),以及该多个交易或者该多个交易各自的指示信息(例如该多个交易各自的摘要值)。需要特别说明的是,节点n2的共识进程2调用其缓存进程2的条件,可以包括但不限于按照固定时间步长调用缓存进程2、通过缓存进程2缓存的交易的数据量达到预定大小时调用缓存进程2,或者通过缓存进程2缓存的经预执行的交易达到预定数量时调用缓存进程2等等。进而,节点n2的共识进程2还可以通过其网络进程2,向参与对共识提议进行共识的其余节点(例如节点n1)各自的网络进程发送共识提议,以便通过其共识进程2与其余节点各自的共识进程对其生成的共识提议进行共识。此外需要特别说明的是,节点n2还可以基于共识提议所指示的多个交易各自的预执行信息,计算该多个交易对应的分组信息,并将该分组信息携带于共识提议中,以便参与对共识提议进行共识的其它节点可以基于该分组信息对前述多个交易进行分组。
对共识提议达成共识后,由于节点n1和节点n2各自从与其连接的用户设备接收的交易,均由节点n2的缓存进程2按照接收顺序将其加入待处理的交易队列,并由节点n2的预执行进程2按顺序对待处理的交易队列中的各交易进行预执行,因此节点n2的共识进程2可以按照前述多个交易的预执行顺序/共识顺序将前述多个交易的预执行信息发送至其控制进程2,由控制进程2将前述多个交易各自的预执行信息部分或全部的作为相应区块的状态数据提交到存储服务2,进而获得用于生成相应区块的状态根并生成包含该状态根以及前述多个交易的区块。
节点n1例如可以在对节点n2生成的共识提议进行共识的过程中,或者在对节点n2生成的共识提议达成共识之后,通过其共识进程1和/或控制进程1从该共识提议中读取前述多个交易各自的预执行信息,进而基于该多个交易各自的预执行信息对该多个交易进行分组以得到M(M为大于1的整数)个交易分组;或者从共识提议中读取前述多个交易的分组信息并基于该分组信息对前述多个交易进行分组以得到M个交易分组。例如,在所述预执行信息包括预执行读写集的情况下,所述共识进程1可以从所述区块链系统中的第二节点处接收所述多个交易各自的预执行读写集,基于所述预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定的该所述多个交易中至少部分交易的前后依赖关系;以及,根据所述前后依赖关系对所述多个交易进行分组以得到所述M个交易分组。此后,共识进程1可以将所述M个交易分组发送至控制进程1。再例如,共识进程1也可以基于前述多个交易各自的预执行信息计算分组信息,并将分组信息、前述多个交易以及其各自对应的预执行读写集发送至节点n1的控制进程1;进而由控制进程1基于分组信息将前述多个交易划分为M个交易分组。在获取到所述M个交易分组后,控制进程1可以对节点n1中的N个计算进程1进行任务调度。
获得前述M个交易分组的过程中,需要确保位于任意两个交易分组中的任意两个交易互不冲突。任意两个交易互不冲突具体是指任意两个交易不存在如下情况之一:一个交易的预执行读集与另一个交易的预执行写集中包括相同的Key、一个交易的预执行写集和另一个交易的预执行写集中包括相同的Key。而对于存在冲突的任意两个交易,则其需要被划分至相同的交易分组中,换而言之即如果该任意两个交易各自的预执行写集中包含相同的Key,即认为该任意两个冲突交易访问了相同的参数而存在冲突,该任意两个交易需要被划分至相同的交易分组;如果该任意两个交易中的一个交易的预执行读集与另一个交易的预执行写集中包含相同的Key,即认为该任意两个交易访问了相同的参数而存在冲突,该任意两个交易需要被划分至相同的交易分组。
在另一种可能的实施方式中,为了高效地实现确定出前述多个交易的分组信息或者说高效地完成将前述多个交易划分为M个交易分组,通常可以按照位于任意两个不同的交易分组中的任意两个交易不访问相同参数(即不包含相同的Key)的要求来对前述多个交易进行分组。这样,对于前述示例的交易Tx1~交易Tx5,其分组情况例如可以参见下表2:
表2
交易 交易分组
交易Tx1和交易Tx3 交易分组1
交易Tx2 交易分组2
交易Tx4 交易分组3
交易Tx5 交易分组4
可见,调用同一合约(即智能合约C1)且分别涉及该合约中的不同合约参数的交易,将被划分至不同的交易分组。如交易Tx1(涉及k2所表征的合约参数)被划分至交易分组1中,而交易Tx2(涉及k4所表征的合约参数)则被划分至交易分组2中。需要说明的是,任一交易涉及任一合约参数,可以包括该交易执行过程中需要读取或更改该合约参数的状态值。在任一交易涉及任一合约参数的情况下,该交易被划分至某一交易分组后,该交易分组即可视为涉及所述任一合约参数。
节点n1具体可以按照M个交易分组,通过其运行的N个计算进程并行执行该M个交易分组中的多个交易,从而实现分组级别的交易执行。然而由任意两个计算进程并行执行的任意两个交易如果涉及相同的合约账户/智能合约,那么执行这两个交易得到的状态数据将可能分别涉及不同的合约参数,如两交易可能分别产生针对参数A和参数B的读写集数据。基于前述状态树中对应于同一智能合约中不同合约参数的合约参数节点,可以由第一节点中不同的计算进程分别执行两交易分别所处交易分组中的交易,并由各个计算进程分别提交针对不同合约参数的状态值,以实现对同一智能合约中不同合约参数的状态值的并行提交。
图4是一示例性实施例提供的一种状态数据的提交方法的流程图。如图3所示,该方法应用于区块链系统中的第一节点。如前所述,第一节点可以为区块链系统中的任一区块链节点,示例性的,第一节点可以为共识提议节点(主节点)之外的其它区块链节点(从节点)。其中,无论所述区块链系统中的主节点还是从节点,各个节点均可实现为任何具有计算/处理能力的装置、平台、设备或设备集群。
本方案所述的区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值。另外如前所述,对于本方案所述状态树中的合约账户节点和合约参数节点,其中任意两个节点的更新都互不影响;因此,第一节点对应的所述合约账户节点与所述多个合约参数节点的更新同样互不影响。
在一实施例中,所述任一合约参数的状态值可以被按照Key-Value键值对记录在相应的合约参数节点中,其中,所述任一合约参数的key可以通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。示例性的,所述第一合约的合约信息可以包括合约地址或者合约地址的hash等。所述任一合约参数的参数信息可以包括参数名称、参数编号或其hash等。如图2所示,以合约信息为合约地址、参数信息为参数名称为例,对于参数A,可以将账户2的账户地址(如“0x00001234…123”)和参数A的参数名称(如“平均订单数量”等)按照预设规则拼接为参数标识(如“0x00001234…123_平均订单数量”),然后计算该参数标识的hash值作为参数A的Key值,当然,也可以采用其他方式确定所述Key,本说明书实施例并不对此进行限制。通过该方式,可以使同一智能合约中各个合约参数对应的合约参数节点在状态树中分布得较为集中,便于后续参数查找和状态值更新。
下文中将主要以作为主节点的节点n2与作为从节点的节点n1相协作,使得节点n1通过其包含的多个进程来具体实现该方法中的各个方法步骤为例,详细描述区块链节点实现如图4中所示的方法的过程。第一节点中包含控制进程和N个计算进程,所述方法包括下述步骤402-406:
步骤402,所述控制进程获取M个交易分组,所述M个交易分组基于多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N均为正整数,所述预执行读写集涉及若干合约参数。
在一实施例中,所述控制进程可以基于来自所述区块链系统中的第二节点的分组信息获取M个交易分组。在另一实施例中,所述第一节点中还可以包括第一共识进程,所述第一共识进程可以从区块链系统中的第二节点处接收所述多个交易各自的预执行读写集,然后,基于所述预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定的该所述多个交易中至少部分交易的前后依赖关系;进而,可以根据所述前后依赖关系对所述多个交易进行分组以得到M个交易分组。基于此,所述控制进程可以从第一共识进程处获取其分组得到的所述M个交易分组。上述获取的具体实现方式可以参见前述实施例的记载,此处不再赘述。
步骤404,所述控制进程将所述M个交易分组中涉及第一合约的不同合约参数的交易分组分别发送至所述N个进程中的不同计算进程。
示例性的,在所述M≤N的情况下,控制进程可以将所述M个交易分组发送至M个计算进程,其中任一计算进程接收到一个交易分组;而在所述M>N的情况下,控制进程可以将所述M个交易分组平均发送至N个计算进程,其中任意两个计算进程接收到的交易分组的数量差值不大于1。通过上述方式,能够使接收到交易分组的计算进程接收到的交易分组数量尽量接近,从而提升M个交易分组的整体执行效率。或者,也可以由N个控制进程相互竞争以获取M个交易分组,任一计算进程可以在执行任一交易分组中的各个交易完成后,继续竞争获取下一交易分组,直至M个交易分组被分发完毕。通过该方式,各个控制进程所获取交易分组的数量与自身的交易执行能力相关,从而一定程度上实现了多个计算进程的负载均衡。
,本说明书所述的第一合约可以为区块链系统中部署的任一智能合约,且该合约包含多个合约参数。基于前述交易分组结果,可以将涉及第一合约中不同合约参数的交易分别划分至不同的交易组,划分后,可能存在一个或多个交易组涉及同一合约参数。例如在表1示出的各个交易中,交易Tx1和交易Tx2分别涉及智能合约C1中的参数k2和k4所表征的合约参数,由表2可知二者分别被划分至交易分组1和交易分组2中。对此,第一节点可以将交易分组1和交易分组2分别发送至不同的计算进程分别执行。如图3所示,节点n1可以将所述交易分组1发送至计算进程11,并将所述交易分组2发送至计算进程12,以由两进程分别执行自身接收到的交易分组中的各个交易。
可以理解的是,由于涉及不同合约参数的交易分组被分别发送至不同的计算进程执行,因此对于第一合约而言,各个计算进程可以并发执行涉及该合约中不同合约参数的交易,并分别得到相应的状态值。可见,该方案通过上述交易分组方案和相应的交易分组分发(即发送至不同的计算进程)方案,能够确保涉及第一合约中不同合约参数的不同交易分别被不同的计算进程并发执行,实现了交易的进程级并发执行,提升了当前区块所对应各个交易的执行效率,有助于加快出块速度。示例性的,表2所示各个交易分组的发送情况可参见下表3:
表3
Figure BDA0003999492360000131
Figure BDA0003999492360000141
可见,调用同一合约(即智能合约C1)且分别涉及该合约中的不同合约参数的交易分组,将被分别发送至不同的计算进程。如交易Tx1(涉及k2所表征的合约参数)所属的交易分组1被发送至计算进程11,而交易Tx2(涉及k4所表征的合约参数)所属的交易分组2则被发送至计算进程12。
另外需要说明的是,对于不涉及智能合约中合约参数的交易Tx4和交易Tx5,节点n1可以将交易Tx4所属的交易分组3和交易Tx5所属的交易分组4分别发送至相应的计算进程,因此,任一计算进程除了可能接收到涉及任一合约参数的交易分组之外,也可能接收到包含无关交易(即不涉及第一合约的交易,如不涉及任何合约的交易或者涉及其他合约的交易等)的交易分组,此时该计算进程可以正常执行自身接收到的各个交易分组中的交易,本方案并不关注所述无关交易的执行及状态数据提交过程。
步骤406,第一计算进程在接收到涉及第一合约中任一合约参数的交易分组的情况下,执行接收到的交易分组中的各个交易,获得所述任一合约参数的状态值并提交,以更新所述任一合约参数在所述状态树中对应的合约参数节点记录的所述任一合约参数的状态值。
所述第一计算进程可以是前述(接收控制进程分发的交易组)不同计算进程中的任一计算进程。其中,第一计算进程可能接收到涉及第一合约中任一合约参数的一个或多个交易分组。计算进程可以串行执行其接收的各个交易分组中的交易,示例性的,计算进程11可以通过单个工作线程依次执行其接收的交易分组1和交易分组2中的交易Tx1和交易Tx2。或者计算进程也可以通过多线程并发的方式执行其接收的各个交易分组中的交易,以便更为快速的完成执行其接收的各个交易分组中的交易。例如在接收到涉及第一合约中任一合约参数的多个上述交易分组的情况下,计算进程可以通过多个线程并发执行各个交易分组中的交易。示例性的,计算进程11中可以并发的运行工作线程thread1和工作线程thread2,thread1依次执行交易分组11中的交易Tx1和交易Tx3涉及智能合约C1的状态数据,该组合约状态数据例如包括智能合约C1中由k2表征的合约参数的状态值;thread2执行交易分组2中的交易Tx2和交易Tx4以得到涉及智能合约C1的另一组合约状态数据,该组合约状态数据例如包括智能合约C1中由k4表征的合约参数的状态值。通过该方式,第一计算进程可以并发执行各个交易分组中的交易,实现了交易的进程内(线程级)并发执行,进一步提升了当前区块所对应各个交易的执行效率。
涉及同一智能合约中不同合约参数的交易由不同的计算进程分别执行,则(接收到涉及第一合约中不同合约参数的交易组的)各个计算进程各自执行得到的状态数据中不会涉及相同合约参数的状态值,因而上述各个计算进程可以互不影响的并行提交其各自获得的状态值。其中,作为任一计算进程的第一计算进程可以在执行接收到的涉及任一合约参数的交易分组中的交易后,提交执行得到的该合约参数的状态值,以更新所述任一合约参数在所述状态树中对应的合约参数节点记录的所述任一合约参数的状态值。
在一实施例中,第一计算进程针对自身执行接收到的涉及所述任一合约参数的交易分组中的各个交易得到的各个交易的执行读写集,可以确定所述执行读写集与所述各个交易对应的预执行读写集是否一致,并在确定所述任一合约参数的交易分组中每个交易各自的执行读写集与其预执行读写集都一致的情况下,提交所述任一合约参数的状态值。例如,第一计算进程在完成执行任一交易之后,可以获得该交易的执行读写集,进而还可以确定该交易的执行读写集与(从第二节点处获取的)该交易的预执行读写集是否一致。基于上述对比,在所述交易分组中的每个交易各自的执行读写集与其预执行读写集都一致的情况下,第一计算进程可以基于所述任一合约参数的状态值更新该合约参数所对应合约参数节点中记录的状态值。或者,如果所述交易分组中存在某个交易的执行读写集与其预执行读写集不一致,则可以更换区块链系统的主节点,进而通过与前述相似的过程重新发起针对所述多个交易的执行。
通过上述实施例,第一智能合约中不同合约参数的状态值由状态树中不同的合约参数节点分别记录,而且第一合约对应的合约账户节点及其各个合约参数分别对应的合约参数节点的更新互不影响,从而允许同一合约中不同合约参数的状态值可以被分别更新,互不影响。基于此,分别由不同的计算进程执行涉及第一合约中不同合约参数的交易,不仅使得调用同一智能合约的多个交易可以被不同的计算进程并发执行,从而提升交易的执行效率。而且调用同第一合约的不同交易的执行过程相互独立,两执行过程不会产生针对相同合约参数的状态数据,使得多个计算进程可以并行提交针对同一合约中不同合约参数的状态值,有助于加快包含调用同一合约的多个交易的区块的生成速度。
基于与前述方法实施例相同的构思,本说明书实施例还提供了一种区块链系统中的第一节点,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响。
图5是一示例性实施例提供的一种区块链系统中的第一节点的结构示意图。如图5所示,所述第一节点包括控制进程52和N个计算进程54。其中:所述控制进程52用于获取M个交易分组,所述M个交易分组基于多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N均为正整数,所述预执行读写集涉及若干合约参数;所述控制进程52还用于将所述M个交易分组中涉及第一合约的不同合约参数的交易分组分别发送至所述N个进程中的不同计算进程;所述N个计算进程54中的第一计算进程用于在接收到涉及第一合约中任一合约参数的交易分组的情况下,执行接收到的交易分组中的各个交易,获得所述任一合约参数的状态值并提交,以更新所述任一合约参数在所述状态树中对应的合约参数节点记录的所述任一合约参数的状态值。
在一种可能的实施方式中,第一计算进程还用于:在接收到涉及第一合约中任一合约参数的多个交易分组的情况下,通过多个线程并发执行各个交易分组中的交易。
在一种可能的实施方式中,第一节点还包括存储进程58,
第一计算进程还用于将所述任一合约参数的状态值发送至所述存储进程;
所述存储进程58用于基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
在一种可能的实施方式中,第一节点还包括第一共识进程56,用于:
从所述区块链系统中的第二节点处接收所述多个交易各自的预执行读写集,基于所述预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定的该所述多个交易中至少部分交易的前后依赖关系;以及,根据所述前后依赖关系对所述多个交易进行分组以得到所述M个交易分组。
基于与前述方法实施例相同的构思,本说明书实施例中还提供了一种区块链系统,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;所述区块链系统包括第一节点和第二节点,第一节点中包含控制进程和N个计算进程,其中:
第二节点用于向第一节点发送多个交易各自的预执行读写集,所述预执行读写集涉及若干合约参数;
第一节点用于通过所述控制进程获取M个交易分组,所述M个交易分组基于多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N均为正整数,所述预执行读写集涉及若干合约参数;通过所述控制进程将所述M个交易分组中涉及第一合约的不同合约参数的交易分组分别发送至所述N个进程中的不同计;以及,通过第一计算进程在接收到涉及第一合约中任一合约参数的交易分组的情况下,执行接收到的交易分组中的各个交易,获得所述任一合约参数的状态值并提交,以更新所述任一合约参数在所述状态树中对应的合约参数节点记录的所述任一合约参数的状态值。
在一种可能的实施方式中,所述合约参数节点记录的状态值被按照Key-Value键值对进行存储,所述任一合约参数的Key通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。
在一种可能的实施方式中,所述第一节点还包括第一共识进程,用于:
从所述区块链系统中的第二节点处接收所述多个交易各自的预执行读写集,基于所述预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定的该所述多个交易中至少部分交易的前后依赖关系;以及,根据所述前后依赖关系对所述多个交易进行分组以得到所述M个交易分组。
在一种可能的实施方式中,第一计算进程还用于:
针对自身执行接收到的涉及所述任一合约参数的交易分组中各个交易得到的各个交易的执行读写集,确定所述执行读写集与所述各个交易对应的预执行读写集是否一致;
在确定所述任一合约参数的交易分组中每个交易各自的执行读写集与其预执行读写集都一致的情况下,提交所述任一合约参数的状态值。
在一种可能的实施方式中,第二节点包括预执行进程和缓存进程,所述缓存进程的内存中存储有状态数据;其中,
所述缓存进程用于将所述多个交易发送至所述预执行进程,所述多个交易由第一节点接收并存储在所述缓存进程的内存中;
所述预执行进程用于预执行所述多个交易,生成所述多个交易的预执行读写集,具体用于在预执行所述多个交易中的任一交易的过程中将要读取第一合约参数的状态值时,在所述缓存进程的内存存储有第一合约参数的状态值的情况下,从所述缓存进程接收该状态值,并基于该状态值生成所述任一交易的预执行读写集;
所述缓存进程还用于在所述缓存进程的内存中存储所述多个交易的预执行读写集和所述多个交易的预执行顺序,并基于所述多个交易的预执行读写集更新所述内存中存储的状态数据。
在一种可能的实施方式中,第二节点还包括第二共识进程,
所述缓存进程还用于将所述多个交易的预执行读写集和预执行顺序发送至第二共识进程;
第二共识进程用于生成共识提议,并将所述共识提议发送至第一节点中的第一共识进程,所述共识提议包括所述多个交易的预执行读写集及其共识顺序,所述共识顺序为所述预执行顺序。
图6是一示例性实施例提供的一种设备的结构示意图。请参考图6,在硬件层面,该设备包括处理器602、内部总线604、网络接口606、内存608以及非易失性存储器610,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器602从非易失性存储器610中读取对应的计算机程序到内存608中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。

Claims (20)

1.一种状态数据的提交方法,应用于区块链系统中的第一节点,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;第一节点中包含控制进程和N个计算进程,所述方法包括:
所述控制进程获取M个交易分组,所述M个交易分组基于多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N均为正整数,所述预执行读写集涉及若干合约参数;
所述控制进程将所述M个交易分组中涉及第一合约的不同合约参数的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程在接收到涉及第一合约中任一合约参数的交易分组的情况下,执行接收到的交易分组中的各个交易,获得所述任一合约参数的状态值并提交,以更新所述任一合约参数在所述状态树中对应的合约参数节点记录的所述任一合约参数的状态值。
2.根据权利要求1所述的方法,所述任一合约参数的状态值被按照Key-Value键值对记录在相应的合约参数节点中,其中,所述任一合约参数的Key通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。
3.根据权利要求1所述的方法,所述合约账户节点不记录Storage_Root字段的取值。
4.根据权利要求1所述的方法,第一合约对应的合约账户节点与第一合约中至少部分合约参数分别对应的合约参数节点具有相同的父节点。
5.根据权利要求1所述的方法,所述控制进程获取M个交易分组,包括:
所述控制进程基于来自所述区块链系统中的第二节点的分组信息获取M个交易分组。
6.根据权利要求1所述的方法,所述第一节点还包括第一共识进程,所述方法还包括:
第一共识进程从所述区块链系统中的第二节点处接收所述多个交易各自的预执行读写集,基于所述预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定的该所述多个交易中至少部分交易的前后依赖关系;以及,根据所述前后依赖关系对所述多个交易进行分组以得到所述M个交易分组。
7.根据权利要求6所述的方法,
还包括:第一计算进程针对自身执行接收到的涉及所述任一合约参数的交易分组中的各个交易得到的各个交易的执行读写集,确定所述执行读写集与所述各个交易对应的预执行读写集是否一致;
第一计算进程提交所述任一合约参数的状态值,包括:第一计算进程在确定所述任一合约参数的交易分组中每个交易各自的执行读写集与其预执行读写集都一致的情况下,提交所述任一合约参数的状态值。
8.根据权利要求1所述的方法,还包括:
在接收到涉及第一合约中任一合约参数的多个交易分组的情况下,第一计算进程通过多个线程并发执行各个交易分组中的交易。
9.根据权利要求1所述的方法,所述第一节点还包括存储进程,
第一计算进程提交所述任一合约参数的状态值,包括:第一计算进程将所述任一合约参数的状态值发送至所述存储进程;
所述存储进程基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
10.一种区块链系统中的第一节点,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;第一节点中包含控制进程和N个计算进程,其中:
所述控制进程用于获取M个交易分组,所述M个交易分组基于多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N均为正整数,所述预执行读写集涉及若干合约参数;
所述控制进程用于将所述M个交易分组中涉及第一合约的不同合约参数的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程用于在接收到涉及第一合约中任一合约参数的交易分组的情况下,执行接收到的交易分组中的各个交易,获得所述任一合约参数的状态值并提交,以更新所述任一合约参数在所述状态树中对应的合约参数节点记录的所述任一合约参数的状态值。
11.根据权利要求10所述的第一节点,第一计算进程还用于:
在接收到涉及第一合约中任一合约参数的多个交易分组的情况下,通过多个线程并发执行各个交易分组中的交易。
12.根据权利要求10所述的第一节点,第一节点还包括存储进程,
第一计算进程还用于将所述任一合约参数的状态值发送至所述存储进程;
所述存储进程用于基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
13.一种区块链系统,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;所述区块链系统包括第一节点和第二节点,第一节点中包含控制进程和N个计算进程,其中:
第二节点用于向第一节点发送多个交易各自的预执行读写集,所述预执行读写集涉及若干合约参数;
第一节点用于通过所述控制进程获取M个交易分组,所述M个交易分组基于多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N均为正整数,所述预执行读写集涉及若干合约参数;通过所述控制进程将所述M个交易分组中涉及第一合约的不同合约参数的交易分组分别发送至所述N个进程中的不同计;以及,通过第一计算进程在接收到涉及第一合约中任一合约参数的交易分组的情况下,执行接收到的交易分组中的各个交易,获得所述任一合约参数的状态值并提交,以更新所述任一合约参数在所述状态树中对应的合约参数节点记录的所述任一合约参数的状态值。
14.根据权利要求13所述的区块链系统,所述合约参数节点记录的状态值被按照Key-Value键值对进行存储,所述任一合约参数的Key通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。
15.根据权利要求13所述的区块链系统,所述第一节点还包括第一共识进程,用于:
从所述区块链系统中的第二节点处接收所述多个交易各自的预执行读写集,基于所述预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定的该所述多个交易中至少部分交易的前后依赖关系;以及,根据所述前后依赖关系对所述多个交易进行分组以得到所述M个交易分组。
16.根据权利要求15所述的区块链系统,第一计算进程还用于:
针对自身执行接收到的涉及所述任一合约参数的交易分组中各个交易得到的各个交易的执行读写集,确定所述执行读写集与所述各个交易对应的预执行读写集是否一致;
在确定所述任一合约参数的交易分组中每个交易各自的执行读写集与其预执行读写集都一致的情况下,提交所述任一合约参数的状态值。
17.根据权利要求13所述的区块链系统,第二节点包括预执行进程和缓存进程,所述缓存进程的内存中存储有状态数据;其中,
所述缓存进程用于将所述多个交易发送至所述预执行进程,所述多个交易由第一节点接收并存储在所述缓存进程的内存中;
所述预执行进程用于预执行所述多个交易,生成所述多个交易的预执行读写集,具体用于在预执行所述多个交易中的任一交易的过程中将要读取第一合约参数的状态值时,在所述缓存进程的内存存储有第一合约参数的状态值的情况下,从所述缓存进程接收该状态值,并基于该状态值生成所述任一交易的预执行读写集;
所述缓存进程还用于在所述缓存进程的内存中存储所述多个交易的预执行读写集和所述多个交易的预执行顺序,并基于所述多个交易的预执行读写集更新所述内存中存储的状态数据。
18.根据权利要求17所述的区块链系统,第二节点还包括第二共识进程,
所述缓存进程还用于将所述多个交易的预执行读写集和预执行顺序发送至第二共识进程;
第二共识进程用于生成共识提议,并将所述共识提议发送至第一节点中的第一共识进程,所述共识提议包括所述多个交易的预执行读写集及其共识顺序,所述共识顺序为所述预执行顺序。
19.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-9中任一项所述的方法。
20.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-9中任一项所述方法的步骤。
CN202211610741.2A 2022-12-14 2022-12-14 状态数据的提交方法、节点和区块链系统 Pending CN116248287A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211610741.2A CN116248287A (zh) 2022-12-14 2022-12-14 状态数据的提交方法、节点和区块链系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211610741.2A CN116248287A (zh) 2022-12-14 2022-12-14 状态数据的提交方法、节点和区块链系统

Publications (1)

Publication Number Publication Date
CN116248287A true CN116248287A (zh) 2023-06-09

Family

ID=86635459

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211610741.2A Pending CN116248287A (zh) 2022-12-14 2022-12-14 状态数据的提交方法、节点和区块链系统

Country Status (1)

Country Link
CN (1) CN116248287A (zh)

Similar Documents

Publication Publication Date Title
Ruan et al. Blockchains vs. distributed databases: Dichotomy and fusion
CN111338766B (zh) 事务处理方法、装置、计算机设备及存储介质
CN107679192B (zh) 多集群协同数据处理方法、系统、存储介质及设备
WO2023231338A1 (zh) 状态数据的提交方法、节点和区块链系统
Balegas et al. Extending eventually consistent cloud databases for enforcing numeric invariants
Esteves et al. Quality-of-service for consistency of data geo-replication in cloud computing
CN114827165B (zh) 对多个交易进行分组的方法和区块链节点
WO2023231339A1 (zh) 区块链系统中的交易执行方法、节点和区块链系统
Labouseur et al. Scalable and Robust Management of Dynamic Graph Data.
CN110704438B (zh) 一种区块链中布隆过滤器的生成方法及装置
US20200052885A1 (en) File storage method and apparatus for blockchain network
CN113111038B (zh) 文件存储方法、装置、服务器及存储介质
CN104298598A (zh) 分布式环境下rdfs本体的调试方法
CN114936256A (zh) 在区块链中执行交易的方法和区块链节点
Vilaça et al. A correlation-aware data placement strategy for key-value stores
Wei et al. Scalable join queries in cloud data stores
EP4057142A1 (en) Job scheduling method and job scheduling apparatus
Niethammer et al. An MPI interface for application and hardware aware Cartesian topology optimization
CN116248287A (zh) 状态数据的提交方法、节点和区块链系统
Lynden et al. Dynamic data redistribution for MapReduce joins
CN107832121B (zh) 一种应用于分布式串行长事务的并发控制方法
Arnaut et al. Phoenix: A relational storage component for the cloud
Savio Online bounds on balancing two independent criteria with replication and reallocation
Lei et al. Redoop: Supporting Recurring Queries in Hadoop.
Martins et al. Towards a simple programming model in Cloud Computing platforms

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