contract ERC721 { // take OpenZeppelin contract and add this at the end: uint256 private _lastTokenId; // uncomment next line if you need totalSupply // uint256 public totalSupply; /// @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;) { 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; ++tokenId; ++i; } _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } _lastTokenId = tokenId; // uncomment next line if you need totalSupply // totalSupply += length; } }