使用Web3J与第三方合约交互——批量转账

原文地址:https://www.jianshu.com/p/fe92e06f2fea

之前使用NodeJs与智能合约交互,都是访问的自己部署的合约。最近要对线上第三方合约进行转账操作,人数比较多,一笔笔操作起来手指都点断了还容易出错。既然代币Token都遵守ERC20协议,肯定有统一的Transfer(转账)方法供客户端调用,那么编写程序实现自动转账应该可以实现,去查了相关资料发现web3j是不错的选择。

1、web3j简介

轻量级客户端与以太坊交互的Java库。

2、交互方式

既然是调用第三方合约那么肯定需要知道合约地址,合约地址定义了到哪里去访问合约;
ABI(Application Binary Interface): 应用程序二进制接口,定义了智能合约提供的方法功能

3、步骤

  1. 智能合约的地址和ABI的获取可以直接在 https://etherscan.io/ 查询获得。

    image.png

image.png

image.png

若是无法获取到ABI接口,也可以使用solc编译生产bin和abi文件。

solcjs lookCoin.sol  --bin --abi --optimize -o ./lookCoin
  1. 通过abi接口文件使用web3j命令行工具生成Java代理类(下载地址 https://github.com/web3j/web3j/releases/tag/v3.2.0
web3j solidity generate --javaTypes key.bin key.abi -o KeySmartCode.java -p com.joshua.eth

(生产代理类时可以指定包路径和类名)

  1. 生产代理类后可以直接使用Java代码调用API来调用智能合约。
        // 创建Web3J
        Web3j web3 = Web3j.build(new HttpService("http://127.0.0.1:8545"));
        // 加载钱包
        Credentials credentials = WalletUtils.loadCredentials("钱包密码", "钱包路径");
        // 加载合约
        Key keySCode = Key.load(SMART_CONTRACT_ADDRESS, web3, credentials, BigInteger.valueOf(27000000000L), BigInteger.valueOf(250000));
        // 调用转账方法
        TransactionReceipt receipt = keySCode.transfer("目的账户", BigInteger.valueOf(1)).send();
        // 打印交易Hash
        System.out.println(receipt.getTransactionHash());

这样一来,便可以使用程序完成批量转账操作。

后来研究发现,使用NodeJs直接调用Web3也可以实现对应功能,不过还是对Java更熟悉一些,就采用了Java的方式。



作者:程序员大叔日记
链接:https://www.jianshu.com/p/fe92e06f2fea
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

猜你喜欢

转载自blog.csdn.net/cn_yaojin/article/details/82380772