When to activate
- Creating NFT collections (PFP, art, gaming, utility)
- Building NFT marketplace or auction contracts
- Implementing ERC-2981 royalty standards
- Designing dynamic NFTs with on-chain metadata
- Integrating with OpenSea, Blur, or custom marketplaces
When NOT to use
- For fungible token (ERC-20) development
- For centralized digital asset management
- For physical art inventory systems
Instructions
- Choose standard. ERC-721 (unique), ERC-1155 (semi-fungible/batch), ERC-6551 (token-bound accounts).
- Design metadata. On-chain vs off-chain (IPFS/Arweave). Follow OpenSea metadata schema. Include traits, rarity.
- Implement minting. Allowlist (Merkle tree), public sale, Dutch auction, or reveal mechanics.
- Add royalties. ERC-2981 for on-chain royalty info. Operator filter for marketplace enforcement.
- Build marketplace. Listings, offers, auctions (English/Dutch). Escrow pattern for safe transfers.
- Gas optimization. Batch minting (ERC-1155), lazy minting (sign-to-mint), compressed metadata.
- Security. Prevent double-spend, reentrancy in transfers, enumeration attacks on large collections.
Example
// ERC-721 with Merkle allowlist mint
contract NFTCollection is ERC721, ERC721Enumerable {
bytes32 public merkleRoot;
mapping(address => bool) public claimed;
function allowlistMint(bytes32[] calldata proof) external {
require(!claimed[msg.sender], "Already claimed");
require(MerkleProof.verify(proof, merkleRoot, keccak256(abi.encodePacked(msg.sender))));
claimed[msg.sender] = true;
_safeMint(msg.sender, totalSupply() + 1);
}
}
1---2name: nft-marketplace3description: Build NFT contracts and marketplaces — ERC-721/1155, metadata standards, royalties, and listing mechanisms4---56## When to activate78- Creating NFT collections (PFP, art, gaming, utility)9- Building NFT marketplace or auction contracts10- Implementing ERC-2981 royalty standards11- Designing dynamic NFTs with on-chain metadata12- Integrating with OpenSea, Blur, or custom marketplaces1314## When NOT to use1516- For fungible token (ERC-20) development17- For centralized digital asset management18- For physical art inventory systems1920## Instructions21221. **Choose standard.** ERC-721 (unique), ERC-1155 (semi-fungible/batch), ERC-6551 (token-bound accounts).232. **Design metadata.** On-chain vs off-chain (IPFS/Arweave). Follow OpenSea metadata schema. Include traits, rarity.243. **Implement minting.** Allowlist (Merkle tree), public sale, Dutch auction, or reveal mechanics.254. **Add royalties.** ERC-2981 for on-chain royalty info. Operator filter for marketplace enforcement.265. **Build marketplace.** Listings, offers, auctions (English/Dutch). Escrow pattern for safe transfers.276. **Gas optimization.** Batch minting (ERC-1155), lazy minting (sign-to-mint), compressed metadata.287. **Security.** Prevent double-spend, reentrancy in transfers, enumeration attacks on large collections.2930## Example3132```solidity33// ERC-721 with Merkle allowlist mint34contract NFTCollection is ERC721, ERC721Enumerable {35 bytes32 public merkleRoot;36 mapping(address => bool) public claimed;37 38 function allowlistMint(bytes32[] calldata proof) external {39 require(!claimed[msg.sender], "Already claimed");40 require(MerkleProof.verify(proof, merkleRoot, keccak256(abi.encodePacked(msg.sender))));41 claimed[msg.sender] = true;42 _safeMint(msg.sender, totalSupply() + 1);43 }44}45```