天天看點

以太坊批量交易PHP開發包,支援ETHER/ERC20

以太坊批量轉賬PHP開發包支援以太币ERC20代币的批量轉賬,有效減少交易手續費。官方下載下傳位址: http://sc.hubwiz.com/codebag/eth-batch-transfer/

1、以太坊批量轉賬PHP開發包簡介

以太坊批量轉賬PHP開發包的主要特性如下:

  • 支援以太币和ERC20代币一對多轉賬
  • 隻需要支付一個交易的手續費
  • 支援使用公共節點(例如Infura)或自己部署節點

以太坊批量轉賬PHP開發包運作于PHP7.1+環境下,主要類及互相關系如下圖所示:

以太坊批量交易PHP開發包,支援ETHER/ERC20

以太坊批量轉賬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開發包下載下傳位址: