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

之前使用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的方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。