Qtum量子链系统架构和开发流程剖析

区块链资讯 发布在 链圈子 0 8001

在量子链的早期开发过程中,开发团队倾注了大量时间和精力,试图建立一个模型,将比特币的UTXO交易模型和以太坊智能合约结合起来,并且能与现有的比特币区块链架构高度兼容。为了达到这个目标,开发团队决定在比特币核心代码(v0.13版本)的一个分叉上,增加以太坊虚拟机的功能。(未包含PoS共识机制的更新)
Qtum系统的交易传输架构模型如下:

图片1

图1: Qtum 系统的交易传输架构

以太坊

考虑到以太坊虚拟机的运行时间和账户储存数据库(Account Store database)的高耦合性,在量子链的开发中,我们并没有把这部分的源代码做过多的修改。因此,以太坊的代码库和测试套件仍然可以为量子链开发团队所用。此外,以太坊中MPT树(Merkle Patricia trees)被用于单独储存UTXO (请见Qtum/db 部分)。MPT树提供了一种加密认证的数据结构,用于储存所有的(key,value)对。而且,MPT具有完全确定性,即拥有相同(key,value)对的MPT,一定有完全相同的根哈希值(root hash),并为插入、查询、删除等操作提供相同的效率值(O(log(n)))。

比特币

比特币的交易结构也没有做过多的修改,仅增加了运行智能合约相关的操作代码。此外,为了提供各个节点间以太坊账户存储的同步性,我们在区块头信息中加入了状态根哈希值(state root hash)字段。

 

量子链

DB

比特币和以太坊的最大区别在于交易模型的不同,比特币使用的是UTXO(未花费交易输出)模型,而以太坊使用的是账户体系。为了使两种模型实现交互,我们决定保留以太坊的数据结构(MPT树结构),并在以太坊存储的基础上,增加新的存储层,并创建单独的数据库实例,用于存储未花费交易输出和相对应账户(智能合约)的映射关系。
Coin-picking

智能合约的执行可能会导致evm-invoked资金交易。为了保证所有节点上的共识机制和量子链db的一致性,我们从协议的层面定义了coin-picking算法。量子链使用FIFO(先进先出)模型进行coin的选择,即根据coin的入栈顺序决定该账户的交易输出顺序。当有交易(internal tx)发生时,最先入栈的coin将被选中,以此类推,直至达到交易所需的金额为止。

Opcodes

我们在量子链中定义了全新的操作代码:OP_EXEC,OP_EXEC_ASSIGN和OP_TXHASH,分别用于智能合约的创建,智能合约的执行和智能合约的花费。

图片2

版本号:虚拟机的版本号
GasLimit,GasPrice:类似于以太坊中的gas,用于执行代码的花费
数据:用于虚拟机执行的代码;
地址:被调用合约的ID值;
OP_TXHASH允许智能合约的资金用于bytecode-invoked交易。在执行交易时,OP_TXHASH会被当前交易的哈希值替换。

Delegated calls reflection

由于Solidity代码支持其他合约的委托调用,因此可能会有隐藏资金交易的发生。为了在UTXO模型中体现这些交易,矿工在区块上加入了类似比特币的交易信息。这些交易信息中与OP_EXEC_ASSIGN模板一致的相关字段会被设置为0(除了地址和价值),这样可以避免不必要的区块空间浪费,并且仅使用OP_TXHASH作为输入数据。
Expected transactions queue

OP_EXEC,OP_EXEC_ASSIGN操作代码用于标记可花费的交易输出。比特币脚本编译器可以访问代码执行过程中产生的新区块的数据结构,其中包含了交易的哈希值。当脚本编译器运行验证模式时,OP_EXEC,OP_EXEC_ASSIGN将堆栈中的最后一组数据与哈希序列中的第一组数据进行比对。如果二者一致,则说明该输出为可花费的交易输出。否则,返回错误信息,并在序列中删除改组数据。在此过程中,OP_TXHASH也将交易哈希值储存在堆栈中。

版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。
发文时比特币标准价格 买价:¥6435.00 卖价:¥6417.00

评论:0

您需要登录后才可以回复 登录|注册