在进行比特币交易时,我们经常会遇到一个原始交易(raw transaction),它是一串看似无意义的字符。只有通过调用decoderawtransaction RPC,我们才能清晰地看到交易的结构。在本地端创建原始交易并获取utxo时,经常会遇到问题。因此,理解交易结构对于调试非常有帮助,以下是一些笔记以备将来参考。
而Gcoin,作为一种从比特币衍生出的区块链技术,其交易结构与比特币非常相似,但Gcoin的交易中多了两个比特币交易中未出现的字段。
在Gcoin中,交易分为七种类型:NORMAL、LICENSE、MINT、VOTE、BANVOTE、MATCH、CANCEL。其中前三种是最常见的。由于Gcoin支持多货币功能,允许发行者发行自己的货币,与比特币仅有一种流通货币不同,因此在交易时需要明确指出使用哪种货币进行流通。
以下是一个原始交易示例,从1FPWFMPvYNTBx3fJYVmbFyhKtfi4QPQ6MY地址发送了100个color 1到17Ca1G5PFHBNd6sARgtYQKRK7PnCsM4uSn地址。
01000000018eff490c3dac592caf4954ad1e142e6e8d8fbb427909bb18d7271e7d66dcf9d4000000001976a9149dd353a079ad3b149e00dcc9f6a62f399d3d1c8f88acffffffff0200e40b54020000001976a9144400e18b93766b106220343dbd37d4135501d6da88ac01000000003bbf15f08623001976a9149dd353a079ad3b149e00dcc9f6a62f399d3d1c8f88ac0100000000000000000000
下面我们来解析这一串看似杂乱的字符。它由以下部分组成:
4个字节为版本号,表示交易遵循的规则,但实际上是11个字节表示输入的交易数量。
32个字节为交易哈希,代表我们准备花费的交易输出。
4个字节表示上一个交易的第几个输出,与3和4合并起来的意思是我们现在要花费交易哈希为8eff490c3dac592caf4954ad1e142e6e8d8fbb427909bb18d7271e7d66dcf9d4的第0个输出。
1个字节为解锁脚本长度,0x19换算成十进制是25(字节)。
25个字节为解锁脚本,其意义在于满足准备花费的输出条件,而这个条件就是那个输出的锁定脚本。你会发现它看起来与自己输出的锁定脚本非常相似或相同,但这只是暂时的。等到这个交易经过签名后,这个字段的值就会被改成真正可以满足前一个输出锁定脚本的值。
4个字节为序列号,通常设置为0xffffffff。
1个字节为交易输出的数量。
8个字节为第一个输出交易的金额。
1个字节为锁定脚本长度,0x19换算成十进制是25(字节)。
25个字节为锁定脚本,它的用处顾名思义就是定义这个输出被花费的条件。如果有人要花费这个输出,就必须有相应的解锁脚本来解锁。
4个字节为第一个输出交易的color,代表我们这个输出是在交易color 1,而在比特币上是没有这个概念的。
8个字节为第二个输出交易的金额。
1个字节为锁定脚本长度,0x19换算成十进制是25(字节)。
25个字节为锁定脚本,其用处与第11点相同。
4个字节为第二个输出交易的color,代表我们这个输出也是在交易color 1,这个在比特币上是没有的。
4个字节为锁定时间,表示这个交易最早可以进入区块链的时间。如果为0,代表希望立即执行,不希望有任何延迟。如果介于0到5亿之间,这个值代表区块高度,区块链没有达到这个区块高度时不要将这个交易收入区块链。最后,如果大于5亿,这个值代表一个Unix时间戳,未到这个时间不要将这个交易收入区块链。
最后4个字节为类型,表示这是NORMAL类型的交易,这是比特币中没有的。
可以发现,除了第12、16和18点之外,Gcoin的交易与比特币的交易在结构上基本相同。在输入解锁脚本和输出锁定脚本方面,会有进一步介绍。
此外,转换出来的数字10000000000单位为satoshi。虽然在Gcoin中没有btC这种货币(当然你也可以创建一个名为btC的许可证),但Gcoin仍然沿用了satoshi的概念来代表货币的最小单位。因此,上面的例子可以表示为10000000000 satoshi color 1或100个color 1。
以上就是Gcoin交易结构的解析。
标签: 数字货币