web3J常用接口调用示例

/ 要点记录 / 5 条评论 / 321浏览

目前做以太坊节点交互的话主要还是用到web3.js,使用的人也比较多,当然java也有着相应的类库,就是web3J,但是目前网上的资料比较少,用的人也很少,在这里记录一下常用的接口方法,我这里用到的版本是3.2.0,新版本是否兼容旧版本目前并未尝试。

//以太坊节点RPC地址
private static final String RPC_URL = "";
//使用http服务连接节点构建web3j对象
private static final Web3j web3 = Web3j.build(new HttpService(RPC_URL));

/**
 * 创建钱包
 * @param password 生成的keyStore密码
 * @param outPath 生成的keyStore文件存放路径
 */
public static String createWallet(String password, String outPath) throws Exception {
    //创建新钱包KeyStore文件
    String fileName = WalletUtils.generateFullNewWalletFile(password,new File(outPath));
    //通过KeyStore文件加载钱包
    Credentials credentials = WalletUtils.loadCredentials(password,"outPath\\"+fileName);
    //通过钱包获取私钥
    BigInteger privateKey = credentials.getEcKeyPair().getPrivateKey();
    return privateKey.toString(16);
}

/**
 * 加载钱包对象(Credentials)四种方式
 * 1.通过私钥
 * 2.通过密钥对
 * 3.通过密码+keyStore路径
 * 4.通过密码+keyStore字符串
 */
public static Credentials loadCredentials(String privateKey){
    return Credentials.create(privateKey);
}
public static Credentials loadCredentials(ECKeyPair keyPair){
    return Credentials.create(keyPair);
}
public static Credentials loadCredentials(String password, String keyStoreUrl) throws IOException, CipherException {
    return WalletUtils.loadCredentials(password, keyStoreUrl);
}
public static Credentials loadCredentialsByString(String password, String keyStoreJson) throws IOException, CipherException {
    WalletFile walletFile = new ObjectMapper().readValue(keyStoreJson, WalletFile.class);
    return Credentials.create(Wallet.decrypt(password, walletFile));
}

/**
 * 查询以太币余额
 * @Param address 需要查询的钱包地址
 */
public static String getETHBalance(String address) throws IOException {
    BigDecimal banlance = new BigDecimal(web3.ethGetBalance(address, DefaultBlockParameter.valueOf("LATEST")).send().getBalance());
    return banlance.divide(new BigDecimal("10").pow(18)).toPlainString();
}

/**
 * ETH单笔转账
 * @param address to地址
 * @param count to数量
 * @param credentials from钱包对象
 */
public static TransactionReceipt transferETH(String address, BigDecimal count, Credentials credentials) throws Exception {
    return Transfer.sendFunds(web3, credentials, address, count, Convert.Unit.ETHER).send();
}

/**
 * 获取当前nonce
 * @param address 需要查询的钱包地址
 */
public static String getNonce(String address) throws IOException {
    return web3.ethGetTransactionCount(address,DefaultBlockParameterName.LATEST).send().getTransactionCount().toString();
}
  1. 这些接口确实不错的了

    回复
    1. @搜程快排精灵

      之前我找的时候资料很少,文档也残缺不全,有些接口还是翻源码找到的,所以就贴出来方便自己也方便大家啦

      回复
  2. 看起来非常厉害的样子,值得学习的地方很多啊,会继续关注博主的

    回复
    1. @找果树

      谢谢,希望以后可以一起交流

      回复
  3. 666666

    回复