同样是记录“谁有多少币”,比特币和以太坊用了两种完全不同的方法:比特币记的是一张张“没花掉的票据”,以太坊记的是每个账户的余额。弄懂这个区别,很多看起来奇怪的现象就说得通了。
对应币种:$BTC 现价 82,535.04(24h +0.91%)。
【UTXO:没花掉的票据】
比特币采用 UTXO(未花费交易输出)模型。可以把每个 UTXO 想成一张面额不固定的票据:每笔交易花掉若干张旧票据,同时开出若干张新票据给收款人。
钱包里显示的余额,是钱包把属于你的所有 UTXO 加起来算出来的,链上并没有一个叫“余额”的数字。
【找零和手续费】
一个 UTXO 只能整个花掉。比如你有一张 1 枚的“票据”,要付 0.3 枚,交易会开出两个输出:0.3 枚给对方,剩下的扣掉手续费后作为找零回到你自己的地址。很多钱包会把找零发到一个新地址,所以在区块浏览器里会看到“钱转回了自己”。
比特币交易的手续费不单独写出来,而是等于所有输入之和减去所有输出之和,这部分差额归打包的矿工。
【账户模型:直接记余额】
以太坊采用账户模型,链上直接记录每个账户的余额。转账就是从一个账户扣减、给另一个账户增加,和银行账户很像。以太坊有两类账户:由私钥控制的外部账户,和由代码控制的合约账户。
为了防止同一笔交易被执行两次,每个外部账户都有一个 nonce,每发一笔交易就加 1,交易必须按 nonce 的顺序执行。所以前面一笔交易卡住,后面的交易也会跟着排队。
【各有取舍】
UTXO 模型里互不相干的交易可以并行验证,用新地址收找零也有利于隐私,但写复杂合约不太方便;账户模型余额直观、写合约方便,但同一账户的交易必须排队。Cardano 则在 UTXO 的基础上做了扩展(eUTXO),让输出也能带上脚本逻辑。
【小结】
下次在区块浏览器里看到比特币“转回了自己”,或者以太坊交易卡住导致后面全排队,就知道这是两种记账方式各自的特点,不用慌。这个圈子最贵的不是手续费,而是不懂规则交的学费。信息多个来源核实再行动,别只听一个人的说法。
朋友里如果有新手,可以发给他看看。
看法不一定对,风险自负。