比特币源码分析之二:交易

2018-05-23 10:28:12 浏览数 (1)

比特币源码分析之二:交易

交易(Tx)

在源码中的结构体为CTransaction(transaction.h),主要包含一些字段

nVersion 代表了一个交易的版本号(当前是固定值2)

vin 是一个代表交易输入的集合(数组),对应的结构是CTxIn

vout 是一个代表交易输出的集合(数组),对应的结构是CTxOut

nLockTime 一个代表锁定时间的变量,这个变量会被用来复杂类型的交易,为了减少理解难度前期先不关注

为了理解方便,简化一下结构,一个交易就是包含一组输入和一组输出的集合

输入(TxIn)

在源码中的结构体为CTxIn(transaction.h)主要字段如下

Prevout 一个指向输入对应输出的索引(钱从哪里来),由tx的hash和对应tx中vout的index组成

scriptSig 输入脚本,和输出脚本结合完成交易,输入脚本可以理解为一把钥匙,表明了这个输入可以解开它对应的输出锁的脚本

nSequence 和tx中的nLockTime一起来完成一些复杂类型的交易,后续系列一起介绍,当前暂时不关注

scriptWitness 比特币交易的升级版本,后续系列单独介绍,只需要知道是比特币因为一个漏洞的升级版本,原始版本中不存在,所以暂时不影响理解

简化为 一个代表输入对应输出的索引和一把解开对应输出的钥匙脚本

输出(TxOut)

在源码中的结构体为CTxOut (transaction.h)主要字段如下

nValue 代表花费多少

scriptPubKey 输出脚本,对应TxIn的scriptSig ,表明要花这笔钱需要满足哪些条件的脚本,而TxIn的scriptSig是用来满足这个条件的,也就是一把锁

交易费用(Fee)

这是一个虚拟的概念,交易费,这个是支撑比特币可以正常运转的一个重要设计

一笔交易的Fee是所有的输入减去所有的输出剩余的比特币

下图表示了交易体系

图中TxB引用了TxA的输入,并且提供了能解开TxA输出脚本锁的钥匙(也就是拥有可以证明自己是Rich的私钥)

而上图中的Fee是1个比特币(3-2),这个比特币会给矿工(矿工挖矿会在专门的一篇中介绍)

注意:输入和输出都是一个数组,上图为了介绍简单只画了一个

下一篇会介绍输入和输出脚本是怎么协同工作的

0 人点赞