C# analysiert die Bitcoin-Blockchain, um das Gleichgewicht einer Adresse zu erhalten

Gibt es eine Möglichkeit, die Bitcoin-Blockchain in C# zu scannen, ohne eine externe API zu verwenden? Ich suche den Betrag des auszugebenden Geldes einer Bitcoin-Adresse.

Ich verwende NBitcoin.

// create new key pair based on private key
NBitcoin.Key key = new NBitcoin.Key(privateKey, privateKey.Length, false);

// parse blk*.dat
// get balance for address key.PubKey.Hash
// How to do that?
Ja, das ist durchaus möglich. Die Blockchain enthält alle erforderlichen Informationen.
@GregHewgill, wie wird er Blockchain mit NBitcoin abfragen?
Ich fürchte, ich weiß nichts darüber, wie man NBitcoin speziell verwendet. Allerdings habe ich genau das mit Python gemacht (für die Blockchain einer anderen Münze, aber die Struktur ist weitgehend gleich), also ist es sicherlich möglich.

Antworten (2)

Wie wäre es, wenn Sie einen QBitNinja -Server lokal betreiben?

var client = new QBitNinjaClient(baseAddress:"specify host here, you probably want localhost", Network.TestNet);
var balanceModel = client.GetBalance(dest: [Add any IDestination here, like new BitcoinAddress("mivD5GHroixrzgjv6Ww73pV5R55PcL8JdM", Network.TestNet)], unspentOnly: true).Result;
if (balanceModel.Operations.Count == 0) 
    throw new Exception("No coins to spend");
var unspentCoins = new List<Coin>();
foreach (var operation in balanceModel.Operations)
            unspentCoins.AddRange(operation.ReceivedCoins.Select(coin => coin as Coin)); 
var balance = unspentCoins.Sum(x => x.Amount.ToDecimal(MoneyUnit.BTC));

Sie können jederzeit http://blockchainsql.io verwenden , um die Bitcoin-Blockchain mit SQL abzufragen.

Haftungsausschluss : Ich bin der Entwickler.

Nur eine Anmerkung: Wenn ich auf GitHub/Twitter/Facebook oder einen Kontaktlink klicke, passiert nichts.
@herman Können Sie eine Beispielabfrage bereitstellen, um zu zeigen, wie eine getbalance-äquivalente Abfrage in der SQL-Datenbank durchgeführt werden kann. Zum Beispiel führe ich in der Bitcoin-CLI-Konsole die folgenden Befehle aus, um das Gleichgewicht einer Adresse 1PWC7PNHL1SgvZaN7xEtygenKjWobWsCuf wie unten zu findencreatewallet "wallet-1" true loadwallet wallet-1 importaddress "1PWC7PNHL1SgvZaN7xEtygenKjWobWsCuf" "" false getbalance
@kdas # Alle Einzahlungen an Bitmex https://blockchainsql.io/rR1gE3 # Alle Einzahlungen an Bitmex von mindestens 1 BTC https://blockchainsql.io/FkuyZ7