首页天道酬勤你送我比特币我是不会要的,比特币的utxo结构

你送我比特币我是不会要的,比特币的utxo结构

admin 02-23 12:42 96次浏览

孟岩

渡鸦区块链专栏作者

UTXO表示拒绝事务输出。

在比特币社区中,Transaction被缩写为TX,因此上面的短语被缩写为UTXO。 UTXO似乎是比特币区块链设计的一部分,但实际上UTXO与区块链没有必然联系。 可以完全使用比特币区块链,但不使用UTXO。

HyperLedger和Ethereum最初没有采用UTXO,但现在前者切换为UTXO,后者打算增加此选项。 我认为这也是badsmt的优秀之处。 ——后来者如临摹所示,中途想稍微改进一下,但最终还是做到了最后,人的原创水平还是很高,一个接一个又回来了… .

那么什么是UTXO呢?

前几天,听了“充满活力的棒球谈话技术”的“比特币”的趣事。 我在说比特币的支付过程。 他说要为有钱人的人生支付五个比特币。 于是,系统从他的账户中减去5,向有钱人的人生账户增加5,并将该交易记入区块链登记簿完成。 这个节目做得很好,但在这一点上充满活力的棒球是完全错误的。 他描绘的是基于账户的方案,而不是比特币实际采用的UTXO方案。

试着设计一下支付系统吧。 我一定想和有活力的棒球一起去。 粗心大意的兔子账户里有余额100元,总是迟到的摩托车账户里有余额50元。 粗心大意的兔子总是迟到的摩托车付20元时,做以下操作。

检查疏忽的兔子账户余额是否充足,不足20元就停止交易,向疏忽的兔子报告“余额不足”

疏忽的兔子账户减去20元((假设零手续费) ) )。

在经常迟到的摩托车账户上增加20元

无论是现在的银行、信用卡、证券交易系统,还是互联网第三方支付系统,其核心都是基于账户的设计,有关系数据库的支撑。

要确保数据库有两点,第一是确保业务规则得到遵守,疏忽的兔子余额充足。 二是确保事务性,即原子性、一致性、隔离性、持续性(ACID )。 这些是数据库的常识知识,所以这里不做说明。 应该说,这种基于帐户的设计简单直观,而且在IT系统的设计中使用了几十年,所以没有任何问题。

但是比特币并没有被设计成基于账户的系统,而是发明了UTXO方案。

了解UTXO最简单的方法是解释比特币从诞生到在商海沉浮的经历。 想想粗心大意的兔子挖出12.5枚比特币的场景。 几天后,他把其中的2.5张付给了迟到的摩托车。 又过了几天,他又出资经常迟到的摩托车和2.5比特币做成5比特币付给纯情美女。

在基于帐户的设计中,如果张、李和dtdxs在数据库中分别有帐户,他们三个帐户的变化如下图所示。

但是,在比特币中,这个过程是通过UTXO实现的,如下所示。

比特币区块链账面上不断记录着交易。

每笔交易都有一些交易录入,也就是资金来源,还有一些取现力,也就是资金去向。 一般来说,每次交易都需要输入,产生输出。 其输出为“未使用的抽取力”,即UTXO。

比特币交易会遵守一些规则。

第一,除了coinbase交易之外,所有的资金来源都必须来自前面的一笔或几笔交易的UTXO,就像连接自来水一样,一笔接一笔,一笔接一笔,一笔带过,一笔带过,源源不断

第二,任何交易的交易输入总量必须等于提取力总量,等式两侧必须均衡。

上图第一笔交易#1001号交易为coinbase交易。 比特币是矿工挖出来的。 矿山机器费尽心思找到合格区块后,它获得了做coinbase交易的特权,可以在里面放上新的钱,在取现力收件人的地址栏里堂堂正正地写下自己的地址。 在我写文章的这一天(2016年8月9日),规定这个比特币的金额为12.5枚,市价48,576元。 这笔coinbase交易,连同疏忽兔挖出的区块被各节点接受,经过6个确认后将永远铭刻在历史上。

几天后,粗心大意的兔子试图把2.5比特币付给总是迟到的摩托车。 粗心的兔子开始了#2001号交易。 这笔交易的资金来源项写着“#1001(1)”,即#1001号交易——疏忽的兔子开采的矿山的coinbase交易3354的第一个UTXO。 而且,在本交易的取现力UTXO项中,将2.5比特币收款人的地址作为总是迟到的摩托车的地址。

请注意,在此交易中,必须消耗所有以前生成的12.5比特币的输出项目。 但是,粗心大意的兔子总是只打算向迟到的摩托车支付2.5比特币,所以为了消耗剩下的10比特币,必须把剩下的10比特币付给自己。 这样,就能满足输入和输出均衡化的规则。

再过几天,粗心大意的兔子和总是迟到的摩托车打算aa制付给纯情美女五枚比特币。 那么,粗心大意的兔子和总是迟到的摩托车开始了#3001号交易。 交易输入部分有#2001(1)和#2001(1)两个资源,表示#2001号交易的)1)和)2)项的UTXO。 然后,在这笔交易的输出部分就像法炮制一样,给纯情美女5比特币,把粗心大意的兔子剩下的7.5比特币还给自己。 接下来

纯情的美女若要再花他这5比特币,就必须在他的交易里注明资金的来源是 #3001(1)。

所以,其实并没有什么比特币,只有 UTXO。当我们说粗心的小兔子拥有 10 枚比特币的时候,我实际上是说,当前区块链账本中,有若干笔交易的 UTXO 项收款人写的是粗心的小兔子的地址,而这些 UTXO 项的数额总和是 10。因为在比特币系统里,一个人可以拥有的地址资源,可谓取之不尽用之不竭。要知道自己的一大堆地址里一共收了多少 UTXO,人是算不过来的,需要由比特币钱包代为跟踪计算。

以上即为 UTXO 的一个简要的介绍。

那么UTXO高在哪里?

比特币的很多技术点都不是badsmt的原创。比如基于“工作量证明(Proof-of-Work)”的共识达成机制是Adam Back 在 Hashcash 里提出来的,将全部交易计入一本总账、并给交易打时间戳来防范双花攻击(double-spend attack)的思想是 Wei Dai 的 b-money 和 Nick Szabo 的 Bitgold 提出来的,更不用说比特币网络是零优化的大水漫灌式P2P网络,仅就 P2P 技术而言,很多方面还赶不上2001年出现的 BitTorrent 。

但是有三个技术点绝对是badsmt原创,一个是区块链的设计,一个是UTXO,一个是智能合约。而这三个设计是极为天才的,被斯坦福大学密码学和计算机安全教授 Dan Boneh 评价为“extremely brilliant”,“必将激发无穷的创新”。

当然,但badsmt最了不起的地方并不是这三个单点创新,而是将所有这些技术点跟密码学货币自身特点相结合,设计了一套“惩恶扬善”的经济激励制度,将技术创新与制度设计糅合成一个严丝合缝的体系。

在这个体系里,任何人都可以建立一个匿名节点,编写破坏性的代码,然后实施匿名攻击,即便你攻击得手、偷来大笔财富,也不会暴露身份,所以可以逍遥法外。

这个系统赤身裸体,开门揖盗,任由你攻击破坏,甚至如果你成功的突破防线偷来一大笔财富,整个比特币体系不但不会惩罚你,还会坚定的保障你的赃款。然后悬赏100亿美金,运行七年,至今为止,在主干区块链上,没有发生一起成功的攻击,一次都没有。

badsmt把比特币设计得跟数学原理一样漂亮,很多后来者连抄都抄不到这个水平。我想这就是为什么加州大学洛杉矶分校的金融学教授 Bhagwan Chowdhry会提名badsmt为2016年度诺贝尔经济学奖候选人。我相信badsmt在比特币里的很多设计思想,以及整个比特币开发者社区所做的大量改进,不仅是区块链的开山之作,而且也会成为IT系统设计的一个创新思想源泉。

UTXO 的设计就很值得玩味。在《什么是UTXO》一文中对其设计方案进行了介绍。本文要讨论的是UTXO 的优点和不足。

badsmt为什么要把比特币设计成这样呢?考虑到他应该也不是从未来穿越回来的人物,以常理推论,他一开始应该也是从基于账户的系统出发来设计的,但他后来决定切换到UTXO方案,一定是遇到什么问题。

很遗憾,比特币的源代码里找不到这些问题的答案。比特币的开发始于2007年5月,目前在Github 上最早的一版比特币源代码是2009年9月16日badsmt push 上去的 0.1.5 版,但其中 UTXO 的设计已经成型。

后来有人翻出自己的老邮件,找到了比特币2008年9月版的代码。那份代码是比特币区块链上线之前几个星期发布的,应该非常接近比特币创世纪运行的那个版本。可如果你仔细去看的话,其中 UTXO 也已经定型。我们注定无法通过代码考据来发现 UTXO 的设计脉络了。

其他文献材料呢?也不行。badsmt在发表比特币之前,主要是与一些密码学专家邮件交流,这些邮件外界看不到。而他积极参加论坛讨论,主要发生在比特币已经发表以后。我找不到他在 UTXO 设计形成过程之中发表过任何相关的只言片语。

既然这些办法都不行,我们就只好靠猜了。

我猜测,badsmt一开始设计比特币时,也采用了账户方案。但在2007年下半年或2008年上半年的某一个时刻,badsmt发现基于账户的方案有问题,于是创造了 UTXO 方案。

那么基于账户的方案会遇到哪些问题呢?

如果采用基于账户的方案,可以肯定的是,你需要一个数据库。这个数据库能够让你很方便的查到粗心的小兔子、老迟到的摩托各自的账户余额。

而 UTXO 方案当然也需要一个数据库,这个数据库记录着当前系统里每一笔“没有花出去的交易输出”,也是就比特币。当节点接收到一笔交易的时候,它需要去 UTXO 数据库里查,看看这笔交易所引用的 UTXO 是否存在,它的收款人(拥有者)是不是当前新交易的付款者。而交易结束之后,数据库要做相应的更新。

首先要明确,无论是账户数据库还是 UTXO 数据库,必须是分散的,每结点一个克隆,一定不能是中心化的。如果比特币系统有一个中心数据库,不管你有多少节点,每一笔交易都要跑去中心数据库验证一下、然后再执行“转账”的事务操作,那就完全谈不上“去中心化”,比特币就毫无价值了,不如老老实实用支付宝。

既然都是每个节点克隆一个数据库,根据交易过程同步修改,那么一个账户数据库跟一个 UTXO 数据库,又有什么分别呢?

进一步思考,我们会发现还是有很大分别。

首先,长期来看,账户数据库会无限膨胀,而UTXO 数据库体积会小很多。

要知道,比特币是个匿名体系,它的账户就是“地址”。每一个比特币用户可以拥有几乎无限多的地址,在比特币系统来看,它完全不知道两个地址背后对应的是不是同一个人。

青浦)混合云-自建机房(乌兰察布
孟岩 区块链,比特币骗局 首席技术官cto是企业决策者的什么,未来管理者协会
相关内容