Ethereum-Wallet-Dapp
如何使用 web3j 通過其地址訪問 Java 應用程序中的乙太坊智能合約(已部署)?
我有一個現有的智能合約地址、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();