nNEO的存在,还要从比特币出现那刻说起
今日感恩节,
宜感恩、宜阅读、宜转发。
本篇为大家解答「Flamingo 中 nNEO 存在的意义」。
为什么不使用 NEO,
而是重新铸造基于 NEP-5 的 nNEO。
最近参与了 Neo DeFi 项目--Flamingo 的朋友们应该对 nNEO 这个代币不陌生。nNEO 是 Neo 基于 NEP-5 协议发行的通证,与 NEO 一比一锚定。有些朋友可能会疑惑,为什么不能用 NEO,而是要重新发行一个 nNEO。尤其现在主流的交易所只支持 NEO,不支持 nNEO。
UTXO 交易模型
其实这个问题要追溯到比特币出现的时代。中本聪先生在设计比特币时,为了验证比特币的有效性而提出了UTXO(Unspent Transaction Outputs)交易模型,即未花费的交易输出。
UTXO 交易模型
在这个交易模型里,用户持有的比特币其实是一个又一个的 UTXO,每个 UTXO 里都记录了具体的金额以及目标地址,用户的余额就是所有有效 UTXO 里记录的金额的总和。用户想要交易的时候,就需要在一笔交易里提供有效的 UTXO 作为交易输入,然后在交易里铸造新的 UTXO。
UTXO 这个模型跟我们现实中使用的现金有点类似,比如纸币,我们有1块、5块、10块的,我们的余额就是这些钱的总额。当我们想要买东西的时候,就需要把这些钱凑出目标价格。如果我们凑的价格超过目标价格,对方还可以找零。在这个过程中每一笔交易都可能会有好几张输入的纸币以及好几张找零的纸币;类似的,在 UTXO 模型里,每一笔交易可能会有多个 UTXOs 作为输入,然后输出的话是一个(或者多个)给对方的UTXO(s),一个给自己的找零 UTXO。
这个交易模型在比特币里运行地很好,完全没有任何问题,毕竟比特币就是为了交易而生的。计算是在链外的,交易本身既是结果也是证明。节点只做验证即可,不需要对交易进行额外的计算,也没有额外的状态存储。交易本身的输出 UTXO 的计算是在钱包完成的,这样交易的计算负担完全由钱包来承担,一定程度上减少了链的负担。
除了胜任交易的职能之外,UTXO 的另一个优势是可追溯性。你持有的 UTXO 可以一路追溯到你持有的比特币的铸造区块,在 Coinbase 里进行交易。这其实使得比特币有了一种独特性,你持有的比特币有自己的独特历史,甚至可以有自己独特的故事,比如中本聪先生持有的哪些比特币,每一(或者说50)枚都可以说是独特的。
因为 UTXO 的存在,我们可以知道目前市面上流通的所有的比特币,都没有中本聪先生最开始挖掘的那些。也因为 UTXO 在执行交易这个场景中的完美表现,Neo 以及很多早期的区块链项目里都采用了跟比特币一样的的 UTXO 交易模型,我们熟悉的 Neo 里 NEO 和 GAS 都是这么来的。
同时,UTXO 模型是无状态的,更容易并发处理。对于 P2SH 类型的交易,具有更好的隐私性。交易中的 Input 是互不相关联的,可以使用 CoinJoin 这样的技术,来增加一定的隐私性。
DeFi 揭开 UTXO 弊端
问题是在智能合约出现之后。
自从以太坊把智能合约引入了区块链领域,整个区块链世界的面貌变得焕然一新,区块链不再仅仅是一种简单的资产转移工具,它还可以执行更复杂的逻辑脚本。用户可以自定义合约脚本,然后在链上的虚拟机里执行自己的合约,并通过交易来调用合约。这个时候 UTXO 交易模型还没有那么尴尬,如果仅仅是执行脚本,其实跟 UTXO 关系并不是很大,比如 Neo2.x 就靠 UTXO 版本的 NEO 和 GAS,加上鉴权合约和应用合约两种不同方式来支持智能合约的调用,虽然这时候 UTXO 的缺点已经很明显了,比如在构造合约交易的时候逻辑过于复杂,有时候既要考虑应用合约的调用部分来执行合约逻辑,也要考虑鉴权合约的调用部分来处理 UTXO。
真正给 UTXO 敲响丧钟的是 DeFi,或者说是所有与金融相关的分布式区块链应用。这类应用需要在智能合约里调用大量跟资产相关的接口,对资产进行计算、转换、转移。想象一下智能合约里所有通证都是 UTXO 的,每个用户有效的 UTXO 都是几十个,光是计算余额就需要在合约里添加循环逻辑,更何况用户想要定制的还涉及到资产变动的逻辑,变得更复杂。面对动则一堆不确定数量的 UTXO,交易成本会变高。
另外,UTXO 的存在也使得其在智能合约中的资产变动变得很麻烦,因为每一个含有 UTXO 的交易都需要经过区块链的确认才行,也就是说你需要涉及到 UTXO 变动的合约交易将无法在一个区块链周期内完成。举个例子,假如你玩个坦克世界的游戏,想要买个新坦克,你是想直接点击购买然后付款就可以了,还是想先提交购买请求,然后等个一段时间,再付款,然后再等个一段时间,再点击购买?是不是很繁琐,但是基于 UTXO 模型的话,就只能说这样。
但是 NEP-5 的通证就不同了,NEP-5 合约协议本身是有存储的,我们的余额也就是存储的一个字段而已,获取和修改余额都可以直接在存储上进行修改,而不涉及额外的交易或者计算过程,类似于我们操作自己的余额宝,余额就是余额,一个数字而已,不是一堆什么计算而来。
Neo3 升级
如果你很关注 Neo 社区的话,就会发现其实最近两年,社区或者官方都想把 NEO 和 GAS 变成 NEP-5,先后有 CNEO,SNEO 以及最近的 nNEO,当然,到了 Neo3 就可以直接从根本上废除 UTXO 了,NEO 或者 GAS 将全部基于 NEP-5 发布。
微信扫描关注公众号,及时掌握新动向
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场