Jinghui Liao

A computer security PhD student who prefers blockchain and 6am sunlight and misses his family.

neo的DIFI起手势

November 20, 2020

最近参与了neo的difi项目火烈鸟的朋友们应该对nNEO这个代币不陌生,这是NEO代币基于NEP-5协议发行的Token,发行方式由NEO一比一兑换而来。有些朋友可能就要好奇了,明明NEO用的好好的,干嘛非要再搞出来一个基于NEP-5版本的nNEO来呢,这不是平白增加了用户操作的复杂度么,尤其是现在各大交易所仅仅支持NEO,而不支持nNEO。

其实这个问题是有历史渊源的,最早要追溯到比特币刚刚发布那个区块链开天辟地的时代。中本聪先生在设计比特币的时候为了验证比特币的有效性提出了UTXO(Unspent Transaction Outputs)是未花费的交易输出这个交易模型,在这个交易模型里,用户持有的比特币其实是一个又一个的UTXO,每个UTXO里都记录了具体的金额以及目标地址,用户的余额就是所有有效UTXO里记录的金额的总和。用户想要交易的时候,就需要在一笔交易里提供有效的UTXO作为交易输入,然后在交易里铸造新的UTXO。

UTXO这个模型跟我们现实中使用现金有点像,比如纸币,我们有1块、5块、10块的,我们的余额就是这些钱的总额,在我们想要买东西的时候,就需要把这些钱凑出来目标价格,如果我们凑不到恰好够的金额,对方还可以找零。在这个过程中每一笔交易都可能会有好几张输入的纸币以及好几张找零的纸币;类似的,在UTXO模型里,每一笔交易可能会有多个UTXOs作为输入,然后输出的话是一个(或者多个)给对方的UTXO(s),一个给自己的找零UTXO。

这个交易模型在比特币里运行的很好,完全没有任何问题,毕竟比特币发明出来就是为了交易,也仅仅是为了交易。除了完美胜任交易的职能之外,UTXO还有一个优势就是可追溯性,你持有的UTXO可以一路追溯到最开始铸造你持有的比特币的那个区块的coinbase交易,这其实使得比特币有了一种独特性,你持有的比特币是有自己的独特历史的,甚至可以有自己独特的故事,比如中本聪先生持有的哪些比特币,每一(或者说50)枚都可以说是独特的,我们因为UTXO的存在可以知道目前市面上流通的所有的比特币,都没有中本聪先生最开始挖掘的那些。也因为UTXO在执行交易这个场景中的完美表现,neo以及很多早期的区块链项目里都采用了跟比特币一样的的UTXO交易模型,我们熟悉的neo里的NEO和GAS都是这么来的。

问题出现在智能合约出现之后。错的不是neo,错的是时代。自从以太坊把智能合约引入了区块链领域,整个区块链世界的面貌就焕然一新了,区块链不再仅仅是一种简单的资产转移的工具,它还可以执行更复杂的逻辑脚本了。用户可以自定义合约脚本,然后在链上的虚拟机里执行自己的合约,并通过交易来调用合约。这个时候UTXO这个交易模型其实还没有那么尴尬,如果仅仅是执行脚本,其实跟UTXO关系也不是很大,比如neo2.0就靠着UTXO版本的NEO和GAS加上鉴权合约和应用合约两种不同的方式来支持智能合约的调用,虽然这时候UTXO的缺点已经很明显了,比如在构造合约交易的时候逻辑过于复杂,有时候既要考虑应用合约的调用部分来执行合约逻辑,也要考虑鉴权合约的调用部分来处理UTXO。

真正给UTXO敲响丧钟的是DIFI,或者说广义的DIFI,也就是所有分布式的跟金融相关的区块链应用。这类的应用需要在智能合约里大量的调用跟资产相关的接口,对资产进行计算,转换,转移。想象一下智能合约里所有的代币都是UTXO的,每个用户有效的UTXO都几十个,那你光是计算个余额就需要在合约里添加循环逻辑,更可况用户想要定制的涉及到资产变动的逻辑可能很复杂,面对动则一堆的不确定数量的UTXO将会产生很高的交易成本。另外,UTXO的存在也使得其在智能合约中的资产变动变得很麻烦,因为每一个含有UTXO的交易都需要经过区块链的确认才行,也就是说你的需要涉及到UTXO变动的合约交易将无法在一个区块链周期内完成。举个例子,假如你玩个坦克世界的游戏,想要买个新坦克,你是想直接点击购买然后付款就可以了呢,还是想先提交购买请求,然后等个一段时间,去付个款,然后再等个一段时间,在点击购买?是不是很繁琐,这么搞的商家怕不是担心死的不够快。但是基于UTXO模型的话,就只能说这样。

但是NEP-5的token就不同了,NEP-5合约协议本身是有存储的,我们的余额也就是存储的一个字段而已,获取和修改余额都是可以直接在存储上进行修改,而不涉及到额外的交易或者计算过程,类似于我们操作自己的余额宝,余额就是余额,一个数字而已,不是一堆什么计算而来。

所以如果你很关注neo社区的话,就会发现其实社区也好,官方也好,最近两年都在疯狂的想把NEO和GAS 变成NEP-5,先后有CNEO,SNEO以及最近的nNEO,当然,到了neo3.0就直接从根本上废除UTXO了,所有的NEO也好GAS也好全部基于NEP-5发布。抛弃历史包袱UTXO,全面拥抱NEP-5,neo才能在DIFI时代以及未来更好的区块链时代更加灵活的应对新的变化。

Share This Post