如何设置仅允许单一地址发起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
相关产品推荐
相关产品推荐

