From 6d1eb70ca315fb4aa016afef20451ad6da2f84e3 Mon Sep 17 00:00:00 2001 From: incarterseyes Date: Fri, 21 Aug 2026 18:02:12 -0400 Subject: [PATCH 1/3] Add InChainPepeGAN contract metadata Fully on-chain GAN-rendered Pepe NFT (ERC-721 + metadata). Notes the unprotected setWeights function. Passes strict validation. --- ...9a5bbc1b26c0833b232355534cc404b0e69d4.json | 215 ++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json diff --git a/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json b/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json new file mode 100644 index 0000000..9a3b2ca --- /dev/null +++ b/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json @@ -0,0 +1,215 @@ +{ + "$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) — roughly a few hundred thousand 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\nMinting costs 0.0069 ETH, is limited to one token per wallet, and is capped at a 999-token supply. The owner can perform a 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 has NO access control — anyone can append values to the on-chain GAN weight arrays", + "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. Limited to one mint per wallet.", + "intent": "Mint an InChainPepeGAN", + "group": "mint", + "featured": true, + "warning": "Sends 0.0069 ETH. Each wallet can mint only once, and the collection is capped at 999.", + "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": "Mint the 100 reserved team tokens to the owner. Can only be done once.", + "group": "admin", + "warning": "Owner-only, one-time action that mints 100 tokens to the owner.", + "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 neural-network weight values into one of the on-chain GAN's storage arrays.", + "group": "admin", + "warning": "This function has NO access control — anyone can call it and append weights, which can corrupt future art 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 once for a batch mint of consecutive token IDs (EIP-2309), used by the dev mint.", + "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." + } + } +} From 31dd55f741981f6e6ff1146c88b30271d48a3c12 Mon Sep 17 00:00:00 2001 From: yougogirldoteth <140090078+yougogirldoteth@users.noreply.github.com> Date: Thu, 27 Aug 2026 23:20:49 +0200 Subject: [PATCH 2/3] Mark InChainPepeGAN minting complete --- .../0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json b/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json index 9a3b2ca..7160e75 100644 --- a/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json +++ b/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json @@ -11,7 +11,7 @@ "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) — roughly a few hundred thousand 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\nMinting costs 0.0069 ETH, is limited to one token per wallet, and is capped at a 999-token supply. The owner can perform a 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.", + "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) — roughly a few hundred thousand 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": [ @@ -51,11 +51,11 @@ "actions": { "mint": { "title": "Mint", - "description": "Mint one token to your wallet by sending the mint price. Limited to one mint per wallet.", + "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", - "featured": true, - "warning": "Sends 0.0069 ETH. Each wallet can mint only once, and the collection is capped at 999.", + "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.", @@ -141,9 +141,10 @@ }, "devMint": { "title": "Dev Mint", - "description": "Mint the 100 reserved team tokens to the owner. Can only be done once.", + "description": "The one-time owner reserve mint, which has already minted 100 team tokens.", "group": "admin", - "warning": "Owner-only, one-time action that mints 100 tokens to the owner.", + "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": { From 1e02d0af2e2ccbd9fa348429a5c9e4ad612fc9e6 Mon Sep 17 00:00:00 2001 From: yougogirldoteth <140090078+yougogirldoteth@users.noreply.github.com> Date: Thu, 27 Aug 2026 23:21:18 +0200 Subject: [PATCH 3/3] Correct InChainPepeGAN model metadata --- .../1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json b/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json index 7160e75..7d57872 100644 --- a/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json +++ b/contracts/1/0x65e9a5bbc1b26c0833b232355534cc404b0e69d4.json @@ -11,7 +11,7 @@ "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) — roughly a few hundred thousand 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.", + "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": [ @@ -29,7 +29,7 @@ } ], "risks": [ - "setWeights has NO access control — anyone can append values to the on-chain GAN weight arrays", + "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", @@ -155,9 +155,9 @@ }, "setWeights": { "title": "Set GAN Weights", - "description": "Append neural-network weight values into one of the on-chain GAN's storage arrays.", + "description": "Append GAN weights; inference reads only the fixed prefixes that were populated during initialization.", "group": "admin", - "warning": "This function has NO access control — anyone can call it and append weights, which can corrupt future art rendering.", + "warning": "Anyone can append weights, but values beyond the populated prefixes do not change rendering.", "params": { "_0": { "label": "weights" }, "_1": { "label": "layer index" } @@ -183,7 +183,7 @@ "events": { "ConsecutiveTransfer": { "title": "Consecutive Transfer", - "description": "Emitted once for a batch mint of consecutive token IDs (EIP-2309), used by the dev mint.", + "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" },