[JAVA] So führen Sie einen Vertrag mit web3j aus

Artikelinhalt

Es ist eine Methode, um den durch Solidität erstellten Vertrag mit web3j auszuführen. Erfahren Sie, wie Sie eine Sol-Datei in eine Java-Klasse konvertieren. Der in diesem Artikel verwendete Vertrag verwendet den im folgenden Artikel beschriebenen Inhalt.

So konvertieren Sie Soliditätsverträge in Java-Vertragsklassen

Code

sample.java


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

  Addition contract = Addition.deploy(
      web3j,
      credentials,
      gasProvider
      ).send();
  //Geben Sie die Adresse des Vertrags aus
  System.out.println("contract address: " + contract.getContractAddress());
  //Methodenaufruf (keine Transaktion)
  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;
  }
}

Der Inhalt des Codes ist einfach. Stellen Sie zunächst den Vertrag bereit. Nach Abschluss dieses Vorgangs wird eine Transaktion zum Bereitstellen des Vertrags erstellt, in den Block eingefügt und anschließend abgeschlossen.

Sample.java


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

Ausführungsergebnis (Geth-Konsole)

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

Dann führen Sie den Vertrag aus.

Sample.java


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

In diesem Beispiel wird zuerst der Abrufprozess des Vertrags aufgerufen. Da get nur auf den Wert verweist, wird keine Transaktion erstellt und sofort eine Antwort zurückgegeben.

Da der nächste Additionsprozess das Aktualisieren des Werts ist, wird eine Transaktion erstellt. Da wir "send Async" verwenden, erhalten wir eine Antwort, bevor sie in den Block aufgenommen wird. In diesem Beispiel lautet die Ausgabe wie folgt.

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

Wenn Sie warten müssen, bis die Verarbeitung im Block erfasst wurde, nehmen Sie die folgenden Änderungen vor:

Sample.java


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

Vertrag laden

Der obige Code diente zum Bereitstellen und Ausführen des Vertrags. Es gibt jedoch auch eine Möglichkeit, einen Vertrag bereitzustellen, der bereits bereitgestellt wurde.

Sample.java


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

Die Bereitstellung und die Argumente sind fast gleich, aber das erste Argument ist die Adresse des Vertrags. (Einschließlich 0x) Nachfolgende Operationen werden sich überhaupt nicht ändern.

Recommended Posts

So führen Sie einen Vertrag mit web3j aus
[Ethereum] So führen Sie einen Vertrag mit web3j-Teil 2 aus
So sortieren Sie eine Liste mit Comparator
Ausführen einer Methode und Verspotten mit JUnit
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
So löschen Sie einen Controller usw. mit einem Befehl
So konvertieren Sie einen Soliditätsvertrag in eine Java-Vertragsklasse
So generieren Sie einen Primärschlüssel mit @GeneratedValue
Wie hinterlasse ich einen Kommentar?
So löschen Sie benutzerdefinierte Adapterelemente mithilfe eines benutzerdefinierten Modells
[Java] Wie man Aufgaben regelmäßig ausführt
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So fügen Sie ein Video ein
So erstellen Sie eine Methode
So autorisieren Sie mit graphql-ruby
So geben Sie Array-Werte ohne Verwendung einer for-Anweisung aus
So verbinden Sie eine Tabelle ohne DBFlute und SQL
So registrieren Sie sich mit Tomcat als Kunde in Square
So erstellen Sie einen Java-Container
Wie unterschreibe ich Minecraft MOD?
So erstellen Sie einen JDBC-Treiber
[Swift] So senden Sie eine Benachrichtigung
So erstellen Sie einen Begrüßungsbildschirm
So erstellen Sie ein Jenkins-Plug-In
Wie erstelle ich ein Maven-Projekt?
So erstellen Sie ein Java-Array
Wie man Ruby's irb ausführt (interaktiver Ruby)
So erstellen Sie CloudStack mit Docker
So erstellen Sie eine JAR-Datei und eine War-Datei mit dem Befehl jar
So erstellen Sie mit SPRING INITIALIZR einen Hinadan für ein Spring Boot-Projekt
[Rails 6] So erstellen Sie mit cocoon einen dynamischen Formular-Eingabebildschirm
Wie man einen revolutionären Diamanten mit Java für Aussage macht wwww
So erstellen Sie eine Java-Kalenderzusammenfassung
Ein Memorandum zur Verwendung von Eclipse
[Rails] So laden Sie Bilder mit Carrierwave hoch
[Basic] So schreiben Sie ein Dockerfile Selbstlernend ②
So fügen Sie ein Video in Rails ein
[Java] So berechnen Sie das Alter mit LocalDate
So fügen Sie einen neuen Hash / Array hinzu
[Einführung in Java] So schreiben Sie ein Java-Programm
So erstellen Sie ein Maven-Repository für 2020
Wie erstelle ich einen Discord Bot (Java)
[Swift5] So erstellen Sie einen Begrüßungsbildschirm
[Rails] So erstellen Sie eine Teilvorlage
[Swift5] So implementieren Sie Animationen mit "lottie-ios"
So implementieren Sie die Image-Veröffentlichung mithilfe von Schienen
So veröffentlichen Sie eine Bibliothek in jCenter
[SpringBoot] So schreiben Sie einen Controller-Test
So fügen Sie Symbole mit Font awesome ein
Zurückgeben eines Werts vom Modell an den Controller mithilfe des [Swift5] -Protokolls