Ich suche nach einer Möglichkeit, einige Daten aus der neuesten heruntergeladenen Bitcoin-Blockchain zu extrahieren. Insbesondere bin ich daran interessiert, das gesamte Transaktionsnetzwerk zu extrahieren, also die bei jeder Transaktion verwendeten öffentlichen Schlüssel, das Transaktionsdatum, den Hash, den Block-Hash und den BTC-Betrag ein- und auszugeben. Ich habe bisher mehrere Lösungen ohne Erfolg versucht:
Bitcoin-Transaktionsnetzwerk-Extraktion
rostiger Blockparser
bitcointools
BitcoinDatabaseGenerator
BCGraph
Ich hatte etwas Glück mit bitcoindatabasegenerator und rusty-blockparser, aber während diese Tools die Ausgabe-PKs erfolgreich extrahieren, sind Eingabe-PKs nirgendwo in den resultierenden Dateien zu finden.
Zusammenfassend suche ich nach so etwas, um eine Netzwerkvisualisierung von Bitcoin-Transaktionen zu erstellen:
|Quelle PK(s) (BTC)| ------> Transaktion ------> |Ziel-PK(s) (BTC)|
Ich bin nicht wirklich ein Experte für Codierung, also macht das alles für mich komplizierter. Können Sie mir eine Möglichkeit vorschlagen, diese Daten aus heruntergeladenen Blk-Dateien zu extrahieren?
Jede Hilfe wäre sehr willkommen!
BlockChain::BlockChain ( QObject* parent ) : QFile ( parent ), blkFile ( START_BLOCK )
{
connect ( this, SIGNAL ( block ( const QByteArray& ) ), parent, SLOT ( block ( const QByteArray& ) ) );
connect ( this, SIGNAL ( doneFile ( ) ), parent, SLOT ( doneFile ( ) ) );
QTimer::singleShot ( 0, this, SLOT ( start ( ) ) );
}
void BlockChain::start ( )
{
setFileName ( blkFileName ( blkFile++ ) );
if ( !open ( QIODevice::ReadOnly ) )
{
_trace ( QString ( "cant open [%1]" ).arg ( fileName ( ) ) );
emit block ( QByteArray ( ) );
deleteLater ( );
}
else
{
_trace ( QString ( "processing [%1]" ).arg ( fileName ( ) ) );
QTimer::singleShot ( 0, this, SLOT ( next ( ) ) );
}
}
void BlockChain::next ( )
{
if ( pos ( ) < size ( ) )
{
quint32 magic;
quint32 sz ( read ( (char*)&magic, 4 ) );
while ( !magic && pos ( ) < size ( ) - 4 )
read ( (char*)&magic, 4 );
xassert ( ( ( magic == MAGIC_ID ) || !magic ) && ( sz == 4 ) );
if ( magic )
{
read ( (char*)&sz, 4 );
emit block ( read ( sz ) );
QTimer::singleShot ( 0, this, SLOT ( next ( ) ) );
return;
}
}
close ( );
emit doneFile ( );
QTimer::singleShot ( 0, this, SLOT ( start ( ) ) );
}
const QString BlockChain::blkFileName ( const int i ) const
{
return
( i < 10 ) ? QString ( DATA_ROOT "\\blk0000%1.dat" ).arg ( i ) :
( i < 100 ) ? QString ( DATA_ROOT "\\blk000%1.dat" ).arg ( i ) :
QString ( DATA_ROOT "\\blk00%1.dat" ).arg ( i );
}
Pieter Wuille
Amaclin
Pieter Wuille
Amaclin
Pieter Wuille