首页 / 专利库 / 银行与财务事项 / 比特币地址 / 一种智能合约虚拟机实现方法

一种智能合约虚拟机实现方法

阅读:39发布:2020-06-17

专利汇可以提供一种智能合约虚拟机实现方法专利检索,专利查询,专利分析的服务。并且本 发明 涉及一种 智能合约 虚拟机 实现方法,智能合约虚拟机为一个以太坊虚拟机,以太坊虚拟机是一个带有256字节的机器字的以栈为 基础 的虚拟机;智能合约基于量子链系统,能够运行在以太坊上,并且执行所述智能合约虚拟机;包含与智能合约虚拟机相关的操作码以方便交易的执行;本发明的有益成果为:本发明的智能合约虚拟机实现方法为以太坊虚拟机(EVM),它可以在以太坊上写出更强大的程序,负责太坊 区 块 链 中智能合约的执行,并且得益于以太坊的网络的合约 执行环境 ,以太坊中的合约的编写和执行也因此变得非常简单。,下面是一种智能合约虚拟机实现方法专利的具体信息内容。

1.一种智能合约虚拟机实现方法,其特征在于,包含:
所述智能合约虚拟机为一个以太坊虚拟机,所述以太坊虚拟机是一个带有256字节的机器字的以栈为基础的虚拟机;所述智能合约基于量子链系统,能够运行在以太坊上,并且执行所述智能合约虚拟机;
所述量子链系统中包含三种与所述智能合约虚拟机相关的操作码,分别为OP_EXEC操作码、OP_EXEC_ASSIGN操作码、OP_TXHASH操作码;
所述OP_EXEC操作码,用于触发一个特殊的交易处理,并且将执行用于传递的所述以太坊虚拟机的字节码;
所述OP_EXEC_ASSIGN操作码,用于触发类似于所述OP_EXEC操作码执行的处理,并且传递合同地址和数据给所述智能合约,传递所述数据时执行所述智能合约的字节码,所述OP_EXEC_ASSIGN操作码能够将给定的资金传递给所述智能合约;所述数据在所述智能合约虚拟机中表示为CALLERDATA;
所述OP_TXHASH操作码,用于协调帐本抽象层的剩余部分,并且当前执行交易的交易ID哈希值也被压入栈中;
包含所述OP_EXEC操作码与所述OP_EXEC_ASSIGN操作码的输出脚本的特殊处理,以使所述智能合约的立即执行能够融入到链中;所述特殊处理包含的过程为:当交易中的脚本检测到所述OP_EXEC操作码或所述OP_EXEC_ASSIGN操作码,在交易被放置到区块链网络中后由区块链网络的所有节点进行执行;在所述特殊处理的背景下,比特币的脚本语言作为一种将所述数据传送给所述智能合约虚拟机的一种方式;当所述智能合约虚拟机执行所述OP_EXEC操作码或所述OP_EXEC_ASSIGN操作码,所述智能合约虚拟机可以在自己的状态数据库里改变状态,即在以太坊上执行一个类似的合约;
所述OP_EXEC操作码和所述OP_EXEC_ASSIGN操作码的交易输出是可以消费的,当所述交易输出的代码发送资金到另一个合约或者另一个公钥哈希值地址,所述OP_EXEC_ASSIGN操作码的输出通过合约被消费;所述OP_EXEC操作码的输出被消费,当任何时候所述智能合约使用自杀操作将自己从区块链中移除;
构建气体模型,用于衡量所述以太坊虚拟机操作码的执行的价值,每个交易要花费一定量的所述气体模型中气体;在交易完成后,剩余的气体数量会被返回给发送的人,当在合约中执行的气体的数量超过合约需要的数量,那么交易的状态以及动作会被恢复;状态被恢复,交易的气体也已被消耗;气体的详细条目分为GasLimit与GasPrice;GasLimit用于记录在合约执行中消耗的气体数量;GasPrice用于记录每个气体单元的精确价格;合约执行中最大量子花费等于GasLimit与GasPrice进行相乘。

说明书全文

一种智能合约虚拟机实现方法

技术领域

[0001] 本发明涉及互联网上链系统的智能合约,为一种智能合约虚拟机实现方法。

背景技术

[0002] 在区块链中,合约代码通过虚拟机执行,并且不侧重链下数据的输入,借助于区块链网络本身提供合约触发条件,就能完成合约的执行。而以太坊虚拟机(EVM)是以太坊中智能合约的运行环境。它不仅被封装起来,事实上,它被完全隔离,即运行在以太坊虚拟机内部的代码不能接触到网络、文件系统或者其它进程。甚至智能合约与其它智能合约只有有限的接触。因此,由于智能合约虚拟机的重要地位,必须对它的具体细节进行设计满足虚拟机的基本要求,并且需要满足智能合约的执行要求。

发明内容

[0003] 有鉴于此,本发明提供一种解决或部分解决上述问题的智能合约虚拟机实现方法。
[0004] 为达到上述技术方案的效果,本发明的技术方案为:一种智能合约虚拟机实现方法,包含以下步骤:
[0005] 智能合约虚拟机为一个以太坊虚拟机,以太坊虚拟机是一个带有256字节的机器字的以栈为基础的虚拟机;智能合约基于量子链系统,能够运行以太坊,并且执行智能合约虚拟机;
[0006] 量子链系统中包含三种与智能合约虚拟机相关的操作码,分别为OP_EXEC操作码、OP_EXEC_ASSIGN操作码、OP_TXHASH操作码;
[0007] OP_EXEC操作码,用于触发一个特殊的交易处理,并且将执行用于传递的以太坊虚拟机的字节码;
[0008] OP_EXEC_ASSIGN操作码,用于触发类似于OP_EXEC操作码执行的处理,并且传递合同地址和数据给智能合约,传递数据时执行智能合约的字节码,OP_EXEC_ASSIGN操作码能够将给定的资金传递给智能合约;数据在智能合约虚拟机中表示为CALLERDATA;
[0009] OP_TXHASH操作码,用于协调帐本抽象层的剩余部分,并且当前执行交易的交易ID哈希值也被压入栈中;
[0010] 包含OP_EXEC操作码与OP_EXEC_ASSIGN操作码的输出脚本的特殊处理,以使智能合约的立即执行能够融入到区块链中;特殊处理包含的过程为:当交易中的脚本检测到OP_EXEC操作码或OP_EXEC_ASSIGN操作码,在交易被放置到区块链网络中后由区块链网络的所有节点进行执行;在特殊处理的背景下,比特币的脚本语言作为一种将数据传送给智能合约虚拟机的一种方式;当智能合约虚拟机执行OP_EXEC操作码或OP_EXEC_ASSIGN操作码,智能合约虚拟机可以在自己的状态数据库里改变状态,即在以太坊上执行一个类似的合约;
[0011] OP_EXEC操作码和OP_EXEC_ASSIGN操作码的交易输出是可以消费的,当交易输出的代码发送资金到另一个合约或者另一个公钥哈希值地址,OP_EXEC_ASSIGN操作码的输出通过合约被消费;OP_EXEC操作码的输出被消费,当任何时候智能合约使用自杀操作将自己从区块链中移除;
[0012] 构建气体模型,用于衡量以太坊虚拟机操作码的执行的价值,每个交易要花费一定量的气体模型中气体;在交易完成后,剩余的气体数量会被返回给发送的人,当在合约中执行的气体的数量超过合约需要的数量,那么交易的状态以及动作会被恢复;状态被恢复,交易的气体也已被消耗;气体的详细条目分为GasLimit与GasPrice;GasLimit用于记录在合约执行中消耗的气体数量;GasPrice用于记录每个气体单元的精确价格;合约执行中最大量子花费等于GasLimit与GasPrice进行相乘。
[0013] 本发明的有益成果为:本发明的智能合约虚拟机实现方法为以太坊虚拟机(EVM),它可以在以太坊上写出更强大的程序,负责太坊区块链中智能合约的执行,并且得益于以太坊的网络的合约执行环境,以太坊中的合约的编写和执行也因此变得非常简单。

具体实施方式

[0014] 为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合及实施例,对本发明进行详细的说明。应当说明的是,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,能实现同样功能的产品属于等同替换和改进,均包含在本发明的保护范围之内。具体方法如下:
[0015] 实施例1:智能合约能够运行以太坊,并且执行智能合约虚拟机;以太坊虚拟机被设计用于以太坊的区块链,因此假定所有价值的传递都基于账目为基础的方法。
[0016] 在量子链中,脚本仅仅在一个输出需要被花费时才能执行,举例,对于一个标准的公钥哈希值交易,虽然脚本在区块链上,它将不会以任何方式被验证或执行。执行和验证不会发生,直到一个交易输入参考输出。从这点来说,如果输入脚本不能提供一个有效的数据到输出脚本,导致其返回1,交易将无效。
[0017] 然而量子链,必须适应智能合约,智能合约的立即执行已经融入到区块链中,做到这个过程必须通过对包含OP_EXEC或OP_EXEC_ASSIGN交易的输出脚本的特殊处理。当在脚本中检测到这些操作码之一,在交易被放置到块中后由网络的所有节点进行执行。在这种模式下,实际的比特币脚本语言不太像脚本语言,更为严格来说,是将数据传送到以太坊虚拟机的一种方式。当以太坊虚拟机执行时通过这些操作码中的任一个,以太坊虚拟机可以改变状态在其自己的状态数据库里,实际上就像一个类似的合约被执行在以太坊上。为了使量子链智能合约尽可能易于使用,我们必须将认证数据作为特定的公钥哈希值地址发送给智能合约以及其的创建者。
[0018] 相对于UTXO模型,以太坊是一个以帐目为基础的系统;有关于帐目模型详细阐述如下所示:
[0019] 在以太坊,状态由称为“帐目”的对象组成,每个帐目都有一个20字节的地址,状态转换直接在帐目之间传输价值和信息;以太坊帐目包含四个部分:
[0020] nonce随机数,是确保每笔交易只能处理一次的计数器;
[0021] 帐目中当前以太坊余额;
[0022] 帐目的合约代码;
[0023] 帐目的存储(默认为空);
[0024] “以太”是以太坊的主要内部加密燃料,通常用于支付交易费;一般来说,这里有两种类型的帐户:外部所有者的帐目以及合约帐目,外部所有者的帐目由私钥控制,合约帐目由他们的合约代码控制;
[0025] 外部拥有的帐目没有代码,和能通过建立和签署交易从外部拥有的帐目中发送消息。在合约帐目中,任何时候合约帐目接收一个代码激活信息,允许其读写内部存储并发送其他消息或依次创建合约。
[0026] 在以太坊的系统中,帐目余额在帐目系统里管理,其中帐户余额的任何增加或减少被更像是现实世界中的行帐户,并且每个新块的产生有可能会对帐目的全局状态产生影响。
[0027] 每个帐目都有自己的余额,基于合约的存储和编码空间能称为帐目或地址,通过存储器存储执行结果。在当前的以太坊帐目系统中,用户可以通过客户端/远程过程调用协议进行一对一交易,这意味着每个交易每次仅仅只能从一个帐目到另一个帐目中生成。尽管有可能通过智能合约发送到更多的帐目,这些内部交易只能在每个帐目的余额中显示,很难在以太坊的公开帐本上追踪它们。
[0028] 实施例2:气体模型
[0029] 在量子链中面临的主要问题为会增加图灵完备性到比特币的区块链中,具体为从理论上可以不只依赖于交易的大小来决定矿工花费的合适费用。导致上述发生的原因为一个简单的、小的交易在矿工对区块链进行作用时中会陷入无限循环,并且造成整个区块链停止运转。气体模型为了解决上述问题来创建的。
[0030] 气体模型的概念被总结为每个以太坊虚拟机操作符的执行都存在一个价值,并且每个交易都需要花费一定量的气体。在交易完成后,剩余的气体数量会被返回给发送的人。当在合约中执行的气体的数量超过合约需要的数量,那么交易的状态以及动作会被恢复。
那意味着任何需要被修改的永久存储会被还原到起始状态,并且任何花费的合约费用也会被恢复以至于它们不会被花费。
[0031] 尽管所有状态被还原,交易的所有气体被消耗并且给予正在对交易操作的矿工。原因为在矿工操作的过程中计算资源已经被花费,所以尽管在区块链中导致状态变换不是非常安全,操作的过程已经被花费,由矿工来花费。
[0032] 尽管量子链使用以太坊中的气体模型,可以预料到气体计划(每个以太坊虚拟机操作的气体价格)与以太坊有很大的区别。原因为量子链中的一些操作比以太坊中的操作要贵,一些要便宜。精确的价钱被决定,是由以太坊中存在的价钱以及比较量子链中操作码需要的区块链资源的数量决定。
[0033] 当需要创造一个合约资金或者部署交易,用户需要对气体的详细条目进行制定:
[0034] 第一个详细条目为GasLimit,用于记录在合约执行中消耗的气体数量。
[0035] 第二个详细条目为GasPrice,用于记录每个气体单元的精确价格;
[0036] 合约执行中最大量子花费由GasLimit对GasPrice进行相乘。如果最大花费超过了交易费用,那么交易被认定不正确的并且不会被挖矿以及操作。交易规模费用的计算方式为剩余交易费用与最大交易相减,这个计算过程与标准比特币费用模型相似。
[0037] 为了决定交易的合适优先级,矿工必须决定两个变量。
[0038] 第一,交易规模费用为所有交易的规模,这个由每个比特共识来计算最小硬币数量,并且在这一过程中使用每千字节计算公式。
[0039] 第二个变量为,气体价格GasPrice的合约执行。
[0040] 股份证明(POS)矿工在区块中包含以及处理的最重要的、最有利的交易中有很大的选择自主权。
[0041] 这允许费用模型像一个免费的市场一样工作,在这其中矿工以及使用者能够优化最好的费用,这最好的费用被支付时,能够适应于交易的速度以及价格。
[0042] (a)退款
[0043] 使用UTXO模型,资金作为交易费用被发送给矿工是不可商议的。如果交易对于矿工比预想的更容易处理,那么无法让矿工将费用退还。然而,因为气体模型是有用的,一定存在方法能够将费用退还给发送者。
[0044] 此外,当气体使用完毕时必须存在将交易状态中止的方式,并且能够将气体费用发送给矿工。量子链中退还气体费用是通过创建新的输出,并将输出当作矿工的硬币基础交易。
[0045] 一个新的区块验证共识的规则也被创建,并且保证这些退还的输出在硬币基础交易中存在。否则,矿工可以选择不退还这些资金。
[0046] 用于退款目的,这时交易资金的发送者被认为是第一个输入的参考输出,仅通过复制输出脚本返回给退款。现今,出于安全的原因,这种输出脚本只能为pay-to-pubkeyhash或者pay-to-scripthash脚本。当安全确实需要时,可以将相关的约束列出。
[0047] 仅供参考,OP_EXEC_ASSIGN操作码有以下格式,用于分配资金合约:
[0048] 输入:以压入的顺序:
[0049] 用于花费的交易哈希值(可选择的);
[0050] 版本号(VM版本,一般为1);
[0051] 气体的限制gas limit(在执行中可使用最大气体的数量);
[0052] 气体价格(每个气体单元中量子数量);
[0053] 数据(需要发送给智能合约的数据);
[0054] 智能合约地址;
[0055] 输出(以跳出的顺序;)
[0056] 可花费的(如果现在的费用可以被花费);
[0057] 所以,EXEC_ASSIGN的例子可以列入如下:
[0058] 1
[0059] 10000
[0060] 100
[0061] 0xABCD1234...
[0062] 3d655b14393b55a4dec8ba043bb286afa96af485
[0063] EXEC_ASSIGN
[0064] 如果虚拟机执行的结果为气体的输出异常,这个输出将以赎回脚本被花费。从vin[0].prevout脚本中提取的pubkeyhash脚本为这个交易中产生的输入。在量子链的早期版本中,在虚拟机交易中只有pubkeyhash发送者才能被允许。
[0065] 尽管被区块链允许的其他格式也能导致虚拟机的执行,在以太坊虚拟机中的msg.sender的值将被设置为0,并且任何气体的输出以及气体的退款将会导致合约保持这些资金。
[0066] (b)部分退款模型
[0067] 对于气体模型的其他部分,还必须退还未花费的气体。这是让人们可以承诺花费大量资金来确保他们的合同的正确执行,但是他们没有使用的气体被返回作为量子链退款。气体的返回地址在区块链中描述被发送交易的vin[0].prevout脚本。通过使用标准的比特币交易收费机制,气体被发送到合约。
[0068] 所以,新的收费模型讨论了如何进行交易费用的描述:
[0069] gas_fee=gas_limit*gas_price
[0070] txfee=vin-vout+gas_fee+tx_relay_fee
[0071] refund=txfee-used_gas-tx_relay_fee
[0072] 请注意,这是一个在单个”credit_price”值可以确定交易优先级的情况下,使矿工可以评估tx_relay_fee和gas_price的建议。
[0073] 既然合约被执行,气体标签从整个费用中去除(通过乘以气体价格)。在合约的执行完成后,气体的费用gas_fee的剩余被返回给给定的气体返回脚本。这应该通过增加输出到硬币基础交易(矿工使用交易去检索他们的区块奖励)。
[0074] 增加到硬币基础交易的输出为来自vin[0].prevout的pubkeyhash。为了得到气体的退款,必须存在pubkeyhash的虚拟输出去花费。否则,气体退款在矿工中保存(在gas的输出条件下,费用的发送与合约共存)。注意到每个交易都可能只有一个以太坊虚拟机合约执行,所以不可能两个合约执行都试图去共享交易费用。每个交易多个EVM执行会带来一些问题。
[0075] (c)重要的气体边缘案例
[0076] 矿工必须注意合约气体/资金返回脚本。如果气体返回脚本输出会导致区块超出最大的区块规模,那么合约交易不会再放入区块,并且当下一个区块被挖矿,它的执行一定会发生。在试图去执行合约之前,矿工需要一直确认在候选区块中存在足够的位置以提供给气体返回脚本。如果发现退款脚本不适合当前块,则如果不遵循此规则,可能会导致需要执行一次以上的合约。如果没有气体费用返回,不存在为了返回资金的输出。交易费用中包含气体费用gas_fee为共识的关键。如果一个交易试图去增加一个会导致不好的气体退款的区块,或者gas_fee比txfee少,那么这个交易是无效的,拥有交易的区块也是无效的。没有交易输出脚本为有效的,存在多于一个OP_EXEC操作或OP_EXEC_ASSIGN操作。这些会限制脚本的能,但是会使递归/多种执行问题更易处理。在这种方法下,静态分析可以很容易地判断脚本是否无效,而不是需要执行脚本来确定它。
[0077] 以上所述仅为本发明之较佳实施例,并非用以限定本发明的权利要求保护范围。同时以上说明,对于相关技术领域的技术人员应可以理解及实施,因此其他基于本发明所揭示内容所完成的等同改变,均应包含在本权利要求书的涵盖范围内。
[0078] 本发明的有益成果为:本发明的智能合约虚拟机实现方法为以太坊虚拟机(EVM),它可以在以太坊上写出更强大的程序,负责太坊区块链中智能合约的执行,并且得益于以太坊的网络的合约执行环境,以太坊中的合约的编写和执行也因此变得非常简单。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈