比特币固然是市值排行第一的区块链应用,但谈及以太坊,我们都认可是它把区块链应用带到了2.0时代。
以太坊在比特币的基础上进行了突破式的改变,使其地位被如此认可呢?
在上一篇文章《浅谈以太坊(1)——从比特币谈起》时,我们着重讲了比特币的限制;这篇文章,我们着重讲以太坊进行了哪些改变。
以太坊的改变
为了方便大家理解,我做了两幅图。
从这个图中,我们可以看到:
比特币的底层是一个数据库,采用UTXO的方式进行记账
再往上一层,是P2P的网络
然后是工作量证明POW以及密码学打造的共识层
再往上是脚本层,我们在这一层可进行一定程度的可编程的金融
最上面一层,就是比特币,我们所交易的BTC
第二张图,是以太坊相对于比特币的改变:
首先,在数据库这一层,以太坊没有采用UTXO的方式进行记账,而采用了传统金融账户余额的记账方式
再往上和比特币一致,是P2P网络层
再往上,在区块获得权共识上,与比特币的工作量证明机制不同,以太坊采用工作量证明加权益证明的方式(完全的权益证明尚未实现)
再往上,与比特币的脚本语言不同,以太坊采用了图灵完备的语言,并打造了运行它的虚拟机EVM
最上面一层,也是我们日常交易中最可见的一层,即代币层。与比特币不同,以太坊这一层不仅有自己的代币ETH,还有通过智能合约层所建立的其他应用的代币,如DGD、REP、GNT等
在这篇文章接下来的章节中,我将简要介绍UTXO和传统账户余额记账方式的区别,在以后的文章里,我会分别工作量证明与权益证明的区别、比特币脚本语言和智能合约的区别。
UTXO vs 账户余额
UTXO 是 Unspent Transaction Output 的缩写,直译是未花费的交易输出。它和传统的账户余额记账方式有什么区别呢?
我们以李雷与韩梅梅的转账为例:李雷账户有100万元,韩梅梅账户有75万元;李雷向韩梅梅转账10万元。
账户余额的记账方式
这种方式我们都比较熟悉,过程简单来说是这样的:
S0:李雷账户余额为100万元,韩梅梅账户余额75万元
T:李雷向韩梅梅转账10万元
S2:李雷账户余额变为90万元,与此同时,韩梅梅账户余额变为85万元
UTXO的记账方式
UTXO,从字面上来讲,是未花费的交易输出。划重点:只有未经过交易的输出,才能被称为UTXO。
此时我们假定,李雷和韩梅梅的钱,都是银行直接发给他们的(在区块链世界里即挖矿所得),从未进行过任何交易。那么此时,李雷的100万元和韩梅梅的75万元才能被称为UTXO。UTXO一旦被花费,将会被拆分,且拆分前后总额必须相等。于是:
S0:李雷账户,UTXO·0(100万元)@李雷;韩梅梅账户,TUXO·0(85万元)@韩梅梅
T:李雷向韩梅梅转账10万元,UTXO·0将会被拆分为 UTXO·1(90万元)@Transition + UTXO·1(10万元)@Transition,前者将返回李雷的账户,而后者转到韩梅梅的账户
S1:李雷账户,UTXO·1(90万元)@李雷;韩梅梅账户,UTXO·0(75万元)@韩梅梅 + UTXO·1(10万元)@韩梅梅
如果韩梅梅想转账给大卫80万元,她就必须将 UTXO·0(75万元)@韩梅梅 和 UTXO·1(10万元)@韩梅梅 都使用,并将其中之一拆分。在UTXO的记账机制里,除了货币发行外,所有的资金来源都必须来自前面某一个或者几个交易的 UTXO,就像接水管一样,一个接一个,此出彼入,此入彼出,生生不息,钱就在交易之间流动起来了。并且,任何一笔交易的交易输入总量必须等于交易输出总量,等式两边必须配平。
比特币的UTXO记账机制,使得在比特币世界里的每一笔转账,都能够追溯到上一笔交易。每一笔付款,都可以追溯到上一笔的收款。我给你的3个比特币,必须是别人给我的且我还没有进行花费的比特币。然后可以一直往上追溯到它诞生时矿工挖出来的那个区块。这个机制,保证了比特币不可被伪造,不可以被重复支付。
PLUS
UTXO 记账方式这么复杂,中本聪为什么没选择传统的记账方式呢?这大概是他的高明之处,比如长期来看,账户余额数据库会无限膨胀,而UTXO 数据库体积会小很多。现在以太坊也在考虑增加这个选项。
UTXO技术是中本聪的原创,其原理和优势本文限于篇幅只是进行简要介绍,以后有机会再做延伸。接下来的文章是“POW vs POS”,希望了解的朋友敬请关注。