http://www.www.tnmanning.com

如何通过Qtum量子链账户抽象层买通一分PK10和以太坊生态?

Qtum设计上以一分PK10UTXO为基本账户模子,并实现了支持EVM类型的智能合约,这是通过账户抽象层(Account Abstract Layer, AAL)来完成的。AAL对UTXO账户和EVM合约账户之间举办了适配,这样通过AAL可以利用UTXO生意业务输出实此刻链上建设智能合约,发送生意业务到合约账户用于触发合约的执行,完成执行后AAL最终对执行功效举办处理惩罚并适配至UTXO。由于回收了AAL,合约开拓者不需体贴对合约操纵相关的UTXO转换细节,即可利用EVM的特性举办开拓并且兼容现有以太坊的智能合约。本文通过对从UTXO生意业务到智能合约执行的实现代码举办解读,初略阐明白AAL的事情进程。

2.1 举办EVM模子的账号参数提取

发生新的区块时,除了对UTXO生意业务举办通例的参数正当性、共鸣法则、DDOS进攻查抄等之外,还需要利用操纵码查抄函数HasCreateOrCall()判定生意业务输出是否包括OP_CREATE或OP_CALL,别离对应着EVM需要执行合约建设或合约挪用。这部门有以下的处理惩罚进程:

 这个三个操纵码别离有以下浸染

OP_SPEND用于合约余额的耗费。

OP_CREATE用于智能合约的建设;

2.2 举办EVM账户模子的生意业务转换

2.UTXO生意业务到EVM模子生意业务的转换

22

AAL通过新增的UTXO剧本操纵码,协助完成合约的建设、执行和耗费。在合约建设和执行前,需要举办UTXO生意业务到EVM模子生意业务的转换,之后利用构建的EVM执行情况和引擎,完成合约的执行。AAL最终对合约的执行功效举办处理惩罚并从EVM适配至UTXO,这样就实现了基于UTXO的智能合约。AAL使得Qtum兼容切合EVM类型的智能合约,为Dapp提供一个新的基本平台,同时UTXO的利益使得诸如并行处理惩罚、隐私性等利益能得以保存。

3.1 合约执行情况构建及合约执行

合约在EVM的执行用到了data、gasPrice、gasLimit、VM version这几个参数,这些参数是通过RPC挪用sendtocontract 发送的,sendtocontract会生成一个UTXO生意业务,并在生意业务输出中利用了OP_CALL操纵码,之后生意业务会广播到大发3d网络上。AAL中从UTXO到EVM的适配是通过QtumTxConverter类实现的,在这一步中该类的成员函数extractionQtumTransactions()和parseEthTXParams()完成对所有此类UTXO生意业务输出的参数提取。代码片断如下:

生意业务转换是通过QtumTxConverter类的函数 createEthTX()完成,利用前面一步提取的参数和UTXO的生意业务输出vout建设了QtumTransaction范例的生意业务。由于QtumTransaction派生自EVM中的dev::eth::Transaction类,因此和EVM执行相关的操纵QtumTransaction类都支持。

1.UTXO生意业务新增的剧本操纵码

OP_CALL用于合约的执行;

3

首先界说了ByteCodeExecResult范例的resultBCE变量,用于生存转换的功效。利用操纵码OP_SPEND,用于实现生意业务的耗费,这是因为一分PK10的UTXO通过私钥签名在生意业务输入解锁厥后实现余额耗费的,而EVM执行涉及差异账户之间的transfer,所以需要通过OP_SPEND实现这些transfer到UTXO模子生意业务的转换。假如execRes.excepted不为None,即合约执行异常,则将余额返还给合约挪用者。不然,假如没有异常,则将扣除耗损的gas之后的剩余gas返还给合约的挪用者。对付合约执行中呈现的transfer其UTXO生意业务生存在result[i].tx中。因此,颠末这一步处理惩罚合约执行发生的差异UTXO账户之间的生意业务就生存在valueTransfers向量中了,最终这些生意业务会包括进新的区块中。至此AAL模块就完成了从EVM生意业务到UTXO的转换。

为了在区块生成进程中,识别并处理惩罚由这几个操纵码节制的生意业务,在用于UTXO模子生意业务的类CTransaction中增加了HasCreateOrCall()和HasOpSpend()函数,用于新区块中对mempool中的生意业务处理惩罚,并在剧本操纵码理会的EvalScript()函数中增加了相应的处理惩罚。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。