{
  "work": "echoes",
  "pinned": [
    "0xece27fabd815edcb8919a0119313d4797dfb3bf7/echoes.sol"
  ],
  "contracts": [
    {
      "name": "Echoes",
      "address": "0xece27fabd815edcb8919a0119313d4797dfb3bf7",
      "role": "the visitors' book: its lines, its signers and its pages",
      "compiler": "0.8.7+commit.e28d00a7",
      "main": "echoes.sol",
      "files": [
        "echoes.sol",
        "base64.sol",
        "@openzeppelin/contracts/token/ERC721/ERC721.sol",
        "@openzeppelin/contracts/token/ERC721/IERC721.sol",
        "@openzeppelin/contracts/token/ERC721/IERC721Receiver.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": "echoes.sol",
          "match": "//echoes echo echoes",
          "lines": 17,
          "note": "the opening line, and the title drawn in the code"
        },
        {
          "file": "echoes.sol",
          "match": "function echo(string memory newEcho,string memory signedBy) public{",
          "lines": 14,
          "note": "one guest at a time writes a short line, then the pen comes back to the artist"
        },
        {
          "file": "echoes.sol",
          "match": "function validateSubmittedEcho(bool ok) public{",
          "lines": 17,
          "note": "the artist accepts the line, and every sixth one opens a new page"
        },
        {
          "file": "echoes.sol",
          "match": "function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {",
          "lines": 19,
          "note": "each page drawn from its lines, nothing stored but the words"
        }
      ]
    }
  ]
}
