So konvertieren Sie einen Soliditätsvertrag in eine Java-Vertragsklasse

Artikelinhalt

Wenn Sie den Vertrag verwenden möchten, der in Solidität mit web3j verwendet wird, müssen Sie Java-Klassen verwenden, um den Vertrag auszuführen.

Natürlich ist es möglich, eine Klasse zu erstellen, die diesen Vertrag von Grund auf neu betreibt, aber ich werde eine Notiz hinterlassen, da es eine einfache Möglichkeit gab, ihn zu erstellen.

Umgebung

Laden Sie Web3j herunter

In der Befehlszeile finden Sie ein Tool zum Konvertieren von Sol-Dateien in Java-Dateien. Laden Sie es herunter.

web3j

  1. Am Linkziel befindet sich eine Zip-Datei. Laden Sie sie herunter.
  2. Entpacken Sie die Zip-Datei und legen Sie sie in einem beliebigen Verzeichnis ab.
  3. Übergeben Sie den Pfad zum bin-Verzeichnis des platzierten Verzeichnisses.
  4. Geben Sie an der Eingabeaufforderung web3j ein.

Die Einstellung ist abgeschlossen, wenn die folgende Anzeige erscheint.


              _      _____ _     _
             | |    |____ (_)   (_)
__      _____| |__      / /_     _   ___
\ \ /\ / / _ \ '_ \     \ \ |   | | / _ \
 \ V  V /  __/ |_) |.___/ / | _ | || (_) |
  \_/\_/ \___|_.__/ \____/| |(_)|_| \___/
                         _/ |
                        |__/
Usage: web3j version|wallet|solidity ...

Erstellen Sie bin- und abi-Dateien

Bereiten Sie zuerst die Sol-Datei vor.

addition.sol


pragma solidity ^0.4.24;

contract Addition{
  int num = 0;
  function add(int a) public {
    num += a;
  }
  function get() public view returns(int)  {
    return num;
  }
}

Kompilieren Sie diese Sol-Datei und extrahieren Sie bin und abi.

solc --bin addition.sol > addition.bin
solc --abi addition.sol > addition.abi

Die Ausgabedateien lauten wie folgt.

addition.bin


======= addition.sol:Addition =======
Binary: 
60806040526000805534801561001457600080fd5b5060e7806100236000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c14604e57806387db03b7146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a9565b005b60008054905090565b806000808282540192505081905550505600a165627a7a723058200522274b97a5967f28327168f4654fbd3921238ed6de8e155c966f7dad168e020029

addition.abi


======= addition.sol:Addition =======
Contract JSON ABI 
[{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"int256"}],"name":"add","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

Löschen Sie für diese beiden Dateien die ersten Zeilen (bis zu ~ Binary: / ~ JSON ABI), da sie für die zukünftige Verarbeitung nicht erforderlich sind.

Erstellen Sie eine Vertragsklasse

Erstellen Sie mit dem folgenden Befehl

web3j solidity generate -a=addition.abi -b=addition.bin -o=src -p=jp.ethereum.contracts

Ausführungsergebnis


              _      _____ _     _
             | |    |____ (_)   (_)
__      _____| |__      / /_     _   ___
\ \ /\ / / _ \ '_ \     \ \ |   | | / _ \
 \ V  V /  __/ |_) |.___/ / | _ | || (_) |
  \_/\_/ \___|_.__/ \____/| |(_)|_| \___/
                         _/ |
                        |__/

Generating jp.ethereum.contracts.Addition ... File written to src

Wenn dieses Ergebnis erhalten wird, ist die Ausgabe abgeschlossen. Es wird in das durch die Option "-O" angegebene Verzeichnis ausgegeben. In diesem Fall wird das durch "-p" angegebene Paket "jp.ethereum.contracts" im Verzeichnis src erstellt, und Addtion.java wird unter diesem Paket erstellt.

addtion.java


package jp.ethereum.contracts;

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Function;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.generated.Int256;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.RemoteCall;
import org.web3j.protocol.core.RemoteFunctionCall;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.tx.Contract;
import org.web3j.tx.TransactionManager;
import org.web3j.tx.gas.ContractGasProvider;

/**
 * <p>Auto generated code.
 * <p><strong>Do not modify!</strong>
 * <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>,
 * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the 
 * <a href="https://github.com/web3j/web3j/tree/master/codegen">codegen module</a> to update.
 *
 * <p>Generated with web3j version 4.5.0.
 */
public class Addition extends Contract {
    private static final String BINARY = "60806040526000805534801561001457600080fd5b5060e7806100236000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c14604e57806387db03b7146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a9565b005b60008054905090565b806000808282540192505081905550505600a165627a7a723058200522274b97a5967f28327168f4654fbd3921238ed6de8e155c966f7dad168e020029\r\n";

    public static final String FUNC_GET = "get";

    public static final String FUNC_ADD = "add";

    @Deprecated
    protected Addition(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    protected Addition(String contractAddress, Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        super(BINARY, contractAddress, web3j, credentials, contractGasProvider);
    }

    @Deprecated
    protected Addition(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    protected Addition(String contractAddress, Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        super(BINARY, contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public RemoteFunctionCall<BigInteger> get() {
        final Function function = new Function(FUNC_GET, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteFunctionCall<TransactionReceipt> add(BigInteger a) {
        final Function function = new Function(
                FUNC_ADD, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Int256(a)), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    @Deprecated
    public static Addition load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new Addition(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    @Deprecated
    public static Addition load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new Addition(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public static Addition load(String contractAddress, Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        return new Addition(contractAddress, web3j, credentials, contractGasProvider);
    }

    public static Addition load(String contractAddress, Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return new Addition(contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static RemoteCall<Addition> deploy(Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        return deployRemoteCall(Addition.class, web3j, credentials, contractGasProvider, BINARY, "");
    }

    @Deprecated
    public static RemoteCall<Addition> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(Addition.class, web3j, credentials, gasPrice, gasLimit, BINARY, "");
    }

    public static RemoteCall<Addition> deploy(Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return deployRemoteCall(Addition.class, web3j, transactionManager, contractGasProvider, BINARY, "");
    }

    @Deprecated
    public static RemoteCall<Addition> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(Addition.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, "");
    }
}

Diese Klasse ist erforderlich, wenn ein Vertrag mit Web3j ausgeführt wird. Es gibt viele veraltete Methoden, seien Sie also vorsichtig, wenn Sie sie verwenden.

Referenz

web3j docs

Recommended Posts

So konvertieren Sie einen Soliditätsvertrag in eine Java-Vertragsklasse
Verwendung der Java-Klasse
So konvertieren Sie Java Base
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So konvertieren Sie eine Datei in ein Byte-Array in Java
So erstellen Sie einen Java-Container
So zerlegen Sie eine Java-Klassendatei
So dekompilieren Sie eine Java-Klassendatei
Verwendung von Klassenmethoden [Java]
So erstellen Sie ein Java-Array
[Java] Verwendung der Math-Klasse
So führen Sie einen Vertrag mit web3j aus
[Java] Verwendung der File-Klasse
Wie erstelle ich einen Discord Bot (Java)
[Verarbeitung × Java] Verwendung der Klasse
Verwendung der Java Scanner-Klasse (Hinweis)
[Java] Verwendung der Calendar-Klasse
[Java] Verwendung der FileReader-Klasse und der BufferedReader-Klasse
[Android] So konvertieren Sie eine Zeichenfolge in resourceId
So zeigen Sie eine Webseite in Java an
[Ethereum] So führen Sie einen Vertrag mit web3j-Teil 2 aus
So erstellen Sie eine Klasse, die Klasseninformationen erbt
So erhalten Sie eine Klasse von Element in Java
So finden Sie heraus, welche Java-Version der Klassendatei kompiliert wurde
[Java] Wie man mit der String-Klasse an die Spitze eines bestimmten Strings kommt
[Java] Verwendung der Kalenderklasse und der Datumsklasse
[Java] So konvertieren Sie ein Element eines Array vom Typ String in einen Int-Typ
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
So springen Sie von Eclipse Java zu einer SQL-Datei
java: Wie schreibe ich eine generische Typliste? [Hinweis]
[Java] Wie man aus Janken rauskommt (entspricht Paiza Rang A)
So erstellen Sie einen Daten-URI (base64) in Java
[Java] So erhalten Sie eine Anfrage per HTTP-Kommunikation
[Java] Wie man Aufgaben regelmäßig ausführt
[Java] So schneiden Sie eine Zeichenfolge zeichenweise aus
[Java] So löschen Sie ein bestimmtes Zeichen aus einer Zeichenfolge
[Java] So unterbrechen Sie eine Zeile mit StringBuilder
So senken Sie die Java-Version
[Java] Verwendung von Map
So deinstallieren Sie Java 8 (Mac)
Verwendung von Java Optional
So minimieren Sie Java-Images
Wie schreibe ich einen Java-Kommentar
Wie hinterlasse ich einen Kommentar?
[Java] Verwendung von removeAll ()
[Java] So zeigen Sie Wingdings an
Verwendung von Java Map
So legen Sie Java-Konstanten fest
Verwendung von Java-Variablen
[Java] Konvertiert ArrayList in Array
[Java] So implementieren Sie Multithreading