本发明涉及用于能够在区块链网络中执行智能合约的方法及用于构成该网络的节点,更详细地说,涉及一种用于能够在区块链网络中确定性执行使用非确定性的外部数据的智能合约的方法及用于构成该网络的节点。
背景技术:
在区块链网络上将合约程序化或编码化而能够自动执行合约对象的交易的“智能合约”备受注目。例如,区块链网络的各节点将交易积攒到内存池中,成为提议者的节点根据所积攒的一个或多个交易生成区块,在该网络中进行共识形成的提案。根据区块链的设计,能够在交易内描述所希望的合约内容,在达成了关于包含这样的交易的区块的选择的共识形成的情况下,该区块被追加到各节点所具有的区块链中,能够自动地执行被描述为适当调用该智能合约的内容。
例如,作为假想事例,假设各节点具有某个企业的股东和其持有股票数作为股东名册。而且,假设“从股东s向股东b转让股东s的持有股票的一半”这样的交易是合约内容。如果对各节点赋予根据区块的高度唯一地选出作为卖方的股东s和作为买方的股东b的规则,则在执行调用该内容的交易时,按照该规则自动地选择股东s和股东b,进行转让。执行后,各节点根据持有股票数的变化更新股东名册。
在此,列举了特殊的事例,但像这样,如果能够唯一地确定合约内容中包含的变量,则在区块链网络中,各节点所具有的区块链相同,并且各节点的状态、在上述的例子中是股东名册也能够维持相同。
技术实现要素:
发明要解决的问题
在上述的假想事例中举出特殊的事例是有理由的。如果各节点中的状态不维持相同,则网络整体没有可靠性,但为了维持各节点的状态的同一性,会对可描述的合约内容施加制约。
例如,如果假设“如果股价超过1000日元,则从股东s向股东b转让股东s持有股票数的一半”这样的交易是合约内容,则在执行该交易时,各节点必须能够参考股价的值。股价的值不能在区块链网络内参考,必须向证券交易所等外部机关的系统进行查询。而且,各节点进行查询的时刻不严格一致,因此,作为查询结果得到的股价的值也不一致。因此,会发生在某个节点中判定股价超过1000日元,而在其他节点中判定股价未超过1000日元的状况,各节点的状态不匹配。
即,使用能够根据节点不同而不同的非确定性(non-deterministic)的外部数据的智能合约存在在现状的结构中不能实现的制约。为了在将来广泛地普及智能合约,必须消除该制约,使得能够利用各种外部数据。
本发明是鉴于这样的问题而完成的,其目的在于,提供一种用于能够在区块链网络中确定性地执行使用非确定性的外部数据的智能合约的方法及用于该方法的程序以及用于构成该网络的节点。
这里,“确定性”是指在任何节点中都能够得到相同的结果或者能够这样评价,“非确定性”是指不一定如此。
此外,术语“智能合约”是多义的,但是在本说明书中,用于表示在满足预定条件的情况下执行所描述的处理的代码。
用于解决问题的技术手段
为了实现这样的目的,本发明的第一方式是一种用于能够在区块链网络中执行使用非确定性的外部数据的智能合约的方法,其特征在于,包括:构成所述区块链网络的节点接收包含调用智能合约的交易的区块的步骤;所述节点进行所述区块的验证的步骤;以及所述节点在对所述区块的选择形成共识后,将所述区块追加到所述节点的区块链中的步骤,所述区块包含所述外部数据的值,所述验证包含所述外部数据的所述值的验证。
另外,本发明的第二方式的特征在于,在第一方式中,所述智能合约是在执行时满足使用所述外部数据的条件的情况下执行所描述的处理的代码。
另外,本发明的第三方式的特征在于,在第一或第二方式中,所述外部数据的所述值通过查询所述区块链网络的外部系统来获取。
另外,本发明的第四方式的特征在于,在第一至第三方式中的任一方式中,所述外部数据中,参照目的地以能够通过各节点解释访问目的地的形式来表示。
另外,本发明的第五方式的特征在于,在第一至第四方式中的任一方式中,所述区块具有一个或多个交易和在所述一个或多个交易中使用的一个或多个外部数据的名称的值的对应关系。
此外,本发明的第六方式的特征在于,在第一至第五的任一方式中,所述验证根据预先存储在各节点中的验证规则来进行。
另外,本发明的第七方式的特征在于,在第一至第五方式中的任一方式中,所述验证根据验证规则来进行,所述验证规则被定义为在所述智能合约中使用的外部数据的参数。
此外,本发明的第八方式的特征在于,在第六或第七方式中,在所述外部数据的所述值与所述节点获取的值在规定的范围内的情况下,所述验证规则判定为有效。
另外,本发明的第九方式是一种程序,用于使计算机执行用于能够在区块链网络中执行使用非确定性的外部数据的智能合约的方法,所述程序的特征在于,所述方法包括:构成所述区块链网络的节点接收包含调用智能合约的交易的区块的步骤;所述节点进行所述区块的验证的步骤;以及所述节点在对所述区块的选择形成共识后,将所述区块追加到所述节点的区块链中的步骤,所述区块包含所述外部数据的值,所述验证包含所述外部数据的所述值的验证。
另外,本发明的第十方式是一种用于构成区块链网络的节点,所述区块链网络能够执行使用非确定性的外部数据的智能合约,所述节点的特征在于,接收包含调用智能合约的交易的区块,进行所述区块的验证,在对所述区块的选择形成共识后,将所述区块追加到所述节点的区块链中,所述区块包含所述外部数据的值,所述验证包含所述外部数据的所述值的验证。
发明的效果
根据本发明的实施例,在验证包括调用使用非确定性外部数据的智能合约的交易的区块时,执行外部数据的值的验证,由此,可以避免在自动执行智能合约时所需的参数成为非确定性的参数,并且能够使用各种外部数据。
附图说明
图1是表示本发明的一实施方式的区块链网络的图。
图2是表示本发明的一实施方式的区块链网络中的提议者节点的动作的流程图。
图3是示意性示出本发明的一实施方式的区块的数据结构的图。
具体实施方式
以下,对本发明的实施方式进行详细说明。
图1表示本发明的第一实施方式的区块链网络。网络100具备第一节点101、第二节点102、第三节点103和第四节点104。这些节点分别具有区块链,参与有关新的区块的选择的共识形成。在图1中,示出了4个节点的例子,但这只不过是例示。此外,网络100可以包括不参与共识形成的节点。以下,对第一节点101是共识形成的提议者的情况进行说明。
第一节点101具备通信接口等通信部101a、处理器、cpu等处理部101b、以及包含存储器、硬盘等存储装置或存储介质的存储部101c,能够通过执行用于进行各处理的程序而构成,有时包含一个或多个装置或服务器,另外,该程序有时包含一个或多个程序,另外,能够记录在计算机可读存储介质中而成为非暂时性的程序产品。
第一节点101根据将可从存储部101c或第一节点101访问的存储装置或存储介质作为内存池而积攒的一个或多个交易来生成新的区块(s201)。这些交易中的至少一个调用智能合约。智能合约在交易中的调用可以包括在该交易中描述智能合约本身。
对于调用智能合约的交易,第一节点101向外部系统查询该智能合约所使用的非确定性外部数据。例如,在该智能合约是“如果股价超过1000日元,则从股东s向股东b转让股东s持有股票数的一半”这样的代码的情况下,向证券交易所系统110查询股价数据。
例如,股价可以以规定的形式表示其为外部数据,在生成区块时,或者在其前后,第一节点101能够解释该规定的形式,从指定的获取目的地获取股价数据。作为一例,可以以如下的函数的形式来表示外部数据。
ext(<url>,<名称>)
“ext”表示是外部(external),指定的url表示计算机网络上的参照目的地。名称除了上述的形式以外,例如在股价(shareprice)的情况下也可表示为如下那样。
ext_shr(<url>)
参照目的地不一定是相同的,也可以以各节点能够解释访问目的地的形式来表示。例如,也可以将股价代码作为参照目的地,在各节点中,从赋予该股价代码的股价的不同的信息源或访问目的地进行获取。
所生成的区块除了一个或多个交易之外还包含所获取的数据(s202)。在外部数据为1个的情况下,不一定需要确定该外部数据的名称,但在可能为多个的情况下,可以对各个外部数据赋予名称,作为将值与名称关联起来的外部数据列表而包含在区块中。这里,外部数据的值不限于列表形式,只要保持名称与值的对应关系即可。
图3表示本实施方式的区块的数据结构的一例。区块300包括区块头310、区块体320、附加数据330和证据340。尽管不一定需要这样的区分,但区块体320包括一个或多个交易(tx),并且附加数据330包括在这些交易中使用的一个或多个外部数据的名称或密钥(k)与值(v)的对应关系。
第一服务器101将所生成的区块作为提议者发送至参与共识形成的多个节点(也可以包括自身节点)(s203)。在接收到该区块的各节点中,根据预先确定的验证规则(validationrule),进行该区块的验证(s204),通过满足规定的条件,在网络100中形成关于该区块的选择的共识。
在此,在本实施方式中,验证规则除了进行关于交易的验证之外,还进行关于外部数据的验证。例如,如果以接收到该块的第二节点102为例进行考虑,则第二节点102向证券交易所系统110查询股价并获取股价数据,与该区块所包含的股价的值进行比较,如果其差在规定的范围内,则能够判定为有效(valid)。如下的规则为一例,如果两者的差为±5%,则返回真,否则返回假。外部数据的验证规则可以预先存储在各节点中,另外,也可以如参照目的地、名称那样作为外部数据函数的参数而具有,也可以包含在外部数据的定义中。
在网络100中达成共识形成之后,各节点将该区块追加到各节点的区块链中(s205),并执行所描述的内容。
这样,在包含调用使用非确定性的外部数据的智能合约的交易的区块的共识形成时,通过进行外部数据的验证,能够避免在该智能合约自动执行时所需要的参数成为非确定性的参数,能够使各节点的状态变化匹配。
作为非确定性外部数据,可列举有外部数据库或外部系统的查询结果。
替代地,外部数据可以是能够从区块链网络100获取的数据,可以举出时刻、随机数等。这些数据,例如,有时各节点从自身节点获取。
在上述说明中,考虑了在智能合约或调用该智能合约的交易内进行外部数据函数的定义的情况,但如果生成定义了外部数据函数的交易,并事先对包含该交易的区块达成共识,则能够在该区块之后的区块中参照该外部数据函数而在智能合约内使用。
另外,应注意,如果没有“仅基于××”、“仅根据××”、“仅在××的情况下”这样的“仅”的记载,则在本说明书中,还可以考虑附加的信息。
另外,为了慎重起见,即使在某些方法、程序、终端、装置、服务器或系统(以下称为“方法等”)中存在进行与本说明书中记述的动作不同的动作的方面,本发明的各方式也是以与本说明书中记述的动作的任意一个相同的动作为对象,存在与本说明书中记述的动作不同的动作并不意味着该方法等在本发明的各方式的范围外。
符号说明
100区块链网络
101第一节点
101a通信部
101b处理部
101c存储部
102第二节点
103第三节点
104第四节点
110外部系统
300区块
310区块头
320区块体
330附加数据
340证据。