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.
In der Befehlszeile finden Sie ein Tool zum Konvertieren von Sol-Dateien in Java-Dateien. Laden Sie es herunter.
Die Einstellung ist abgeschlossen, wenn die folgende Anzeige erscheint.
_ _____ _ _
| | |____ (_) (_)
__ _____| |__ / /_ _ ___
\ \ /\ / / _ \ '_ \ \ \ | | | / _ \
\ V V / __/ |_) |.___/ / | _ | || (_) |
\_/\_/ \___|_.__/ \____/| |(_)|_| \___/
_/ |
|__/
Usage: web3j version|wallet|solidity ...
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 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.
Recommended Posts