Je faisais quelque chose comme un explorateur de blockchain en utilisant Web3j, mais j'étais un peu inquiet de savoir comment obtenir le bloc, je vais donc laisser une note.
Immédiatement, voici le code réalisé avec l'exemple.
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());
}
}
Le contenu du code est
Tout d'abord, obtenez les dernières informations.
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());
}
C'est un argument de ethGetBlockByNumber, Premier argument: Information du bloc à acquérir Deuxième argument: s'il faut acquérir des informations détaillées sur les transactions Ce sera.
La classe EthBlock contient une classe interne appelée Block. Des informations de base sur un bloc peuvent être obtenues à l'aide de la méthode getter de la classe Block.
Obtenez le bloc en spécifiant le numéro de bloc 100.
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;
}
La méthode utilisée pour obtenir les dernières informations de bloc est la même. Le premier argument est DefaultBlockParameter.valueOf (blockNumber) au lieu de "DefaultBlockParameterName.LATEST".
Tout ce que vous avez à faire est de définir le numéro de bloc que vous souhaitez obtenir dans l'argument de DefaultBlockParameter.valueOf (blockNumber) avec le type BigInteger.
Le résultat de l'exécution de la méthode principale du premier code
-------------------------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
Il y a beaucoup d'autres informations qui peuvent être obtenues, alors j'espère que vous allez essayer.
La classe EthBlock.Block contient des informations sur les transactions capturées dans le bloc et peuvent être obtenues à l'aide de la méthode getTransactions.
Pour référence, il s'agit d'un processus pour obtenir des informations de transaction.
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;
}
Je pense qu'il y a peut-être un meilleur moyen, mais je ne peux pas obtenir d'informations de la classe EthBlock.TransactionResult. Étant donné que la classe TransactionObject est conservée dans TransactionResult, il est possible d'obtenir des informations de transaction via cette classe.
Il est plus facile que vous ne le pensez d'obtenir des informations de blocage et de transaction, J'ai pu créer un explorateur de blockchain pour Ethereum en quelques heures.
Recommended Posts