比特币地址余额查询思路及实现

最近在搞比特币地址余额查询 

在网上搜到有用的资料不多,大多都是重复过来重复过去的所谓的utxo理论

目前想要实现比特币任意地址余额的查询有两种方法

1.索引区块后   ./bitcoin文件夹下会多一个chainstate文件夹,这个文件夹存放比特币历史上所有的utxo交易记录集,而且是根据区块的增加而实时更新的,实际上chainstate就是一个levelDB数据库,只要通过相应的key就可以访问到levelDB,当找到key对应的value时,返回的是一段字符串,前面是版本号,然后是16进制的余额,还有地址等等

2.索引区块后 ./bitcoin文件夹下会多一个indexes文件夹,这个文件夹存放的是每一个区块的编号,从图中可以看到每一个区块至少会有一笔交易,下图是高度1413346的区块所包含的交易哈希

比特币地址余额查询思路及实现_第1张图片

通过交易哈希,我们可以看到每笔交易信息,通过交易信息的vin可以追溯上一笔交易,如果一直追溯可以找到挖矿奖励,也就是终点 

 

这里我用到的方法是遍历每个高度的区块交易哈希,通过追溯上一笔交易,获得当前交易的输入,也就是上一笔交易的输出地址

如果同学上一句看不明白的话,建议去看看比特币的utxo机制

举个例子

比特币地址余额查询思路及实现_第2张图片

可以看见当前vout有两个value,我们只需要有addresses值的value

现在我们知道了,mmznl.......地址在当前高度时的余额为0.51286768,那是谁给他发送的这笔交易呢,我们查找vin的txid获得如下图交易信息

比特币地址余额查询思路及实现_第3张图片

我们可以看到是mob7ko......地址把手中的钱都花出去了

 

这样我们是不是就找到了输出与输入呢

我们只需要把找到的输入输出地址记录起来,汇总之后确保输入输出值正确,将输入值减去输出值即可得到余额

 

下面是实际测试图,随便找到的地址

比特币地址余额查询思路及实现_第4张图片

比特币地址余额查询思路及实现_第5张图片

 

 

比特币地址余额查询思路及实现_第6张图片

比特币地址余额查询思路及实现_第7张图片

 

 

比特币地址余额查询思路及实现_第8张图片

比特币地址余额查询思路及实现_第9张图片

下面是代码思路

比特币地址余额查询思路及实现_第10张图片

整体下来就是这么个思路,如果有更好的方法大家可以与我交流。

你可能感兴趣的:(MySQL,golang,区块链)