主页 > imtoken钱包苹果版手机下载 > 以太坊一对多转账交易实现代码【Ethereum/ERC20 token】

以太坊一对多转账交易实现代码【Ethereum/ERC20 token】

本文将解释如何只用一笔交易费用将以太币或 ERC20 代币发送到多个地址。

有时你可能想在一次以太坊交易中将以太坊或ERC20代币转账到数百甚至数千个地址,但以太坊的原生接口只支持一对一的转账,如果你以循环的方式一个一个地执行转账,交易就会消耗大量金钱来支付gas,并且可能会超过单个区块的gas limit。 本文将解释如何只用一笔交易费用将以太币或 ERC20 代币发送到多个地址。

一、实现思路概述

基本思路是使用智能合约,将目标地址作为参数传入智能合约方法,让合约为我们执行交易:由于我们只需要调用一次合约方法,所以我们只需要支付交易gas费一次以太坊批量转账教程,智能合约内部交易无手续费。

整个交易过程是这样的:

                                   |
                                   |---transfer---> address 1#
                                   |---transfer---> address 2#
DApp --multiTransfer--> Contract --|....
                                   |....
                                   |---transfer---> address N#
                                   |

2. 以太坊一对多转账交易

以下是以太坊一对多交易的合约实现代码:

pragma solidity ^0.4.18;
contract WizSendContract{
 //一对多以太币转账事件
 event MultiTransfer(
 address indexed _from,
 uint indexed _value,
 address _to,
 uint _amount
 );
 //一对多以太币转账方法
 function multiTransfer(
 address[] _addresses,
 uint[] _amounts
 ) payable public{
 uint toReturn = msg.value;
 for (uint i = 0; i 
 _addresses[i].transfer(_amounts[i]);
 toReturn = toReturn - _amounts[i];
 MultiTransfer(msg.sender, msg.value, _addresses[i], _amounts[i]);
 }
 _safeTransfer(msg.sender, toReturn);
 }
}

注意:这是概念验证/PoC 代码,请不要直接应用于生产环境。

3、以太坊ERC20代币一对多转账交易

以下是以太坊ERC20代币一对多交易的合约实现代码:

pragma solidity ^0.4.18;
//引入ERC20定义
import "erc20.sol";
contract WizSendContract{
 //一对多代币转账事件
 event MultiERC20Transfer(
 address indexed _from,
 uint indexed _value,
 address _to,
 uint _amount,
 ERC20 _token
 );
 //一对多代币转账方法
 function multiERC20Transfer(
 ERC20 _token,
 address[] _addresses,
 uint[] _amounts
 ) public {
 for (uint i = 0; i 
 _token.transferFrom(msg.sender, _addresses[i], _amounts[i]); 
 MultiERC20Transfer(
 msg.sender,
 msg.value,
 _addresses[i],
 _amounts[i],
 _token
 );
 }
 }
}

注意:这是概念验证/PoC 代码以太坊批量转账教程,请不要直接应用于生产环境。

原文链接:

本文参与登联社区写作激励计划,好文章好收益,欢迎正在阅读的你加入。