使用Web3J與第三方合約交互——批量轉(zhuǎn)賬

之前使用NodeJs與智能合約交互,都是訪(fǎng)問(wèn)的自己部署的合約。最近要對(duì)線(xiàn)上第三方合約進(jìn)行轉(zhuǎn)賬操作,人數(shù)比較多,一筆筆操作起來(lái)手指都點(diǎn)斷了還容易出錯(cuò)。既然代幣Token都遵守ERC20協(xié)議,肯定有統(tǒng)一的Transfer(轉(zhuǎn)賬)方法供客戶(hù)端調(diào)用,那么編寫(xiě)程序?qū)崿F(xiàn)自動(dòng)轉(zhuǎn)賬應(yīng)該可以實(shí)現(xiàn),去查了相關(guān)資料發(fā)現(xiàn)web3j是不錯(cuò)的選擇。

1、web3j簡(jiǎn)介

輕量級(jí)客戶(hù)端與以太坊交互的Java庫(kù)。

2、交互方式

既然是調(diào)用第三方合約那么肯定需要知道合約地址,合約地址定義了到哪里去訪(fǎng)問(wèn)合約;
ABI(Application Binary Interface): 應(yīng)用程序二進(jìn)制接口,定義了智能合約提供的方法功能

3、步驟

  1. 智能合約的地址和ABI的獲取可以直接在 https://etherscan.io/ 查詢(xún)獲得。
    image.png
image.png
image.png

若是無(wú)法獲取到ABI接口,也可以使用solc編譯生產(chǎn)bin和abi文件。

solcjs lookCoin.sol  --bin --abi --optimize -o ./lookCoin
  1. 通過(guò)abi接口文件使用web3j命令行工具生成Java代理類(lèi)(下載地址 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

(生產(chǎn)代理類(lèi)時(shí)可以指定包路徑和類(lèi)名)

  1. 生產(chǎn)代理類(lèi)后可以直接使用Java代碼調(diào)用API來(lái)調(diào)用智能合約。
        // 創(chuàng)建Web3J
        Web3j web3 = Web3j.build(new HttpService("http://127.0.0.1:8545"));
        // 加載錢(qián)包
        Credentials credentials = WalletUtils.loadCredentials("錢(qián)包密碼", "錢(qián)包路徑");
        // 加載合約
        Key keySCode = Key.load(SMART_CONTRACT_ADDRESS, web3, credentials, BigInteger.valueOf(27000000000L), BigInteger.valueOf(250000));
        // 調(diào)用轉(zhuǎn)賬方法
        TransactionReceipt receipt = keySCode.transfer("目的賬戶(hù)", BigInteger.valueOf(1)).send();
        // 打印交易Hash
        System.out.println(receipt.getTransactionHash());

這樣一來(lái),便可以使用程序完成批量轉(zhuǎn)賬操作。

后來(lái)研究發(fā)現(xiàn),使用NodeJs直接調(diào)用Web3也可以實(shí)現(xiàn)對(duì)應(yīng)功能,不過(guò)還是對(duì)Java更熟悉一些,就采用了Java的方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容