ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

比特币签名交易系列——02UTXO

2020-06-16 23:39:53  阅读:282  来源: 互联网

标签:转账 小明 10 输出 比特 02UTXO 签名 交易


UTXO 在比特币中是一个核心的概念,它描述了比特币的记账模型。

传统的记账模型是账户型的,例如银行账号。给每个银行账号一个叫balance的字段,表示这个账号目前有多少钱。当在两个账号之间要发生转账的时候,把转账发送方的balance字段减去发送的金额,然后在转账的接收方的balance字段加上发送的金额,然后这笔转账就成功了。以太坊使用的正是这种账号模型。

但是UTXO不是这样子的。UTXO是Unspent  Transaction Output的缩写,中文意思是,未花费交易输出。它的落脚点在于交易输出。交易输出又分为两种类型:一种是已经花费出去了,另一种是没有花费出去的。花出去的交易输出就是一笔死账,已经被固定了,成了历史了,永远不能变动。而未花费交易输出才是我们的主角,是活的,在将来能够被拿来使用。那到底什么是交易输出呢?

有交易输出,那自然就有交易输入。可以这么来看,一笔完整的交易,包含交易的入口和出口。入口就是交易金额从哪里来,出口就是交易金额到哪里去。例如假设有一笔交易“小明给小红转账10元”。这里交易入口就是小明转出10元,这也就是交易输入,而小红被转入10元,就是交易的出口(交易输出)。结构化就如下所示:

{
"交易输入":"小明转出10元",
"交易输出":"小红被转入10元",
}

这只是开始,更重要的一点是,交易的输入必须来源于之前的交易的输出!这个怎么理解?这个需要把眼光放长一点来看。依然举上面“小明给小红转账10元”这个例子,为什么说这笔交易的交易输入“小明转出10元”要来源于之前的交易输出呢?这是因为小明的这10元,肯定也是别人转给他的。例如来自他妈妈给的零花钱。也就是说虽然在这次“小明给小红转账10元”交易中“小明转出10元”是交易输入,但这笔钱的来源在之前的一笔交易“小明妈妈转50元钱给小明”,而在这笔交易中,“小明被转入50元”是交易输出,这笔交易的金额要大于小明转10元给小红的那笔交易。如果了解过复式记账法的朋友可能一眼就看出,这就是复式记账法。也就是每一笔交易的输入都要去追溯它的来源。现实中一笔交易的最终来源来自国家银行发行货币。而在比特币系统中,每一笔交易的交易来源都可以追溯到coinbase交易。也就是矿工挖矿获得的系统奖励。比特币系统中,从一开始矿工每挖到一个合法的区块,系统会奖励矿工50个比特币。之后每隔21万个区块(按照平均每隔10分钟出一个块,是4年)就减半系统矿工的奖励,在比特币系统里最终发行2100万个比特币后就不再从系统中生出比特币奖励矿工了,而是让矿工自己收取交易手续费。

UTXO的结构如下:

type UTXO struct {
	Txid string
	Vout uint64
	Amount uint64
	ScriptPubKey string
}

其中,txid表示之前某一笔交易的id。

而vout表示上次交易输出在上次交易中的所有交易输出的位置(从0开始)。还是举上面“小明转账10元给小红”的例子,这里小明的10元钱来源于哪里呢?也许来自于这么一笔转账:“小明妈妈转账20元给小明爸爸,同时转10元给小明”。这样在这笔转账中就有两笔交易输出。小明妈妈转给小明爸爸的是第一笔,而转给小明的是第二笔,这样转给小明的交易输出索引就是1(因为从0开始计算)。在UTXO的世界里,一笔交易中,不仅交易输出可以有多个,交易输入也可以有多个。也就是说一笔被打包的交易,它可以包含N笔交易输入和M笔交易输出。还是举上面“小明转账10元给小红”的例子,这里小明的10元钱来源于哪里呢?可以使从多笔交易中来,例如“爸爸转账2元给小明”,“奶奶转账4元给小明”,“妈妈转账4元给小明”,这样三笔交易共同凑成了这次小明转给小红的数额。不知道我解释清楚了没有。

接下来Amount表示转入的金额。

而最后ScriptPubKey,是另一个重头戏,表示一段脚本代码。为什么这里会有脚本代码?请看下回分析。

标签:转账,小明,10,输出,比特,02UTXO,签名,交易
来源: https://blog.csdn.net/maxdaic/article/details/106757887

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有