diff --git a/contracts/1/0xa7a3022249415e25752c4cf8696c2418defdf2db.json b/contracts/1/0xa7a3022249415e25752c4cf8696c2418defdf2db.json new file mode 100644 index 0000000..7d4acdc --- /dev/null +++ b/contracts/1/0xa7a3022249415e25752c4cf8696c2418defdf2db.json @@ -0,0 +1,139 @@ +{ + "$schema": "https://evmnow.github.io/contract-metadata/v1/schema.json", + "chainId": 1, + "address": "0xa7a3022249415e25752c4cf8696c2418defdf2db", + "meta": { + "version": 1, + "lastUpdated": "2026-08-21T00:00:00Z", + "locale": "en" + }, + "name": "Artificial After All", + "symbol": "AAA", + "description": "The factory that mints the 256 Artificial pieces, each a sovereign onchain generative artwork contract.", + "about": "## About\n\nArtificial After All (2026) is the factory contract by Han that mints the Artificial series. Each mint deploys a new, fully independent `Artificial` contract — one of 256 sovereign pieces, each holding a compressed neural network, an inference engine, and its own built-in marketplace onchain (see 0xbdf5a7f5e5ae18ee580139297c63a89fc1d18b5f for one piece).\n\n## Minting\n\nThe edition is capped at 256. The first 64 are reserved for the artist and mint for free; the remaining pieces mint for a fixed 0.128 ETH each. On each mint the factory derives a seed from the block randomness, the minter, and the count, deploys a new `Artificial` contract owned by the minter, and records it in the `isArtificial` registry. Collected mint proceeds can be swept by the artist via `collect()`.", + "risks": [ + "No upgradeability — contract logic is permanent and cannot be patched", + "The artist alone can call collect(), which sweeps the entire ETH balance to the artist", + "The first 64 pieces mint for free and are reserved for the artist", + "Mint seed derives from block.prevrandao, which validators can influence to a limited degree" + ], + "category": "nft", + "tags": ["art", "generative", "onchain", "neural-network", "ai", "factory"], + "links": [ + { + "label": "Etherscan", + "url": "https://etherscan.io/address/0xa7a3022249415e25752c4cf8696c2418defdf2db" + }, + { + "label": "Example piece (Artificial)", + "url": "https://etherscan.io/address/0xbdf5a7f5e5ae18ee580139297c63a89fc1d18b5f" + }, + { "label": "Artist", "url": "https://han.io" }, + { "label": "X (Twitter)", "url": "https://x.com/hanrgb" } + ], + "groups": { + "collection": { "label": "Collection", "order": 1 }, + "mint": { "label": "Mint", "order": 2 }, + "admin": { "label": "Admin", "order": 3 } + }, + "actions": { + "name": { + "order": 0, + "title": "Name", + "description": "The name of the collection (Artificial After All).", + "stateMutability": "view", + "group": "collection" + }, + "symbol": { + "order": 1, + "title": "Symbol", + "description": "The collection symbol (AAA).", + "stateMutability": "view", + "group": "collection" + }, + "thisMany": { + "title": "Edition Size", + "description": "The total number of Artificial pieces that can ever be minted (256).", + "stateMutability": "view", + "group": "collection", + "returns": { "_0": { "label": "total" } } + }, + "thisMuch": { + "title": "Mint Price", + "description": "The fixed price to mint a piece once the artist reserve is exhausted.", + "stateMutability": "view", + "group": "collection", + "returns": { "_0": { "label": "price", "type": "eth" } } + }, + "thisForArtist": { + "title": "Artist Reserve", + "description": "The number of pieces reserved for the artist to mint for free (64).", + "stateMutability": "view", + "group": "collection", + "returns": { "_0": { "label": "reserved" } } + }, + "isArtificial": { + "title": "Is Artificial Piece", + "description": "Check whether an address is a piece deployed by this factory.", + "stateMutability": "view", + "group": "collection", + "params": { + "_0": { "label": "address", "type": "address" } + }, + "returns": { + "_0": { "label": "is piece", "type": "boolean" } + } + }, + "createArtificial": { + "title": "Mint Piece", + "description": "Mint a new Artificial piece to yourself by sending the exact mint price in ETH.", + "intent": "Mint an Artificial piece", + "group": "mint", + "featured": true, + "warning": "Sends ETH. The exact mint price must be sent. The artist reserve mints are restricted to the artist.", + "related": ["thisMuch", "thisMany"] + }, + "artist": { + "title": "Artist", + "description": "The artist address that deployed the factory and receives mint proceeds.", + "stateMutability": "view", + "group": "admin", + "returns": { "_0": { "label": "artist", "type": "address" } } + }, + "collect": { + "title": "Collect Proceeds", + "description": "Sweep the entire ETH balance of the factory to the artist. Only the artist can call this.", + "group": "admin", + "related": ["artist"] + } + }, + "events": { + "Created": { + "title": "Piece Created", + "description": "Emitted when a new Artificial piece is minted, recording its address, minter, and seed.", + "params": { + "artpiece": { "label": "piece", "type": "address" }, + "minter": { "label": "minter", "type": "address" }, + "seed": { "label": "seed" } + } + } + }, + "errors": { + "NotArtist": { + "title": "Not Artist", + "description": "Only the artist can perform this action." + }, + "SoldOut": { + "title": "Sold Out", + "description": "All 256 pieces have already been minted." + }, + "WrongAmount": { + "title": "Wrong Amount", + "description": "The ETH amount sent does not match the required mint price." + }, + "TransferFailed": { + "title": "Transfer Failed", + "description": "ETH transfer failed. Ensure the recipient address can receive ETH." + } + } +} diff --git a/contracts/1/0xbdf5a7f5e5ae18ee580139297c63a89fc1d18b5f.json b/contracts/1/0xbdf5a7f5e5ae18ee580139297c63a89fc1d18b5f.json new file mode 100644 index 0000000..28467b1 --- /dev/null +++ b/contracts/1/0xbdf5a7f5e5ae18ee580139297c63a89fc1d18b5f.json @@ -0,0 +1,227 @@ +{ + "$schema": "https://evmnow.github.io/contract-metadata/v1/schema.json", + "chainId": 1, + "address": "0xbdf5a7f5e5ae18ee580139297c63a89fc1d18b5f", + "meta": { + "version": 1, + "lastUpdated": "2026-08-21T00:00:00Z", + "locale": "en" + }, + "name": "Artificial", + "symbol": "A", + "description": "A generative artwork with a compressed neural network and inference engine onchain, plus a built-in marketplace.", + "about": "## About the artpiece\n\nArtificial (2026) is a generative work by Han in which a small neural network is stored, compressed, and executed entirely within an Ethereum smart contract. Each piece holds an immutable seed; calling `artificial()` runs the onchain inference engine over the trained weights to produce a 32x32 grayscale image, and `artificialHTML()` returns a self-contained HTML document that renders it on a canvas. The network, its quantized weights, and the renderer all live onchain, so the work needs no external infrastructure.\n\n## One of 256\n\nArtificial is one of 256 sovereign contracts minted by the `ArtificialAfterAll` factory (0xa7a3022249415e25752c4cf8696c2418defdf2db). Each edition is its own independent contract with its own owner, seed, and marketplace. The factory that created this piece is recorded permanently in the immutable `parent` field.\n\n## Built-in marketplace\n\nThe contract includes a native fixed-price marketplace. The owner can list the piece for sale at a set price, open to anyone, and any buyer can purchase it by sending the exact asking amount. Sale proceeds are credited to pending withdrawals and must be claimed manually via `withdraw()`. There are no royalties and no bidding.", + "risks": [ + "No upgradeability — contract logic is permanent and cannot be patched", + "ETH withdrawal pattern — sale proceeds must be manually withdrawn via withdraw()", + "No royalties — sales pay the seller in full and earn the artist nothing on resale", + "transferOwnership moves the piece off-market for free with no payment involved" + ], + "category": "nft", + "tags": ["art", "generative", "onchain", "neural-network", "ai", "edition"], + "links": [ + { + "label": "Etherscan", + "url": "https://etherscan.io/address/0xbdf5a7f5e5ae18ee580139297c63a89fc1d18b5f" + }, + { + "label": "Factory (Artificial After All)", + "url": "https://etherscan.io/address/0xa7a3022249415e25752c4cf8696c2418defdf2db" + }, + { "label": "Artist", "url": "https://han.io" }, + { "label": "X (Twitter)", "url": "https://x.com/hanrgb" } + ], + "groups": { + "artwork": { "label": "Artwork", "order": 1 }, + "marketplace": { "label": "Marketplace", "order": 2 }, + "admin": { "label": "Admin", "order": 3 } + }, + "actions": { + "name": { + "order": 0, + "title": "Name", + "description": "The name of the artwork (Artificial).", + "stateMutability": "view", + "group": "artwork" + }, + "symbol": { + "order": 1, + "title": "Symbol", + "description": "The token symbol (A).", + "stateMutability": "view", + "group": "artwork" + }, + "artificialHTML": { + "order": 2, + "title": "View Artpiece", + "description": "Returns a self-contained HTML document that renders the generated image. Open in a browser to view the piece.", + "stateMutability": "view", + "group": "artwork", + "featured": true + }, + "artificial": { + "order": 3, + "title": "Generate Pixels", + "description": "Runs the onchain neural network over this piece's seed and returns the raw 32x32 grayscale pixel bytes.", + "stateMutability": "view", + "group": "artwork", + "returns": { "_0": { "label": "pixels" } } + }, + "seed": { + "order": 4, + "title": "Seed", + "description": "The immutable seed that determines the generated image for this piece.", + "stateMutability": "view", + "group": "artwork", + "returns": { "_0": { "label": "seed" } } + }, + "owner": { + "order": 0, + "title": "Owner", + "description": "The current owner of the artwork.", + "stateMutability": "view", + "group": "marketplace", + "returns": { "_0": { "type": "address" } } + }, + "currentOffer": { + "title": "Current Offer", + "description": "Check whether the artwork is currently listed for sale and at what price.", + "stateMutability": "view", + "group": "marketplace", + "returns": { + "active": { "label": "for sale", "type": "boolean" }, + "value": { "label": "price", "type": "eth" } + }, + "related": ["buyNow", "listForSale"] + }, + "buyNow": { + "title": "Buy Now", + "description": "Purchase the artwork at its listed price by sending the exact asking amount in ETH while it is for sale.", + "intent": "Buy Artificial for the listed price", + "group": "marketplace", + "featured": true, + "warning": "Sends ETH. The exact listed price must be sent — no more, no less.", + "related": ["currentOffer", "listForSale"] + }, + "listForSale": { + "title": "List for Sale", + "description": "List the artwork for sale at a fixed price, open to anyone. Only the owner can call this.", + "intent": "List Artificial for sale at {salePriceInWei}", + "group": "marketplace", + "params": { + "salePriceInWei": { "label": "price", "type": "eth" } + }, + "related": ["cancelFromSale", "buyNow"] + }, + "cancelFromSale": { + "title": "Cancel Sale", + "description": "Remove the artwork from sale. Only the owner can call this.", + "group": "marketplace", + "related": ["listForSale", "currentOffer"] + }, + "withdraw": { + "title": "Withdraw ETH", + "description": "Withdraw ETH owed to you from a completed sale.", + "group": "marketplace", + "related": ["pendingWithdrawals"] + }, + "pendingWithdrawals": { + "title": "Pending Withdrawals", + "description": "Check the amount of ETH an address can withdraw from a completed sale.", + "stateMutability": "view", + "group": "marketplace", + "params": { + "_0": { "label": "address", "type": "address" } + }, + "returns": { + "_0": { "type": "eth" } + }, + "related": ["withdraw"] + }, + "transferOwnership": { + "title": "Transfer Ownership", + "description": "Transfer the artwork off-market to another address, canceling any active listing.", + "intent": "Transfer Artificial to {newOwner}", + "group": "admin", + "warning": "This is a direct transfer with no payment involved. Make sure you intend to send the artwork for free.", + "params": { + "newOwner": { "label": "new owner", "type": "address" } + } + }, + "parent": { + "title": "Parent", + "description": "The factory contract (Artificial After All) that minted this piece.", + "stateMutability": "view", + "group": "admin", + "returns": { "_0": { "label": "factory", "type": "address" } } + } + }, + "events": { + "ArtificialCreated": { + "title": "Artificial Created", + "description": "Emitted when the piece is created, recording its owner and seed.", + "params": { + "creator": { "label": "creator", "type": "address" }, + "seed": { "label": "seed" } + } + }, + "OwnershipTransferred": { + "title": "Ownership Transferred", + "description": "Emitted when ownership of the artwork changes.", + "params": { + "oldOwner": { "label": "from", "type": "address" }, + "newOwner": { "label": "to", "type": "address" } + } + }, + "ListedForSale": { + "description": "Emitted when the artwork is listed for sale.", + "params": { + "value": { "label": "price", "type": "eth" }, + "fromAddress": { "label": "seller", "type": "address" } + } + }, + "SaleCanceled": { + "description": "Emitted when a sale listing is canceled.", + "params": { + "fromAddress": { "label": "seller", "type": "address" } + } + }, + "SaleCompleted": { + "description": "Emitted when the artwork is sold via buyNow.", + "params": { + "value": { "label": "sale price", "type": "eth" }, + "fromAddress": { "label": "seller", "type": "address" }, + "toAddress": { "label": "buyer", "type": "address" } + } + }, + "Withdrawn": { + "description": "Emitted when an address withdraws ETH owed from a sale.", + "params": { + "wallet": { "label": "wallet", "type": "address" }, + "amount": { "label": "amount", "type": "eth" } + } + } + }, + "errors": { + "NotOwner": { + "title": "Not Owner", + "description": "Only the current owner can perform this action." + }, + "TransferFailed": { + "title": "Transfer Failed", + "description": "ETH transfer failed. Ensure the recipient address can receive ETH." + }, + "InsufficientFunds": { + "title": "Insufficient Funds", + "description": "The amount sent does not match the required sale price." + }, + "NotForSale": { + "title": "Not for Sale", + "description": "The artwork is not currently listed for sale." + }, + "NullAddress": { + "title": "Null Address", + "description": "Cannot transfer ownership to the zero address." + } + } +}