连载:Qtum量子链设计文档(三):账户抽象层带来分层设计,同时支持EVM和X86虚拟机

量子链Qtum2018-06-07 10:11:31  阅读 -评论 0  阅读原文

连载:Qtum量子链设计文档(三):账户抽象层带来分层设计,同时支持EVM和X86虚拟机点击上方蓝字关注QTUM公众号,了解最新行业资讯

连载:Qtum量子链设计文档(三):账户抽象层带来分层设计,同时支持EVM和X86虚拟机

以下内容整理来自Qtum量子链吴明

Qtum原始设计文档汇总(3)-- 账户抽象层(AAL)

前两篇系列文章中,我们回顾了Qtum新定义的操作码的诞生过程,以及Qtum为了集成以太坊虚拟机EVM所做的前期准备工作。以太坊是基于账户的区块链系统,而Qtum是以比特币UTXO模型为基础的。为了解决两者交易模型的差异问题,在量子链的设计中加入了账户抽象层(Account Abstraction Layer,AAL),这样可以最大程度上保持原来比特币的底层功能并兼容现有以太坊的智能合约

实际上AAL的作用远不止打通比特币和以太坊生态。账户抽象层AAL理论上可以用于任何类似比特币UTXO模型的区块链项目之上,并兼容任何基于账户模型的虚拟机。后续Qtum开发团队将对AAL进行重构,兼容更多的虚拟机,比如Qtum正在研发的x86虚拟机,以及未来有可能适配的其他虚拟机。

本章中我们将还原早期Qtum开发团队对账户抽象层AAL的相关原始设计文档(附中文翻译)如下(ps:文档中QTUM或QTUMCORE为内部设计文档编号):

QTUMCORE-47:Add Account Abstraction Layer for contracts Description:The account abstraction layer is a way for EVM contracts to work on the UTXO based blockchain. This story should cover nearly the entire module. Funds can be sent to a contract using OP_CALL. When a contract receives or sends funds, it should result in a "condensing transaction". This condensing transaction will spend any existing contract vouts which require their balance to be changed, and the outputs will be the new balance of the contracts. The condensing transaction is created so that a contract never owns more than 1 UTXO. This significantly simplifies coin picking, and prevents many attack vectors with filling up a block. There can be more than 1 condensing transaction per block. In the case of a single contract having multiple balance changes in a block, a condensing transaction might spend a previous condensing transaction's outputs in the same block. This is slightly wasteful but reduces the complexity of logic required, and allows for easily adding more contract execution transactions without needing to rewrite any previous transactions. An ITD for the full behavior with all known edge cases is here: https://github.com/qtumproject/qtum-itds/blob/master/aal/condensing-transaction.md Diagram attached Task:添加合约的账户抽象层(AAL) 描述:账户抽象层(AAL)是一种可以使EVM合约工作在基于UTXO的区块链上的解决方案。该任务覆盖了几乎整个模块。 可以使用OP_CALL将资金发送给合约。当合约接收或发送资金时,它应该导致一个“condensing交易”。该交易将花费任何存在的合约vouts并导致它们的余额改变,outputs将会成为合约新的余额。 创建condensing交易是为了使合约拥有的UTXO不超过1个。这可以大大简化coin picking,并且可以阻止通过填满区块进行攻击的行为。 每个区块中的condensing交易可以多于1个。在一个区块中单个合约发生多次余额改变的情况下,condensing交易可能花费在同一个区块中的前一个condensing交易的输出。这有点浪费但是可以减小逻辑的复杂性,并且不需要重写任何前面的交易就能简单地添加更多合约运行交易。 所有已知的边界场景的运行情况可参见该ITD:  https://github.com/qtumproject/qtum-itds/blob/master/aal/condensing-transaction.md 内附简图。

上述任务对账户抽象层进行了整体的描述,由于许多准备工作已经完成,所以任务没有描述过多实现细节。有兴趣的读者可以参见前两篇系列文章中的相关设计文档。这里提到的condensing交易是一个非常重要的概念,它可以避免由于合约余额选择顺序的差异导致的无法达成共识的问题。

QTUMCORE-54: Add tests for Account Abstraction Layer for contracts Description:Cover with tests Account Abstraction Layer change  QTUMCORE-47 DONE Task:对合约的账户抽象层进行测试 描述:包括QTUMCORE-47中做的账户抽象层的修改,也要进行测试

上述任务主要对新设计的账户抽象层进行完整的测试,确保在上线之前万无一失。账户抽象层自Qtum主网上线以来,一直稳定工作,这主要归功于上线之前充分的测试。

QTUMCORE-58: Add additional AAL and Condensing TX validation rules Description: We have just implemented the AAL. However, it's validation rules are not completely secure yet. We should do the following when receiving a block with condensing executions: Implementing this will allow us to remove previous OP_TXHASH one by one checks (no need for double execution), and will allow the validation of all VM future tx types (including the recent validation condensing transaction ITD). 0. First make sure stateRoot and utxoRoot hashes are part of the block hash computation. 1. Process block using checkblock, and all other checks needed before validating transaction scripts and contract execution 2. Create a completely new block, copying all header info from the original block 3. Add coinbase and stake transactions from original block 4. Add 1 transaction at a time from original block, executing contracts as needed 5. Any expected OP_TXHASH transactions should be added to the block in-order of creation. If there is an unexpected OP_TXHASH tx in the original block, it should be rejected (this might be changed later for soft-fork compatibility) 6. Process every transaction until none remain 7. Create new merklehash and place in blockheader 8. Compute state root hashes etc EVM state data 9. Compare the new block's hash to the old block's hash 10. If the new block's hash matches, then accept it. Otherwise, reject the block Pseudo-code: {code:java} block = receiveBlock(); CheckBlock(block) testBlock = new Block(); testBlock.header=block.header testBlock.MerkelRoot=0; //make 0 because no transactions in block yet foreach(tx in block){    if(tx.hasExec()){        testblock.Add(tx) //add contract tx to block        result = tx.exec();        if(result.hasOpHashTx()){            foreach(opHashTx in result){                testblock.Add(opHashTx); //add resulting condensing tx from contract execution (I think there can be more than 1 if a single tx has multiple EVM execs?)            }        }    }else if(tx.isContractSpend()){        //don't add spends    }else{        testblock.Add(tx) //add any other tx type, non-standard, pubkeyhash, etc    } } testBlock.calculateMerkelRoot(); testBlock.calculateStateRoots(); assert(testBlock.hash() == block.hash()) {code} Task:添加额外的账户抽象层以及Condensing交易验证规则 描述:我们刚刚实现了账户抽象层(AAL)。然而,它的验证规则还不是完全安全的。在收到condensing运行的区块时,我们应该完成以下操作: 实现该功能将允许我们通过一个检查删除之前的OP_TXHASH(不需要再次运行),并且允许验证所有虚拟机未来的交易类型(包括最近的condensing交易ITD验证) 0.  首先确保stateRoot和utxoRoot哈希是区块哈希运算的一部分 1.  使用checkblock处理区块,以及所有其他在交易脚本验证和合约运行之前需要的检查 2.  创建一个全新的区块,并从原始的区块中复制所有的区块头信息 3.  从原始区块中添加coinbase和stake交易 4.  一次从原始的区块添加1个交易,根据需要运行合约 5.  任何预期的OP_TXHASH交易应该按照创建的顺序被添加到区块中。如果在原始的区块中出现了一个意料之外的OP_TXHASH,它应该被拒绝(这点后续可能需要修改,为了支持软分叉兼容性) 6.  处理每个交易直到所有的交易都处理完 7.  创建新的merklehash并放在区块头中 8.  计算状态根哈希等EVM状态数据 9.  将新的区块哈希和旧的区块哈希比较 10. 如果新的区块哈希匹配,则接受它。否则,拒绝该区块 伪码: {code:java} block = receiveBlock(); CheckBlock(block) testBlock = new Block(); testBlock.header=block.header testBlock.MerkelRoot=0; //make 0 because no transactions in block yet foreach(tx in block){    if(tx.hasExec()){        testblock.Add(tx) //add contract tx to block        result = tx.exec();        if(result.hasOpHashTx()){            foreach(opHashTx in result){                testblock.Add(opHashTx); //add resulting condensing tx from contract execution (I think there can be more than 1 if a single tx has multiple EVM execs?)            }        }    }else if(tx.isContractSpend()){        //don't add spends    }else{        testblock.Add(tx) //add any other tx type, non-standard, pubkeyhash, etc    } } testBlock.calculateMerkelRoot(); testBlock.calculateStateRoots(); assert(testBlock.hash() == block.hash()) {code}

上述任务详细描述了在引入账户抽象层AAL后,节点对包含合约交易的区块的验证规则。该规则是Qtum区块链共识的重要组成部分。

小结

本章的原始文档主要描述了Qtum账户抽象层AAL的设计细节,虽然内容较少,但却是Qtum兼容比特币和以太坊虚拟机的重要创新。感兴趣的读者可以进一步阅读《如何通过Qtum量子链账户抽象层打通比特币和以太坊生态》,文章从代码层面对AAL进行了详细剖析。

连载:Qtum量子链设计文档(三):账户抽象层带来分层设计,同时支持EVM和X86虚拟机

关注Qtum量子链(qtumchain)公众号,回复关键字查阅Qtum量子链相关资料,以下是部分文档关键字

回复:‘白皮书’,查看《Qtum量子链白皮书,设计原理,实现方案,及应用》

回复:‘未来’,查看《Qtum量子链未来2年技术路线规划-简略版》

回复:‘指南’,查看《首篇Qtum量子链区块链开发指南系列面世》

回复:‘专访’,查看《Nasdaq专访Qtum:区块链会成为世界最大的信任服务商》

回复:‘文档’,查看英文版本《Qtum量子链实现文档》

回复:‘中文文档’,查看中文版本《Qtum量子链实现文档》

连载:Qtum量子链设计文档(三):账户抽象层带来分层设计,同时支持EVM和X86虚拟机

连载:Qtum量子链设计文档(三):账户抽象层带来分层设计,同时支持EVM和X86虚拟机

声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们kefu@lianshijie.com

参与讨论 (0 人参与讨论)

相关推荐

Bebt交易所:深入分析自动化做市商发展掣肘与设计改进

Bebt交易所:深入分析自动化做市商发展掣肘与设计改进

在基于区块链的分布式系统 (如 Ethereum) 上重构一个新的金融世界时,必须认识到区块链世界与链下世界相比,有着完全不同的动态属性。最值得注意的是,链上并非连续计时,而是通过区块来量化时间的流逝。但因为它受到区块大小的限制,这又导致了延迟问题和计算能力的限制。由于这些结构上的差异,分布式金融的设计者应该具有与中心化世界的设计者完全不同的思路。例如,由于区块链的成本和技术基础设施,做市商在基于

币安智能链生态加速计划公布,6家项目获得首批资金支持

2020年10月14日 – 全球领先的区块链生态系统币安,今日正式公布币安智能链生态加速计划(价值1亿美元)支持的首批项目名单。本次入选的6家区块链项目有:AnySwap、Arkane Network、BakerySwap、Bitquery、PancakeSwap和Proxima,以上项目将共同分享价值35万美元的资金支持。 首批入选项目类型包括自动做市商(AMM)、数据平台、游戏解决方案

中国银联与韩国Danal合作推出支持加密的数字卡

中国银联与韩国Danal合作推出支持加密的数字卡

Danal的加密钱包Paycoin及其同名加密代币将成为新的预付费手机卡的接口。Danal的PayCoin是一种基于区块链的资产,自2019年开始流通。

Circle的高收益USDC商业账户瞄准DeFi

Circle的高收益USDC商业账户瞄准DeFi

但在2020年11月5日,Circle宣布了新的高收益账户,可能会鼓励账户持有人将资金保留在CeFi中。在周四的推特中,Circle宣布了新的计息商业账户的候选名单。Circle的产品只是更广泛的CeFi与DeFi趋势中的最新产品。

谁是更好的去中心化云存储?Filecoin vs Storj设计要点和实测PK

而真正能算得上在去中心化云存储赛道主战场上正面PK的重量级选手,其实只有Filecoin和Storj。

正本清源之三:在中国持有和交易“虚拟货币”的法律分析

“虚拟货币”在很多宣传中被定位为“货币”或者“金融投资产品”,但不论每个人如何认知,可以肯定的是,在金融范畴内,“虚拟货币”并非“货币”。

解构灰度比特币信托产品的设计原理

原文标题:解构灰度比特币信托原文作者:Ann Hsu | Chain Hill Capital首席指数分析师本文系Chain Hill Capital首席指数分析师Ann Hsu 撰写,未经授权严禁转

​正本清源之三:在中国持有和交易"虚拟货币"的法律分析

"虚拟货币"(Cryptocurrency)在很多宣传中被定位为"货币"或者"金融投资产品",但不论每个人如何认知,可以肯定的是,在金融范畴内,"虚拟货币"并非"货币"。虽然在中国没有专门针对"虚拟货币"的立法,但根据中国人民银行等七部委于2017年9月4日发布的《关于防范代币发行融资风险的公告》(以下简称"94公告"),所谓的"'虚拟货币'不由货币当局发行,不具有法偿性与强制性等货币属性,不具有

麦妖榜
更新日期 2019-09-03
排名用户贡献值
1牛市来了30910
2BitettFan24187
3等待的宿命23810
4区块大康20369
5六叶树20310
6linjm122719429
7天下无双16192
8lizhen00215280
9让时间淡忘14586
10yelanyi050511349
返回顶部 ↑