{
  "work": "anatomy-of-love",
  "pinned": [
    "0x21bef5412e69cdcda1b258c0e7c0b9db589083c3/LoveModule.sol",
    "0x17dbcb356318b08783ac5837690bb91939b107dd/Renderer.sol"
  ],
  "contracts": [
    {
      "name": "LoveModule",
      "address": "0x21bef5412e69cdcda1b258c0e7c0b9db589083c3",
      "role": "module serving the four phases, with the heart painted into its own bytecode",
      "compiler": "0.8.11+commit.d7f03943",
      "main": "LoveModule.sol",
      "files": [
        "LoveModule.sol",
        "NiftyForge/INiftyForge721.sol",
        "NiftyForge/Modules/INFModule.sol",
        "NiftyForge/Modules/INFModuleTokenURI.sol",
        "NiftyForge/Modules/INFModuleWithRoyalties.sol",
        "NiftyForge/Modules/NFBaseModule.sol",
        "@openzeppelin/contracts/access/Ownable.sol",
        "@openzeppelin/contracts/utils/Context.sol",
        "@openzeppelin/contracts/utils/Strings.sol",
        "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
        "@openzeppelin/contracts/utils/introspection/ERC165.sol",
        "@openzeppelin/contracts/utils/introspection/IERC165.sol",
        "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"
      ],
      "focus": [
        {
          "file": "LoveModule.sol",
          "match": "/// @notice The function containing the painting of a heart",
          "lines": 4,
          "note": "the heart lives in a function that always refuses to run"
        },
        {
          "file": "LoveModule.sol",
          "match": "//first black dot of the heart black",
          "lines": 40,
          "note": "the heart painted row by row into the contract's own code"
        },
        {
          "file": "LoveModule.sol",
          "match": "if(_phase == 3){",
          "lines": 4,
          "note": "in the last phase, the work shows its own code as image"
        }
      ]
    },
    {
      "name": "Renderer",
      "address": "0x17dbcb356318b08783ac5837690bb91939b107dd",
      "role": "renderer turning the module's bytecode into a 56 by 56 bitmap",
      "compiler": "0.8.11+commit.d7f03943",
      "main": "Renderer.sol",
      "files": [
        "Renderer.sol",
        "DynamicBuffer.sol",
        "base64.sol",
        "@openzeppelin/contracts/utils/Strings.sol"
      ],
      "focus": [
        {
          "file": "Renderer.sol",
          "match": "function render(address addressToRender) public view returns",
          "lines": 20,
          "note": "the code read as the pixels of a 56 by 56 image"
        }
      ]
    }
  ]
}
