Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
216 changes: 216 additions & 0 deletions contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
{
"$schema": "https://evmnow.github.io/contract-metadata/v1/schema.json",
"chainId": 1,
"address": "0x65e9a5bbc1b26c0833b232355534cc404b0e69d4",
"meta": {
"version": 1,
"lastUpdated": "2026-08-21T00:00:00Z",
"locale": "en"
},
"includes": ["interface:erc721", "interface:erc721-metadata"],
"name": "InChainPepeGAN",
"symbol": "PepeGAN",
"description": "A fully on-chain Pepe NFT collection whose art is generated by a neural network (GAN) running inside the contract.",
"about": "## About\n\nInChainPepeGAN is a 999-piece NFT collection where every image is produced entirely on-chain. Instead of storing artwork off-chain, the contract embeds a small Generative Adversarial Network (GAN) — 3,156 parameters across three neural-network layers — and runs inference at read time to synthesize a pixel image, which it encodes as an animated GIF and an SVG wrapper directly in `tokenURI`. No IPFS, no external server: the metadata, image, and animation are all generated in the EVM.\n\n## How it renders\n\nEach token's ID seeds a deterministic pseudo-random draw that feeds the GAN. The network's dense and transpose-convolution layers, batch normalization, and a lookup-table sigmoid produce a small pixel grid, which the renderer packs by hand into GIF89a bytes and base64-encodes. Three related seeds are combined into a short looping animation.\n\n## Minting\n\nPublic minting cost 0.0069 ETH and was limited to one token per wallet. The 999-token supply is now fully minted, and the owner has completed the one-time `devMint` of 100 reserved tokens. A token holder can call `changeRandomSeeds` to permanently re-roll the seed used to render their own token.\n\n## Standards & infrastructure\n\nBuilt on ERC721A for gas-efficient batch minting, with OpenZeppelin Ownable and ReentrancyGuard, and OpenSea's DefaultOperatorFilterer for royalty-enforcing transfer restrictions.",
"category": "nft",
"tags": ["art", "generative", "onchain", "pepe", "gan", "ai", "pfp"],
"links": [
{
"label": "GitHub",
"url": "https://github.com/InChainPepeGAN/InChainPepeGAN"
},
{
"label": "Mirror",
"url": "https://mirror.xyz/0x4DB9f44eF11AC71b67eCC1CB272f4CcAfCE0058c/FxFvSW8KDZHFUiy6AzwEXthL58lysW48eVj7QKB0T08"
},
{
"label": "Etherscan",
"url": "https://etherscan.io/address/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4"
}
],
"risks": [
"setWeights was unrestricted during initialization; later appends cannot alter the fixed weight prefixes used for rendering",
"No upgradeability — the contract is not a proxy and its logic is permanent",
"withdraw sends the entire contract balance to the owner",
"Transfers use OpenSea's operator filter registry and can be blocked on filtered marketplaces",
"changeRandomSeeds permanently alters a token's rendered artwork"
],
"theme": {
"background": "#0d1f0d",
"text": "#e8f5e9",
"accent": "#5bbd3f",
"accentText": "#0d1f0d",
"border": "#2e4d2e"
},
"groups": {
"mint": { "label": "Mint", "order": 1 },
"art": { "label": "Artwork", "order": 2 },
"info": { "label": "Collection Info", "order": 3 },
"admin": { "label": "Admin", "order": 4 }
},
"actions": {
"mint": {
"title": "Mint",
"description": "Mint one token to your wallet by sending the mint price; the 999-token collection is now sold out.",
"intent": "Mint an InChainPepeGAN",
"group": "mint",
"deprecated": "The collection is fully minted (999/999); this call now reverts.",
"warning": "The collection is sold out, so no more tokens can be minted.",
"value": {
"label": "mint price",
"description": "The 0.0069 ETH mint price sent with the transaction.",
"autofill": {
"type": "constant",
"value": "6900000000000000"
}
}
},
"totalSupply": {
"title": "Total Supply",
"description": "The number of tokens minted so far, out of a maximum of 999.",
"stateMutability": "view",
"group": "info"
},
"MINT_PRICE": {
"title": "Mint Price",
"description": "The price to mint one token (0.0069 ETH).",
"stateMutability": "view",
"group": "info",
"returns": { "_0": { "label": "price", "type": "eth" } }
},
"MAX_COLLECTION_SIZE": {
"title": "Max Supply",
"description": "The maximum number of tokens that can ever be minted (999).",
"stateMutability": "view",
"group": "info"
},
"TEAM_RESERVED": {
"title": "Team Reserved",
"description": "The number of tokens reserved for the team via the one-time dev mint (100).",
"stateMutability": "view",
"group": "info"
},
"DEV_MINTED": {
"title": "Dev Minted",
"description": "Whether the one-time team reserve mint has already been performed.",
"stateMutability": "view",
"group": "info",
"returns": { "_0": { "label": "minted", "type": "boolean" } }
},
"OPERATOR_FILTER_REGISTRY": {
"title": "Operator Filter Registry",
"description": "The OpenSea operator filter registry this collection uses to enforce transfer restrictions.",
"stateMutability": "view",
"group": "info",
"returns": { "_0": { "type": "address" } }
},
"changeRandomSeeds": {
"title": "Re-roll Artwork",
"description": "Permanently change the random seed used to render one of your tokens, producing new art.",
"intent": "Re-roll the artwork for token #{_0}",
"group": "art",
"warning": "This permanently and irreversibly changes how your token's artwork is generated.",
"params": {
"_0": { "label": "token ID", "type": "token-id" }
}
},
"getGIF": {
"title": "Get GIF",
"description": "Render the animated GIF data URI for a given set of GAN seeds.",
"stateMutability": "view",
"group": "art"
},
"getAnimatedURI": {
"title": "Get Animated URI",
"description": "Wrap a GIF data URI in an SVG image for pixelated, full-size display.",
"stateMutability": "pure",
"group": "art"
},
"getProperty": {
"title": "Get Properties",
"description": "Return the token's on-chain trait attributes (seeds and animation delay) as JSON.",
"stateMutability": "pure",
"group": "art"
},
"owner": {
"title": "Owner",
"description": "The current owner of the contract.",
"stateMutability": "view",
"group": "admin",
"returns": { "_0": { "type": "address" } }
},
"devMint": {
"title": "Dev Mint",
"description": "The one-time owner reserve mint, which has already minted 100 team tokens.",
"group": "admin",
"deprecated": "The reserve mint is complete and DEV_MINTED is true; this call now reverts.",
"warning": "The one-time reserve mint has already been performed.",
"related": ["DEV_MINTED"]
},
"withdraw": {
"title": "Withdraw ETH",
"description": "Send the contract's entire ETH balance to the owner. Only the owner can call this.",
"group": "admin",
"warning": "Transfers the full contract balance to the owner."
},
"setWeights": {
"title": "Set GAN Weights",
"description": "Append GAN weights; inference reads only the fixed prefixes that were populated during initialization.",
"group": "admin",
"warning": "Anyone can append weights, but values beyond the populated prefixes do not change rendering.",
"params": {
"_0": { "label": "weights" },
"_1": { "label": "layer index" }
}
},
"transferOwnership": {
"title": "Transfer Ownership",
"description": "Transfer contract ownership to a new address. Only the owner can call this.",
"intent": "Transfer ownership to {_0}",
"group": "admin",
"warning": "Hands full owner control of the contract to the new address.",
"params": {
"_0": { "label": "new owner", "type": "address" }
}
},
"renounceOwnership": {
"title": "Renounce Ownership",
"description": "Permanently give up ownership, leaving the contract with no owner.",
"group": "admin",
"warning": "Irreversible. No owner-only function can ever be called again after this."
}
},
"events": {
"ConsecutiveTransfer": {
"title": "Consecutive Transfer",
"description": "Emitted for ERC-2309 batch mints covering a consecutive range of token IDs.",
"params": {
"_0": { "label": "from token ID", "type": "token-id" },
"_1": { "label": "to token ID", "type": "token-id" },
"_2": { "label": "from", "type": "address" },
"_3": { "label": "to", "type": "address" }
}
},
"OwnershipTransferred": {
"title": "Ownership Transferred",
"description": "Emitted when contract ownership changes.",
"params": {
"_0": { "label": "previous owner", "type": "address" },
"_1": { "label": "new owner", "type": "address" }
}
}
},
"errors": {
"OperatorNotAllowed": {
"title": "Operator Not Allowed",
"description": "The marketplace or operator is blocked by the OpenSea operator filter registry.",
"params": {
"_0": { "label": "operator", "type": "address" }
}
},
"URIQueryForNonexistentToken": {
"title": "Token Does Not Exist",
"description": "Metadata was requested for a token ID that has not been minted."
}
}
}