Ethereum-Wallet-Dapp

如何使用 web3j 通過其地址訪問 Java 應用程序中的乙太坊智能合約(已部署)?

  • September 24, 2020

我有一個現有的智能合約地址、abi、二進制程式碼。我需要從 Java 應用程序訪問它。是否可以在不創建 Java 包裝類的情況下執行此操作?

使用 ERC20 Java 類,然後在將其從 remix ide 部署到任何網路後載入您的合約,這是我的程式碼的一小段:

public class TokenAPI {
@Path("/erc")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Erc20Controller getErcTokenInfo() throws Exception{
   Web3j web3 = Web3j.build(new HttpService("HTTP:YourNetwrok"));
   Credentials creds = Credentials.create("b1427aa43d62f7592feff8874d20fa42d9dbc96005d2a1c8a5cfdd55ebbfca62");
   String contractAddress = "0x82b575F93bEffea73C3C3bb776C82F8D67cb064e"; // The deployed contract address, taken

   ERC20 javaToken = ERC20.load(contractAddress, web3, creds, new DefaultGasProvider());

   Erc20Controller erc=new Erc20Controller();
   erc.setTotalSupply(javaToken.totalSupply().send());
   erc.setTokenSymbol(javaToken.symbol().send());
   erc.setTotalDecimal(javaToken.decimals().send());
   erc.setTokenName(javaToken.name().send());
   erc.setTotalBalanceOnDeployedAccount(javaToken.balanceOf("0x82b575F93bEffea73C3C3bb776C82F8D67cb064e").send());
   return erc;
}

您可以這樣做,請參閱此處的文件 von web3j https://docs.web3j.io/transactions.html

在頁面下方的交易部分

1-創建智能合約。

2- 使用智能合約進行交易。

3-查詢智能合約的狀態。

通過 1 和 2 不要忘記簽署交易。這裡有一個簡單的例子:

EthGetTransactionCount ethGetTransactionCount = web3j
               .ethGetTransactionCount("account-address", DefaultBlockParameterName.LATEST).send();
BigInteger nonce = ethGetTransactionCount.getTransactionCount();

// Encode the function
final Function function = new Function(
               "method-name example transfer",
               Arrays.<Type>asList(new org.web3j.abi.datatypes.Address("first parameter example fromAddress"),
               new org.web3j.abi.datatypes.Address("example toAddress"),
               new org.web3j.abi.datatypes.generated.Int256("example value")),
               Collections.<TypeReference<?>>emptyList());
String encodedFunction = FunctionEncoder
               .encode(contractFunctionProvider.getFunction(function);

// Create new Transaction
RawTransaction rawTransaction = RawTransaction.createTransaction(nonce, GASPRICE, GASLIMIT, "contract address", BigInteger.ZERO, encodedFunction);

// Sign the Transaction
byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
String hexValue = Numeric.toHexString(signedMessage);

// Send the Transaction
org.web3j.protocol.core.methods.response.EthSendTransaction transactionResponse = web3j
               .ethSendRawTransaction(hexValue).sendAsync().get();

引用自:https://ethereum.stackexchange.com/questions/41377