以太坊批量交易PHP开发包,支持ETHER/ERC20

简介:

以太坊批量转账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开发包下载地址:http://sc.hubwiz.com/codebag/eth-batch-transfer/

目录
相关文章
|
5月前
|
PHP
运行php服务,电脑抓不了包
运行php服务,电脑抓不了包
26 0
|
NoSQL PHP Redis
PHP使用predis/predis包应用实例
PHP使用predis/predis包应用实例
194 0
|
Linux PHP
linux 批量 kill php 进程
linux 批量 kill php 进程
|
安全 前端开发 应用服务中间件
centos 下配置 nginx 支持 php
centos 下配置 nginx 支持 php
|
存储 供应链 安全
景蓝交易所源码php区块链交易所源码/币币/法币/合约交易/配资上币/带搭建教程
景蓝交易所源码php区块链交易所源码/币币/法币/合约交易/配资上币/带搭建教程
景蓝交易所源码php区块链交易所源码/币币/法币/合约交易/配资上币/带搭建教程
|
关系型数据库 MySQL API
安装 PHP7.3.10及其依赖源码包 | 学习笔记
快速学习安装 PHP7.3.10及其依赖源码包
367 0
|
JavaScript Unix Linux
PHP开发的网站,如何实现批量打印快递单的功能?
虽然市场中不断有新的编程语言诞生,但不得不承认PHP在web开发领域仍一直占有很大份额,高效开发是他一直以来最大的一个优点,而且他的学习成本也较低,入门门槛较低,和Python一样是解释性语言,很多人都说他是世界上最好的语言。其实语言并没有好坏之分,只有是否适用,每门语言都有自己的优缺点,毕竟想要获得一样东西,总要放弃点什么,有舍有得,看自己怎么权衡,只要能解决问题就是好的,不管黑猫白猫抓到老鼠就是好猫。自从swoole的加持以及和GO语言的结合,也弥补语言本身的很多不足,慢慢缩小和其他语言之间的差距,不过还是有很长的路要走。--题外话
303 0
|
应用服务中间件 PHP nginx
yum安装PHP7.2和rpm如何一次性删除包
yum安装PHP7.2和rpm如何一次性删除包
194 0
yum安装PHP7.2和rpm如何一次性删除包