在IT和互联网技术的赛道角力上,实践表明,那些先进而又开放、灵活的技术架构方案往往是笑在了最后。TCP/IP网络协议分层思想实现了“上帝管上帝的,凯撒管凯撒的”的简单原则,使得TCP/IP迅速获得众多设备厂商的支持,并最终于2000年左右击败了传统的ATM协议。
而在方向未艾的区块链技术领域,也出现了类似的技术之争,即区块链的两种账务处理模式(UTXO模式和ACCOUNT模式)。其中,比特币、BCH、DALICHAIN、比原链、量子链采用UTXO模式,而基于智能合约的以太坊系列公链项目选择了ACCOUNT模式。
UTXO模式与ACCOUNT模式之争
若干个交易形成一个交易块,块与块之间再通过哈希函数形成了链条,这即是区块链独特的数据结构。数据结构是数据的存储组织和内在逻辑的静态呈现,而要适应于特定的业务场景和工作流程,这就需要进行更高层次的账务设计、用户模型、工作流等设计。
面向交易和支付的比特币系统,其中账务余额、明细(流水)账是必需的功能。在传统银行上,很多交易渠道都会引发余额变动(大小额支付、POS、同城支付、网银、手机、ATM、国际结算(国结)、柜面等等,因此,中心化的银行系统往往将余额作为独立的数据字段处理。
由于引发余额变动的渠道很多,为了规避并发数据导致的数据不一致性问题,传统的设计中需要通过数据库和逻辑设计进行一致性检查。
不过,中本聪抛弃了这种传统账户管理思路,开创性地提出了基于交易流水的UTXO模式。
要理解UTXO,可以以现实中的现金交易为例,比如你的钱包有一张 10 元、1 张 5 元,1 张 1 元,一共 16 元。比特币一个账户的余额,也是根据这个账户 UTXO 计算的。
当花 13元买东西时,可以把 10 元和 5 元拿出去,然后得到找零的 2 元, 那这个时候之前的 10 元和 5 元因为已经花出去了就不再是 UTXO 了,新找零的 2元成为新的 UTXO,再加上之前未动的 1 元 UTXO,目前的余额是 3元。然后这个新产生的3元通过UTXO输出的方式进入到钱包的另一个地址,这个地址就是余额。这次新的地址记录在了新的区块上,但没有改变历史区块的数据。
比特币近十年的不间断稳定运行,表明了UTXO模式的可行性
不过UTXO模式是无状态性的,仍存在一定的局限性,简单的UTXO模式难以适应复杂的应用场景。随着业务模式的不断创新及类型的多元化发展,UTXO系统账户逻辑也会变得越来越雍肿。
所以,为了适应更加复杂的应用场景,以太坊选择了传统的账户模式(ACOUNT模式)。
账户模型是面向对象的,对每一笔交易,都会在相对应账户上进行记录(nonce++)。为了易于管理账户,而引入了世界状态,每一笔交易都会改变这个世界状态。依托于智能合约机制,使得以太坊具备了处理复杂的应用场景需求的可能。
随着技术的不断演进,账户模式(ACOUNT模式)的技术缺陷也越来越暴露出来,主要是安全性和并发性方面。
首先在安全性方面。
在去中心化的分布式状态下,账户模式下的智能合约资产的增加与减少只是简单的加加减减,如果程序未考虑严谨可能会出现溢出漏洞。为了避免失误,要求关键操作必须具备原子性,如在转帐成功后,对应账户的余额必须立即执行,如果执行失败需要迅速回滚。
然而,这种操作总会有疏忽。就在今年上半年,以太坊ERC20智能合约被曝出proxyOverflow漏洞:BEC、SMT两个币种因此市值几近归零,还有包括MEST、SMT、FirstCoin、CNY Token、MTC在内的多个数字货币,也遭受了这一漏洞的影响。该事件影响之恶劣,直接导致全球数十家交易所暂停ERC20相关项目的交易。
相比而言,UTXO提供的是原子级别的交易转移和确认,UTXO交易一旦生成就直接生效,不会出现上述安全问题。
再者,由于每次标识余额的地址可以是新产生的,这样UTXO就可以提供更高级别的隐私。如果隐私性要求更高,比如欧盟GDPR通用数据保护要求,UTXO还可以较好的扩展使用环签名等方式。
其次在并发性能上。
UTXO模式的交易是在链外进行的,交易本身既是结果也是证明。节点只做验证即可,不需要对交易进行额外的计算,也没有额外的状态存储。交易本身的输出 UTXO 的计算是在钱包完成的,这样交易的计算负担完全由钱包来承担,一定程度上减少了链的负担。
而ACCOUNT模式,账户之间通过消息进行通信,如果用户发起多笔交易时,当这些交易之间不会互相调用同一 Account 时,将会带来并发出现问题,需要消耗资源进行并处理。
因此,UTXO模式能够较好的实现并发事务处理,性能方面的可扩展性高。
而早在一年前,DALICHAIN的技术团队就意识到:基于以太坊ERC20智能合约的资产很难彻底保障安全性,在去中心化的分布式环境下,账户模式(ACOUNT模式)并不适用于存储重要资产。
不仅仅是DALICHAIN团队,比原链团队也意识到这一点,在性能方面,比原链团队认为“UTXO天然的可以并行运行,而基于世界状态的以太坊难以扩展”。此外,比原链接在采用了比特币UTXO的易于并行运算的模型前提下,还做了针对性的改进,加了个资产号字段,使不同的资产可以在同一笔交易中处理转换,只要满足总输入等于总输出就可以。
为了满足复杂的应用场景需要,DALICHAIN也对UTXO模型进行了优化。DALICHAIN在选择在安全性方面更加牢固的UTXO模型的基础上,提出基于非智能合约的“一键Token”功能,用户将能在一个安全的、开放的容器内使用UTXO为基础的TOKEN,通过一键操作的方式傻瓜式的发币。其优越性体现在以下三个方面:
安全性。UTXO的Token发行,对交易的输出会进行签名,能避免交易广播时被篡改,同时也能规避智能合约潜在漏洞带来的巨大安全隐患问题。
易用性。用户只需要提供创建Token的基本信息即能发布成功,整个过程不需花费时间和精力去了解比特币源码,简单且高效。
高效性。Token创建成功后,UTXO提高了这种并发性和真实性,通过真实交易的方式在节点间流通。
DALICHAIN追求安全、开放、易用、灵活和高效的设计目标和TCP/IP协议的理念如同一辙。
UTXO在去中心化和性能方面的良好的平衡性也得到了比特币最大分叉币BCH的强化。据悉,在未来的发展蓝图中,为了支持BCH节点的快速写入,提升可扩展性,BCH提出了UTXO证明和UTXO分片的技术。此前,一个名为Tomas 的爱好者测试了BCH的UTXO证明。测试结果表明,使用BCH的UTXO证明可以允许完整节点的快速同步,因为完整节点可以下载UTXO集而不是历史区块,而且不会降低安全性。
结语:
在区块链技术不断演进过程中,UTXO模式与ACCOUNT模式之争相信会持续一段时间。就目前情况看,ACCOUNT模式可能还不够成熟,在处理并发处理和安全性方面遇到了不少的技术瓶颈。而比特币近10年的稳定运行证明了UTXO是目前较为稳定的技术选择,或许这是DALICHAIN、BCH、比原链纷纷采用UTXO模式的真正原因。