比特币 (btc) 交易所钱包开发(一):认识数据结构

栏目: IT技术 · 发布时间: 4年前

内容简介:比特币和以太坊一样,也是一个账本。不过比特币和以太坊的记账方式差别还是很大的。以太坊的记账方式是比特币的记账方式为

比特币记账方式

比特币和以太坊一样,也是一个账本。不过比特币和以太坊的记账方式差别还是很大的。

以太坊的记账方式是 余额 ,余额以地址一一对应。

比特币的记账方式为 UTXO(Unspent Transaction Output) ,翻译出来大概是 未消费交易输出 。而地址的余额就是该地址所剩余的所有的 UTXO 金额的总和。

比特币的交易信息我们可以从区块链浏览器 blockchair [1] 上查看。

例如,我们查看地址 1ANjYHibCQ6FzagLfeXubC8SQYDfUS5wAJ 的余额为 23,969.00001200 BTC

比特币 (btc) 交易所钱包开发(一):认识数据结构

然后我们查看这个地址的 UXTO 有4个

比特币 (btc) 交易所钱包开发(一):认识数据结构

我们把这4个 UXTO 的金额 0.00000600+0.00000600+23,968.00000000+1.00000000 加起来便是 23,969.00001200 BTC

所以比特币没有余额只有 UXTO

比特币转账方式

我们再看一眼比特币的交易信息

比特币 (btc) 交易所钱包开发(一):认识数据结构

我们看到,交易分为输入和输出。输入可以有多个,输出也可以有多个。

输入的金额总和-输出的金额总和=手续费。

所以我们需要注意一种情况,比如我们有一个地址1A的UXTO金额为0.5BTC,我们想给地址1B打0.1个BTC。那么在不考虑手续费的情况下,我们则需要构造这样一个交易, 注意,程序是不会自动帮我们创建找零输出的

转账详细数据

{
"txid": "766ea01f70f4259597fb6d07af42b9408dfe8147e1fecd6dfd16663054c4b1d6",
"hash": "766ea01f70f4259597fb6d07af42b9408dfe8147e1fecd6dfd16663054c4b1d6",
"version": 1,
"size": 225,
"vsize": 225,
"weight": 900,
"locktime": 0,
"vin": [
{
"txid": "5c2e50b7cb317a36a8fa52d32846727340925cf40868ad47f66ecf9cb2350509",
"vout": 1,
"scriptSig": {
"asm": "30440220344879b01bc208a5e3203505ce3be289fa3ec34e313d35219fee7bb0f4e41f9202204901ce1cf45706695f049df0da70652e98c21814f1f229bbecf6c00b32f4fccf[ALL] 02d62848a4d57a7fb4ff324202084d6ce1b0507d01a30646a96db1d9bdb8b5bb62",
"hex": "4730440220344879b01bc208a5e3203505ce3be289fa3ec34e313d35219fee7bb0f4e41f9202204901ce1cf45706695f049df0da70652e98c21814f1f229bbecf6c00b32f4fccf012102d62848a4d57a7fb4ff324202084d6ce1b0507d01a30646a96db1d9bdb8b5bb62"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 23968,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 66d5609d270a82f82fa15e74fce4f27fd178eb1d OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91466d5609d270a82f82fa15e74fce4f27fd178eb1d88ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1ANjYHibCQ6FzagLfeXubC8SQYDfUS5wAJ"
]
}
},
{
"value": 61977.12686354,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 4d4bbd82d5a2350a4d48922483068f56d43f00dc OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a9144d4bbd82d5a2350a4d48922483068f56d43f00dc88ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"183hmJGRuTEi2YDCWy5iozY8rZtFwVgahM"
]
}
}
]
}

vin[].txid 为输入的 UXTO 的交易id, vin[].vout 为交易的输出索引。这两个数据便标示了唯一一个输出。所以这里需要注意,创建交易的输入数据是以之前的交易数据为基础的,而不是以地址为基础的。

vout 里主要包含地址和金额两个数据。需要注意的是,这里的地址是一个数组格式,因为这里涉及到多重签名。

这样我们就了解了比特币和以太坊交易的数据结构的区别,而在链的概念上他们基本是相同的。

参考资料

[1]

blockchair: https://blockchair.com/bitcoin


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python源码剖析

Python源码剖析

陈儒 / 电子工业出版社 / 2008-6 / 69.80元

作为主流的动态语言,Python不仅简单易学、移植性好,而且拥有强大丰富的库的支持。此外,Python强大的可扩展性,让开发人员既可以非常容易地利用C/C++编写Python的扩展模块,还能将Python嵌入到C/C++程序中,为自己的系统添加动态扩展和动态编程的能力。. 为了更好地利用Python语言,无论是使用Python语言本身,还是将Python与C/C++交互使用,深刻理解Pyth......一起来看看 《Python源码剖析》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具