solidity0.8.0的应用案例14:空投合约

空投是币圈中一种营销策略,项目方将代币免费发放给特定用户群体。为了拿到空投资格,用户通常需要完成一些简单的任务,如测试产品、分享新闻、介绍朋友等。项目方通过空投可以获得种子用户,而用户可以获得一笔财富,两全其美。

因为每次接收空投的用户很多,项目方不可能一笔一笔的转账。利用智能合约批量发放ERC20代币,可以显著提高空投效率。

空投代币合约

Airdrop空投合约逻辑非常简单:利用循环,一笔交易将ERC20代币发送给多个地址。合约中包含两个函数

  • getSum()函数:返回uint数组的和。

// 数组求和函数
function getSum(uint256[] calldata _arr) public pure returns(uint sum)
{
    for(uint i = 0; i < _arr.length; i++)
        sum = sum + _arr[i];
}

 

multiTransferToken()函数:发送ERC20代币空投,包含3个参数:

  • _token:代币合约地址(address类型)

  • _addresses:接收空投的用户地址数组(address[]类型)

  • _amounts:空投数量数组,对应_addresses里每个地址的数量(uint[]类型)

    该函数有两个检查:第一个require检查了_addresses_amounts两个数组长度是否相等;第二个require检查了空投合约的授权额度大于要空投的代币数量总和。

/// @notice 向多个地址转账ERC20代币,使用前需要先授权
///
/// @param _token 转账的ERC20代币地址
/// @param _addresses 空投地址数组
/// @param _amounts 代币数量数组(每个地址的空投数量)
function multiTransferToken(
    address _token,
    address[] calldata _addresses,
    uint256[] calldata _amounts
    ) external {
    // 检查:_addresses和_amounts数组的长度相等
    require(_addresses.length == _amounts.length, "Lengths of Addresses and Amounts NOT EQUAL");
    IERC20 

你可能感兴趣的:(区块链)