[JAVA] [Ethereum] Blockinformationen mit web3j abrufen

Artikelinhalt

Ich habe mit Web3j so etwas wie einen Blockchain-Explorer erstellt, aber ich war ein wenig besorgt darüber, wie ich den Block bekommen kann, also werde ich eine Notiz hinterlassen.

Umgebung

Blockinformationen abrufen

Hier ist sofort der Code, der mit dem Beispiel erstellt wurde.

SampleBlock.java


import java.io.IOException;
import java.math.BigInteger;

import org.web3j.protocol.admin.Admin;
import org.web3j.protocol.core.DefaultBlockParameter;
import org.web3j.protocol.core.DefaultBlockParameterName;
import org.web3j.protocol.core.methods.response.EthBlock;
import org.web3j.protocol.http.HttpService;

public class SampleBlock {

	public static final Admin web3j = Admin.build(new HttpService("http://localhost:8545"));

	public static void main(String[] args) {
		System.out.println("-------------------------Latest Block----------------------------------");
		EthBlock block = getLatestBlock();
		showBlockInfo(block);

		System.out.println("-------------------------Block Number(100)-----------------------------");
		block = getBlock(BigInteger.valueOf(100));
		showBlockInfo(block);
	}

	public static EthBlock getLatestBlock() {

		EthBlock latestBlock = null;
		try {
			latestBlock = web3j.ethGetBlockByNumber(
					DefaultBlockParameterName.LATEST,
					false).send();

		}catch(IOException e) {
			e.printStackTrace();
		}
		return latestBlock;
	}

	public static EthBlock getBlock(BigInteger blockNumber) {

		EthBlock block = null;
		try {
			block =web3j.ethGetBlockByNumber(DefaultBlockParameter.valueOf(blockNumber), true).send();
		}catch(IOException e) {
			e.printStackTrace();
		}
		return block;
	}

	public static void showBlockInfo(EthBlock block) {
		System.out.println("Block Number: " + block.getBlock().getNumber());
		System.out.println("Block Size  : " + block.getBlock().getHash());
		System.out.println("Extra Data  : " + block.getBlock().getExtraData());
		System.out.println("Nonce       : " + block.getBlock().getNonce());
		System.out.println("Block Size  : " + block.getBlock().getSize());
	}
}

Der Inhalt des Codes ist

  1. Holen Sie sich den neuesten Block und zeigen Sie den Inhalt an
  2. Holen Sie sich den Block mit der angegebenen Blocknummer und zeigen Sie den Inhalt an Es werden diese beiden sein.

1. Holen Sie sich die neuesten Blockinformationen und zeigen Sie den Inhalt an

Holen Sie sich zunächst die neuesten Informationen.

SampleBlock.java


public static EthBlock getLatestBlock() {

	EthBlock latestBlock = null;
	try {
		latestBlock = web3j.ethGetBlockByNumber(
				DefaultBlockParameterName.LATEST,
				false).send();
	}catch(IOException e) {
		e.printStackTrace();
	}
	return latestBlock;
}
public static void showBlockInfo(EthBlock block) {
	System.out.println("Block Number: " + block.getBlock().getNumber());
	System.out.println("Block Size  : " + block.getBlock().getHash());
	System.out.println("Extra Data  : " + block.getBlock().getExtraData());
	System.out.println("Nonce       : " + block.getBlock().getNonce());
	System.out.println("Block Size  : " + block.getBlock().getSize());
}

Es ist ein Argument von ethGetBlockByNumber, Erstes Argument: Information des zu erfassenden Blocks Zweites Argument: Gibt an, ob detaillierte Transaktionsinformationen abgerufen werden sollen Es wird sein.

Die EthBlock-Klasse enthält eine innere Klasse namens Block. Grundlegende Informationen zu einem Block können mithilfe der Getter-Methode der Block-Klasse abgerufen werden.

2. Holen Sie sich den Block mit der angegebenen Blocknummer und zeigen Sie den Inhalt an

Holen Sie sich den Block, indem Sie die Blocknummer 100 angeben.

SampleBlock.java


public static EthBlock getBlock(BigInteger blockNumber) {

	EthBlock block = null;
	try {
		block =web3j.ethGetBlockByNumber(DefaultBlockParameter.valueOf(blockNumber), true).send();
	}catch(IOException e) {
		e.printStackTrace();
	}
	return block;
}

Die Methode zum Abrufen der neuesten Blockinformationen ist dieselbe. Das erste Argument ist DefaultBlockParameter.valueOf (blockNumber) anstelle von "DefaultBlockParameterName.LATEST".

Sie müssen lediglich die Blocknummer festlegen, die Sie im Argument DefaultBlockParameter.valueOf (blockNumber) mit dem Typ BigInteger erhalten möchten.

3. Ausführungsergebnis

Das Ergebnis der Ausführung der Hauptmethode des ersten Codes

-------------------------Latest Block----------------------------------
Block Number: 1126
Block Size  : 0x43b54d8fa0721f48775662bc931f71b84037cf7697e008af630143e4be0d6c68
Extra Data  : 0xda83010900846765746888676f312e31322e378777696e646f7773
Nonce       : 8592711553053470949
Block Size  : 540
-------------------------Block Number(100)-----------------------------
Block Number: 100
Block Size  : 0x0e62799b40cc37228b74de6be9d6424277c7cc2ac50ad9370655851eea2e3feb
Extra Data  : 0xda83010900846765746888676f312e31322e378777696e646f7773
Nonce       : 5891392007347385592
Block Size  : 538

Es gibt viele andere Informationen, die erhalten werden können, also hoffe ich, dass Sie es versuchen werden.

4. Informationen zu der im Block erfassten Transaktion abrufen

Die EthBlock.Block-Klasse enthält Informationen zu den im Block erfassten Transaktionen und kann mit der Methode getTransactions abgerufen werden.

Als Referenz ist es ein Prozess, um Transaktionsinformationen abzurufen.

SampleBlock.java


public static List<TransactionObject> getTransactionList(BigInteger blockNumber) {

	List<TransactionObject> transactionList = new ArrayList<>();
	try {
		List<EthBlock.TransactionResult> txs = web3j.ethGetBlockByNumber(
				new DefaultBlockParameterNumber(blockNumber), true).send().getBlock().getTransactions();
			
		for(TransactionResult result: txs) {
			transactionList.add((TransactionObject)result.get());
		}
	}catch(IOException e) {
		e.printStackTrace();
	}
	return transactionList;
}

Ich denke, es gibt vielleicht einen besseren Weg, aber ich kann keine Informationen von der EthBlock.TransactionResult-Klasse erhalten. Da die TransactionObject-Klasse in TransactionResult enthalten ist, können Transaktionsinformationen über diese Klasse abgerufen werden.

Schließlich

Es ist einfacher als Sie denken, Block- und Transaktionsinformationen zu erhalten. In wenigen Stunden konnte ich einen Blockchain-Explorer für Ethereum erstellen.

Recommended Posts

[Ethereum] Blockinformationen mit web3j abrufen
Blockinformationen erhalten Sie mit dem Java SDK von Hyperledger Iroha
Erhalten Sie schnell Standortinformationen
[Swift5] Mit der Bibliothek 'SwiftyJSON' Array- (Einzel-) Informationen von JSON abrufen.
Holen Sie sich Android-Standortinformationen
Abrufen von Fehlerinformationen mithilfe von DefaultErrorAttributes und ErrorAttributeOptions in Spring Boot 2.3
Holen Sie sich Youtube-Kanalinformationen mit der Rails-App (mit Yt gem)
Holen Sie sich EXIF-Informationen in Java
Senden Sie signierte Transaktionen mit Web3j
Holen Sie sich Twitter-Bilder mit twitter4j
Löschen von Exif-Informationen mit Sanselan