日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【web3j】java调用链上合约里的方法

發布時間:2024/1/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【web3j】java调用链上合约里的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提前準備infura的鏈接,鏈上合約地址,合約里的方法名錢包私鑰(小狐貍插件里點賬戶地址右邊的三個點,再點賬戶詳情就看到了)。注:下面的示例調用了兩個get方法,傳參Uint

一、用到的包

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.3.1</version> </dependency> <!-- web3j --> <dependency><groupId>org.web3j</groupId><artifactId>core</artifactId><version>4.8.7</version> </dependency> <dependency><groupId>org.web3j</groupId><artifactId>codegen</artifactId><version>5.0.0</version> </dependency> <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version> </dependency>import org.web3j.abi.FunctionEncoder; import org.web3j.abi.FunctionReturnDecoder; import org.web3j.abi.TypeReference; import org.web3j.abi.datatypes.*; import org.web3j.protocol.Web3j; import org.web3j.protocol.core.DefaultBlockParameterName; import org.web3j.protocol.core.methods.request.Transaction; import org.web3j.protocol.core.methods.response.EthCall; import org.web3j.protocol.http.HttpService;import java.math.BigInteger; import java.util.Collections; import java.util.List;

二、代碼

/*** @author maomo* @version 1.0.0* @date 2022-10-31**/ public class Web3Utils {static Web3j web3j = Web3j.build(new HttpService("https://goerli.infura.io/v3/***************"));/** 鏈上合約地址 */public static final String CONTRACT_ADDRESS = "***************";/** 沒有擁有者時返回的地址 */public static String DEFAULT_OWNER = "0x0000000000000000000000000000000000000000";/** 方法名,通過tokenId獲取ownerAddress(這是erc721自帶的方法) */public static String OWNER_OF = "ownerOf";/** 方法名,通過nftId獲取ownerAddress(這是合約里自定義的方法) */public static String GET_OWNER_BY_NFT_ID = "getOwnerByNFTId";public static void main(String[] args) {System.out.println("ownerOf:"+new Web3Utils().getOwnerByTokenId(1));System.out.println("getOwnerByNFTId:"+new Web3Utils().getOwnerByNftId(1));}/*** 調用合約的只讀方法,無需gas* @param functionName 合約方法名* @param param 參數* @throws Exception 異常*/public String getValue(String functionName,String param) {try {Function function = new Function(functionName,Collections.singletonList(new Uint(new BigInteger(param))),Collections.singletonList(new TypeReference<Address>() {}));String encodedFunction = FunctionEncoder.encode(function);EthCall response = web3j.ethCall(Transaction.createEthCallTransaction(null, contractAddress, encodedFunction),DefaultBlockParameterName.LATEST).sendAsync().get();List<Type> results = FunctionReturnDecoder.decode(response.getValue(), function.getOutputParameters());Type type = results.get(0);String value = (String) type.getValue();if(ObjectUtils.isEmpty(value) || DEFAULT_OWNER.equals(value)){return null;}return (String)type.getValue();}catch (Exception ignore){return null;}}}

總結

以上是生活随笔為你收集整理的【web3j】java调用链上合约里的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。