web3j调用合约
接触合约很久了,之前没怎么调用,这次碰到自己去调用而且还得传byte32位的参数开始犯难了!
看了很多csdn的调用,怎么说,觉得有点草率,反正就是不符合我要的结果吧。
1. 创建web3j对象和凭证对象//创建web3j对象
Web3j web3j = Web3j.build(new HttpService("https://mainnet.infura.io/v3/your-project-id"));
//创建凭证对象,用于调用智能合约的方法
Credentials credentials = Credentials.create("Your-Private-Key");
2. 加载智能合约代理
//通过智能合约地址和web3j对象创建智能合约代理对象
String contractAddress = "0x123456789abcdef";
Contract contract = Contract.load(contractAddress, web3j, credentials, GAS_PRICE, GAS_LIMIT);
3.调用合约
contract.mint(param).send();
web3j传参
一般web3j使用abi调用合约方法,生成java可调用的abi就行了
举个例子:
这个是erc721生成出来的方法有获取余额和授权方法。
调用也比较简单:
接下来这个是传byte32参数:
这是OpenZeppelin 3.0新增的AccessControl合约,用于一站式访问控制。
使用了多种办法去处理这个参数都没有得到有效的返回。
查了一下,合约内是使用16进制的数据进行比较,也就是说需要将数据处理成16进制的数据再进行转换为byte32位数据。
直接贴出处理转化为byte32位数据吧:
String paramValue = "0x11111"; byte[] byteArr = Numeric.hexStringToByteArray(paramValue);