比特币交易本质是数据结构,还有比特币参与者和价值转移的相关信息,比特币区块链是全球复式记账总账本,每个比特币交易是在比特币区块链上的公开记录。
一、交易数据结构
由CTransaction类来定义的,位于Src/primitives/transaction.h,参数都是常量,都定义成const字段,目的是这些参数在没有更新缓存和哈希值的时候不能被恶意修改。
版本信息:1、current_version(默认值)2、max_standard_version(作过渡)3、nversion(位于transaction.cpp中查看)
交易类型:1、一个输入两个输出
2、多个输入一个输出(化零为整)
3、一个输入多个输出(发工资)
二、交易的输入与输出
UTXO(Unspent Transaction Output):未花费的交易输出,不能分割,被所有者锁住或者记录于区块链中的,并被网络识别成货币单位,一定量的比特币货币。就像钱包里的零钱,每个零钱就相当于UTXO,一个用户的比特币会被当作UTXO,分散到数百个交易,数百个区块链中,实际上并不存在储存比特币地址或帐户余额的地点,只有被所有者锁住的分散的UTXO。一个用户的比特币余额这个概念是一个通过比特币钱包应用创建的派生之物,比特币钱包通过扫描区块链并聚合所有属于该用户的UTXO来计算该用户的余额,也就是说钱包里不会存我们起初所想像的比特币,而是通过密钥去扫描哪些地址的比特币(UTXO)属于我,我能够解开,通过全网扫描,累加得到比特币总额。
输入:被交易消耗的UTXO
输出:被交易创建的UTXO
比特币在不同人之间进行价值转移,并在交易链中消耗和创建UTXO,一笔交易通过所有者的签名来解锁UTXO,并使用新的所有者的比特币,地址来锁定并创建UTXO,接收者会利用私钥对其锁定,确保资产安全。
交易输入 CTXIN(包含四个字段)
1、
字段名称 prevout
类型 coutpoint
长度 36
作用 前一交易输出点(使交易形成链条)
2、
字段名称 scriptsig
类型 cscript
长度 不定长
作用 交易解锁脚本(脚本签名)
3、
字段名称 nsequence
类型 uint32_t
长度 4
作用 序列号
4、
字段名称 scriptwitness
类型 cscriptwitness
长度 不定长
作用 用来支持隔离见证时使用
coutpoint数据结构
1、
字段名称 hash
类型 uint256
长度 32
作用 前一交易的哈希值
2、
数据结构 n
类型 uint32_t
长度 4
作用 前一交易输出索引,从零开始
通过prevout使交易形成链条。
交易输出CTXOUT(包含两个字段)
1、
字段名称 nvalue
类型 camount
字段 8
作用 比特币数量
2、
字段名称 scriptpubkey
类型 cscript
长度 4
作用 锁定脚步
区块链研习社源码研读班方建强