SADECE yerel olarak saklanan blockchain (Bitcoin Core üzerinden indirilir) kullanarak belirli bir Bitcoin adresinin dengesini kontrol etmeye çalışıyorum . Buna benzer bir şey (NBitCoin ve / veya QBitNinja kullanarak), ancak ağa erişmeye gerek kalmadan:
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;
}
Yukarıdaki örnekte ağa erişim gerekiyor. Aynı şeyi çevrimdışı yapmam gerekiyor. Ben böyle bir şey buldum, ama belli ki işe yaramıyor:
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;
}
- Sorgu sırasında kilitleniyor
- Her şeyi yavaşlatan kullanımını
InMemoryNoSqlRepository
önlemek için bir dosyada saklanmak yerine bir şey istiyorumReIndex()
Benim gereksinimi olan Bakiyesini Kontrol birinci yöntemde olduğu gibi ama benim diskte saklanan blokları sorgulayarak aynı şekilde.
Aslında istediğim sadece bu sorunun cevabı olabilir :