Last active
March 1, 2023 14:08
-
-
Save dievardump/9b66434912d88020708ab388f73c2eb4 to your computer and use it in GitHub Desktop.
Function to add to OZ ERC721 to make an efficient airdrop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| contract ERC721 { | |
| // take OpenZeppelin contract and add this at the end: | |
| uint256 _lastTokenId; | |
| /// @dev be careful this function expects recipients to all be unique and not be address(0) | |
| function _airdrop(address[] calldata recipients) internal virtual { | |
| uint256 length = recipients.length; | |
| uint256 tokenId = _lastTokenId; | |
| address to; | |
| for (uint256 i; i < length; i++) { | |
| tokenId++ | |
| to = recipients[i]; | |
| unchecked { | |
| // _airdrop should only be used at the very start of the contract | |
| // so to should not have any balance | |
| _balances[to] = 1; | |
| } | |
| _owners[tokenId] = to; | |
| emit Transfer(address(0), to, tokenId); | |
| } | |
| _lastTokenId = tokenId; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment