{
  "$schema": "https://evmnow.github.io/contract-metadata/v1/schema.json",
  "chainId": 1,
  "address": "0x036721e5a769cc48b3189efbb9cce4471e8a48b1",
  "includes": [
    "interface:erc721",
    "interface:erc721-metadata",
    "interface:erc721-enumerable"
  ],
  "meta": {
    "version": 1,
    "lastUpdated": "2026-04-05T00:00:00Z",
    "locale": "en"
  },
  "name": "Checks Originals",
  "description": "This artwork may or may not be notable.",
  "about": "## This artwork may or may not be notable\n\nChecks is an artwork by Jack Butcher, born from a cultural flashpoint: when Elon Musk transformed Twitter's blue verification checkmark from a marker of institutional legitimacy into a purchasable subscription. The artwork — a grid of colorful checkmarks — asks what happens when anyone can buy the symbol of notability. Launched as a 24-hour open edition on January 3, 2023, at $8 per mint — a direct reference to the cost of Twitter Blue verification — 16,031 Checks Edition pieces were minted. Each piece consists of 80 checks arranged in an 8×10 grid.\n\n## Fully onchain art\n\nThe Checks Originals smart contracts were designed and developed by Jalil Wahdatehagh to transform Checks into a fully onchain generative artwork. Unlike most NFT projects that store images on IPFS or centralized servers, every Checks Original is rendered as SVG directly from the smart contract. The artwork, its colors, and its metadata are all computed and stored onchain with no external dependencies. Editions can be migrated to Originals at any time — migration burns the Edition token and mints an Original that retains the same token ID, removing artist control and making the work fully trustless.\n\n## Compositing and the burn ladder\n\nThe number 80 is semi-perfect — its proper divisors (1, 4, 5, 10, 20, 40) sum to exactly 80. This mathematical property structures the entire compositing system. Holders can burn two tokens of one tier to produce one token of the next tier: two 80-check pieces become one 40-check, two 40s become a 20, and so on down to a single check. The ultimate prize — a Black Check — requires burning 64 single-check tokens, which means 4,096 original editions must be consumed to create one. Given the total supply of 16,031, at most 3 Black Checks can ever exist.",
  "risks": [
    "Compositing and burning are irreversible — burned tokens are permanently destroyed",
    "Black Check creation requires burning 4,096 original editions — significant capital at risk",
    "Onchain SVG rendering depends on contract storage — future hard forks could theoretically affect rendering"
  ],
  "category": "nft",
  "tags": [
    "nft",
    "generative-art",
    "onchain",
    "burn-mechanic",
    "svg"
  ],
  "links": [
    {
      "label": "Etherscan",
      "url": "https://etherscan.io/address/0x036721e5A769Cc48B3189EFbb9ccE4471E8A48B1"
    },
    {
      "label": "Website",
      "url": "https://checks.art"
    },
    {
      "label": "Jack Butcher",
      "url": "https://www.jack.art/checks-originals"
    }
  ],
  "theme": {
    "accent": "#E84AA9"
  },
  "groups": {
    "minting": {
      "label": "Minting",
      "order": 1
    },
    "art": {
      "label": "Artwork",
      "order": 2
    },
    "compositing": {
      "label": "Compositing",
      "order": 3
    },
    "info": {
      "label": "Token Info",
      "order": 4
    }
  },
  "actions": {
    "mint": {
      "title": "Mint Original",
      "description": "Mint Checks Originals by burning the corresponding Edition tokens, minting each Original onchain with the same token ID.",
      "group": "minting",
      "params": {
        "tokenIds": {
          "label": "edition token IDs",
          "description": "The Edition token IDs to mint"
        },
        "recipient": {
          "label": "recipient",
          "description": "Address to receive the Originals",
          "type": "address"
        }
      }
    },
    "getCheck": {
      "title": "Get Check",
      "description": "Look up the full onchain data for a specific Check, including its visual genome and compositing history.",
      "stateMutability": "view",
      "group": "art",
      "params": {
        "tokenId": {
          "label": "token ID",
          "description": "The Check token ID (matches the original edition number)",
          "type": "token-id"
        }
      },
      "examples": [
        {
          "label": "Look up Check #1",
          "params": {
            "tokenId": "1"
          }
        },
        {
          "label": "Look up Check #8000",
          "params": {
            "tokenId": "8000"
          }
        }
      ]
    },
    "svg": {
      "title": "Render SVG",
      "description": "Render the fully onchain SVG artwork for a Check. The entire image is generated from contract storage.",
      "stateMutability": "view",
      "group": "art",
      "params": {
        "tokenId": {
          "label": "token ID",
          "type": "token-id"
        }
      },
      "related": [
        "colors",
        "tokenURI"
      ]
    },
    "colors": {
      "title": "Colors",
      "description": "Get the color names and values used in a specific Check.",
      "stateMutability": "view",
      "group": "art",
      "params": {
        "tokenId": {
          "label": "token ID",
          "type": "token-id"
        }
      },
      "related": [
        "svg",
        "getCheck"
      ]
    },
    "tokenURI": {
      "title": "Token URI",
      "description": "Returns the full onchain metadata and base64-encoded SVG for a Check. No external hosting or IPFS dependency.",
      "stateMutability": "view",
      "group": "art",
      "params": {
        "tokenId": {
          "label": "token ID",
          "type": "token-id"
        }
      },
      "related": [
        "svg"
      ]
    },
    "composite": {
      "title": "Composite",
      "description": "Burn two Checks of the same tier to create one of the next tier; the kept token ID carries forward.",
      "intent": "Composite Check #{tokenId} with #{burnId}",
      "group": "compositing",
      "warning": "Permanently burns one token. The burn cannot be reversed.",
      "_component": "checks-composite-preview",
      "params": {
        "tokenId": {
          "label": "keep token ID",
          "description": "The token ID to keep (carries forward)",
          "type": "token-id"
        },
        "burnId": {
          "label": "burn token ID",
          "description": "The token ID to burn",
          "type": "token-id"
        },
        "swap": {
          "label": "swap visual",
          "description": "Use the burned token's colors instead of the kept token's; the kept token ID survives but takes the burned look."
        }
      },
      "related": [
        "simulateComposite",
        "compositeMany",
        "getCheck"
      ]
    },
    "compositeMany": {
      "title": "Composite Many",
      "description": "Batch-composite multiple pairs of Checks in a single transaction. Each pair burns one token and keeps the other.",
      "group": "compositing",
      "warning": "Permanently burns tokens. Burns cannot be reversed.",
      "params": {
        "tokenIds": {
          "label": "keep token IDs",
          "description": "The token IDs to keep"
        },
        "burnIds": {
          "label": "burn token IDs",
          "description": "The token IDs to burn (matched by index with keep IDs)"
        }
      },
      "related": [
        "composite"
      ]
    },
    "simulateComposite": {
      "title": "Simulate Composite",
      "description": "Preview what a composite would produce without executing it. Returns the resulting Check data.",
      "intent": "Preview composite of #{tokenId} with #{burnId}",
      "stateMutability": "view",
      "group": "compositing",
      "params": {
        "tokenId": {
          "label": "keep token ID",
          "type": "token-id"
        },
        "burnId": {
          "label": "burn token ID",
          "type": "token-id"
        }
      },
      "related": [
        "simulateCompositeSVG",
        "composite"
      ]
    },
    "simulateCompositeSVG": {
      "title": "Simulate Composite SVG",
      "description": "Preview the SVG artwork that would result from compositing two Checks, without executing the burn.",
      "stateMutability": "view",
      "group": "compositing",
      "params": {
        "tokenId": {
          "label": "keep token ID",
          "type": "token-id"
        },
        "burnId": {
          "label": "burn token ID",
          "type": "token-id"
        }
      },
      "related": [
        "simulateComposite",
        "composite"
      ]
    },
    "infinity": {
      "title": "Infinity (Black Check)",
      "description": "Burn 64 single-check tokens to create a Black Check, the rarest outcome — at most 3 can ever exist.",
      "intent": "Burn 64 single-check tokens to create a Black Check",
      "group": "compositing",
      "warning": "Irreversibly burns 64 single-check tokens. Requires all tokens to be single-checks.",
      "params": {
        "tokenIds": {
          "label": "token IDs",
          "description": "64 single-check token IDs to burn"
        }
      },
      "related": [
        "composite",
        "getCheck"
      ]
    },
    "inItForTheArt": {
      "title": "Sacrifice",
      "description": "Sacrifice one Check to overwrite another's visual identity, burning the sacrificed token.",
      "intent": "Sacrifice Check #{burnId} to transfer its visual to #{tokenId}",
      "group": "compositing",
      "warning": "Permanently burns the sacrificed token.",
      "params": {
        "tokenId": {
          "label": "receiving token ID",
          "description": "The token that receives the visual",
          "type": "token-id"
        },
        "burnId": {
          "label": "sacrificed token ID",
          "description": "The token to burn (its visual transfers to the receiver)",
          "type": "token-id"
        }
      },
      "related": [
        "inItForTheArts"
      ]
    },
    "inItForTheArts": {
      "title": "Sacrifice Many",
      "description": "Batch-sacrifice multiple Checks in a single transaction.",
      "group": "compositing",
      "warning": "Permanently burns the sacrificed tokens.",
      "params": {
        "tokenIds": {
          "label": "receiving token IDs"
        },
        "burnIds": {
          "label": "sacrificed token IDs"
        }
      },
      "related": [
        "inItForTheArt"
      ]
    },
    "burn": {
      "title": "Burn",
      "description": "Permanently burn a Check. The token is destroyed and removed from supply.",
      "intent": "Burn Check #{tokenId}",
      "group": "compositing",
      "warning": "Irreversible — the token is permanently destroyed.",
      "params": {
        "tokenId": {
          "label": "token ID",
          "type": "token-id"
        }
      }
    },
    "resolveEpochIfNecessary": {
      "title": "Resolve Epoch",
      "description": "Resolve the current epoch via commit-reveal, seeding the randomness for token traits; usually automatic.",
      "group": "info"
    },
    "getEpoch": {
      "title": "Current Epoch",
      "description": "Returns the current epoch index.",
      "stateMutability": "view",
      "group": "info",
      "related": [
        "getEpochData"
      ]
    },
    "getEpochData": {
      "title": "Epoch Data",
      "description": "Returns data for a specific epoch, including the reveal block used for randomness.",
      "stateMutability": "view",
      "group": "info",
      "params": {
        "index": {
          "label": "epoch index"
        }
      },
      "related": [
        "getEpoch"
      ]
    },
    "totalSupply": {
      "title": "Total Supply",
      "description": "Current number of Checks Originals in existence (minted minus burned).",
      "stateMutability": "view",
      "group": "info"
    },
    "name": {
      "title": "Name",
      "description": "The name of the contract (Checks).",
      "stateMutability": "view",
      "group": "info"
    },
    "symbol": {
      "title": "Symbol",
      "description": "The token symbol (CHECKS).",
      "stateMutability": "view",
      "group": "info"
    }
  },
  "events": {
    "Composite": {
      "description": "Emitted when two Checks are composited, burning one and producing a piece with fewer checks (e.g. 80 → 40).",
      "params": {
        "tokenId": {
          "label": "kept token ID",
          "type": "token-id"
        },
        "burnId": {
          "label": "burned token ID",
          "type": "token-id"
        },
        "divisor": {
          "label": "new divisor"
        }
      }
    },
    "Sacrifice": {
      "description": "Emitted when a Check is sacrificed to transfer its visual identity to another.",
      "params": {
        "burnId": {
          "label": "sacrificed token ID",
          "type": "token-id"
        },
        "tokenId": {
          "label": "receiving token ID",
          "type": "token-id"
        }
      }
    },
    "Infinity": {
      "description": "Emitted when 64 single-check tokens are burned to create a Black Check.",
      "params": {
        "blackCheckId": {
          "label": "Black Check token ID",
          "type": "token-id"
        },
        "tokenIds": {
          "label": "burned token IDs"
        }
      }
    },
    "NewEpoch": {
      "description": "Emitted when a new epoch is created for the commit-reveal randomness scheme.",
      "params": {
        "epoch": {
          "label": "epoch index"
        },
        "revealBlock": {
          "label": "reveal block"
        }
      }
    },
    "MetadataUpdate": {
      "description": "Emitted when a token's metadata changes (e.g. after compositing).",
      "params": {
        "_tokenId": {
          "label": "token ID",
          "type": "token-id"
        }
      }
    }
  }
}
