MeerToken系列 - UTXO 资产发行

资产发行依赖于智能合约,因为即使最简单的转账交易,在具体实现过程中也会涉及一定的交易处理逻辑,UTXO模型的资产也不例外。相信很多朋友知道账户模型支持智能合约,但是UTXO的智能合约如何实现,可能有些朋友就不太清楚了。先看下智能合约在区块链领域的定义,其指用区块链技术保证交易可以以去信任地自动执行的技术。所以关键还是在于是否可以用区块链技术保证合约地自动执行。

区块链系统本质是一个状态机,即通过输入外部变量能改变内部状态的机器。这里外部变量就是交易,内部状态就是账本的余额等数据。因此智能合约需要实现通过接受交易然后触发区块链的状态改变。以比特币为代表的UTXO模型的区块链基本采用的是基于栈的脚本语言。

有一定编程基础的朋友知道,栈的后入先出的特性可以让多个子程序有序的执行。简单理解基于栈的脚本语言其实有高级语言的表达能力,因此可以实现比较复杂的智能合约。但是区块链是去中心化价值交换系统,过于复杂的智能合约不但可能容易产生漏洞造成不稳定,而且也会拖垮整个区块链。所以比特币不单限制了指令的数量,也去除了循环语句,因此比特币的脚本语言是图灵不完备的。简单理解基于UTXO的智能合约虽然表达能力受到了限制,但是仍然可以支持价值流通的常见应用,典型的例子就是跨链原子交换或者多方签名。

随着智能合约的发展,对于UTXO脚本语言的功能性提出了更高的要求,所以产生了许多增强UTXO的方案。最直观的方案就是染色币的方案,利用OP_RETURN 提前终止脚本的执行,然后空出83字节的数据空间可以自由定义。所以某个应用可以将共识的数据写入到这个空间,然后对标准客户端针对该应用的数据规则进行扩展从而解析这些数据。显然该方案的优点就是灵活,而且也不需要更改区块链的共识,部署成本低;缺点也很明显,就是数据无法通过区块链共识保证安全性。

更理想的方案就是增加专有的资产发布指令,Qitmeer的测试阶段就是采用的这个方案。Qitmeer增加了一个Op_Token的资产发行指令,可以将Qitmeer测试网的原生资产PMeer转化为相同数量的最小单位(Qit, $1Pmeer=10^8Qit$)的资产。例如,如果要发行某个名叫TestToken的资产,TestToken最小的单位为TestBit, $1TestToken=10*10^8TestBit$ ,则需要花费10个PMeer. 可以看出,Qitmeer发行的资产是有成本的,一定程度上避免了垃圾资产的产生。更重要的是,相对于染色币的方案,发行的资产和原生资产一样是需要被全网共识,所以可以获得跟原生资产同样的安全性和高质量的价值流通服务。

到了Qitmeer主网阶段,Op_Token进一步的升级为MeerToken资产发行方案。通过前面的分析可知,虽然Op_Token指令发行的资产可以享有跟原生资产同样的安全性以及价值支撑,但是在发行机制上还是有所区别,所以需要在涉及到资产相关的处理流程中会针对原生资产以及发行的资产进行不同的处理,用计算机专业术语的表述就是抽象程度不高。因此维护成本较高,有潜在的不稳定的风险也限制了扩展性。针对这个问题,在Qitmeer主网阶段,发行的资产和原生资产在数据结构层面得到完全的统一,所有运行机制完全一样。每个资产都有资产编号,原生资产的特殊性仅仅在于其是随着主网上线默认已经发行好的第一个资产。

最后总结下。随着区块链应用的不断发展,UTXO模型也是在不断升级过程中。从最原始的静态数据结构的交易模型过渡到有一定灵活性的栈式脚本语言的智能合约模型。资产发行的需求也导致在区块链社区衍生出了染色币的过渡方案。Qitmeer在测试网阶段 OpToken资产发行方案解决了染色币方案交易没有价值支撑以及交易无法通过共识得到安全保障的问题, 在主网阶段更创新性地将原生资产和发行的资产进行了高度统一,进一步提高了Qitmeer的稳定性和可扩展性。