Ich versuche, den Kontostand einer bestimmten Bitcoin-Adresse zu überprüfen, indem ich NUR die lokal gespeicherte Blockchain verwende (heruntergeladen über Bitcoin Core). Ähnliches (mit NBitCoin und / oder QBitNinja), jedoch ohne Zugriff auf das Netzwerk:
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;
}
Das obige Beispiel benötigt Zugriff auf das Netzwerk. Ich muss das Gleiche offline tun. Ich habe mir so etwas ausgedacht, aber offensichtlich funktioniert es nicht:
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;
}
- Es hängt während der Abfrage
- Ich möchte, dass etwas
InMemoryNoSqlRepository
nicht in einer Datei gespeichert wird, um zu verhindern, dass die VerwendungReIndex()
alles verlangsamt
Meine Anforderung besteht darin, den Kontostand auf die gleiche Weise wie bei der ersten Methode zu überprüfen, jedoch indem auf meiner Festplatte gespeicherte Blöcke abgefragt werden.
Eigentlich könnte das, was ich benötige, nur eine Antwort auf diese Frage sein :