folgender Code, soll in Java den aktuellen Block ausgeben, was ich jedoch als Ausgabe erhalte, ist folgendes:
Dez. 31, 2022 12:10:26 PM org.bitcoinj.core.Context getOrCreate
WARNUNG: Implicitly creating context. This is a migration step and this message will eventually go away.
Dez. 31, 2022 12:10:26 PM org.bitcoinj.core.Context
INFORMATION: Creating bitcoinj 0.16 context.
Dez. 31, 2022 12:10:26 PM org.bitcoinj.core.AbstractBlockChain
INFORMATION: chain head is at height 0:
block:
hash: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
version: 1
previous block: 0000000000000000000000000000000000000000000000000000000000000000
time: 1231006505 (2009-01-03T18:15:05Z)
difficulty target (nBits): 486604799
nonce: 2083236893
Aktueller Block: 0
import org.bitcoinj.core.BlockChain;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.params.MainNetParams;
import org.bitcoinj.store.BlockStore;
import org.bitcoinj.store.BlockStoreException;
import org.bitcoinj.store.MemoryBlockStore;
public class BlockHigh
{
public static void main(String[] args) throws BlockStoreException
{
// Legen Sie die Netzwerkparameter fest (in diesem Fall Mainnet)
NetworkParameters params = MainNetParams.get();
// Erstellen Sie einen BlockStore
BlockStore blockStore = new MemoryBlockStore(params);
// Erstellen Sie eine BlockChain und verknüpfen Sie sie mit dem BlockStore
BlockChain chain = new BlockChain(params, blockStore);
// Abrufen des aktuellen Blocks
int latestBlockHeight = chain.getBestChainHeight();
// Ausgabe des aktuellen Blocks
System.out.println("Aktueller Block: " + latestBlockHeight);
}
}
The bitcoinj library is a Java implementation of the Bitcoin protocol, which allows it to maintain a wallet and send/receive transactions without needing a local copy of Bitcoin Core. It comes with full documentation and some example apps showing how to use it.“
Ja, wenn man BitcoinJ als Standard Implementierung nutzen soll, für Transaktionen etc., dann auch dafür. Die Methoden gibt es ja schließlich, oder wieso sollte getBlockHigh() implementiert sein, wenn nicht zu eben den genannten Zweck. Ich bekomme ja auch Block Hashes angezeigt, aber irgendwie nicht vom Main Net.
Ich habe das auch mal laufen lassen und erhalte die gleiche Ausgabe.
Allerdings sieht es für mich nach kurzem Überfliegen so aus, als würden durch die aufgerufenen Konstruktoren wirklich nur die Objekte initialisiert (params, blockstore, chain). Es wird keine Verbindung zu Peers aufgebaut, über welche man aktuelle Daten aus dem Bitcoin-Netzwerk erhält.
Die erzeugte Blockchain wächst also in diesem Beispiel nicht weiter.
Sieht man sich zum Vergleich mal PeerMonitor.java im Ordner mit den Beispielen an:
Dann stellt man fest, dass dort über die Klasse PeerGroup eben diese Netzwerkverbindungen aufgebaut werden. Lässt man PeerMonitor.java laufen, kann man die Verbindungen zu den Peers in einem Fenster verfolgen; inklusive der Blockhöhe, die von jeder Node zurückgegeben wird.
Falls du also nur die Blockhöhe anderer Nodes live und parallel beobachten willst, reicht das schon.
Falls du eine eigene Blockchain anlegen willst, kannst du zum ersten Herumspielen einfach das Beispiel PeerMonitor.java modifizieren. Du musst wie in deinem Beispiel oben ein Blockchain Objekt anlegen und dem Konstruktor von PeerGroup übergeben. Im unmodifizierten Beispiel wird dem Konstruktur als Blockchain Argument null übergeben.
Wenn man das macht wird tatsächlich eine Blockchain angelegt und gefüllt. Allerdings keine ganzen Blöcke, sondern nur die Block Header. So wie es für eine einfache Wallet reicht. In den Kommentaren der Klasse BlockChain steht dazu:
BlockChain implements the simplified payment verification mode of the Bitcoin protocol. It is the right choice to use for programs that have limited resources as it won’t verify transactions signatures or attempt to store all of the block chain. Really, this class should be called SPVBlockChain but for backwards compatibility it is not.
Falls du nicht klar kommst, kann ich vielleicht morgen Nachmittag noch was schreiben. Gerade ist schlecht.
Ich habe das ganze Repository geklont und den Ordner einfach mit IntelliJ geöffnet. Das ist zumindest am einfachsten. Dann kannst du die Beispiele direkt laufen lassen.