区块链交易处理方法,应用于区块链网络中的区块链节点
#冬日生活打卡季#
区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数据同步的特性,利用区块链技术来搭建去中心化系统,并在区块链的分布式数据库中收录各种执行程序进行自动执行,已在众多的领域中广泛的进行应用。
区块链交易的合法性验证通常可以通过验证签名有效性的方式来实现。当区块链采用账户模型时,该区块链所适用的账户通常对应有一组或多组公钥-私钥对,上述公钥可以被记录在相应的账户状态中,或以其他形式存储在区块链的分布式数据库中,且可被区块链网络中的任一节点设备获得。与上述公钥对应的私钥则保存在账户所有方的本地数据库或其他硬件终端中,以供账户所有方进行数字签名或加解密操作等。发起方所发起的区块链交易不仅包括交易内容,还包括该发起方采用其账户对应的私钥针对交易内容而作的数字签名。区块链节点在接收到区块链交易后,可以基于该区块链交易所含的数字签名对该区块链交易进行合法性验证。合法性验证通常可包括:验证数字签名是否基于该区块链交易的交易内容而获得(也称为完整性校验)等。通过完整性校验,可以确保该区块链交易确实是由该公钥对应的用户所发起,且该交易在传输过程中未被篡改。在另一种情况下,发起方的公钥也可以被携带在CA中心向发起方颁发的CA证书中,当发起方发送区块链交易时,可以将通过CA中心私钥进行签名的CA证书一同发送给区块链节点,由区块链节点根据CA中心的公钥对CA证书的签名进行验证,在验证成功的情况下可以获取CA证书中所携带的发起方公钥。其中,CA中心为可以被区块链节点默认信任的权威机构,因而只要用CA中心的公钥成功对证书进行验签,即可确定证书中的公钥可信,使得区块链节点可以通过该公钥对接收到的区块链交易所含的数字签名进行合法性验证。
其中,区块链中支持的共识算法可以包括:
第一类共识算法,即节点设备需要争夺每一轮的记账周期的记账权的共识算法;例如,工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法;
第二类共识算法,即预先为每一轮记账周期选举记账节点(不需要争夺记账权)的共识算法;例如,实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等共识算法。
在采用第一类共识算法的区块链网络中,争夺记账权的节点设备,都可以在接收到交易后执行该笔交易。争夺记账权的节点设备中可能有一个节点设备在本轮争夺记账权的过程中胜出,成为记账节点。记账节点可以将收到的交易与其它交易一起打包以生成候选区块,并将生成的候选区块或者该候选区块的区块头发送至其它节点设备进行共识。
在采用第二类共识算法的区块链网络中,具有记账权的节点设备在本轮记账前已经商定好。因此,节点设备在接收到交易后,如果自身不是本轮的记账节点,则可以将该交易发送至记账节点。对于本轮的记账节点,可以将该交易发送至其它节点设备进行共识,在确定该交易通过共识后,其他节点设备可以将该交易与其它交易一起打包以生成候选区块并且执行该交易。
如上所述,无论区块链采用以上示出的哪种共识算法,本轮的记账节点都可以将接收到的交易打包以生成候选区块,并将生成的候选区块或者该候选区块的区块头发送至其它节点设备进行共识验证。如果其它节点设备接收到候选区块或者该候选区块的区块头后,经验证没有问题,可以将该候选区块作为最新区块追加到原有的区块链末尾,从而完成区块链的记账过程。其它节点验证记账节点发来的新的区块或区块头的过程中,也可以执行该区块中的包含的交易。
采用账户模型的区块链在实现数据存证时,需要存储和维护的区块链数据,通常包括区块数据、区块链中的区块链账户对应的账户状态数据;区块数据又可以进一步包括区块头数据、区块中的区块交易数据等等。在存储以上示出的各种区块链数据时,通常可以将上述各种区块链数据以key-value键值对的形式,组织成Merkle树在数据库中存储。
在上述的区块链模型中,可以在区块链上部署用于进行数据存证的智能合约,用户可以通过调用智能合约的方式,将需要存证的数据作为该智能合约对应的合约账户的账户状态,存储到与该智能合约对应的Merkle树中。
例如,以以太坊为例,通常采用一种特殊的称之为MPT树的特殊的Merkle树来存储和维护区块链数据;其中,对于账户状态数据,可以组织成MPT状态树(即世界状态)在数据库中存储;MPT状态树上存储了以账户地址为key,以账户状态数据为value的key-value键值对。而智能合约对应的合约账户中存储的数据内容,也会被进一步组织成storage树(一种用于存储数据的MPT存储树)在数据库中存储;storage树的根节点的hash值,会作为与该合约账户对应的账户状态数据的一部分,填充到MPT状态树中;而MPT状态树的根节点的hash会被进一步填充到区块头中。当用户需要进行数据存证时,可以通过调用智能合约的方式,将需要存证的数据作为该智能合约对应的合约账户的账户状态数据,存储到与该智能合约对应的storage树中。
在区块链领域,还有一个重要的概念就是账户(Account);以以太坊为例,以太坊通常将账户划分为外部账户和合约账户两类;外部账户就是由用户直接控制的账户,也称之为用户账户;而合约账户则是由用户通过外部账户创建的,包含合约代码的账户(即智能合约)。
当然,对于一些基于以太坊的架构而衍生出的区块链模型,还可以对区块链支持的账户类型,进行进一步的扩展,在本说明书中不进行特别限定。
对于区块链中的账户而言,通常会通过一个结构体,来维护账户的账户状态。当区块中的交易被执行后,区块链中与该交易相关的账户的状态通常也会发生变化。
在一个例子中,账户的结构体通常包括Balance,Nonce,Code和Storage等字段。其中:
Balance字段,用于维护账户目前的账户余额;
Nonce字段,用于维护该账户的交易次数;它是用于保障每笔交易能且只能被处理一次的计数器,有效避免重放攻击;
Code字段,用于维护该账户的合约代码;在实际应用中,Code字段中通常仅维护合约代码的hash值;因而,Code字段通常也称之为Codehash字段。
Storage字段,用于维护该账户的存储内容(默认字段值为空);对于合约账户而言,通常会分配一个独立的存储空间,用以存储该合约账户的存储内容;该独立的存储空间通常称之为该合约账户的账户存储。
合约账户的存储内容通常会构建成MPT(Merkle Patricia Trie)树的数据结构存储在上述独立的存储空间之中;其中,基于合约账户的存储内容构建成的MPT树,通常也称之为Storage树。而Storage字段通常仅维护该Storage树的根节点;因此,Storage字段通常也称之为StorageRoot字段。
其中,对于外部账户而言,以上示出的Code字段和Storage字段的字段值均为空值。
在实际应用中,不论是公有链、私有链还是联盟链,都可能提供智能合约(smartcontract)的功能。区块链上的智能合约是在区块链上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。
智能合约可以以规定的方式在区块链网络中每个节点独立的执行,所有执行记录和数据都保存在区块链上,所以当这样的交易执行完毕后,区块链上就保存了无法篡改、不会丢失的交易凭证。
创建智能合约和调用智能合约的示意图如图3所示。以太坊中要创建一个智能合约,需要经过编写智能合约、变成字节码、部署到区块链等过程。以太坊中调用智能合约,是发起一笔指向智能合约地址的交易,各个节点的EVM可以分别执行该交易,将智能合约代码分布式的运行在以太坊网络中每个节点的虚拟机中。
需要说明的是,除了可以由用户创建智能合约,也可以在创世块中由系统设置智能合约。这类合约一般称为创世合约。一般的,创世合约中可以设置一些区块链网络的数据结构、参数、属性和方法。此外,具有系统管理员权限的账户可以创建系统级的合约,或者修改系统级的合约(简称为系统合约)。另外除了以太坊中的EVM外,不同的区块链网络还可能采用各种的虚拟机,这里并不限定。
随着区块链技术的广泛应用,区块链账户的安全性问题也越来越受到重视。虽然区块链技术基于共识机制、签名验证等基本特性,可以保证区块链网络上的数据安全、透明且不可篡改。但现有的交易方法仍然存在安全隐患,攻击者抓住区块链交易过程中的安全漏洞,以特定的攻击方式发起恶意区块链交易,使得被攻击的对象造成了巨大损失,同时也对区块链网络的安全性产生重大威胁。
为了解决上述问题,图4为根据本说明书一示例性实施例示出的一种区块链交易处理方法的流程图。如图4所示,该方法应用于区块链网络中的区块链节点,可以包括如下步骤:
步骤402:对接收到的区块链交易进行合法性验证,并在验证通过的情况下与所述区块链网络中的其他区块链节点对所述区块链交易进行共识。
在本说明书的技术方案中,以图5所示的区块链相关网络环境为例,可以包括客户端侧计算设备501、服务器端502,以及至少一个区块链系统;例如,区块链系统503。本说明书中的区块链网络,譬如可以包括如图5所示的区块链系统503。客户端侧计算设备501,可以包括各种不同类型的客户端侧计算设备;例如,客户端侧计算设备可以包括诸如PC计算设备、移动计算设备、物联网设备,以及其它形式的具有一定的计算能力的智能设备,等等。在一种实施方式中,客户端侧计算设备501中的至少部分计算设备,可以通过各种通信网络连接到服务器端502;例如,图5中示出的设备5与服务器端502进行了连接。不难理解,客户端侧计算设备501中的部分计算设备,也可以不与服务器端502进行连接,而是作为区块链节点通过各种通信网络直接连接到区块链系统;例如,图5中示出的设备3和设备4,可以作为区块链节点连接到区块链系统。在一种实施方式中,客户端侧计算设备501,还可以包括一个或多个用户侧服务器;例如,图5中示出的设备4和设备5。客户端侧终端设备501中的至少部分计算设备,可以连接到该用户侧服务器;例如,图5中示出的设备6连接到设备4,设备1和设备2连接到设备5。可以理解的是,区块链交易可以通过例如设备4的客户端计算设备发送至区块链系统中,也可以通过服务器端502发送至区块链系统。因此,在上述的步骤402中,区块链节点接收到的区块链交易可以由客户端侧计算设备发送也可以由服务器平台发送,也可以由其他区块链节点广播,本说明书对此不作限制。
区块链节点接收到区块链交易后,首先需要对该区块链交易进行合法性验证。如前所述,区块链交易包括交易内容和发起方基于自身的账户私钥所生成的数字签名,而区块链节点通过该发起方对应的账户公钥可以对接收到的区块链交易中的数字签名进行验证。所述交易合法性验证的工作原理可参考上文的相关描述,此处不再赘述。通过对接收到的交易进行合法性验证,可以确定接收到的区块链交易在传输过程中没有被篡改,提高区块链交易的安全性。
对于验证通过的区块链交易,区块链节点需要与所属区块链网络中的其他区块链节点对该区块链交易进行共识。在本说明书中,可以根据实际需求采用不同的区块链共识算法,例如,可以采用PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法);也可以采用POW(Proof Of Work,工作量证明算法)等,本说明书对此不作限制。其中,区块链交易共识的工作原理可参考上述的相关描述,此处不再赘述。
步骤404:在确认所述区块链交易通过共识的情况下,调用预先部署在所述区块链节点处的管理合约,以通过所述管理合约中的交易校验规则对所述区块链交易进行安全性校验。
在区块链交易通过共识后,通常区块链节点会默认该区块链交易不存在问题、可以直接执行,并且在执行该区块链交易之前不会再对该区块链交易做其他的检查或校验。而在本说明书的技术方案中,区块链节点在确认区块链交易通过共识的基础上,可以通过调用管理合约以基于该管理合约中的交易校验规则对区块链交易做进一步的安全性校验。在相关技术中,通过在网络中添加网关可以对经过的流量进行管理,譬如过滤掉可能存在安全性风险的流量,本说明书中采用的管理合约可以实现类似于网关的作用,比如该管理合约可以对区块链交易进行筛选,以过滤掉不符合交易校验规则的区块链交易,使得区块链节点仅执行符合交易校验规则的区块链交易,从而避免区块链交易的执行可以导致的安全性风险,从而有助于提升在区块链上执行交易的安全性。
在对区块链交易进行安全性校验前,区块链节点可以先对区块链交易进行解析,以得到能够用于进行安全性校验的待检测数据。该待检测数据可用于与交易校验规则中的预设数据范围进行比对,当该区块链交易的待检测数据在交易校验规则的预设数据范围内时,可以确定该区块链交易通过安全性校验。举例而言,待检测数据可以为交易发起方的账户地址,或者当区块链交易为转账交易时,待检测数据可以为交易中包含的转账的具体内容,例如转账的具体金额或者转账对象的账户地址等,又或者当区块链交易为调用合约的交易时,待检测数据可以为交易所要调用的智能合约的合约地址等,本说明书对此不作限制。在实际应用中,交易校验规则所针对的校验数据类型以及校验的具体形式可以由本领域技术人员根据实际需求进行配置。
对于管理合约中交易校验规则的具体内容,可以针对现有的区块链攻击形式进行针对性的设置。例如针对溢出类攻击,通常情况下溢出类攻击的攻击方会在区块链交易中将交易金额设置为巨额,相应的可以在交易校验规则中针对交易金额这一参数设置阈值,若区块链节点接收到的区块链交易的交易金额超过预设金额阈值,则认为该区块链交易可能为溢出类攻击的攻击交易,区块链节点拒绝执行该区块链交易;又例如,针对重入攻击,由于重入攻击的攻击方式是在短时间内多次调用交易,相应的可以在交易校验规则中针对交易频率这一参数设置阈值,若区块链节点在单位时间内获取区块链交易的次数节较多,接收交易的频率超过了交易校验规则中的预设频率阈值,则认为该区块链交易可能为重入攻击的攻击交易,区块链节点拒绝执行该区块链交易;又例如,针对拒绝服务类,由于拒绝服务类攻击主要通过在区块链交易中包含较大的数据量,以占用区块链节点上大量的处理计算资源,导致区块链节点无法正常提供其他服务,因而相应的可以在交易校验规则中针对数据量这一参数设置阈值,当区块链节点获取的区块链交易的数据量大小超过预设数据量阈值时,认为该区块链交易可能为拒绝服务类攻击的攻击交易,区块链节点拒绝执行该交易;又例如,针对多次发起恶意交易破坏区块链交易安全的用户账户,可以将其加入交易校验规则的账户黑名单中,区块链节点可以根据交易校验规则拒绝执行所有由该账户黑名单中的用户账户发起的区块链交易。
在确认区块链交易通过共识后,区块链节点可以自发地调用管理合约,而无需由该区块链交易进行调用。因此,区块链交易的发起方在创建该区块链交易时,无需
在一实施例中,所述管理合约包括接口合约和校验合约,接口合约用于向外提供唯一不变的调用接口,而对区块链交易进行安全性校验的交易校验规则被维护于校验合约中。在区块链交易通过共识后,区块链节点可以通过预定义接口(即上述唯一不变的调用接口)调用接口合约,而该接口合约中维护有校验合约的合约地址,使得区块链节点可以进一步基于该接口合约中的合约地址来调用校验合约,进而根据校验合约所维护的交易校验规则判断区块链交易是否安全。
具体的,为了使得区块链节点能够自发地调用管理合约,接口合约可以被部署于区块链节点上运行的区块链平台链代码中。区块链节点本身是一种逻辑概念,通过在节点设备上创建一节点实例,并由该节点实例运行上述的区块链平台链代码,即可使得该节点实例成为一区块链节点。可见,区块链平台链代码是使得节点实例成为区块链节点的底层逻辑,故而区块链节点在运行过程中可以直接执行区块链平台链代码,从而使得区块链节点可以通过区块链平台链代码中记录的预定义接口来主动触发对接口合约的调用,而无需像相关技术中那样由区块链交易来调用接口合约。
区别于部署在区块链平台链代码中的接口合约,校验合约需要部署至区块链。例如,校验合约可以为创世合约,即该校验合约在区块链网络的创建之初被部署在创世区块中。再例如,校验合约可以为系统合约,需要由管理员进行部署,一些情况下可能需要超出预设比例的管理员的认可下才能够完成部署。当然,不排除一些情况下,可能由区块链网络的一般成员来部署校验合约,即校验合约可以为区别于创世合约与系统合约的普通合约。由于接口合约位于区块链平台链代码中,使得对于接口合约的升级难度大、可行性低;而无论是创世合约、系统合约或普通合约,由于校验合约部署于区块链中,因而能够易于对校验合约进行更新。当然,由于交易校验规则被维护于校验合约中,因而往往是出于对交易校验规则进行调整而更新校验合约,而一般不存在对接口合约的更新需求。
在本说明书中,校验合约的合约地址被记载于上述接口合约的相应世界状态中。在对校验合约进行更新时,只需在区块链中部署包含新交易校验规则的更新后校验合约,并将接口合约的上述世界状态的取值更新为该更新后校验合约的合约地址:由于接口合约的调用接口未发生变化,使得区块链节点始终都可以通过统一的接口调用接口合约,并根据该接口合约在世界状态中维护的合约地址调用更新后校验合约,进而根据新的交易校验规则对区块链交易进行安全性校验。可以通过发起调用接口合约的区块链交易,并由该区块链交易将更新后校验合约的合约地址作为入参提供至接口合约,进而更新为接口合约对应的世界状态的取值;其中,该调用接口合约的区块链交易可以由区块链管理员发起,以确保安全性。
步骤406:在确认所述区块链交易通过安全性校验的情况下,执行所述区块链交易;以及,在确认所述区块链交易未通过安全性校验的情况下,拒绝执行所述区块链交易。
在本说明书的技术方案中,区块链交易可以包括如前所述的调用智能合约的交易;或者,区块链交易也可以包括与智能合约无关的交易,这些交易只需要实现简单的交易逻辑、无需采用智能合约来实现复杂的交易逻辑,譬如简单的交易逻辑可以包括转账等。那么,区块链节点在判断接收到的区块链交易通过管理合约的安全性校验后,若区块链交易并非调用智能合约的交易,譬如为转账交易,则可以通过所述管理合约执行所述转账交易以进行转账,即管理合约除了用于安全性校验之外,还可以用于完成转账等简单的交易逻辑;若区块链交易为调用业务合约的交易,则调动所述业务合约以执行所述区块链交易。若区块链节点确认所述区块链交易未通过安全性校验,则拒绝执行该区块链交易,并继续处理接收到的其他区块链交易。
进一步的,本说明书中的管理合约并非始终保持不变,随着区块链攻击形式的更新,本说明书中的交易校验规则也会相应发生改变。在有需要的情况下,可以在管理合约原有交易校验规则的基础上增加新的交易校验规则,或者可以删除原有交易校验规则中的部分内容,或者也可以通过修改原有交易规则中的预设阈值等方式修改原有的交易校验规则,举例而言,管理合约中的交易校验规则用于在接收到转账交易时检查交易金额是否处于预设金额范围并检查交易的转账对象账户是否处于黑名单账户,在该交易校验规则的基础上,可以修改原有预设金额范围的取值,也可以删除原有黑名单账户中的部分账户,或者增加新的检查规则。
对于所要更新的交易校验规则的具体内容,可以由区块链网络管理员自行决定,或者也可以由管理员在链外对交易校验规则的更新进行提案,并由部分或者所有区块链用户对更新提案进行表决,在表决结果符合特定规则的情况下按照该更新提案进行对交易校验规则进行更新,本说明书对此不作限制。例如,区块链网络管理员可以在链外网站上向用户提供一个或多个管理合约交易校验规则的更新提案,使得该区块链网络的用户可以在该链外网站上对更新提案进行投票,并最终根据用户的投票结果,选择获得票数最多或者票数超过预设数量的更新提案对交易校验规则进行更新,本说明书对此不作限制。除了链外投票的方式外,区块链用户还可以通过对更新提案进行签名的方式来进行表决,区块链管理员或者区块链普通用户在链外发起更新提案,由区块链网络中的成员根据是否同意该更新提案对其进行签名,例如,区块链网络中的成员可以按照预先定义好的规则,只有在同意该更新提案的情况下才会对更新提案进行签名,并且可以将签名广播给其他区块链节点,使得区块链网络中的所有区块链用户都能够获知其他区块链用户的签名结果,当存在不少于预设数量或者预设比例的区块链网络成员对更新提案进行签名时,区块链网络管理员根据该更新提案对交易校验规则进行更新。其中,参与签名的用户可以为区块链网络中的所有用户,也可以仅为具有较高权限的所有管理员,本说明书对此不作限制。
虽然对于交易校验规则而言,本申请并不限制其在校验合约中的存储位置,但需要理解的是,若交易校验规则被写在校验合约的合约代码中,由于智能合约的合约代码在上链后无法被更改,因此,在更新交易校验规则时,必然需要在区块链上重新部署包含新的交易校验规则的校验合约;而若交易校验规则被写在校验合约的世界状态中,则不需要通过部署新的校验合约的方式对交易校验规则进行更新,而是可以直接发起交易校验规则的更新交易,将校验合约的世界状态的取值更新为新的交易校验规则。
在上述对于交易校验规则更新的基础上,若只将更新后校验合约部署在区块链上,则区块链节点根据原有的调用逻辑,在接收到区块链交易后依然调用原有的校验合约。因此,除了部署包含新交易校验规则的更新后校验合约外,还需要相应更改接口合约的对应世界状态的取值。其中,更新后校验合约的部署以及接口合约世界状态取值的更新可以分别通过两个区块链交易完成,例如,区块链网络管理员可以首先将一笔包含创建更新后校验合约信息的交易发送到区块链网络,在确定该区块链交易通过共识的情况下,成功将更新后校验合约部署在区块链上并产生对应的合约地址。在此基础上,区块链网络管理员可以再根据更新后校验合约的合约地址发起合约更新交易,使得区块链节点在接收到合约更新交易后调用接口合约,将接口合约对应的世界状态的取值更新为更新后的校验合约的合约地址。除此之外,更新后校验合约的部署以及接口合约世界状态取值的更新也可以只通过一个区块链交易完成,例如,区块链网络管理员可以发起包括更新后校验合约的合约更新交易,区块链节点在接收到合约更新交易后可以将更新后校验合约创建并部署到区块链上,使得区块链上产生与该更新后的校验合约对应的合约地址,区块链节点再根据该合约地址修改接口合约的对应世界状态的取值。其中,更新后的校验合约的部署方法部署智能合约的相关内容,本说明书对此不作限制。需要注意的是,管理合约的更新交易可以仅由区块链网络的管理员发起,即仅允许管理员在区块链网络原有管理合约的基础上进行更新,避免将管理合约的修改权限开放给普通用户,以防止由此导致的安全性问题。
通过对校验合约中交易校验规则以及对校验合约的调用逻辑的更新,虽然区块链节点在接收到区块链交易时依然会按照原有的预设接口调用接口合约,但此时接口合约所维护的合约地址已经被修改为更新后校验合约的合约地址,接口合约可以根据更新后校验合约的合约地址进一步调用更新后的校验合约,从而能够按照新的交易校验规则对该区块链交易进行安全性校验。
对于上述任一实施例而言,若区块链网络为联盟链,则该联盟链内的区块链节点可以基于自身是否参与共识而分为多种类型,比如将参与共识的区块链节点称为执行节点,而将不参与共识的区块链节点称为同步节点,同步节点并不参与共识和执行区块链交易,而是直接从执行节点或其他同步节点处进行区块同步。因此,本说明书所公开的技术方案可以只应用于联盟链中的执行节点,即只有执行节点通过管理合约对区块链交易进行安全性校验,而同步节点可以不参与。
本说明书通过在区块链系统中增加管理合约,使得所有的区块链交易在被执行前都要经过管理合约的筛选,区块链节点只执行符合管理合约安全性校验的区块链交易,并且本说明书中的管理合约可以灵活设置不同的交易校验规则,以解决区块链网络在面对不同形式攻击交易的安全性问题。下面以图5所示区块链网络环境中的区块链节点3为例,针对图2所示的智能合约调用交易,结合图6进行详细说明。
其中,图6是根据本说明书一示例性实施例示出的一种区块链交易的处理方法流程图。如图6所示,可以包括以下步骤:
步骤602:区块链节点3接收设备4发送的区块链交易。
举例而言,区块链系统503中的区块链节点3接收到用户Bob通过设备4发送的区块链交易,且该区块链交易由用户Bob的账户私钥进行了签名。
步骤604:区块链节点3判断区块链交易是否通过合法性验证。
区块链节点3在接收区块链交易后,根据本地存储的用户Bob的账户公钥验证该区块链交易所携带的数字签名。
或者,该区块链交易携带有CA中心向用户Bob账户颁发的CA证书,该CA证书保存有用户Bob的账户公钥且通过CA中心的私钥进行了签名,区块链节点3可以在接收区块链交易后利用CA中心的公钥对该CA证书的数字签名进行验证,在签名验证通过后获取该CA证书中包含的用户Bob的账户公钥,从而可以利用获取到的用户Bob的账户公钥对该区块链交易的数字签名进行验证。
区块链节点3通过用户Bob的公钥对数字签名进行计算,并将计算的得到的结果与区块链交易的哈希摘要进行比对,若不能比对成功,则区块链节点3确定接收到的区块链交易没有通过合法性验证,转至步骤614;若比对成功,则区块链节点3确定接收到的区块链交易通过了合法性验证,转至步骤606。
步骤606:区块链节点3与区块链系统503中的其他区块链节点对该区块链交易进行共识。
举例而言,若区块链网络采用的共识算法为需要争夺每一轮的记账周期的记账权的POW算法,区块链节点3在确认该交易通过合法性验证后,将其广播给区块链系统503中的其他区块链节点,争夺记账权的节点设备在接收到该区块链交易后执行该笔交易,最终可能有一个节点设备在本轮争夺记账权的过程中胜出,成为记账节点。该记账节点可以将收到的该区块链交易与其它交易一起打包以生成候选区块,并将生成的候选区块或者该候选区块的区块头发送至其它节点设备进行共识。
举例而言,若区块链网络采用的共识算法为不需要争夺记账权的拜占庭容错算法,则区块链节点3可以将该区块链交易发送给本轮的记账节点,由记账节点将该区块链交易与其他区块链交易一起打包生成候选区块,并将生成的候选区块或者该候选区块的区块头发送至其它节点设备进行共识。
步骤608:区块链节点3调用管理合约进行安全性校验。
在本实施例中,管理合约包含接口合约与校验合约,接口合约部署于所述区块链节点上运行的区块链平台代码,并在对应的世界状态中维护有校验合约的合约地址,所述校验合约维护有预设的交易校验规则。
在区块链交易共识通过后,区块链节点3根据记录于区块链平台代码中预定义接口调用接口合约,并根据接口合约的世界状态获取校验合约的合约地址,调用对应的校验合约校验接收到的区块链交易。
以上述图2所示的调用智能合约的交易为例,区块链节点3在对该区块链交易共识通过后调用管理合约解析得到该区块链交易中的From字段为“Bob(0xf5e...)”,该字段即为发起调用智能合约的账户地址,将该账户地址与交易校验规则中的黑名单账户进行比对。
或者,以转账交易为例,区块链节点3在对接收到的转账交易共识通过后调用管理合约,解析得到该转账交易中的value字段,在区块链交易中“value”字段即为交易发起者所要向交易接收者转账的金额,将该交易金额与交易校验规则中的预设交易金额阈值进行比对。同时,区块链节点3也可以调用管理合约计算接收区块链交易的频率,将交易频率与交易校验规则中的预设频率阈值进行比对。
步骤610:区块链节点3判断区块链交易是否通过安全性校验。
以上述调用智能合约的交易为例,若交易校验规则的黑名单账户中存在账户地址“Bob(0xf5e...)”,则该区块链交易无法通过管理合约的安全性校验,转至步骤614,区块链节点3拒绝执行该区块链交易并将该笔交易丢弃,等待处理下一笔区块链交易。若管理合约交易校验规则的黑名单账户中不存在该账户地址,则认为该区块链交易通过了管理合约的安全性校验,转至步骤612。
以上述转账交易为例,若转账金额或者交易频率超过了交易校验规则中的预设金额阈值和预设频率阈值,则该区块链交易无法通过管理合约的安全性校验,转至步骤614,区块链节点3拒绝执行该区块链交易并将该笔交易丢弃,等待处理下一笔区块链交易。若转账金额和交易频率均没有超过交易校验规则中的预设金额阈值和预设频率阈值,则认为该区块链交易通过了管理合约的安全性校验,转至步骤612。
步骤612:区块链节点3执行区块链交易。
以上述调用智能合约的交易为例,区块链节点3根据该区块链交易中的合约地址“0x6f8ae93…”调用智能合约。
以上述转账交易为例,区块链节点3按照该区块链交易中的交易金额向交易中的交易接收方地址转账。
步骤614:区块链节点3不执行区块链交易。
图7是一示例性实施例提供的一种区块链交易处理电子设备的示意结构图。请参考图7,在硬件层面,该设备包括处理器702、内部总线704、网络接口706、内存708以及非易失性存储器710,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器702从非易失性存储器710中读取对应的计算机程序到内存708中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图8,区块链交易处理装置可以应用于如图7所示的设备中,以实现本说明书的技术方案。其中,该区块链交易处理装置可以包括:
验证共识单元802,被配置为对接收到的区块链交易进行合法性验证,并在验证通过的情况下与所述区块链网络中的其他区块链节点对所述区块链交易进行共识。
校验单元804,被配置为在确认所述区块链交易通过共识的情况下,调用预先部署在所述区块链节点中的管理合约,以通过所述管理合约中的交易校验规则对所述区块链交易进行安全性校验。
执行单元806,被配置为在确认所述区块链交易通过安全性校验的情况下,执行所述区块链交易;以及,在确认所述区块链交易未通过安全性校验的情况下,拒绝执行所述区块链交易。
可选的,所述管理合约包括接口合约和校验合约;所述调用预先部署在所述区块链节点中的管理合约包括:在所述接口合约的调用条件被满足的情况下,通过预定义接口调用所述接口合约;其中,所述接口合约的调用条件包括:所述区块链交易通过共识;根据所述接口合约维护的所述校验合约的合约地址,进一步调用所述校验合约,以通过所述校验合约中的交易校验规则对所述区块链交易进行安全性校验。
可选的,所述接口合约包括:部署于所述区块链节点上运行的区块链平台代码中的系统合约;其中,所述预定义接口被记录于所述区块链平台代码中。
可选的,所述校验合约的合约地址被维护于所述接口合约对应的世界状态中。
可选的,上述装置还包括:
第一更新单元808,被配置为根据接收到的合约更新交易,所述合约更新交易包括更新后的校验合约的合约地址;响应于所述合约更新交易,调用所述接口合约以将所述世界状态的取值更新为所述更新后的校验合约的合约地址。
第二更新单元810,被配置为根据接收到的合约更新交易,所述合约更新交易包括更新后的校验合约;响应于所述合约更新交易,部署所述更新后的校验合约,并调用所述接口合约以将所述世界状态的取值更新为所述更新后的校验合约的合约地址。
可选的,所述合约更新交易由所述区块链网络中的管理员提交;或者,所述合约更新交易包含所述区块链网络的所有成员中不少于预设数量或预设比例的成员签名;或者,所述合约更新交易包含所述区块链网络的所有管理员中不少于预设数量或预设比例的管理员签名。
可选的,所述交易校验规则用于实现下述检查中至少之一:
交易金额是否处于预设金额范围;交易的数据量是否处于预设数据量范围;交易频率是否处于预设频率范围;交易发起方账户是否为预设黑名单账户。
可选的,所述执行所述区块链交易,包括:若区块链交易为转账交易,则通过所述管理合约执行所述转账交易以进行转账;若区块链交易为调用业务合约的交易,则调用所述业务合约以执行所述区块链交易。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。