ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何将 ERC20 代币在一次交易中发送到多个地址?

2022-07-13 13:33:15  阅读:181  来源: 互联网

标签:发送到 recipients uint256 transferFrom 代币 address IERC20 tokenAddress ERC20


目录

目录

每一次链上交易都需要支持一笔交易费用,也就是gas费。很多时候向多个用户发送同样的Token,比如空投时,每次发送一笔会非常麻烦,也会损耗很多gas费用。
那么如何通过一笔交易实现向多个不同用户发送不同数量的 Erc20 Token 呢?

EIP20标准中,定义了 transferFrom 方法,将_value一定数量的代币从地址转移_from到地址_to.

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

那么我们只需要在自己的合约中实现接收多个地址、多个数量代币,然后调用transferFrom方法就可以。

第一种方法

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/utils/Context.sol";

contract ERC20BatchTransfer is Context {
    function batchERC20(address tokenAddress, address[] calldata recipients, uint256[] calldata values) external {

        for (uint256 i = 0; i < recipients.length; i++){
            (bool sent, bytes memory da) = tokenAddress.call(abi.encodeWithSignature("transferFrom(address,address,uint256)",_msgSender(),recipients[i],values[i]));
            // require(sent, "Failed to transfer token to user");
            require(sent, string(da));
        }
    }

}

在上面的代码中,我们通过向tokenAddress合约通过call来呼叫合约的transferFrom方法。
  abi.encodeWithSignature方法的第一个参数是要编码的方法,后面依次传入被编码方法的三个参数,调用者、接收人、数量。

第二种方法

这种代码编写可能看起来更容易理解。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/utils/Context.sol";

contract ERC20BatchTransfer is Context {
    using SafeERC20 for IERC20;


    function batchERC20(address tokenAddress, address[] calldata recipients, uint256[] calldata values) external {
        IERC20 erc20 = IERC20(tokenAddress);
        for (uint256 i = 0; i < recipients.length; i++){
            erc20.transferFrom(_msgSender(), recipients[i], values[i]);
        }
    }

}

上面的代码为了快速实现,直接调用 openzeppelinIERC20代码,通过 IERC20 接口来调用 transferFrom 方法。

是不是很简单?

Example:http://cointool.a246.vip/


博文作者:迦壹
博客地址:如何将 ERC20 代币在一次交易中发送到多个地址?
转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作!


标签:发送到,recipients,uint256,transferFrom,代币,address,IERC20,tokenAddress,ERC20
来源: https://www.cnblogs.com/lion.net/p/16473504.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有