首页 > 世链号 > 第 7 章 UTXO
3点钟资讯  

第 7 章 UTXO

摘要:对交易这个概念的认知高度,决定了 Bitcoin 系统的高度。

本系列连载自《重新创造比特币》,它是一本比特币入门书籍,通过一个虚拟故事,让读者体验从零开始创造比特币的过程,从而理解比特币为什么如此设计。

重新创造比特币 | 第 7 章 UTXO(连载)

0. 前言

Bitcoin 的第二个版本已经上线,运行正常。

重要的改变包括:

  1. 加入数字签名。

  2. 公钥替代用户名。

  3. 将签名加入交易模型。

  4. 删除了账号模型。

本篇在讲如何重新定义交易。

交易是经济学理论的核心,交易是一切。

交易即承载着每个个体的起心动念,交易也承载着整个世界的斑驳陆离。

对交易这个概念的认知高度,决定了 Bitcoin 系统的高度。

如何认知交易,就表现在如何定义交易。

1.Bug 出现!

新版本上线后, 系统看起来一切正常。

不过,只要是人写的程序就会有 Bug。

这一天 Alice 找到中本聪,说自己的余额忽然归零了,怀疑自己的私钥泄漏了。

中本聪赶紧登陆到服务器上,查看账本中的交易记录,发现了 Alice 的交易记录有异常。

怎么会有重复的交易记录呢?(见下图)

重新创造比特币 | 第 7 章 UTXO(连载)账本

中本聪问:“Alice,你最近做了几次转账?”

Alice 说:“就一次,昨天给 Carol 转账 20 个 Bitcoin”

中本聪说:“可是,在账本里我查到了 3 笔给 Carol 的转账(公钥 C 代表 Carol 的公钥)”

中本聪找来 Gilfoyle,两人一起分析,很快找到了问题所在。

原来是 Carol 搞的鬼,Carol 截获了 Alice 的交易请求,并重复的将其发送给服务端,服务端错误的认为是 Alice 在多次请求转账,结果就是将 Alice 的余额全
部转给了 Carol (见下图)

重新创造比特币 | 第 7 章 UTXO(连载)Carol 在搞鬼

2. 分析 Bug

问题的根源是什么呢?

原来问题出在签名上,在现在的设计中,同一用户在不同交易中,签名没有变化。

服务端只会验证签名真伪,只要签名是真的,交易就成立。

黑客会重复发送伪造的交易请求,直到用户的余额小于交易金额。

那么签名为什么没有变化呢?

这是因为签名是将公钥加密,公钥不变,所以签名就不变。

签名不变,就意味着,签名的权利空间为用户的所有余额。

分析到了这里,中本聪对 Gilfoyle 说:“我们得让每笔交易中的签名都不同,最好是每笔交易的签名是系统唯一的”

如何做到让签名在每笔交易都是变化,且唯一的呢?

Gilfoyle 说:“加密整个交易数据,因为交易数据每笔都不同”。

这个方案,乍看上去不错,但是仔细一想还是有漏洞。

中本聪说:”如果用户的正常需求就是,同一时刻发出两笔相同的交易请求,难道服务端还要拒绝吗?如果服务端不拒绝,万一是黑客在重复请求呢,就像前面 Alice 遇到的那个 bug。”

Gilfoyle 说:“那我们改造一下交易模型,加一个随机数的字段,约定好浏览器在创造交易数据的时候,需要填写一个随机数。这样每笔交易就不会重复了”。

中本聪说:“这个思路还是太传统了,不够优雅。况且,随机数也可能碰巧相同啊,虽然概率很小”。

中本聪闭上了眼睛,倾听着内心的声音,现在需要启动直觉,一个颠覆传统思路的方案,隐隐约约闪烁着身影。

3. 颠覆传统的优雅方案

最初的问题,是由于签名锁定到余额。

变更之后,签名锁定到交易。

但是新的问题来了,交易数据可能重复。

现在问题卡在了这里:如何让交易成为唯一?

交易的本质究竟是什么?

交易的本质是描述 Bitcoin 的所有权的变更,即,n 个 Bitcoin 的所有权,由付款者变成了收款者。

例如 Alice 给 Bob 转账 3 个 Bitcoin,本质就是:“3 个 Bitcoin 的所有权,由 Alice 变成了 Bob。”,这句话如何变成唯一呢?

Alice 不会变,Bob 不会变。3 个 Bitcoin 也不会变。
等等!3 个 Bitcoin 是可以变的!如果给每个 Bitcoin 都加上编号, 那么每个
Bitcoin 都不同,都是唯一的。

假设 Alice 的余额中有 6 枚 Bitcoin,编号为:Bitcoin001~Bitcoin006。

那么这笔交易的描述就变成了:“编号分别是 Bitcoin001、Bitcoin002、Bitcoin003 的 Bitcoin 的所有权,由 Alice 变成了 Bob”

下一笔,Alice 如果还想再给 Bob 转 3 个 Bitcoin,描述就变成了:“编号分别是 Bitcoin004、Bitcoin005、Bitcoin006 的所有权,由 Alice 变成了 Bob”

看到了吗,只要给 Bitcoin 加上编号,之前无法区分的交易,就可以区分开了,交易的描述,在语义上实现了唯一。

4. 每笔交易都要先融化再铸造

交易是经济学理论的核心,交易是一切。

交易即承载着每个个体的起心动念,交易也承载着整个世界的斑驳陆离。

对交易这个概念的认知高度,决定了 Bitcoin 系统的高度。

如何认知交易,就表现在如何定义交易。

中本聪感觉找对了方向,不过现在的方案太粗糙,还需要进一步打磨。

给 Bitcoin 以编号,每一枚 Bitcoin 就可以看成一枚硬币。Bitcoin 的最小单位就是整数 1,不可再分割。

每笔交易都要明确的写出,自己引用的具体 Bitcoin 的编号。

这样虽然能实现交易的语义唯一,但是同时会带来两个问题:

第一个问题:如果不支持 Bitcoin 的小数分割,就太不灵活了。就像美元没有了美分。

第二个问题:如果交易金额很大,例如 10 万枚 Bitcoin,就需要引用太多的 Bitcoin 编码,交易数据会过于庞大。这就像美元中只有 1 美元的面额。

突然,中本聪来了灵感:

如果我们每一次交易都等于是一次铸币呢,就是将多枚硬币融化成一个大块的硬币。

这样,每一笔交易产生的大硬币,就可以被下一笔交易所引用,且仅可以被引用一次。(如果被不同的交易引用,就是传说中的 " 双花 ",这个概念留给后面讨论)

当然,当前交易也要引用之前的一笔(或者多笔)交易的铸币。(见下图)

重新创造比特币 | 第 7 章 UTXO(连载)UXTO

被交易引用后的一个(或者多个)大硬币就等同于被融化了(IN),然后再铸造新的大硬币(OUT)。

我们就称账本中,未被引用的大硬币:未花费的交易输出。

对应的英文:Unspent Transaction Output,我们用 TX 代表 transaction,所以最终简写为:UTXO。

一个人的余额,本质上就是他能够引用的 UTXO 的总和。

Gilfolye 说:“精彩!那么如何处理找零呢?Alice 引用了一个金额为 5 的大硬币,但是只想给 Bob,3.5Bitcoin”

中本聪说:“铸造成 2 个 OUT (大硬币)就可以啦。在这里就是生成两个 OUT (大硬币),分别是 3.5 和 1.5,其中 3.5 给 Bob,1.5 给自己,这就是我们日常生活中的破零钱嘛。”(见下图)

重新创造比特币 | 第 7 章 UTXO(连载)

UTXO 中的找零给自己

每一笔交易都引用过去交易生成的 UTXO,同时创造出新的 UTXO,等着未来交易来引用。

所有交易首尾相连,成为了一条连绵不绝的河流,从唯一的源头开始,中途经过分分合合的支流,永远朝着东方的大海前进,这就是所谓的,万折必东。

从这个角度来看,Bitcoin 系统就是,一个条由交易组成的时间长河。

描述这类数据结构的专业名词称为:有向无环图。英文全称:Directed Acyclic Graph(简写为:DAG)。(见下图)

重新创造比特币 | 第 7 章 UTXO(连载)

有向无环图

中本聪在脑子里,模拟运行着新的设计:“现在的设计应该没有大的缺陷了,可以进入交易模型的设计啦”。

GIlfoyle:“UTXO 的确优雅,交易模型的改动会很大”

所谓交易模型的设计,就是说,通过重构交易模型来承载 UTXO 机制。

5. 后记

UXTO 的设计部分就写完了,下一篇开始写,交易数据模型的重构,还会引入锁定和解锁脚本的机制。

“语义唯一”与“语法唯一”

语义的意思是,一句话想表达的意义是什么。

语法的意思是,以什么形式来组织语言。

语义是本质,语法是外表。

语义唯一,即,一句话表达的意义是确定性不变的。就拿这句话:“编号分别是 Bitcoin001、Bitcoin002、Bitcoin003 的 Bitcoin 的所有权,由 Alice 变成了 Bob”,不论谁来说,重复说多少次,什么时候说,谁来解释,都不会有歧义,即便服务端多次执行这句话,多次将这句话写入账本,Alice 的余额也只会减少 3 枚 Bitcoin,不会丢币。

而之前描述方式,是语义模糊的:“3 个 Bitcoin 的所有权,由 Alice 变成了 Bob”。如果服务端收到重复请求,无法确定其精确意义:究竟是 Alice 真的想付款多笔,还是客户端出了毛病(一笔交易发出了多次请求),还是黑客截获消息后的攻击。

传统的解决思路是,用语法上的唯一,来代替语义唯一。

什么是语法唯一,就是变着花的说话同一个意思,这样看上去就是不同的句子。

加随机数就是实现方法之一,像这样:
“随机数 001, 3 个 Bitcoin 的所有权,由 Alice 变成了 Bob”
“随机数 002, 3 个 Bitcoin 的所有权,由 Alice 变成了 Bob”
“随机数 003, 3 个 Bitcoin 的所有权,由 Alice 变成了 Bob”

这样,服务端就就可以认为,重复的请求是异常数据,可以抛弃不理。

所以当前系统的漏洞,在本质上是交易的定义上存在漏洞,即,不是语义唯一。

来源:比特币协会 BA

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。