用于经由区块链实施确定性有限自动机(DFAs)的系统和方法与流程
未命名
08-27
阅读:83
评论:0
用于经由区块链实施确定性有限自动机(dfas)的系统和方法
1.本技术是中国申请号为2017800664080(对应于pct国际申请号pct/ib2017/056696)、申请日为2017年10月27日、发明名称为“用于经由区块链实施确定性有限自动机(dfas)的系统和方法”的发明专利申请的分案申请。
技术领域
2.本发明一般涉及用于自动化执行基于计算机的过程计算机协议的系统和协议,更特别地涉及条件控制过程(诸如例如与合约有关的那些)的验证、强制实施和/或执行。然而,本发明不限于与合约有关的使用。本发明还涉及区块链技术,例如但不限于比特币区块链,并且可以用于以智能合约获益。
背景技术:
3.长期以来,人们一直希望使用计算机来自动化和控制任务和进程的执行。例如,在执行各方(例如,与金融协议有关的各方)之间的协定方面尤其如此。自从认识到合约的本质的电子版本可以更好地由计算机定义并随后执行和强制实施,智能合约一直是具有学术研究和实际意义的课题。现代合约管理的一个关键问题是,它往往是特设的(ad-hoc),其中合约的本地存储和副本需手动维护。这些副本可能会彼此不同步,并要求其各自存储和维护。这是低效的、并且会引起与安全性、成本有关的问题。这些问题可以至少部分地通过自动化执行机器可读和可执行文件(在本领域中有时被称为“智能合约”)来解决。这种自动化解决方案还有助于最大限度地减少由自然语言和法律术语引起的可能的歧义和解释。因此,如果合约是自动化的,则可以以更低成本、更高效且可靠的方式执行合约。
4.在文献中已提出的不同方法中,已经表明确定性有限自动机(dfa),也被称为确定性有限状态机,具有足够丰富的结构来代表大范围的(如果不是全部的话)可想象的金融协议以及其它类型的合约。有限状态机和dfa的概念在计算科学中是众所周知的。dfa是被设想为抽象机的计算数学模型,其可以处于有限状态集合中的一个,并且当触发事件或条件发生时可以从一个状态改变到另一状态(转换)。它的计算能力高于组合逻辑的计算能力,但低于堆栈机器的计算能力。
5.最近还就区块链技术研究了合约的自动化执行。一个实例是cn 105893042a,其讨论了区块链作为与在执行智能合约期间发生的状态变化相关的数据的安全存储设施的使用。然而,区块链技术、交易输出及其相关脚本可以以更精密和技术复杂的方式使用以提供更智能的行为,如本文所讨论。
6.区块链是计算机实施的、去中心化的、分布式点对点计算机系统,其由不可改变的块构成,而这些块又由交易构成。它涉及基于共识的协议。每个块含有前一个块的哈希,使得块被链接在一起,以创建自其开始以来已写入到区块链的防篡改和永久记录的所有交易。这些块可以被公开地查看,但一旦它们成为区块链的一部分就不能被更改或删除,因为更改会导致哈希的改变。
7.交易含有嵌入其输入和输出中的被称为脚本的小程序,其指定可以如何以及由谁
来访问交易的输出。每个未花费的交易(被称为utxo)都可以作为新交易的输入而被花费,因此链随时间的推移而增长。每个输出都有一个相关的货币数量,只要它符合输出的锁定脚本中指定的要求,就可以将其花费于网络上的地址。地址是加密非对称密钥对的公钥。p2pkh(支付到公钥哈希)输出是直接将其值支付给地址(公钥)的输出,而p2sh(支付到脚本哈希)交易中的输出与含有第二脚本的哈希的公钥脚本(也称为解锁脚本)相关联,所述第二脚本即为接收者必须在后续交易中连同其签名一起提供以便花费输出的赎回脚本。
8.区块链技术最广为人知的应用是比特币分布式账本,但是已经提出并开发了其它区块链实施方式。尽管可能出于方便和说明的目的在本文中参考了比特币,但是应当注意,本发明不限于与比特币区块链一起使用,并且可替代的区块链实施方式也落入本发明的范围内。
9.区块链技术以加密货币实施方式的使用而闻名。然而,在更近的时期,数字化创业者们已经开始探索比特币所基于的加密安全系统的使用以及可以存储在区块链上的数据,以实施新系统。因此,被称为“智能合约”的计算机协议已经开始引起关注,因为它们可以部分或全面地实现合约的自动化强制实施或执行。区块链实施的智能合约可以提供诸多益处,例如增强的安全性、防篡改和永久性事件的公共记录以及降低的交易成本。
10.因此,希望提供一种解决方案,其提供过程(例如,合约)的自动化所带来的益处以及将区块链用于该自动化的益处。
技术实现要素:
11.现在已经设计出此改进的解决方案。本发明由所附权利要求限定。
12.根据本发明,可以提供一种区块链实施的方法/系统。这可以被描述为一种用于自动化执行和控制技术过程的方法/系统。本发明可以提供一种技术创新,其经由在区块链的基础结构上的有限状态机或dfa的实施或实际体现来促进过程的自动化执行。可以定义和确定机器的状态。可以存储每个状态转换的条件或触发条件。在执行过程时,可以将执行的状态记录在永久性区块链账本上。区块链交易可以具备代理或参与者使机器从一个状态移动到另一状态的功能。每个状态转换可以表示或对应于过程中的步骤。当dfa定义合约时,本发明可以提供一种自动执行和强制实施不同缔约方的承诺以及其它条款和规定的机制。
13.另外地或可替代地,本发明可以被描述为一种使用区块链来控制正在区块链外执行的计算机实施的过程的方法/解决方案。因此,它可以包括基于计算机系统的交互,所述系统在其架构和协议方面是非常不同的。可以根据本发明的该方面使用上述特征中的一个或多个。
14.本发明的一个或多个实施例可以提供一种在区块链上或与区块链一起实施(体现或实现)dfa的方法。dfa可以是基于软件的dfa。区块链可以与基于比特币的协议一起实施,或者可以使用另一种区块链协议。另外地或可替代地,它可以是一种被布置成能够确定区块链实施的dfa的状态的方法。这可以是当前状态。所述方法可以实现动态(在运行时)确定dfa的状态。因此,本发明的一个或多个方面可以提供一种用于以更准确、复杂且智能的方式在区块链上实施dfa的机制,而不仅仅是用作用于记录关于已经发生的事件的数据的安全存储设施。
15.它可以包括以下步骤:将区块链交易(tx1)的未花费的输出(utxo1)的锁定脚本的
一部分与dfa的给定状态相关联。锁定脚本的所述部分可以是锁定脚本内的一部分数据。它可以是一部分元数据。它可以是识别符、标记或标签。
16.因此,本发明可以在区块链上使用未花费的交易输出(utxo)来记录和识别dfa已经处于和/或当前处于执行中的给定点的状态。
17.所述方法可以包括以下步骤:
18.使用另一交易(tx2)以通过花费交易(tx1)的输出(utxo1)来使dfa从所述状态转换到另一状态。所述另一状态可以与在另一交易的未花费的输出(utxo2)的锁定脚本内提供的一部分数据相关联。因此,花费utxo可使dfa状态的改变记录或体现在区块链中。
19.所述方法可以包括以下步骤:
20.使用一部分代码来实施或表示至少一个状态转换触发条件(trigger),当被执行时,所述状态转换触发条件使另一交易(tx2)花费所述交易(tx1)的所述输出(utxo1)并因此将所述dfa移动到另一状态。
21.所述部分代码可以包括机器可测试条件,所述机器可测试条件基于输入信号提供布尔(boolean)结果。输入信号可以在运行时确定,并且可以由所述部分代码使用以确定是否应花费所述未花费的输出(utxo1)以便将dfa移动到另一状态。
22.未花费的输出(utxo1)中的所述部分数据可以在锁定脚本中提供。
23.所述部分数据可以是标签、标记或一部分元数据。
24.dfa可以是机器可执行智能合约的模型。
25.未花费的输出(utxo1)可以包括锁定脚本,所述锁定脚本包括谜题哈希,其解决方案必须由另一交易的输入提供,以便花费所述输出(utxo1)并将dfa转换到另一状态。
26.未花费的输出(utxo1)可以包括锁定脚本,所述锁定脚本包括赎回脚本哈希,其必须由另一交易的输入提供,以便花费所述输出(utxo1)并将dfa转换到另一状态。赎回脚本可以包括加密密钥。
27.所述方法可以包括以下步骤:使用一个或多个计算代理来执行上文或下文描述的任何特征。
28.本发明还提供了一种用于实施上述任何实施例的方法的系统。所述系统可以包括:区块链平台;(这可以是或不是比特币区块链)至少一个计算代理,其用于经由所述区块链实施所述dfa。
29.另外地或可替代地,所述方法可以包括以下步骤:
30.使用至少一个输入信号来执行至少一个条件,并且基于所述条件的执行结果来根据dfa的状态转换表执行动作。
31.所述动作的执行是可从区块链账本的状态识别或检测的。这可以通过查看/分析一个或多个区块链交易的输出来实现。如果交易涉及dfa和/或dfa涉及的合约,则可以检查输出以确定输出是否已经花费。dfa的状态可以从输出仍然未花费的事实中辨别出来。可以通过查阅已经针对dfa设计的状态转换表看出这一点。它可以是在执行所述方法/系统之前已经设计的。
32.可以使用区块链上的交易(tx)来执行动作。所述动作可以从区块链上的至少一个交易的输出和/或输入识别。
33.所述方法可以包括以下步骤:分析区块链的状态,以基于是否已经执行了动作来确定dfa的当前状态。
34.dfa可以表示或模拟合约的执行。合约可以是机器可执行的智能合约。
35.所述至少一个输入信号可以是由人类或非人类来源生成和/或提供的信号或值。例如,它可以由在其上执行所述方法的计算机生成,例如从系统时钟派生的时间或日期。它可以从计算机外部的来源接收,例如从远程传感器或远程计算资源接收。
36.所述至少一个输入信号可以提供dfa从一个状态转换到另一状态的触发条件,或者可以使触发条件“激发”或被激活,从而引起后续动作。
37.所述方法可以包括以下步骤:确定dfa的状态转换表。状态转换表可以在软件中编码。所述软件可以包括与给定输入信号和它们触发的状态转换和/或机器可执行动作有关的指令。
38.所述方法可以包括以下步骤:将区块链交易(tx1)的未花费的输出(utxo1)的锁定脚本(中的数据)的一部分与dfa的给定状态相关联。所述方法可以包括以下步骤:使用另一交易(tx2)以通过花费交易(tx1)的输出(utxo1)来使dfa从所述状态转换到另一状态。所述另一状态可以与在另一交易的未花费的输出(utxo2)的锁定脚本内提供的一部分数据相关联。
39.所述方法可以包括以下步骤:使用包括所述至少一个计算机可执行条件的一部分代码来实施或表示至少一个状态转换触发条件,当被执行时,所述状态转换触发条件使另一交易(tx2)花费交易(tx1)的输出(utxo1)并因此将dfa移动到另一状态。所述部分代码可以包括基于输入信号提供布尔结果的条件。
40.所述方法可以包括以下步骤:维护特定状态已经被dfa占用的次数的记录。可以使用在循环或迭代构造内递增的指数(index)来维护记录。当满足预定条件时,循环或迭代构造可以终止。
41.可以使用分布式架构或系统来实施和/或执行软件实施的dfa。本发明还可以提供一种用于实施上文或下文描述的方法的任何实施例的系统。
42.本发明可以提供一种包括软件的软件实施的dfa,所述软件用于:
43.使用至少一个输入信号来执行至少一个条件,并且基于所述条件的执行结果来根据dfa的状态转换表执行动作;其中所述动作的执行是从区块链账本的状态可识别的。
44.本发明可以提供一种方法,其包括以下步骤:将区块链交易(tx1)的未花费的输出(utxo1)的锁定脚本的一部分与dfa的给定状态相关联。锁定脚本的所述部分可以是锁定脚本内的一部分数据。它可以是一部分元数据。它可以是识别符、标记或标签。因此,本发明可以在区块链上使用未花费的交易输出(utxo)来记录和识别dfa已经处于和/或当前处于执行中的给定点的状态。
45.所述方法可以包括以下步骤:使用另一交易(tx2)以通过花费交易(tx1)的输出(utxo1)来使dfa从所述状态转换到另一状态。所述另一状态可以与在另一交易的未花费的输出(utxo2)的锁定脚本内提供的一部分数据相关联。因此,花费utxo可能使dfa状态的改变记录或体现在区块链中。
46.本发明可以基本上如下面关于说明书的“编纂技术”部分所述,但也可以并入来自文件的其它部分的特征并且并入本文描述的任何特征。
47.另外地或可替代地,本发明可以包括以下步骤:执行程序,所述程序用于监控和/或接收输入信号,并且响应于输入信号而生成包括未花费的输出(utxo)并且花费先前交易tx1的输出的区块链交易tx2。
48.先前交易tx1的输出可以包括锁定脚本,所述锁定脚本包括与dfa的第一状态相关联的识别符;交易tx2的未花费的输出(utxo)包括锁定脚本,所述锁定脚本包括与dfa的另一状态相关联的另一识别符。识别符可以是用于识别状态的任何形式或格式的标记、标签或方法。它可以包括一部分数据,例如元数据或加密密钥。
49.所述程序可以包括与dfa的第一状态相关联的识别符。所述程序可以用于生成和/或执行另一程序,所述另一程序包括与dfa的另一状态相关联并且包括在另一交易tx2的utxo中的另一识别符。
50.dfa可以模拟或表示(机器可执行的)智能合约的执行。智能合约可以由基于计算机的资源通过用参数填充模板合约来生成。因此,合约生成可以是自动化的。
51.所述方法可以包括以下步骤:确定dfa的状态转换表并将状态转换表存储在基于计算机的存储资源中。
52.所述程序可以用于通过以下方式响应于输入信号而生成区块链交易tx2:
53.使用区块链交易tx1的锁定脚本中的识别符来确定dfa的当前状态;
54.基于当前状态和输入信号,使用dfa的状态转换表来确定另一状态及其相关联的识别符。
55.所述方法可以包括以下步骤:将区块链交易tx2和/或先前交易tx1提交给区块链网络。
56.可以生成并执行多个程序,每个程序包括用于唯一识别dfa的状态的识别符。因此,可以使用一系列程序(脚本)来执行合约,每个脚本具有基本上对应于状态的持续时间(即dfa处于该给定状态或者可能处于该给定状态多长时间)的寿命。
57.交易(tx2)的未花费的输出(utxo)和/或先前交易(tx1)的输出可以包括锁定脚本,所述锁定脚本包括谜题哈希,其解决方案必须由另一区块链交易的输入提供,以便花费输出并将dfa转换到另一状态。
58.交易(tx2)的未花费的输出(utxo)和/或先前交易(tx1)的输出可以包括锁定脚本,所述锁定脚本包括赎回脚本哈希,其必须由另一交易的输入提供,以便花费输出(utxo)并将dfa转换到另一状态。赎回脚本可以包括加密密钥。
59.dfa的状态可以由区块链上的交易中的未花费的输出(utxo)表示。花费给定utxo可以表示到不同状态的转换。状态、动作、条件和触发条件可以在dfa的转换表中提供和/或在软件中编码。
60.本发明可以提供一种用于实施、实现或体现基于软件的dfa的系统。它可以经由区块链来做到这一点。它可以包括:
61.区块链;(这可能使用或不使用比特币网络实施)
62.一个或多个计算代理,其用于根据上文或下文描述的任何方法步骤来生成和/或执行至少一个程序;
63.和存储资源,其用于存储dfa的状态转换表;这可以是例如哈希表或分布式哈希表;和/或
64.用于区块链交易的至少一个模板和/或用于智能合约的至少一个模板。
65.本发明可以基本上如下面标题为“编译和执行软件实施的dfa”的部分中所述,但来自说明书的其它部分的特征也同样适用。
66.所述系统可以用于在区块链执行上实施或实现状态机,以便执行(智能)合约的自动化执行。
67.关于本发明的系统提及的任何特征也可以适用于本发明的相应方法,反之亦然。本文提及的与本发明的一个方面或实施例有关的任何特征也可以适用于任何其它实施例或方面。
68.本发明的基于区块链的dfa包括至少以下关键特征:
·
提供计算数学模型的基于区块链的实施,所述计算数学模型被设想为抽象机,其可以处于有限状态集合中的一个并且当发生有限集合的触发事件(被称为输入)时可以从一个状态改变(转换)到另一状态
·
由于确定性有限自动机(dfa)体现在区块链平台上的计算和存储结构中,基于将各方的承诺的技术实现提供用于合约的建立和自动化执行的新技术
·
可以使用现有的区块链基础结构和协议
·
实现并促进智能合约的自动化生成、控制和执行
·
可由计算机自动执行和强制实施。
·
合约、其执行和结果的永久、不可变的记录。
69.本发明提供并利用区块链协议和平台固有的至少以下益处:
·
通过设计固有的安全(比特币协议不需要可信方)。
·
分布式,因此避免了大的单点故障,并且不易受到攻击。
·
易于管理和维护(比特币网络易于使用)
·
价格低廉(在比特币协议下,通常预计只需很少的交易费用)
·
不受地域限制或约束——任何可以访问互联网的人都可以随时随地使用
·
透明,一旦数据已经写入到区块链,任何人都可以看到它。
·
不可变,一旦数据已经写入到区块链,没有人可以改变它。
·
维护隐私,不涉及个人识别信息。
附图说明
70.参考本文描述的实施例,本发明的这些和其它方面将变得显而易见并得以阐明。现在将仅通过实例并参考附图来描述本发明的实施例,在附图中:
71.图1示出了根据本发明的一个实施例布置的系统的概述。
72.图2示出了本发明的一个说明性实施例,其中智能合约被执行为使用p2pkh交易在区块链上实施的dfa,以表示被触发的各种状态转换。
73.图3示出了根据下面讨论的实例的基于区块链的dfa。
74.图4示出了下面描述的基于谜题的实施的发起(origination)(到状态s0)交易(o)的一个实例。
75.图5示出了转换(从状态s0到状态ff)交易(tf)的一个实例。
76.图6示出了完成(从状态ff。)交易(cf)的一个实例。
77.图7示出了一个区块链交易,它类似于图4中的区块链交易,但是针对dfa状态使用p2sh交易类型。
78.图8示出了一个实例,其类似于图5中的实例,但是针对dfa状态使用p2sh交易类型。
79.图9示出了一个实例,其类似于图6中的实例,但是针对dfa状态使用p2sh交易类型。
80.图10是可以根据本发明的一个实施例使用的编纂技术的实例1的债券的状态图。它示出了与指示输入相关联的状态(团块)和转换(连接线)。
81.图11示出了具有复现(recurrent)状态的实例2的息票债券的状态图。
82.图12示出了与图11的实例相关的复现状态的内部状态图。
83.图13示出了本技术的“编译和执行”部分的欧式看涨期权实例的状态图,示出了待提交的状态(团块)和区块链交易(三角形):发起(o)、转换(t)和完成(c)。
具体实施方式
84.在本文件中,我们使用术语“区块链”来包括所有形式的基于共识的电子、基于计算机的分布式账本,包括但不限于区块链和交易链技术、许可和未许可的账本、共享账本及其变体。区块链技术最广为人知的应用是比特币账本,但是已经提出并开发了其它区块链实施方式。尽管可能出于方便和说明的目的在本文中参考了比特币,但是应当注意,本发明不限于与比特币区块链一起使用,并且可替代的区块链实施方式和协议也落入本发明的范围内。
85.本发明的一个说明性实施例包括对模拟过程或任务(例如合约)的dfa的定义,以及可以被称为代理或“机器人”的计算资源的相关系统。代理用于生成交易并将其提交给区块链。然而,本发明不限于与合约有关的使用。
86.转到图1,本发明提供了基于包括硬件和软件组件的计算平台(区块链)上体现的抽象dfa的过程的实现。图1提供了根据本发明的一个说明性实施例布置的系统的概述。所述系统包括能够与其它实体4(例如,人类或其它计算机)交互以接收指令的计算代理3。例如,这些指令可以是待创建和执行的智能合约。因此,计算代理3通过在“现实世界”中响应并引起其自身之外的事件来与物理世界交互以实施本发明。
87.合约本身的规范可以以任何机器可执行的格式(例如,xbrl)提供,并以安全和去中心化的方式存储,例如存储在torrent网络上的分布式哈希表(dht)5中。根据合约的规范,计算代理构造dfa 2,其随后由一个或多个代理在区块链1上体现。
88.dfa 2本身被指定为有限集{s,i,t,s0,f},其中s代表合约/dfa可能处于的可能状态的(有限)集;i是输入(有限)集(也被称为字母表),在上下文中表示可能发生的与合约相关的任何事件或条件,例如进行支付、达到票据到期日、交易对手违约等;在我们的机制中,这些输入信号由一个或多个代理接收/产生,然后确定系统的下一个状态(可能是同一状态)。
89.dfa的第三个分量是转换函数t:s
×i→
s。“dfa”中的术语“确定性”是指决策的唯一性:若已知状态和输入,则仅存在一个新状态(可能是同一状态)。因此,若已知初始状态(s0)和输入历史,计算结果(合约)是唯一的,是所有可能的最终结果的集合中的一个
一旦建立了所有这些元素,dfa就完全由转换表定义,其中转换表针对所有可能的当前状态和输入信号指定未来状态。dfa的状态本身与区块链上的未花费的交易输出(utxo)相关联。如本领域所知,比特币网络连续跟踪所有可用的utxo。根据本发明,dfa从一个状态移动到另一状态的机制通过区块链交易根据本发明体现(实施)。实际上,区块链上的交易花费与一个状态(先前交易的输入)相关联的utxo,并创建与下一个状态(输出)相关联的utxo。简单dfa实例:折扣(零息)债券
90.为了便于说明,我们现在考虑折扣(零息票)债券,这是一种简单的债务票据,通常以某一价格(通常以相对于其面值的某一折扣)购买,然后持有一段时间直到其本金在到期时归还。因此,息票债券是一种债务义务,持有者可以从合约的发行直到其到期日收到定期的利息支付(息票),在到期日,除了最后一张息票之外,还将付清债券的本金。
91.我们将考虑的可能状态是s={s0,f0,f1},分别指示持有状态(s0),合约的正常结束(如果它遵循完美路径(happy path))或完美结束(f0),和事情出错的状态(f1),例如诉讼。因此,系统的最终状态是f={f0,f1}。我们将考虑的字母表是i={r,d,e},分别指示在到期时(或之前)偿还本金(r),发行者在到期时(或之前)违约(d),和合约到期而未偿还(e)。该简单合约的转换矩阵如表1所示。trdes0f0f1f1表1-表示零息债券的dfa的转换表。
92.应注意的是,最终状态表示合约的完成,因此不需要从它们中指定另外的状态(当前在转换表中标为
“‑”
,但是可以省略这些线)。原则上,可以为该票据定义更多的状态和/或输入(以及动作),但是为了简单和清楚起见,在本文中没有这样做,以说明本发明的基本创造性方面,而不是灌输与合约复杂性有关的令人分心的细节。
93.图3表示(比特币)区块链上的零息债券dfa的实施例。状态由圆圈表示,将机器从一个状态移动到另一状态的比特币交易由蓝色三角形表示。请注意,图3中省略了代理接收的输入,但是在每个状态中,应根据这些输入进行一个或另一转换,这通过构造一个或另一比特币交易(例如,状态s0中的t0或t1)反映在图中;不改变状态的转换不需要交易,因此省略了它们。除了dfa的转换交易(ti)之外,还考虑了初始发起交易(o)和与合约完成相对应的交易(ci)。
94.我们现在将注意力转向交易(发起、转换和完成)中的资金流动。一个重要的观察是,由于dfa和(金融)合约的有限性,所述过程将在多次转换之后完成。这必然意味着(假设所涉及的计算代理和比特币矿工需一些有限费用)一定存在建立和执行合约的最大成本,并且其可以提前确定,例如,在dfa建立时确定。它是执行遵循最长可想象路径的合约所需的资金总额给出的。当然,这不包括执行中无限循环的可能性,但是请注意,这与当前(金融)合约无关,即使是永久年金,也必须在未来的某一时刻完成,不管其为何名称;例如,当负债实体不再存在或由于通货膨胀而导致支付可以忽略不计时。
95.费用的特定分配,即每个代理为其工作收到的费用虽然具有实际意义,但不是本发明的关键元素。继续我们的简化零息债券的实例,我们将任意地假设发起交易(o)需3mbtc费用,转换费用(ti交易)为1mbtc且完成交易(ci)需2mbtc费用;请注意,这些费用自动
包括在交易本身中。加上3笔交易的总采矿费用3mbtc,这使得总最高成本为9mbtc。在我们非常简单的实例中,所有路径的长度是相等的。因此,合约的最终成本肯定与其最高成本一致。由于通常情况并非需要如此,为了充分说明一般的资金流动,我们将假设为执行合约而提供的资金为10mbtc,而1mbtc在完成后返还给相同的资金来源。这代替了完成时的最终未使用的资金(即最大资金和使用的资金不同)。
96.我们将假设建立和执行合约的资金(10mbtc)最初由一些被称为“发起者”的资金来源提供。如上所述,在我们的实例中,此来源在完成后还将收到1mbtc未使用的资金。原则上,还可以在交易中包括另外的资金投入和输出,例如为零息债券支付的价格、本金的偿还或任何其它可以想象的资金转移。虽然这可能具有实际意义,但在这一点上它只会使本发明的基本元素模糊不清。为清楚起见,这些细节未包括在下面的实例中。然而,应注意,所述结构是完全通用的,并且不排除这种可能性。技术方案的说明性实施——dfa系统和方法
97.技术人员将容易地理解,所述系统可以以各种方式实施,其中这些变化仍然落入本发明的范围内。例如,代理系统3的配置和架构可以改变,例如,是否预先已知所涉及的特定代理。为了便于说明,我们将在文中考虑两种技术设计选项。1.如果合约的参与保持相对开放以便各个计算代理可以参与,则基于“交易谜题”类型的标准区块链交易的结构是可能的2.相反,如果可以预先将每个状态的交易分配给特定代理(或代理群组),则可以使用付费到脚本哈希(p2sh)交易。
98.基于谜题的区块链交易和p2sh交易在区块链技术领域中是已知的。技术人员还将理解,除了上述两个选项之外或作为其替代,可存在多种可能性。例如,一个实施例可以使用随时间改变的多个代理,和/或一个层级的多个代理等。可能性很多,但是我们在本文将仅描述两个选项,技术人员将容易地从中获得其它可能的变型和实施选项。
99.然而,应注意,在一个实施例中使用的区块链交易的类型对于本发明不是必不可少的,因为在交易中提供/接收资金的一方(发行者、购买者、收款者等)不是本发明的基础。相反,本发明的关键元素是在区块链内在任何时间点定义任务/合约的状态,并且它提供了一种机制(无论其详细的具体实现如何),其能够根据发生的事件的顺序实现合约的自动化生成、其在区块链上的执行以及适当结果的强制实施。请注意,由于整个机制实施在区块链上,因此它固有地提供了合约的历史和结果的永久不可变记录,以及许多其它优点等。实施选项1:交易-谜题方法
100.在本发明的一个可能的实施例中,代理系统3用于计算机的开放网络,其中具有一些因特网连接处理能力的任何人可以加入,并且可以向系统提供一些处理能力(例如,基于区块链的dfa合约的建立和执行的提供者)并因其资源而获得报酬。在这种情况下,不可能预先知晓哪个特定代理将交易提交给区块链,即不可能使用关于代理的任何具体信息(例如,其公钥)。但是,交易-谜题类型适合在这种情况下使用。此类型交易的一般锁定/解锁机制是:锁定脚本:op_hash256《state s
i puzzle》op_equal解锁脚本:《puzzle s
i solution》
101.其中《state s
i puzzle》=hash(《state s
i puzzle solution》)并且谜题解决方
案本身可以包括任何所需信息,包括合约的代码、状态的标签以及任何其它所需信息,例如用于增加安全性的一些盐值(salt):《state s
i puzzle solution》=hash(《contract code;state si;other data;salt》)
[0102]“盐值”的概念在现有技术中是已知的,并且本领域技术人员在本发明的内容中将容易地理解。参考图1和2,动作的顺序如下。首先,代理系统(3,步骤101)创建dfa结构2。
[0103]
转换表指定并包括将dfa从一个状态移动到另一状态的触发事件。转换表包括每个可能状态转换的至少一个触发事件或条件。因此,触发条件与当前状态(即在该触发事件之后dfa将从其移动的状态)和新状态(即在触发条件启动的转换之后dfa将处于的状态)相关联。
[0104]
在图2的步骤102,可以通过计算代理创建dfa的每个可能状态的谜题。每个转换的转换表及其相关的谜题都存储在外部。这可能在某种数据库或dht中。谜题被安全地分配给被允许参与合约执行的代理。如何实现这种分配有很多种可能性。在一个优选实施例中,这些步骤由计算代理以自动化方式执行,而无需人为干预。
[0105]
在步骤104,代理创建到状态s0的发起交易。这可以如图4所示。已经假设分配给合约的资金为10mbtc,代理费用为3mbtc,并且用于进一步处理合约的流出资金为6mbtc(隐含1mbtc采矿费用)。在这个阶段,合约被体现为区块链上的结构并且处于其第一状态s0,即,存在与区块链上的特定合约的状态s0相关联的utxo。
[0106]
在图4的说明性交易中,已经假设分配给合约的资金为10mbtc,代理(僵尸网络)费用为3mbtc,并且用于进一步处理合约的流出资金为6mbtc。隐含1mbtc采矿费用。
[0107]
通过研究图4的交易可以推断出,由p2pkh类型的交易(从实例中的“发起者”)接收合约的原始资金;输出0(基于谜题)可以由拥有谜题解决方案的任何代理解锁;输出1(p2pkh)向已经成功将交易置于区块链上的代理3支付所需费用。
[0108]
在执行合约时的连续转换由自动化代理3以与图5中所例示类似的方式执行。代理用于获得、生成或接收对应于当前状态(s0)的谜题解决方案。它们还与某一或某些实体(例如,代理系统中的某一其它计算机,或某一数据/信号来源)进行交互,以便接收适当的输入,读取转换表(或只是与当前状态对应的部分),并得到对应于适当的下一个状态(ff)的谜题。然后,代理可以将交易提交到区块链。如果交易由区块链网络验证,则代理将收到相关费用,dfa将处于状态ff。在图5的转换中,已经假定注入的资金为6mbtc,代理费用为1mbtc,并且用于进一步处理合约的流出资金为4mbtc(隐含1mbtc采矿费用)。
[0109]
图6示出了最后一个可能的交易的结构,即完成合约执行的交易(cf)。在图6中,输入部分遵循与之前相同的交易谜题逻辑,而输出0将未使用的资金支付返还给发起者(1mbtc,如上所讨论),并且输出1向代理支付费用。在图6中,已经假设注入的资金为4mbtc,1mbtc未使用的资金返还给发起者,代理费用为2mbtc(隐含1mbtc采矿费)。实施选项2:基于p2sh的交易
[0110]
选项一中描述的基于谜题的方法适用于其中存在大量先验未知参与者的情况。然而,在其它情况下,可以指定有限数量的或可接受的少量的认可计算代理3与本发明结合使用。在这种情况下,p2sh类型的交易可能更适合使用,因为它们可以被配置成包括已知代理3的公钥,从而提供额外的安全层面。在单个认可代理的情况下,交易的可行锁定/解锁机制
是:锁定脚本:op_hash160《state s
i redeem script hash》op_equal解锁脚本:op_0《agent signature》《state s
i redeem script》赎回脚本:op_1《state s
i metadata》《agent public key》op_2op_checkmultisig
[0111]
应注意的是,通过还包括它们的签名,这可以扩展到更多数量的认可代理。和之前一样,状态si的元数据可以包括任何所需信息,例如:《state s
i metadata》=hash(《contract code;state si;other data》)
[0112]
动作的顺序与先前例子中的基于谜题的方法类似。首先,代理系统3创建dfa结构,在外部(例如,在dht中)存储转换表。然后确定哪些代理将处理交易并检索/生成它们的公钥,然后将其包括在dfa的每个可能状态的赎回脚本中。应注意的是,这些脚本可以存储在外部(在区块链外)并且不需要安全地传输。接下来,计算代理创建如图7中指定的发起交易。图7的实例类似于图4,但是针对dfa状态使用p2sh交易类型。
[0113]
在这个阶段,合约被体现为区块链上的结构,并且处于其第一状态s0。与图4中的交易相关的交易中唯一的改变是输出0,其现在是p2sh类型并且包括如上所讨论的认可代理的公钥。
[0114]
尽管改变是类似的,但为了完整性,图8和9提供了基于p2sh交易类型的转换交易和完成交易的实例。资金流与之前相同。图8示出了一个实例,其类似于图5中的实例,但是针对dfa状态使用p2sh交易类型。图9示出了一个实例,其类似于图6中的实例,但是针对dfa状态使用p2sh交易类型。计算机实施的dfa的新编纂技术
[0115]
上文已经描述了基于区块链的dfa,现在我们将注意力转向本发明的一个特别有利且新颖的方面。在该部分中,我们描述了一种新颖的创造性技术,用于将dfa的状态编码成计算机可读和可执行的形式。
[0116]
在关于这种机器的传统方式中,状态是静态地(先验地)定义的并且表示系统的某一特定配置或具有某一特定含义。例如,它们可以赋予一组名称,与一组标签相关联,或者与一组未使用的交易输出(utxo)相关联,如上面针对基于区块链的dfa所解释。这足以使系统工作,因为计算本身(的输出)由系统在接受输入链时如何在状态之间移动确定。
[0117]
从这个意义上说,dfa(即,状态、转换等的集合)不是唯一的,并且两个dfa可以是等价的,即为每个给定的输入链产生相同的输出,即使先验设想的关于状态的解释有可能是非常不同的。考虑这样的情况,例如,它们被部署在不同的物理机器上或者被设想用于解决不同的问题。这也自然地导致了dfa最小化的概念(参见https://en.wikipedia.org/wiki/dfa_minimization)。
[0118]
尽管状态的静态确定(标记)足以用于状态机本身的抽象功能并且足以用于仅与计算输出相关的诸多问题,但是在一些情况下,状态本身的含义具有实际重要性,并且不能从状态的标签中推断出。例如,这可能是因为出于隐私或保密原因而故意隐藏的。在计算为分布式的并且由(故意地)没有关于系统的完整信息的计算代理执行的情况下也可以找到一个实例。在这些情况下,在运行时需要动态确定系统的状态。
[0119]
本文描述的本发明的一个有利方面是编纂技术,其允许动态(在运行中,在运行
时)确定dfa的状态。这样的dfa可以包括与如上所述的合约的分布式执行相关联的那些,但不仅限于此,并且本发明不限于关于与本发明技术一起使用的dfa或其具体实施方式的目的。由于传统方法是以静态方式预定义状态,因此本发明的动态确定与传统方法相反,并且提供与本领域已知的技术解决方案完全不同的技术解决方案。它不是仅仅使用区块链来存储关于已经发生的事件的数据。
[0120]
对于本发明的编纂技术的描述和说明,我们将使用息票债券和永久年金作为实例,但是本发明决不限于这些示例性使用或应用。它同样适用于非金融应用和环境。上文已经解释了息票债券的性质。永久年金是一种没有终止的支付流,即息票支付原则上永远持续。然而,实际上,由于正利率复利的影响,在某一时刻,息票的量没有实际意义,使得合约的折现值实际上是有限的。本发明编纂技术的实例1——简单的情景
[0121]
如已经解释,dfa由有限集{s,i,t,s0,f}组成,分别表示可能状态(s)、输入(i)、转换(t)、初始状态(s0)和最终状态(f)(也被称为接收状态)。另外,可以定义动作(a)的集合,其表示执行的副作用并且不确定计算的输出。
[0122]
对于本发明的描述和说明,我们将考虑3期息票债券。我们将针对这种合约考虑的dfa的元素(和符号)可以静态地定义为表2到4中所给出。请注意,初始状态在我们的符号中由s指定,并且接受状态是f0和f1。表2:息票债券的合约状态列表:状态描述s合约建立并签名,执行未开始。t1执行开始,等待第一息票支付日期。c1第一息票支付到期,等待支付。t2第二期,等待第二息票支付日期。c2第二息票支付到期,等待支付。t3第三期,等待第二息票支付日期。c3第三息票支付到期,等待支付。p本金偿还到期,等待支付。f0结束(接受)状态,完美结束。f1结束(接受)状态,发生违约。表3:息票债券的合约输入列表(事件字母表)。输入描述t时钟信号:已经达到下一支付日期。p已经进行支付。d已经发生违约(未进行支付)。
[0123]
所有这些输入都可以由计算机以自动化方式检测和确定。在表3的上述实例中,计算机可以检查是否已经达到某个日期/时间,或者是否已经经由区块链交易进行了某种支付。可以遍历区块链以检查是否存在账本上进行了支付的交易。由于比特币区块链提供永久、公开和防篡改记录,因此该验证可以由计算代理执行,而无需人为干预。表4:息票债券的合约动作列表。
动作描述a0发送支付通知。a1发送违约通知(例如,到律师)。a2发送合约完成通知。
[0124]
一旦定义了这些元素,系统的功能就可以由状态转换表完全指定,其中根据表格,系统的当前(初始/从-)状态(行)与适当的输入(列)一起确定系统的下一(最终/到-)状态以及与转换并行执行的动作。对于我们的实例,这在表5中给出。请注意,执行被理解为以初始状态(s)开始,并且唯一可能的最终(接受)状态是f0和f1。由于这些状态标志着执行的最终确定,即没有与它们相关联的转换,因此可以从表的行中省略它们。表5中给出了转换表的替代格式。
[0125]
表5:息票债券的状态转换表。当系统处于特定状态(行)并且发生特定输入(列)时,它转换到指示状态并执行指示动作(状态/动作);连字符指示输入与给定状态无关,即它不适用于所述状态。 tpdst1‑‑
t1c1‑‑c1-t2/a0f1/a1t2c2‑‑c2-t3/a0f1/a1t3c3‑‑c3-p/a0f1/a1p-f0/a2f1/a2[0126]
指定状态机功能的另一等效方式是所谓的状态图,其中系统的状态由团块表示,输入和动作由所附标记给出,并且转换由连接箭头表示;对于我们的实例,它在图10中给出。请注意,按照惯例,最终(接受)状态f0和f1用团块的双线指示。为了简单起见,由于它们与系统的执行无关,因此从该图中省略了这些动作。虚线框(复现状态)的含义将在下面阐明。
[0127]
如上所陈述,虽然dfa的功能不是严格必需的,但是动态确定人和计算机可读的系统状态可能是实际必要的,并构成本文描述的本发明的一个方面。每个状态被表征为发生或未发生或者与特定状态无关的条件的唯一集合。每个条件必须是明确的且(机器)可测试的。换句话说,必须有一种明确的计算方式来分辨所述条件是否发生。以这种方式,本发明的一个实施例可以与物理世界或至少与在其上执行软件的计算机外部的世界交互,可以从一个或多个外部来源接收用于测试的值或输入。例如,一旦达到日期,或者如传感器所指示超过温度阈值,或者从另一计算机接收通知等。这些条件可以由上述计算代理测试。
[0128]
在我们的实例中,这可以通过表6中给出的条件集来实现,其中待测试的状态在行中给出,并且我们定义的条件在列中给出。每个t条件指示是否已经达到特定日期。例如,表示为t0的条件表示t》t0),并且每个ci(或p)条件表示是否已经进行相应的支付。请注意,尚未到期的息票(或本金)的支付与已经达到相应到期日之前发生的状态无关。
[0129]
当然,只要它们唯一地确定所有的可能状态,即每个状态的真、假或无关值链是唯
一的,是使用该条件集还是使用等效条件集是无关的。还应注意,尽管在这个实例中,我们只考虑了二元(真或假)或无关条件,但这些条件原则上可以采用多个值。此外,除了这里考虑的原子(atomic)条件之外,每个条件又可以表示组合条件,所述组合条件又由几个(子)条件构成。所有这些变化对于技术人员来说是显而易见的,并且落入本发明的范围内。
[0130]
要说明的最后一点是图10中虚线框的含义。尽管以现状来说,图是完全有效的并且应正确地描述息票债券的动态,但请注意,状态ti和状态ci之间存在有趣的相似性;因为它们的含义非常相似,只是它们所涉及的时间周期或息票的数量(i)不同。因此,它们也可以由共同的重复或复现状态加上指示它们所涉及的息票/周期的附加信息来表示。这可以自然地扩展到无限期重复的状态,从而为编纂永久年金开辟了可能性。具有此类复现状态的编纂方案的定义将在下面的下一部分中讨论。
[0131]
表6:状态定义表。对于特定状态,每个条件可以是真(t)、假(f)或无关(-),因此由该动态可测试值的集合定义。状态t0t1c1t2c2t3c3psff-f-f
‑‑
t1tfff-f
‑‑
c1ttff-f
‑‑
t2tttfff
‑‑
c2ttttff
‑‑
t3tttttff-c3ttttttf-ptttttttf本发明编纂技术的实例2——复现状态
[0132]
如上所述,来自最后一部分的息票债券dfa的一些状态子集或息票债券(ti和di状态)对应于状态机状态的非常相似的解释,只是它们所涉及的时间周期或息票的数量(i)不同;也就是说,在某种意义上,它们可以被视为多次重复的状态(例如,从i=1到给定的imax,其中在我们的情况下,imax=3)。鉴于此,通过将所有那些状态包括在复现状态(r)中以分开处理来简化dfa的表示是有意义的。通过这种简化,我们在下面呈现了我们的示例性息票债券的合约状态列表(表7)、状态转换表(表8)、等效状态图(图11)和dfa的状态定义表(表9);请注意,dfa的其它元素(输入和动作)与前一部分相比没有改变。表7:具有复现状态的息票债券的合约状态列表。状态描述s合约建立并签名,执行未开始。r复现状态,息票到期和支付的动态。p本金偿还到期,等待支付。f0结束(接受)状态,完美结束。f1结束(接受)状态,发生违约。表8:具有复现状态的息票债券的状态转换表 tpdsr
‑‑
r-p/a0f1/a2p-f0/a2f1/a2表9:状态定义表。对于特定状态,每个条件可以是真(t)、假(f)或无关(-),因此由该值集定义,每个条件对应一个值(并不是说,一个条件可以反过来具有多个分量)。状态trpsff-rtf-pttf
[0133]
当然,所有这些只是隐藏了复现状态内的债券动态的复杂性,其必须分开指定。然而,在复杂状态机的情况下,这种简化可能很重要。一个明显的类比是在编程语言中引入循环。复现状态本身也被定义为状态机,但是请注意,在此背景中,由进入点和退出点代替了初始状态和接受状态,因为抽象计算的执行并不表示在复现状态内的开始或完成。我们在下面呈现了复现状态的合约状态列表(表10)、状态转换表(表11)和状态图(图12)。表10:复现状态的合约子状态列表:状态描述t周期开始,等待下一支付日期。c息票支付到期,等待支付。表11:复现状态的内部状态转换表: tp,i《imaxp,i=imaxdtc
‑‑‑
c-t/a0,i=i+1退出p/a0退出f1/a2[0134]
这种方法的新颖之处在于引入了指数(i),其记录了状态已经被占用的次数。该指数的增加和类似数量(例如,支付的总金额)可以在外部计算(如下面针对编纂方案),或通过另外的dfa动作实现,如表11中针对状态c所指示。还请注意,该复现状态的内部状态的输入(字母表)可以潜在地取决于内部指数(i)和/或类似数量。如之前所解释,系统的潜在接受状态已经被退出点代替。相应的等效状态图在图12中呈现。
[0135]
这种复现状态的编纂方案在扩展后看起来与表5的相关部分非常相似。然而,由于这种方法的精神不是分开扩展并处理每个内部(子)状态,它似乎更自然而无法在表格中明确呈现。相反,我们在图4中呈现了算法的伪代码,其将正确的值(真或假)赋予与状态机编纂条件相关联的变量。当然,与无关条件相关联的变量不需要被赋予任何值。在图4中,如上文表5中所示,每个ti条件指示特定日期是否已经到来(即,ti=t表示t≥ti),并且每个ci条件指示是否已经支付了相应的(第i个)息票。
[0136]
下面,我们提供算法的伪代码,其将适当的值赋予与复现状态的内部状态的编纂方案的条件相关联的变量。
[0137]
待解决的最后一点是需要一个终止点,由指数imax表示。尽管通常的息票债券确实具有有限的到期日,但永久年金是类似的票据,原则上它们永远存在。利用我们的复现状态的编纂技术,这可以通过如下所呈现的伪代码的简单修改来实现。请注意,在这种情况下,尽管循环将在遇到尚未达到到期日的第一周期时结束,但是这些变量当然是无关的,并且此时所有状态都由编纂技术唯一定义,即存在对于每个状态唯一的真值和假值的组合。以下伪代码用于永久年金。表11:表5中的息票债券状态转换表的替代格式:
编译和执行计算机实施的dfa
[0138]
在本文中,我们描述了一种新技术,用于基于将各方的承诺(以及其它条款和规定)实现为计算结构(被模拟为状态机)来建立(编译)和执行合约协议。
[0139]
在该部分中,我们描述了系统关于经由区块链建立和执行这种智能合约的一个有利技术方面。这涉及将有效实施合约的不同(计算机)代理之间的信息流。通常,我们将此系统称为“僵尸网络”(计算代理的集合),通常不指定哪个代理实际执行所描述的操作。技术人员将理解,有许多方式可以使这些实施细节生效。
[0140]
如上所述,我们将使用欧式看涨期权的合约作为一个实例来说明本发明的这个方面。欧式看涨期权是一项协议,赋予投资者在指定日期(行权日期)以指定价格(执行价格)购买股票、债券、商品或其它资产的权利,但并非义务。所述期权写契者(卖方)承诺在该日期以该价格将所述资产出售给持有者(买方),如果买方决定行权,在该日期的资产价格高于执行价格的情况下,这会(合理地)发生。鉴于此,我们假设合约可以可替代地通过向持有者支付来结算,其支付金额等于行使日期资产的市场价格减去执行价格,否则不需要支付,期权到期而未执行。
[0141]
建立和执行(金融)合约的标准方式是签署一份法律文件,并由人来解释和执行其规定,有时还会产生争议。这些合约可以被视为由定义术语的文本以及所述合约特定的参数值的集合(例如,行权日期、写契者、公钥等)构成。这些不同的元素在我们的系统中被分开,其中合约文本的本质被转换为抽象机器dfa,并且合约的特定实例的参数值的集合被独立地提供,如上所述。
[0142]
转到我们的实例,dfa计算系统由有限集{s,i,t,s0,f}组成,分别表示可能状态(s)、输入(i)、转换(t)、初始状态(s0)和最终状态(f)(也被称为接收状态)。此外,对于dfa结构本身而言并非必不可少,我们在此考虑动作(a)的集合,其需要代理与提交交易并行执行。在下文中,按常规,当前时间(日期)将由t表示,到期日期由t表示,到期日资产的价格由s
t
表示,执行价格由k表示。
[0143]
本技术的该部分中的主要关注是与dfa机器状态相关联的计算机代理的建立。这些被实施为包括脚本的计算资源。应注意的是,术语“脚本”在上下文中不应与区块链交易的脚本(例如,解锁或锁定脚本)混淆。这里,术语“脚本”用于更一般的计算意义。技术人员将容易地理解这点并根据上下文解释术语的含义。
[0144]
代理(脚本)能够改变状态,实施转换,并且并行地分拆与后续状态相关联的其它脚本集。利用具有适当能力的计算机脚本进行的dfa状态的动态(即运行时)识别是本发明
该方面的主要发明元素。对于我们的简化实例,合约的可能状态及其定义的充分条件在表12中给出,其中还给出了状态的(xml)标记和状态的自然(人类)语言描述。
[0145]
请注意,合约中并未考虑所有可想象的状态,例如在破产、持有者死亡、互联网关闭等情况下所将会发生。然而,由于我们当前在该部分的关注是对合约的编译和执行的分析,而不是对dfa本身的复杂性的分析,因此我们的实例是适当的且尽可能简单的,而非过多赘述。表12示出了该部分的实例的状态定义表。对于特定状态,每个条件可以是真(t)、假(f)或无关(-),因此由该值集定义,每个条件对应一个值。请注意,一个条件可以反过来具有多个分量:具有多个分量:
[0146]
继续描述抽象dfa的不同元素,我们现在转到输入列表。这也被称为事件字母表。这是可能与合约有关地发生的事件的列表,例如达到到期日、收到支付等。这些输入与dfa的当前状态的集合一起确定待提交给区块链的交易以及代理待执行的并行动作;但请注意,尽管从技术上讲,转换函数是s
×i→
s映射,但并非所有输入都与所有状态相关。在我们的简化实例中,这些以及事件的(xml)标记和自然语言描述在表13中给出。表13:合约输入列表(事件字母表):输入标签自然语言描述i0《immature》合约成立且存在,尚未达到到期日。i1《out of the money》达到到期日,s
t
≤k(无需支付)。i2《in the money》达到到期日,s
t
》k。i3《signature received》支付交易由写契者签名。i4《signature refused》写契者拒绝签署支付交易。
[0147]
在计算上,事件也可以被视为定义状态的条件的改变,尽管如上所述,某些事件与某些(或所有)状态无关,并且不会导致状态转换。本着同样的精神,可以在表14中指定可能的动作的列表,并非所有动作都与所有状态相关。表14:合约动作列表:输入标签自然语言描述a0《no action》无需动作a1《notification》通知各方合约完成。a2《request signature》创建支付交易并要求写契者签名。a3《litigation triggered》将支付拒绝通知律师。
[0148]
所有这些元素汇聚在状态转换表中,其中根据表格,系统的当前(初始)状态(行)与适当的输入(列)一起确定系统的下一(最终)状态以及与转换并行执行的动作。请注意,
在我们的dfa中,除了转换交易之外,我们还考虑完成交易,这并非将系统置于后续状态,而是将其置于接受状态(f),这是一个表示合约执行终止的虚拟(例如,没有在区块链上体现而且不与任何脚本相关联)状态。表15中给出了我们的欧式看涨期权的一个实例,其中初始状态与行相关联,输入与列相关联,每个单元格含有后续状态/操作字段。表15:合约的状态转换表:
[0149]
此外,通常用状态图表示我们的实例的抽象dfa,如图13所示。请注意,此图与(计算上有用的)状态转换表之间存在对应关系,因此图本身不包括其它信息。图13示出了欧式看涨期权的状态图,其示出了待提交的状态(团块)和区块链交易(三角形):发起(o)、转换(t)和完成(c)。技术描述
[0150]
dfa编译机制由不同的元素和文件组成,其将被依次讨论。嵌入在这些文件中的计算结构,与不同状态相关联的脚本如何不仅生成区块链交易而且还生成又完全执行合约的后续脚本,是本技术的该部分的主要关注。首先,系统使用两个源文件;在我们的实例中:dfa european call option-parameters.xmldfa european call option-script.py
[0151]
在这里,我们假设,具体来说,待用于生成后续文件和执行合约的主要语言是python 3.5,并且参数在xml 1.0文件中提供。当然,这些实施细节对于本发明不是必要的,并且技术人员将理解,其它标准的使用同样可接受。
[0152]
xml文件含有参数字段列表(由xml标签指定)和手边特定合约(即一个特定的欧式看涨期权)的值。在我们的实例中,它是手动编写的,但它也可以自动创建,即通过计算资源或代理,或由人经由图形用户界面(gui)输入适当值,所述图形用户界面也可以用python创建。
[0153]
系统的技术规范的主要文件是(python)主脚本。此文件含有或在执行时插入抽象状态转换表(可能状态、输入和动作)的硬编码版本以及指定待考虑的dfa输入和动作(例如,如何检查股票价格、时钟等)的硬编码函数。如果相关(即对于基于区块链的dfa实施),它可以含有待由脚本提交给网络的(比特币)交易的硬编码模板。
[0154]
如上所解释,状态转换表完全确定抽象级别的dfa,并且是其功能所需的唯一元素。但请注意,法律文本与dfa状态转换表之间存在对应关系。除了这些必要的元素之外,任选地,脚本还可以含有/生成不同的人可读文档,例如状态图、字母表等。
[0155]
为了编译和执行基于区块链的dfa合约,用户(人或计算机)需要填入参数值并运行主脚本。使用此关于脚本的硬编码信息和参数值,在执行时,脚本将建立合约(例如,将其置于区块链上),并生成一个或多个计算机程序(其它脚本),这些程序将由执行合约的计算代理的系统连续运行。可以实现此目的的可能的指令序列如下:1.读取参数值(或直接从gui输入值)。这将参数值加载到存储器中,例如在哈希表(ht)结构中(在python中被称为字典)或在分布式哈希表(dht)中,例如,bittorrent网络(如果这提供一些优势的话)
2.使用参数和硬编码合约模板生成合法合约。该文件需要由期权的写契者(数字)签名。3.(可选地)为合约创建人可读的文档。4.使用参数和硬编码输入和动作函数来借助适当的参数值生成这些函数的实例。5.在存储器(ht或dht)中加载状态转换表。6.如果相关,按指定创建发起交易并将其提交给区块链网络。这可以通过使用pybitcointools库来执行。如上所述,这在区块链中创建了与比特币区块链上的特定合约状态相关联的utxo。7.创建与发起状态(s0)相关联的python脚本并运行它(在相同或其它计算机上)。此代理(或代理集)将接收/产生适当的输入,执行适当的动作(与状态兼容的动作),并最终完成合约的执行或产生到另一状态的转换交易,以及分拆控制这些状态的后续脚本。8.终止编译(主脚本)。
[0156]
在编译阶段结束后,系统将因此启动并运行。根据本发明的一个实施例,在区块链上将存在与合约的初始状态相关联的utxo,以及一个或多个代理(在僵尸网络代理上运行的python脚本),其将监控输入,准备采取动作,并产生适当的转换,这将dfa的状态改变到另一状态或终止它。
[0157]
转换的指令序列是:1.监控或产生dfa输入——函数调用,例如检查时钟,接收消息等。2.一旦确定输入,读取当前状态的转换表,这将确定下一状态,并可能确定要采取的动作。3.如果有的话,可能对子进程或函数调用采取动作,这取决于复杂程度4.相关时,根据区块链创建转换交易并将其提交给区块链。5.创建并运行与下一状态相关联的python脚本6.终止当前脚本
[0158]
完成合约的指令序列是:1.监控或产生dfa输入;这些可以是子进程或函数调用,例如检查时钟,接收消息等。2.一旦确定输入,读取当前状态的转换表,这将确定待完成的合约,并可能确定采取的动作。3.如果有的话,可能对函数调用采取动作,这取决于复杂程度4.如果相关,根据区块链创建完成交易并将其提交给区块链;这将花费与合约相关联的最后一个utxo5.终止当前(和最后一个)脚本
[0159]
因此,dfa由独立的代理(脚本)的集合执行,这些代理又从先前代理接收足够的信息,从而返回到初始主脚本和参数文件。
[0160]
因此,根据本发明的一个实施例,合约由代理集执行(作为脚本实施),并在系统从一个状态移动到另一状态时动态生成。这些代理需要访问系统的当前状态(例如,由区块链上的utxo体现),根据现实世界中发生的事件接收或生成适当的输入,采取适当的动作,并执行恰当的交易。所有这些都可以使用适当定义的函数和现有库在(例如,python)脚本中
实现。例如,在我们的欧式看涨期权情况下,它应该可以访问时钟,以检查是否已达到合约的到期日,并访问资产的当前价格。鉴于该信息,它可以根据参数决定哪个是应考虑的适当输入。鉴于此、以及转换矩阵中指定的动作,代理可以决定应产生哪个区块链交易,从而将系统置于下一状态(在我们的情况下只有一个),或适当地完成合约的执行。
[0161]
应当注意,上述实施例说明而不是限制本发明,并且本领域技术人员将能够在不脱离由所附权利要求限定的本发明的范围的情况下设计许多替代实施例。在权利要求中,括号中的任何附图标记不应被解释为限制权利要求。词语“包括(comprising/comprises等)”不排除在任何权利要求或说明书中作为整体列出的元件或步骤之外的元件或步骤的存在。在本说明书中,“包括(comprises)”表示“包含(includes/including)或由
……
组成(consists of/consisting of)”。元件的单数引用不排除这些元件的复数引用,反之亦然。本发明可以借助于包括若干不同元件的硬件,以及借助于适当编程的计算机来实施。在列举了若干装置的装置权利要求中,这些装置中的若干个可以由同一个硬件实施。在相互不同的从属权利要求中陈述某些措施的仅有事实并不指示这些措施的组合不能用于获益。
技术特征:
1.一种在区块链上实施确定性有限自动机dfa的方法,其包括以下步骤:将用于所述dfa的状态转换表存储在区块链外的存储资源中;通过将区块链上的区块链交易(tx1)的未花费的交易输出(utxo1)与所述状态转换表中的dfa的给定状态相关联,使用所述未花费的交易输出(utxo1)来识别所述dfa已经处于或者当前处于的状态;和/或使用另一交易(tx2)以通过花费所述交易(tx1)的所述未花费的交易输出(utxo1)来使所述dfa从当前状态转换到状态转换表中的另一状态,并且使所述dfa状态的改变被记录到所述区块链中。2.根据权利要求1所述的方法,其中所述未花费的交易输出(utxo1)包括锁定脚本,该锁定脚本包括与所述dfa的给定状态相关联的识别符,以及所述另一交易(tx2)的未花费的交易输出(utxo2)包括锁定脚本,该锁定脚本包括与所述dfa的所述另一状态相关联的另一识别符。3.根据权利要求2所述的方法,还包括:响应于输入信号,通过以下生成所述另一交易(tx2):使用所述区块链交易(tx1)的锁定脚本中的识别符来确定所述dfa的当前状态;以及基于所述当前状态和输入信号,使用所述状态转换表来确定所述另一状态以及与所述另一状态相关联的另一识别符。4.根据权利要求3所述的方法,其中所述输入信号提供所述dfa从一个状态转换到另一状态的触发条件。5.根据权利要求3所述的方法,还包括:将所述另一交易(tx2)和/或所述区块链交易(tx1)提交给区块链网络。6.根据权利要求1-5中任一项所述的方法,其中:所述未花费的交易输出(utxo1)包括锁定脚本,所述锁定脚本包括谜题哈希,其解决方案必须由另一交易的输入提供,以便花费所述未花费的交易输出(utxo1)并将所述dfa转换到另一状态。7.根据权利要求1-5中任一项所述的方法,其中:所述未花费的交易输出(utxo1)包括锁定脚本,所述锁定脚本包括赎回脚本哈希,其必须由另一交易的输入提供,以便花费所述未花费的交易输出(utxo1)并将所述dfa转换到另一状态。8.根据权利要求7所述的方法,其中所述赎回脚本包括加密密钥。9.一种在区块链上实施确定性有限自动机dfa的方法,其包括以下步骤:将区块链交易(tx1)的未花费的输出(utxo1)的锁定脚本中的数据的部分与所述dfa的给定状态相关联,其中所述dfa与持有一定时间的债务票据相关联。10.根据权利要求9所述的方法,其中所述数据的部分是标签、识别符、标记或一部分元数据。11.根据权利要求9所述的方法,其中所述dfa是与所述债务票据相关联的机器可执行智能合约的模型。12.根据权利要求11所述的方法,还包括:
确定与所述债务票据相关联的智能合约对应的状态,作为所述dfa的状态。13.根据权利要求12所述的方法,还包括:确定与所述债务票据相关联的智能合约对应的事件,作为用于将所述dfa从一个状态转换到另一状态的触发条件。14.一种系统,其用于实施根据权利要求1到13中任一项所述的方法。15.根据权利要求14所述的系统,其中所述系统包括:区块链平台;至少一个计算代理,其用于经由所述区块链实施所述dfa。
技术总结
本发明涉及一种用于在区块链上实施、控制和自动化任务或过程的技术,所述区块链例如但不限于比特币区块链。本发明特别适用于但不限于合约的自动化执行,所述合约例如金融协议的智能合约。然而,可以实施其它类型的任务和非金融合约。通过使用区块链交易的未花费的输出来表示机器的状态,并将这些输出的花费作为所述机器从一个状态到另一状态的转换,可以将本发明视为区块链上的状态机或DFA的实施或体现。本发明提供了一种计算数学模型的技术实现和实施,所述计算数学模型被设想为抽象机器,其可以处于状态有限集中的一个并且当发生有限集的触发事件(被称为输入)时可以从一个状态改变到另一状态(转换)。本发明包括用于DFA实施的编译和编码技术。实施的编译和编码技术。实施的编译和编码技术。
技术研发人员:克雷格
受保护的技术使用者:区块链控股有限公司
技术研发日:2017.10.27
技术公布日:2023/8/24
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
