使用C#.NET查询本地比特币区块链

我试图通过仅使用本地存储的区块链(通过比特币核心下载)来检查给定比特币地址的“余额”。 类似的东西(通过使用NBitCoin和/或QBitNinja),但不需要访问networking:

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; } 

上面的例子需要访问networking。 我需要离线做同样的事情。 我想出了这样的东西,但显然这是行不通的:

 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() ,减慢了一切

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

其实我要求的可能只是这个问题的答案: