Web3j 如何无需Credentials凭证读取已部署的智能合约数据
解决方案
合约被view/pure修饰的读方法本质是调用以太坊JSON-RPC的eth_call接口,不需要发起链上交易、不需要签名,因此不需要传入钱包凭证。Web3j提供了专门的只读事务管理器实现该需求,你只需要调整代码里的事务管理器实现即可。
修改后的代码
import org.web3j.tx.ReadOnlyTransactionManager; Web3j web3 = Web3j.build(new HttpService("https://testnet-endpoint-rpc.com")); // 直接使用只读事务管理器,无需传入Credentials ReadOnlyTransactionManager readTxManager = new ReadOnlyTransactionManager(web3); MySmartContract contract = MySmartContract.load( "0x73292b80f99ffdc4e9a908865ce1d35fde7b736f", // 智能合约地址 web3, readTxManager, new DefaultGasProvider() ); // 读取合约数据逻辑不变 String contractName = contract.contractName(BigInteger.valueOf(0)).send();
注意事项
- 该事务管理器仅支持调用
view/pure修饰的读方法,若调用需要修改链上状态的写方法会直接抛出异常 - 无需再加载钱包密钥库、导入钱包凭证相关代码,可避免私钥泄露风险
内容的提问来源于stack exchange,提问作者WHOATEMYNOODLES
相关产品推荐
相关产品推荐

