以太坊批量轉賬PHP開發包支援以太币ERC20代币的批量轉賬,有效減少交易手續費。官方下載下傳位址: http://sc.hubwiz.com/codebag/eth-batch-transfer/ 。
1、以太坊批量轉賬PHP開發包簡介
以太坊批量轉賬PHP開發包的主要特性如下:
- 支援以太币和ERC20代币一對多轉賬
- 隻需要支付一個交易的手續費
- 支援使用公共節點(例如Infura)或自己部署節點
以太坊批量轉賬PHP開發包運作于PHP7.1+環境下,主要類及互相關系如下圖所示:

以太坊批量轉賬PHP開發包的主要代碼檔案清單如下:
代碼檔案 | 說明 |
---|---|
contract/BatchTransferContract.sol | 批量轉賬合約 |
contract/Erc20.sol | Erc20接口合約 |
contract/SafeMath.sol | 安全計算合約 |
contract/EzToken.sol | 示例代币合約 |
ethtool/src/BatchTransfer.php | 批量轉賬合約PHP API |
ethtool/src/EthApi.php | EthApi接口定義 |
ethtool/src/EthApiWeb3.php | EthApi接口的Web3實作類 |
ethtool/src/Credential.php | 身份憑證類 |
ethtool/src/RawContract.php | 支援裸交易的合約封裝類 |
build-contract.sh | 合約編譯工具腳本 |
deploy-contract.php | 批量轉賬合約部署PHP程式 |
Deploy-contract-eztoken.php | 示例代币合約部署工具腳本 |
demo/ether-batch-transfer.php | 以太币批量轉賬示範 |
demo/erc20-approve.php | Erc20代币授權示範 |
demo/erc20-batch-transfer.php | Erc20代币批量轉賬示範 |
2、合約部署
以下部分說明如何使用附帶的腳本和PHP程式部署合約。當然你也可以使用
Solidity線上IDE部署合約。
進入開發包目錄,執行如下指令編譯合約:
~$ cd ~/ebt
~/ebt$ ./build-contract.sh
執行如下指令部署合約:
~/ebt$ php deploy-contract.php
在~/ebt/contract/build/目錄下的合約部署位址檔案(字尾.addr)中記錄有合約的部署位址。
3、批量轉賬PHP API初始化
PHP側提供的BatchTransfer.php包含了BatchTransfer類的實作,執行個體化BatchTransfer需要指定三個參數:EthApi對象、批量轉賬合約部署位址以及包含私鑰的Credential對象。例如:
use EthTool\EthApiWeb3;
use EthTool\Credential;
use EthTool\BatchTransfer;
$url = 'https://infura.io/v3/....'; //節點URL
$btContractAddress = '0xd86c8f…cf560d5610'; //批量轉賬合約位址
$bt = new BatchTransfer(
new EthApiWeb3($url), //EthApi執行個體
Credential::fromKey($key), //Credential執行個體
$btContractAddress //批量轉賬合約位址
);
4、以太币一對多轉賬PHP API
使用BatchTransfer對象的sendEther()方法向多個目标位址轉賬以太币,調用發起賬戶負責支付轉賬總額和手續費。例如:
$recipients = [
'0xffcf8fdee72ac11b5c542428b35eef5769c409f0', //目标位址
'0x22d491bde2303f2f43325b2108d26f1eaba1e32b '
];
$values = [
'2000000', //目标金額,機關:WEI
'6000000';
];
$txid = $bt.sendEther($recipients,$values); //批量轉賬交易
echo 'txid => ' . $txid . PHP_EOL; //顯示交易哈希
sendEther()
方法預設的gas參數和鍊ID為:
- gasLimit:4000000
- gasPrice:10 GWEI
- chainId:1
可以在調用時傳入自定義的值,例如:
$gasLimit = '1000000'; //gas上限:1 M
$gasPrice = '2000000000'; //gas價格:2 GWEI
$chainId = 4; //目标鍊:ropsten
$txid = $bt.sendEther($recipients,$values,$gasLimit,$gasPrice,$chainId);
5、ERC20代币一對多轉賬PHP API
與以太币不同的是,在使用BatchTransfer對象的sendToken()方法向多個目标位址轉帳指定的ERC20代币之前,需要首先調用approveContract()方法授權批量轉賬合約可以操作發起賬号持有的代币。例如,下面的代碼允許批量轉賬合約操作發起賬号的指定數量的指定代币:
$tokenAddress = '…'; //代币合約位址
$value = '100000000000'; //授權數量
$txid = $bt->approveContract($tokenAddress,$value); //授權
對一個特定的發起賬号/代币對,授權操作隻需要進行一次。在授權交易成功後,既可以調用sendToken()方法進行一對多轉賬。例如:
$tokenAddress = '…'; //代币合約位址
$recipients = [
'0xffcf8fdee72ac11b5c542428b35eef5769c409f0', //目标位址
'0x22d491bde2303f2f43325b2108d26f1eaba1e32b '
];
$values = [
'2000000', //代币最小機關
'6000000';
];
$txid = $bt.sendToken($tokenAddress,$recipients,$values); //批量轉賬交易
echo 'txid => ' . $txid . PHP_EOL; //顯示交易哈希
同樣,可以指定sendToken()方法調用時的gas參數和鍊ID,這裡不再重複。
以太坊批量轉賬PHP開發包下載下傳位址: