[JAVA] Comment exécuter un contrat avec web3j

Contenu de l'article

C'est une méthode pour exécuter le contrat créé par solidity en utilisant web3j. Apprenez à convertir un fichier sol en classe Java. Le contrat utilisé dans cet article utilise le contenu décrit dans l'article suivant.

Comment convertir des contrats de solidité en classes de contrat Java

code

sample.java


try {
  SampleGasProvider gasProvider = new SampleGasProvider(BigInteger.valueOf(500), BigInteger.valueOf(200000));

  Addition contract = Addition.deploy(
      web3j,
      credentials,
      gasProvider
      ).send();
  //Sortir l'adresse du contrat
  System.out.println("contract address: " + contract.getContractAddress());
  //Appel de méthode (pas de transaction)
  System.out.println("get: " + contract.get().send());
  System.out.println("add: " + contract.add(BigInteger.valueOf(10)).sendAsync());
  System.out.println("get: " + contract.get().send());

} catch (Exception e) {
  e.printStackTrace();
}

SampleGasProvider.java


package jp.ethereum;

import java.math.BigInteger;
import org.web3j.tx.gas.ContractGasProvider;

public class SampleGasProvider implements ContractGasProvider{

  private BigInteger gasPrice;
  private BigInteger gasLimit;

  public SampleGasProvider(BigInteger gasPrice, BigInteger gasLimit) {
    this.gasPrice = gasPrice;
    this.gasLimit = gasLimit;
  }
  @Override
  public BigInteger getGasPrice(String contractFunc) {
    return this.gasPrice;
  }
  @Override
  public BigInteger getGasPrice() {
    return this.gasPrice;
  }
  @Override
  public BigInteger getGasLimit(String contractFunc) {
    return this.gasLimit;
  }
  @Override
  public BigInteger getGasLimit() {
    return this.gasLimit;
  }
}

Le contenu du code est simple. Tout d'abord, déployez le contrat. Une fois ce processus terminé, une transaction de déploiement du contrat est créée, remplie dans le bloc, puis terminée.

Sample.java


  Addition contract = Addition.deploy(
      web3j,
      credentials,
      gasProvider
      ).send();

Résultat de l'exécution (console geth)

INFO [09-16|17:19:41.983] Submitted contract creation              fullhash=0xd169416410c2e6e7bdc02a2a27384ed2425e1433f39117a3810675fcfed85353 contract=0xf5ad7542173e8944D1aE16B4394eAA34cfdA4814

Puis exécutez le contrat.

Sample.java


  System.out.println("get: " + contract.get().send());
  System.out.println("add: " + contract.add(BigInteger.valueOf(10)).sendAsync());

Dans cet exemple, le processus get du contrat est appelé en premier. Étant donné que get fait uniquement référence à la valeur, aucune transaction n'est créée et une réponse est renvoyée immédiatement.

Étant donné que le processus d'ajout suivant est le processus de mise à jour de la valeur, une transaction est créée. Puisque nous utilisons "send Async", nous obtenons une réponse avant qu'elle ne soit remplie dans le bloc. Dans cet exemple, la sortie sera la suivante.

add: java.util.concurrent.CompletableFuture@18271936[Not completed]

Si vous devez attendre que le traitement soit capturé dans le bloc, apportez les modifications suivantes:

Sample.java


  System.out.println("add: " + contract.add(BigInteger.valueOf(10)).send());

Contrat de charge

Le code ci-dessus était de déployer et d'exécuter le contrat, mais il existe également un moyen d'exécuter un contrat qui a déjà été déployé.

Sample.java


Addition contract = Addition.load(
  address,
  web3j,
  credentials,
  gasProvider
);

Le déploiement et les arguments sont presque les mêmes, mais le premier argument est l'adresse du contrat. (Y compris 0x) Les opérations suivantes ne changeront pas du tout.

Recommended Posts

Comment exécuter un contrat avec web3j
[Ethereum] Comment exécuter un contrat en utilisant web3j-Part 2-
Comment trier une liste à l'aide du comparateur
Comment exécuter une méthode et simuler avec JUnit
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
Comment supprimer un contrôleur, etc. à l'aide d'une commande
Comment convertir un contrat de solidité en une classe de contrat Java
Comment générer une clé primaire à l'aide de @GeneratedValue
Comment laisser un commentaire
Comment supprimer des éléments d'adaptateur personnalisés à l'aide d'un modèle personnalisé
[Java] Comment exécuter des tâches régulièrement
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment insérer une vidéo
Comment créer une méthode
Comment autoriser à l'aide de graphql-ruby
Comment générer des valeurs de tableau sans utiliser d'instruction for
Comment joindre une table sans utiliser DBFlute et SQL
Comment s'inscrire en tant que client dans Square à l'aide de Tomcat
Comment créer un conteneur Java
Comment signer Minecraft MOD
Comment créer un pilote JDBC
[Swift] Comment envoyer une notification
Comment créer un écran de démarrage
Comment créer un plug-in Jenkins
Comment faire un projet Maven
Comment créer un tableau Java
Comment exécuter l'IRB de Ruby (Ruby interactif)
Comment créer CloudStack à l'aide de Docker
Comment créer un fichier jar et un fichier war à l'aide de la commande jar
Comment créer un hinadan pour un projet Spring Boot à l'aide de SPRING INITIALIZR
[Rails 6] Comment créer un écran de saisie de formulaire dynamique à l'aide de cocoon
Comment faire un diamant révolutionnaire en utilisant Java pour déclaration wwww
Comment créer un résumé de calendrier Java
Un mémorandum sur l'utilisation d'Eclipse
[Rails] Comment télécharger des images à l'aide de Carrierwave
[Basique] Comment écrire un auto-apprentissage Dockerfile ②
Comment insérer une vidéo dans Rails
[Java] Comment calculer l'âge à l'aide de LocalDate
Comment ajouter un nouveau hachage / tableau
[Introduction à Java] Comment écrire un programme Java
Comment créer un référentiel Maven pour 2020
Comment créer un robot Discord (Java)
[Swift5] Comment créer un écran de démarrage
[rails] Comment créer un modèle partiel
[Swift5] Comment mettre en œuvre une animation à l'aide de "lottie-ios"
Pour implémenter la publication d'images à l'aide de rails
Comment publier une bibliothèque dans jCenter
[SpringBoot] Comment écrire un test de contrôleur
Comment insérer des icônes à l'aide de Font awesome
Comment renvoyer une valeur du modèle au contrôleur en utilisant le protocole [Swift5]