BTC找零处理方式

一、coinbase交易结构

每个区块的第一个交易叫做coinbase交易,它的结构如下:

字节长度 字段 说明
4 交易版本号 明确这笔交易参照的规则
1-9 输入计数器 包含的交易输入数量
不定 交易输入 一个或多个交易输入
1-9 输出计数器 包含的交易输出数量
不定 交易输出 一个或多个交易输出
4 锁定时间 一个区块号或UNIX时间戳

coinbase的交易输入结构为:

字节长度 字段 说明
32 交易哈希值 固定为全0
4 输出索引 固定为全1
1-9 Coinbase脚本长度 coinbase的脚本字节长度
不定 coinbase脚本 coinbase脚本,可以任意填充
4 序列号 固定值0xFFFFFFFF

coinbase交易的输入格式经过数次改变,在高度227836之前遵从的区块版本号为1。因为本文分析的区块实例高度为170,则coinbase交易遵从版本1的规定。之后的区块版本中规定coinbase数据中需要添加区块高度值,版本2、3、4更详细的说明可以查看比特币官网的开发文档,在此不再赘述。

coinbase的交易输出结构为:

字节长度 字段 说明
8 总量 用聪表示的比特币值
1-9 锁定脚本大小 用字节表示的后面的锁定脚本长度
不定 锁定脚本 一个定义了支付输出所需条件的脚本

二、普通交易信息结构

剩余的信息就是一个普通交易信息,普通交易结构为:

字节长度 字段 说明
4 交易版本号 明确这笔交易参照的规则
1-9 输入计数器 包含的交易输入数量
不定 交易输入 一个或多个交易输入
1-9 输出计数器 包含的交易输出数量
不定 交易输出 一个或多个交易输出
4 锁定时间 一个区块号或UNIX时间戳

普通交易输入结构为:

字节长度 字段 说明
32 交易哈希值 指向被花费的UTXO所在的交易的哈希
4 输出索引 被花费的UTXO的索引号,第一个是0
1-9 解锁脚本大小 用字节表示的后面的解锁脚本长度
不定 解锁脚本 满足UTXO解锁脚本条件的脚本
4 序列号 固定值0xFFFFFFFF

普通交易输出结构为:

字节长度 字段 说明
8 总量 用聪表示的比特币值
1-9 锁定脚本大小 用字节表示的后面的锁定脚本长度
不定 锁定脚本 一个定义了支付输出所需条件的脚本

     当发起一笔交易时,如果输入的UTXO远大于输出的给对方的数量时,需要找零。 这时,比特币钱包就会自动创建一个新的地址,用来接收除去转账金额和手续费之后的找零。比特币在进行交易时,会把发起交易地址的余额清零,转账后的剩余金额会转到找零地址中去。当然找零的接收地址也可以设置为发起交易的原地址。 通常情况下,比特币客户端在一开始会产生 100 个用户专属地址的私钥,创建找零地址时会优先使用这 100 个地址中的某一个,当这些地址全部被使用之后,将会继续创建新的找零地址。一般一次交易用一次找零地址,故100个地址只能使用100次交易,超过时,会继续创建地址提供使用,但需要注意备份。

      

 

 

 

你可能感兴趣的:(比特币)