UTXO 在比特币中是一个核心的概念,它描述了比特币的记账模型。 传统的记账模型是账户型的,例如银行账号。给每个银行账号一个叫balance的字段,表示这个账号目前有多少钱。当在两个账号之间要发生转账的时候,把转账发送方的balance字段减去发送的金额,然后在转账的接收方的balance字段加上发送的金额,然后这笔转账就成功了。以太坊使用的正是这种账号模型。 但是UTXO不是这样子的。UTXO是Unspent Transaction Output的缩写,中文意思是,未花费交易输出。它的落脚点在于交易输出。交易输出又分为两种类型:一种是已经花费出去了,另一种是没有花费出去的。花出去的交易输出就是一笔死账,已经被固定了,成了历史了,永远不能变动。而未花费交易输出才是我们的主角,是活的,在将来能够被拿来使用。那到底什么是交易输出呢? 有交易输出,那自然就有交易输入。可以这么来看,一笔完整的交易,包含交易的入口和出口。入口就是交易金额从哪里来,出口就是交易金额到哪里去。例如假设有一笔交易“小明给小红转账10元”。这里交易入口就是小明转出10元,这也就是交易输入,而小红被转入10元,就是交易的出口(交易输出)。结构化就如下所示: 这只是开始,更重要的一点是,交易的输入必须来源于之前的交易的输出!这个怎么理解?这个需要把眼光放长一点来看。依然举上面“小明给小红转账10元”这个例子,为什么说这笔交易的交易输入“小明转出10元”要来源于之前的交易输出呢?这是因为小明的这10元,肯定也是别人转给他的。例如来自他妈妈给的零花钱。也就是说虽然在这次“小明给小红转账10元”交易中“小明转出10元”是交易输入,但这笔钱的来源在之前的一笔交易“小明妈妈转50元钱给小明”,而在这笔交易中,“小明被转入50元”是交易输出,这笔交易的金额要大于小明转10元给小红的那笔交易。如果了解过复式记账法的朋友可能一眼就看出,这就是复式记账法。也就是每一笔交易的输入都要去追溯它的来源。现实中一笔交易的最终来源来自国家银行发行货币。而在比特币系统中,每一笔交易的交易来源都可以追溯到coinbase交易。也就是矿工挖矿获得的系统奖励。比特币系统中,从一开始矿工每挖到一个合法的区块,系统会奖励矿工50个比特币。之后每隔21万个区块(按照平均每隔10分钟出一个块,是4年)就减半系统矿工的奖励,在比特币系统里最终发行2100万个比特币后就不再从系统中生出比特币奖励矿工了,而是让矿工自己收取交易手续费。 UTXO的结构如下: 其中,txid表示之前某一笔交易的id。 而vout表示上次交易输出在上次交易中的所有交易输出的位置(从0开始)。还是举上面“小明转账10元给小红”的例子,这里小明的10元钱来源于哪里呢?也许来自于这么一笔转账:“小明妈妈转账20元给小明爸爸,同时转10元给小明”。这样在这笔转账中就有两笔交易输出。小明妈妈转给小明爸爸的是第一笔,而转给小明的是第二笔,这样转给小明的交易输出索引就是1(因为从0开始计算)。在UTXO的世界里,一笔交易中,不仅交易输出可以有多个,交易输入也可以有多个。也就是说一笔被打包的交易,它可以包含N笔交易输入和M笔交易输出。还是举上面“小明转账10元给小红”的例子,这里小明的10元钱来源于哪里呢?可以使从多笔交易中来,例如“爸爸转账2元给小明”,“奶奶转账4元给小明”,“妈妈转账4元给小明”,这样三笔交易共同凑成了这次小明转给小红的数额。不知道我解释清楚了没有。 接下来Amount表示转入的金额。 而最后ScriptPubKey,是另一个重头戏,表示一段脚本代码。为什么这里会有脚本代码?请看下回分析。
{ "交易输入":"小明转出10元", "交易输出":"小红被转入10元", }
type UTXO struct { Txid string Vout uint64 Amount uint64 ScriptPubKey string }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算