You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置仅允许单一地址发起ERC-721智能合约空投

仅指定地址可调用空投功能的实现方案

核心逻辑是给空投函数添加所有权校验,仅你预设的钱包地址可触发调用,其余地址调用会直接回滚交易,自然就能阻止其他用户通过Etherscan的写入合约功能发起空投。

实现步骤

  • 第一步:引入OpenZeppelin标准Ownable权限控制模块,该模块默认会将合约部署者(也就是你的钱包地址)设置为唯一所有者,无需额外配置初始权限。
    导入代码参考:
    import "@openzeppelin/contracts/access/Ownable.sol";
    
    合约继承示例:
    contract AirdropContract is Ownable {
      // 你的其他合约逻辑
    }
    
  • 第二步:给空投发放函数添加onlyOwner修饰符,触发函数时会自动校验调用者身份,非所有者地址调用直接失败。你要发放50份空投的逻辑也可以直接写在这个函数里,添加数量校验避免超发。
    函数代码参考:
    function batchAirdrop(address[] calldata receivers, uint256 amountPer) external onlyOwner {
      require(receivers.length <= 50, "Exceed max airdrop limit of 50");
      for(uint256 i = 0; i < receivers.length; i++) {
        // 替换为你实际的代币转账逻辑
        IERC20(yourTokenAddress).transfer(receivers[i], amountPer);
      }
    }
    
  • 第三步:合约部署完成后,先拿非所有者的测试地址尝试调用空投函数,确认交易回滚;再用你自己的部署钱包调用,确认可以正常发放即可。

补充说明:如果后续需要更换有权限发起空投的地址,可调用Ownable内置的transferOwnership(address newOwner)函数,该函数同样仅当前所有者可调用,不会被其他用户篡改权限。

内容的提问来源于stack exchange,提问作者August Rosedale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 18:24:04