两种记账模式的典型代表 分别为区块链领域的两位老大,比特币(UTXO) 和以太坊(账户/余额)。
先来说,大家可能相对比较陌生UTXO模型。
1.UTXO是什么?
UTXO全称Unspent Transaction Output,直译过来就是未花费的交易输出,稍微解释一下就是还没有被使用的输出。所以UTXO模型中,我们看到的账本状态其实是由一系列”有效的输出“组成的,每一个输出都由为对应的私钥所有且由自己的“价值”(可以理解为现实货币的面值)。
所谓有效输出,具有三个属性:
1.每个被引用的输入必须有效,且未被使用过;
2.交易的签名必须与每笔输入的所有者签名匹配;
3.输入的总值必须等于或大于输出的总值。
第一个通过看上面的图应该很好理解,每次的输入都是由上次的输入分割而来,所以都是新的,且不存在UTXO为零这种情况(没有意义)
第二个,在每次交易之前,都需要拿私钥去签名,如果匹配这笔交易才会发生,但是一般私钥都是保存在钱包里,交易签名都是由钱包自动完成的,使用者根本感受不到。
第三个,输入的总值一般是大于输出总值的,因为会产生交易费。(这个地方有疑问,交易费也是以UTXO的形式打给矿工的,难道不是应该等于吗?其他消耗在哪里?)
我们通过交易来感受一下UTXO模式
以比特币钱包为例,你可以拥有很多个地址,每个比特币地址上都有相应的UTXO,你钱包中余额的值相当于你钱包中所有地址里UTXO值的总和。所以
假设你收到(朋友转账或者挖矿所得)1个比特币,你相应的地址中UTXO值会增加1,你钱包的总额会加1.
但是,在你发送比特币给别人的时候,就稍微有一点复杂了。(这里假设一个比特币=1UTXO)
比特币种遵寻一个非常有意思的机制——找零机制。
eg1.比如我的某个地址上有4个比特币,我想转给小芳3个,那么系统会冻结我这个地址中全部的三个比特币,拿出3个转到小芳提供的地址上,剩下的一个放到去掉手续费之后在返回给我的地址。
同时UTXO模式下钱包所显示的“余额”是该用户的私钥能够有效签名的所有UTXO的总和
eg2, 我想转账给小芳4个比特币,可时我钱包里两个地址上一个只有3个比特币,一个只有2个比特币,都不够,不用担心,钱包会自动冻结这两个钱包里的两个比特币,合并给小芳,并将扣除交易费后的余额返还的一个属于我的地址上。
账户/余额模型
以太坊采用的是账户余额模型,这种模式跟大家平时在支付宝微信支付上看到的账户其实很相似(不过它的账本是区块链),每个账户都有自己的余额,如果交易发起方的账户余额足够支付交易费用,则交易有效,那么发起方账户会扣除相应金额,而接受账户则计入该金额。但以太坊内还加入了自己的独特的内部存储系统和计算机处理系统,它允许用户在账号中存储代码,某些情况下,接受账户内有需要执行的代码,则交易会触发该代码的执行,那么账户的内部存储器可能就会发生变化,甚至可能会创建额外的信息发送给其他账户,从而导致新的交易发生。(以太坊账户余额模式的最大特点)。
因为账户/余额模型比较常见,也很容易理解,就不再举例说了。
UTXO的优点
1.安全性更高
1.1.再UTXO模式中,每次交易都可以生成一个新的地址,即将找零放入到一个新的地址上,这无疑是提高了安全性。
1.2除了第一此次交易之外,所有的input始终都连在某个UTXO的后面,交易无法被重放,且每次交易的先后顺序和连接关系都容易被验证。
2.对于多签名的交易来说,具有更好的隐私性,因为每没此交易都会产生新的INPUT,可以采用COINJIN这样的技术来增加安全性,
3.因为UTXO是没有状态的,所以可以并发处理。
缺点:
1.交易若涉及到多个UTXO,需要对他们分别签名,查询时,也要遍历所有相关的UTXO,效率比较低。
2.无法实现一些比较复杂的逻辑,可编程性差。(这也是以太坊没有选择UTXO模式的主要原因。)
账户/余额模式的优点
1.合约以代码的形式存储在账户中,且账户拥有自己的状态。具有更好编程性,开发人员更易于理解,同时页拥有更广泛的应用场景。
2.批量交易更方便,以太坊中,可以非常方便的使用合约进行批量交易,但在UTXO模式下,每笔交易都需要单独的验证和存储,这会消耗链上大量的资源。
3.轻节点的验证更简单可行。
缺点:
1.account 交易模型账户之间没有依赖性,需要解决重放问题。
2.不利于在存证方面的应用,需要更复杂的Proof证明机制,子链向主链迁移需要更复杂的协议。
总结:
账户/余额模式在灵活性/可编程性上更有优势。
UTXO模式更适合简单交易和存证。
网友评论