{
  "work": "smartbags",
  "pinned": [
    "0xae7ac2dc3628ace55bc8c7d534e1e19f5f6db210/contracts/SmartbagsUtils.sol",
    "0xae7ac2dc3628ace55bc8c7d534e1e19f5f6db210/contracts/Renderers/SmartbagsRenderer.sol",
    "0x0a054bc3dda5a09d917412bfff4bce24fa2a3816/contracts/Smartbags.sol"
  ],
  "contracts": [
    {
      "name": "Smartbags",
      "address": "0x0a054bc3dda5a09d917412bfff4bce24fa2a3816",
      "role": "minter module that builds each bag's metadata from the chosen contract",
      "compiler": "0.8.9+commit.e5eed63a",
      "main": "contracts/Smartbags.sol",
      "files": [
        "contracts/Smartbags.sol",
        "contracts/SmartbagsUtils.sol",
        "contracts/utils/Base64.sol",
        "@0xdievardump/niftyforge/contracts/INiftyForge721Slim.sol",
        "@0xdievardump/niftyforge/contracts/Modules/INFModuleTokenURI.sol",
        "@0xdievardump/niftyforge/contracts/Modules/INFModuleWithRoyalties.sol",
        "@0xdievardump/niftyforge/contracts/Modules/NFBaseModuleSlim.sol",
        "@0xdievardump/niftyforge/contracts/NFT/ERC721/IERC721WithRoyalties.sol",
        "@0xdievardump/niftyforge/contracts/NFT/IERC721Slim.sol",
        "@0xdievardump/niftyforge/contracts/NFT/Royalties/ERC2981/IERC2981Royalties.sol",
        "@0xdievardump/niftyforge/contracts/NFT/Royalties/FoundationSecondarySales/IFoundationSecondarySales.sol",
        "@0xdievardump/niftyforge/contracts/NFT/Royalties/RaribleSecondarySales/IRaribleSecondarySales.sol",
        "@0xsequence/sstore2/contracts/SSTORE2.sol",
        "@0xsequence/sstore2/contracts/utils/Bytecode.sol",
        "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol",
        "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol",
        "@openzeppelin/contracts/access/Ownable.sol",
        "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "@openzeppelin/contracts/token/ERC721/IERC721.sol",
        "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
        "@openzeppelin/contracts/utils/Address.sol",
        "@openzeppelin/contracts/utils/Context.sol",
        "@openzeppelin/contracts/utils/Strings.sol",
        "@openzeppelin/contracts/utils/introspection/ERC165.sol",
        "@openzeppelin/contracts/utils/introspection/IERC165.sol"
      ],
      "focus": [
        {
          "file": "contracts/Smartbags.sol",
          "match": "// get color from contract address",
          "lines": 15,
          "note": "the bag takes its colour and name from the chosen contract"
        }
      ]
    },
    {
      "name": "SmartbagsRenderer",
      "address": "0xae7ac2dc3628ace55bc8c7d534e1e19f5f6db210",
      "role": "renderer that reads a contract's deployed code and draws the bag svg",
      "compiler": "0.8.9+commit.e5eed63a",
      "main": "contracts/Renderers/SmartbagsRenderer.sol",
      "files": [
        "contracts/Renderers/SmartbagsRenderer.sol",
        "contracts/SmartbagsUtils.sol",
        "contracts/utils/Base64.sol",
        "@openzeppelin/contracts/token/ERC721/IERC721.sol",
        "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
        "@openzeppelin/contracts/utils/Strings.sol",
        "@openzeppelin/contracts/utils/introspection/IERC165.sol"
      ],
      "focus": [
        {
          "file": "contracts/SmartbagsUtils.sol",
          "match": "function renderContract(address _addr, uint256 length)",
          "lines": 35,
          "note": "a slice of the chosen contract's code, short ones padded white"
        },
        {
          "file": "contracts/Renderers/SmartbagsRenderer.sol",
          "match": "string memory imgDataURI = Base64.toB64SVG(",
          "lines": 26,
          "note": "that code becomes a 56 by 56 picture"
        },
        {
          "file": "contracts/Renderers/SmartbagsRenderer.sol",
          "match": "\"<use href='#t' style='mix-blend-mode:screen;opacity:.8;'/>\",",
          "lines": 3,
          "note": "the plastic texture laid over the bag three times"
        }
      ]
    }
  ]
}
