gpt4 book ai didi

c# - 使用 C# .NET 查询本地比特币区 block 链

转载 作者:IT王子 更新时间:2023-10-29 03:30:24 25 4
gpt4 key购买 nike

我正在尝试通过使用ONLY 本地存储的区 block 链(通过 Bitcoin Core 下载)来检查给定比特币地址的余额。与此类似的东西(通过使用 NBitCoin 和/或 QBitNinja),但不需要访问网络:

private static readonly QBitNinjaClient client = new QBitNinjaClient(Network.Main);

public decimal CheckBalance(BitcoinPubKeyAddress address)
{
var balanceModel = client.GetBalance(address, true).Result;
decimal balance = 0;

if (balanceModel.Operations.Count > 0)
{
var unspentCoins = new List<Coin>();
foreach (var operation in balanceModel.Operations)
unspentCoins.AddRange(operation.ReceivedCoins.Select(coin => coin as Coin));
balance = unspentCoins.Sum(x => x.Amount.ToDecimal(MoneyUnit.BTC));
}
return balance;
}

上面的例子需要访问网络。我需要离线做同样的事情。我想到了这样的东西,但显然它不起作用:

public decimal CheckBalanceLocal(BitcoinPubKeyAddress address)
{
var node = Node.ConnectToLocal(Network.Main);
node.VersionHandshake();
var chain = node.GetChain();

var store = new BlockStore(@"F:\Program Files\Bitcoin\Cache\blocks", Network.Main);

var index = new IndexedBlockStore(new InMemoryNoSqlRepository(), store);
index.ReIndex();

var headers = chain.ToEnumerable(false).ToArray();

var balance = (
from header in headers
select index.Get(header.HashBlock)
into block
from tx in block.Transactions
from txout in tx.Outputs
where txout.ScriptPubKey.GetDestinationAddress(Network.Main) == address
select txout.Value.ToDecimal(MoneyUnit.BTC)).Sum();

return balance;
}
  1. 它在查询期间挂起
  2. 我想要一些东西而不是 InMemoryNoSqlRepository 存储在一个文件中,以防止使用 ReIndex() 这会减慢一切

我的要求是用与第一种方法相同的方式检查余额,但通过查询存储在我的磁盘上的 block 。

实际上我需要的可能只是 this question 的答案:

最佳答案

您问题中的第一次和第二次尝试完全不同。第一个使用 json rpc 向守护进程询问平衡(我敢说这是正确的方法 - 你不要从你的汽车引擎上取下顶部并自己上下插入活塞以实现向前运动,做你?)第二次尝试打开守护程序本身的数据库并直接计算余额。

您不需要“需要网络”来查询本地主机,您只需要一台安装了 TCP/IP 支持的机器,所以只需通过任何方式使用第一种方法 - 通过使用编写相关 json 的库-rpc数据放入http请求,或者自己形成相关的http请求..

BitcoinLib 可能会维护也可能不会维护(我不知道),但这并不会使它查询本地守护进程的能力失效;据我所知,GetBalance 尚未被删除或重构,我将 BitcoinLib 与最新的 bitcoind 一起用于各种操作,包括 GetBalance

关于c# - 使用 C# .NET 查询本地比特币区 block 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41027747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com