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.
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
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.
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.
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.
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.
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