{
  "work": "the-beacon",
  "pinned": [
    "0x69f99ddd2add94c043436193ae47f7502ef02725/contracts/BeaconRenderer.sol",
    "0xb9c4a850d14e1abeaacd79a07fe107749f9a8f2a/contracts/EthDrive.sol"
  ],
  "contracts": [
    {
      "name": "Beacon",
      "address": "0x4ba7895a07b22fb321b8cb7e7fdb766c7649785b",
      "role": "token contract delegating its metadata to the renderer",
      "compiler": "0.8.27+commit.40a35a09",
      "main": "contracts/Beacon.sol",
      "files": [
        "contracts/Beacon.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"
      ]
    },
    {
      "name": "BeaconRenderer",
      "address": "0x69f99ddd2add94c043436193ae47f7502ef02725",
      "role": "renderer assembling the html, css, javascript and jpeg",
      "compiler": "0.8.27+commit.40a35a09",
      "main": "contracts/BeaconRenderer.sol",
      "files": [
        "contracts/BeaconRenderer.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",
        "lib/solady/src/utils/DynamicBufferLib.sol"
      ],
      "focus": [
        {
          "file": "contracts/BeaconRenderer.sol",
          "match": "function generateHTML() private view returns (bytes memory HTML) {",
          "lines": 16,
          "note": "the page assembled, with a backup image written into it"
        },
        {
          "file": "contracts/BeaconRenderer.sol",
          "match": "function generateMetadata() private view returns (bytes memory) {",
          "lines": 10,
          "note": "the page and a still picture, both read from the chain"
        }
      ]
    },
    {
      "name": "BeaconStorage",
      "address": "0xb9c4a850d14e1abeaacd79a07fe107749f9a8f2a",
      "role": "storage holding the work's files in sstore2 chunks",
      "compiler": "0.8.27+commit.40a35a09",
      "main": "contracts/BeaconStorage.sol",
      "files": [
        "contracts/BeaconStorage.sol",
        "contracts/EthDrive.sol",
        "contracts/SSTORE2.sol",
        "lib/openzeppelin-contracts/contracts/access/Ownable.sol",
        "lib/openzeppelin-contracts/contracts/utils/Context.sol"
      ],
      "focus": [
        {
          "file": "contracts/EthDrive.sol",
          "match": "function createFile(string memory fileName, bytes[] calldata chunks) public onlyOwner {",
          "lines": 10,
          "note": "each file is written to the chain piece by piece"
        },
        {
          "file": "contracts/EthDrive.sol",
          "match": "function getFile(string memory fileName) public view returns (bytes memory) {",
          "lines": 17,
          "note": "the pieces are read back and joined into one file"
        }
      ]
    }
  ]
}
