[JAVA] [Ethereum] Obtenir des informations de bloc à l'aide de web3j

Contenu de l'article

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.

environnement

Obtenir des informations sur le bloc

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

  1. Obtenez le dernier bloc et affichez le contenu
  2. Obtenez le bloc avec le numéro de bloc spécifié et affichez le contenu Ce seront ces deux-là.

1. Obtenez les dernières informations sur le bloc et affichez le contenu

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.

2. Obtenez le bloc avec le numéro de bloc spécifié et affichez le contenu

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.

3. Résultat de l'exécution

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.

4. Obtenez des informations sur la transaction capturée dans le bloc

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.

finalement

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

[Ethereum] Obtenir des informations de bloc à l'aide de web3j
Résumé Il n'y a rien de particulier. Dois-je y prêter attention? .. .. J'ai ressenti cela, alors j'ai écrit un article. Si vous avez des commentaires, veuillez. Obtenez des informations de bloc avec le SDK Java de Python, Python3, Glossy Hyperledger Iroha
Obtenez rapidement des informations de localisation
[Swift5] Obtenez des informations de tableau (individuelles) à partir de JSON à l'aide de la bibliothèque'SwiftyJSON '
Obtenir des informations de localisation Android
Obtenez des informations d'erreur à l'aide de DefaultErrorAttributes et ErrorAttributeOptions dans Spring Boot 2.3
Obtenez des informations sur la chaîne Youtube avec l'application Rails (en utilisant Yt gem)
Obtenir des informations EXIF en Java
Envoyer des transactions signées à l'aide de Web3j
Obtenez des images Twitter avec twitter4j
Suppression des informations Exif à l'aide de sanselan