Skip to main content

如何实现在基于UTXO模型的量子链上运行以太坊智能合约

量子链是基于比特币核心代码0.13版开发,并加入以太坊虚拟机(EVM)的功能。为了使二者能够更好地协同工作,Qtum开发团队创新性的加入了“账户抽象层”(Account Abstraction Layer),这样可以最大程度上保持原有以太坊虚拟机的功能和以太坊上智能合约的兼容性。具体来说,Qtum加入了新的比特币脚本操作符和特殊的进程执行条件。这样,当EVM调用的交易被添加到量子链上时,该交易将会立即执行,而不是在花费时执行。
与此同时,账户抽象层使智能合约只关注其合约余额和发送资金。通俗来说,在基于UTXO的交易模型中(比如说比特币),如果用户A要转20个币给用户B,是无法直接实现的。用户A只能先分别转10个币,5个币和8个币给用户B,然后再将3个币转到自己的钱包中。这个过程叫做Coin-picking。也就是说花费该交易输出,只有两种情况,全部花费或全部保留。这种花费模式就成为了在UTXO模型上直接运行智能合约的最大难点。为了解决这个难点,在Qtum的设计中,引入了账户抽象层,从而使得花费交易输出就像现实交易一样的方便。当用户(或者合约)需要发送资金时,操作代码将创建一个标准的“资金交易输出”,只有最匹配的合约才能花费这个交易输出。那么怎样才能找到这个最匹配的合约呢?难道需要合约执行方在Solidity中编写复杂的代码?Qtum开发团队提供了通用的Consensus-critical coin picking算法供所有的合约使用。这样,在执行“转5个币给用户A”的合约时,矿工将根据Consensus-critical coin picking算法,计算合约是否有足够的资金输入,条件满足时才创建该合约的交易输出,即“转5个币给用户A,剩余部分保留在合约中,并改变交易输出” 合约执行后,在当前区块链上记录这个交易输出。需要注意的是,这些交易输出是由矿工添加的,因此不会通过全网进行广播。
Qtum将EVM集成在UTXO模型上,可以使Qtum智能合约的编写像在以太坊上一样的方便,还可以充分利用UTXO的优势,包括支持更稳定的SPV移动钱包或轻钱包(而以太坊经历了多次分叉来解决这个问题),和兼容现有的比特币工具和相关协议。
– Jordan Earls (Earlz)