{
  "work": "seamless",
  "pinned": [
    "0x40f83cb9491208a83a0dd06f312365eacc894925/contracts/SeamlessRenderer.sol",
    "0xa0ec2ed65ab699f9fffe89a7793abccfbfd89d86/contracts/Seamless.sol"
  ],
  "contracts": [
    {
      "name": "Seamless",
      "address": "0xa0ec2ed65ab699f9fffe89a7793abccfbfd89d86",
      "role": "token for the three works, ten editions each",
      "compiler": "0.8.27+commit.40a35a09",
      "main": "contracts/Seamless.sol",
      "files": [
        "contracts/Seamless.sol",
        "lib/openzeppelin-contracts/contracts/access/Ownable.sol",
        "lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol",
        "lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol",
        "lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol",
        "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol",
        "lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol",
        "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol",
        "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol",
        "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol",
        "lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol",
        "lib/openzeppelin-contracts/contracts/utils/Bytes.sol",
        "lib/openzeppelin-contracts/contracts/utils/Context.sol",
        "lib/openzeppelin-contracts/contracts/utils/Panic.sol",
        "lib/openzeppelin-contracts/contracts/utils/Strings.sol",
        "lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol",
        "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol",
        "lib/openzeppelin-contracts/contracts/utils/math/Math.sol",
        "lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol",
        "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol"
      ],
      "focus": [
        {
          "file": "contracts/Seamless.sol",
          "match": "/// @notice Editions minted so far per artwork",
          "lines": 5,
          "note": "a collector chooses the work, never the edition number"
        }
      ]
    },
    {
      "name": "SeamlessRenderer",
      "address": "0x40f83cb9491208a83a0dd06f312365eacc894925",
      "role": "renderer assembling each work from the chain",
      "compiler": "0.8.27+commit.40a35a09",
      "main": "contracts/SeamlessRenderer.sol",
      "files": [
        "contracts/SeamlessRenderer.sol",
        "lib/openzeppelin-contracts/contracts/access/Ownable.sol",
        "lib/openzeppelin-contracts/contracts/utils/Base64.sol",
        "lib/openzeppelin-contracts/contracts/utils/Bytes.sol",
        "lib/openzeppelin-contracts/contracts/utils/Context.sol",
        "lib/openzeppelin-contracts/contracts/utils/Panic.sol",
        "lib/openzeppelin-contracts/contracts/utils/Strings.sol",
        "lib/openzeppelin-contracts/contracts/utils/math/Math.sol",
        "lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol",
        "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol"
      ],
      "focus": [
        {
          "file": "contracts/SeamlessRenderer.sol",
          "match": "string[3] public descriptions = [",
          "lines": 5,
          "note": "three epigraphs: blake, rimbaud and rousseau"
        },
        {
          "file": "contracts/SeamlessRenderer.sol",
          "match": "function generateHTML(uint256 tokenId) private view returns (bytes memory) {",
          "lines": 23,
          "note": "each work, its mask and the carving kernel, all read from the chain"
        }
      ]
    }
  ]
}
