MeerToken系列-UTXO模型 VS 账户模型

打开最新版的KAHF钱包[1],切换到Meer(Testnet)。朋友们一定看到除了Meer本币之外,还有两个名字萌萌的资产QITID和METID。这两个就是Qitmeer的MeerToken资产发行系统发行的初代目二级资产,看似平平无奇,实则大有文章。

Qitmeer自立项开始就将项目定位为普惠价值流通的基础设施,所以对于底层公链的要求是稳定,安全,高效。因此MeerToken资产发布系统的账本并未按照当时流行的方案采用账户模型,而是采用更为稳定的经典的UTXO[2]模型。

看似简单的账本模型的选择实则存在着艰难的取舍,因为这不仅仅是选择一个价值流通模型,更重要的是智能合约模型的选择。账户模型是伴随着以太智能合约出现的,因为就价值流通而言,UTXO已经足够好用了,完全没有必要再重新发明一套新的账本模型。作为“智能合约即正义”的以以太为代表的所谓“区块链2.0”时代,不少新的公链项目都会优先考虑快速支持智能合约,所以会直接基于以太的代码进行拓展,至于底层的账本模型是否符合项目的定位,反而不是作为优先考虑。

虽然优先智能合约的工程实现是大多数项目的追求社区认可的理性选择,但是也存在跟Qitmeer理念相近的项目。据我了解,NervOS[3]的账本模型Cell 是一个增强的UTXO模型,而其智能合约是由合约生成器(Generator)在链外(off-chain)生成并计算,但在链上(on-chain)进行验证。这样的好处就是链上的计算就变得非常简单,稳定性得到极大的增强,而且智能合约的编程接口也变得非常灵活且高效,比如当前就是采用了基于Rust这样的安全高效的高级语言的开发框架Capsule, 比以太的智能合约语言Solidity有着更强的语言表达能力以及开发环境,未来如有必要也完全可以支持其他语言的开发框架。

首先必须声明下,其实支不支持智能合约跟是否是账户模型还是UTXO并没有必然关系,是否支持智能合约只跟交易是否支持全排序(Total Order)[4] 有关。这点很好理解,因为完全可能两笔并发的交易中包含了针对同一个智能合约账户的操作。这里存在两个层面的问题,首先智能合约是链上还是链下的智能合约;其次,如果是链上的,是否支持智能合约。

对于第一个问题,NervOS 就是最具代表性的案例。上面提到了NervOS 的账本本质是UTXO模型,UTXO模型如果没有特殊必要进行共识拓展一般是不支持交易全排序的。这点其实很好理解,比如下图中两笔交易Tx3和Tx4是并发(注意这里用的是并发而非并行,并发只要求逻辑上是同时发生,而并行则要求时间上也是同时发生)产生,虽然严格来说肯定在时间上有先后,但是因为这两笔交易是完全独立的,谁先谁后并不影响交易的安全性,所以UTXO并不要求确定这两笔交易的顺序,好处就是交易确认就可以尽可能得快。这样应该也好理解,如果我并不关心这两笔交易的顺序,则节点一旦接收到任意一笔交易就可以验证并确认(注意这里只是单纯地确认,而非安全确认,安全确认需要等待到理论上很难推翻这笔交易为止),而如果要考虑定序,则因为交易到达的顺序因为网络因素是不稳定的,所以接收并验证后可能还要等待一段时间等待足够的交易都接收到后才能确认,这就需要有共识协议来保证了。

An example of UTXO-based transfers in Bitcoin. | Download Scientific Diagram

UTXO
图源:https://www.researchgate.net/publication/334434726_A_Vademecum_on_Blockchain_Technologies_When_Which_and_How

既然NervOS的Cell模型并不支持交易,那NervOS是怎么支持智能合约的呢?这就回到我最开始提到第一个层面的问题,到底是链上合约还是链下合约。显然NervOS只是链上的模型不支持,但是链下完全是可以支持的。

这里需要补充一点的就是NervOS的理念虽然和Qitmeer非常接近,但是还是有不同的地方。虽然两者都是UTXO模型,也都是链下的智能合约(Qitmeer的跨链智能合约也属于链下智能合约的解决方案),出发点也都是出于底层公链的稳定。但是Qitmeer的底层链是采用了基于UTXO模型增强的MeerDAG协议,支持交易全排序,所以是有支持链上智能合约的能力的。这里完全没有贬低NervOS的意思,事实上NervOS如果有需要完全可以增强共识协议达到同样的效果。事实上,MeerDAG支持交易全排序更多的还是整体架构的考虑,例如支持更公平的奖励规则,MeerDAG最开始也探索过基于扩展能力相对较弱但是确认速度更快的SPECTRE协议[5],最后综合考虑下才转向基于扩展能力更强且确认速度也较快的GhostDAG协议[6]。以后讨论MeerDAG时会更全面地分享Qitmeer共识协议的开发历程。

所以这里提到第二个层面的问题,是不是支持链上的智能合约。跟NervOS一样,Qitmeer目前暂不支持,但是刚刚也提到,MeerDAG共识协议完全可以拓展支持链上智能合约的。至于暂不支持的原因更多的还是工程实现和项目定位的取舍问题,因为以太的虚拟机是基于账户模型的,所以许多项目会为了更方便智能合约工程实现所以基于以太的代码进行的开发。至于账户模型还是UTXO模型哪个更适合项目定位并不是优先考虑,如果以太智能合约的实现是基于UTXO模型,则他们或许也会选择UTXO模型。而Qitmeer觉得从项目定位上UTXO更合理,所以选择跨链这种独特的链下智能合约解决方案。

以上算是比较细致地给社区的朋友们分享了MeerToken基于UTXO模型的历程。账本模型决定了资产发行机制的设计方案,像以太的资产发行机制其实就是一个简化版的智能合约,接下来会继续分享Qitmeer基于UTXO的资产发行机制原理,以及相对于以太为代表的资产发行机制的优缺点,敬请期待。

2 Likes