Query LOCAL Bitcoin blockchain with C NET

0 votes

I am trying to check the balance of a given Bitcoin address by using ONLY the locally stored blockchain (downloaded via Bitcoin Core). Something similar to this (by using NBitCoin and/or QBitNinja), but without needing access to the network:

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


The example above needs access to the network. I need to do the same thing offline. I came up with something like this, but obviously it doesn't work:

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. It hangs during the query

  2. I want something instead of InMemoryNoSqlRepository to be stored in a file in order to prevent using ReIndex() which slows everything down

My requirement is to Check the Balance the same way as in the first method but by querying blocks stored on my disk. Would really appreciate help in order to answer this question. 

Apr 4, 2022 in Blockchain by Soham
• 9,710 points

edited Mar 4 14 views

No answer to this question. Be the first to respond.

Your answer

Your name to display (optional):
Privacy: Your email address will only be used for sending these notifications.
webinar REGISTER FOR FREE WEBINAR X
REGISTER NOW
webinar_success Thank you for registering Join Edureka Meetup community for 100+ Free Webinars each month JOIN MEETUP GROUP