{
  "name": "Nullo",
  "chain": {
    "name": "Robinhood Chain",
    "id": 4663,
    "rpc": "https://rpc.mainnet.chain.robinhood.com",
    "explorer": "https://robinhoodchain.blockscout.com"
  },
  "contracts": {
    "NulloSpenderLabels": {
      "address": null,
      "deployedBlock": null,
      "status": "not deployed yet",
      "abi": [
        {
          "name": "MAX_NAME",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "MAX_URL",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "MAX_CATEGORY",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint8"
            }
          ]
        },
        {
          "name": "MAX_REASON",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint8"
            }
          ]
        },
        {
          "name": "MAX_PAGE",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "totalLabels",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "totalFlags",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "setLabel",
          "type": "function",
          "stateMutability": "nonpayable",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            },
            {
              "type": "string",
              "name": "name"
            },
            {
              "type": "uint8",
              "name": "category"
            },
            {
              "type": "string",
              "name": "url"
            }
          ],
          "outputs": []
        },
        {
          "name": "removeLabel",
          "type": "function",
          "stateMutability": "nonpayable",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            }
          ],
          "outputs": []
        },
        {
          "name": "flag",
          "type": "function",
          "stateMutability": "nonpayable",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            },
            {
              "type": "uint8",
              "name": "reason"
            }
          ],
          "outputs": []
        },
        {
          "name": "unflag",
          "type": "function",
          "stateMutability": "nonpayable",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            }
          ],
          "outputs": []
        },
        {
          "name": "getLabel",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            },
            {
              "type": "address",
              "name": "author"
            }
          ],
          "outputs": [
            {
              "type": "tuple",
              "components": [
                {
                  "type": "address",
                  "name": "author"
                },
                {
                  "type": "uint8",
                  "name": "category"
                },
                {
                  "type": "uint64",
                  "name": "updatedAt"
                },
                {
                  "type": "uint64",
                  "name": "chainBlock"
                },
                {
                  "type": "bytes32",
                  "name": "urlHash"
                },
                {
                  "type": "string",
                  "name": "name"
                }
              ]
            }
          ]
        },
        {
          "name": "labelsOf",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            },
            {
              "type": "uint256",
              "name": "offset"
            },
            {
              "type": "uint256",
              "name": "limit"
            }
          ],
          "outputs": [
            {
              "type": "tuple[]",
              "name": "out",
              "components": [
                {
                  "type": "address",
                  "name": "author"
                },
                {
                  "type": "uint8",
                  "name": "category"
                },
                {
                  "type": "uint64",
                  "name": "updatedAt"
                },
                {
                  "type": "uint64",
                  "name": "chainBlock"
                },
                {
                  "type": "bytes32",
                  "name": "urlHash"
                },
                {
                  "type": "string",
                  "name": "name"
                }
              ]
            }
          ]
        },
        {
          "name": "countsOf",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            }
          ],
          "outputs": [
            {
              "type": "uint32",
              "name": "labels"
            },
            {
              "type": "uint32",
              "name": "flags"
            },
            {
              "type": "uint32[9]",
              "name": "byCategory"
            },
            {
              "type": "uint32[7]",
              "name": "byReason"
            }
          ]
        },
        {
          "name": "flagOf",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            },
            {
              "type": "address",
              "name": "flagger"
            }
          ],
          "outputs": [
            {
              "type": "uint8"
            }
          ]
        },
        {
          "name": "labelCountOf",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "address",
              "name": "author"
            }
          ],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "spendersLabelledBy",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "address",
              "name": "author"
            },
            {
              "type": "uint256",
              "name": "offset"
            },
            {
              "type": "uint256",
              "name": "limit"
            }
          ],
          "outputs": [
            {
              "type": "address[]",
              "name": "out"
            }
          ]
        },
        {
          "name": "spenderCount",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "spendersFrom",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "uint256",
              "name": "offset"
            },
            {
              "type": "uint256",
              "name": "limit"
            }
          ],
          "outputs": [
            {
              "type": "address[]",
              "name": "out"
            }
          ]
        },
        {
          "name": "chainBlock",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint64"
            }
          ]
        },
        {
          "name": "Labeled",
          "type": "event",
          "inputs": [
            {
              "type": "address",
              "name": "spender",
              "indexed": true
            },
            {
              "type": "address",
              "name": "author",
              "indexed": true
            },
            {
              "type": "string",
              "name": "name"
            },
            {
              "type": "uint8",
              "name": "category"
            },
            {
              "type": "string",
              "name": "url"
            },
            {
              "type": "bytes32",
              "name": "urlHash"
            },
            {
              "type": "bool",
              "name": "updated"
            },
            {
              "type": "uint64",
              "name": "chainBlock"
            }
          ]
        },
        {
          "name": "LabelRemoved",
          "type": "event",
          "inputs": [
            {
              "type": "address",
              "name": "spender",
              "indexed": true
            },
            {
              "type": "address",
              "name": "author",
              "indexed": true
            },
            {
              "type": "uint64",
              "name": "chainBlock"
            }
          ]
        },
        {
          "name": "Flagged",
          "type": "event",
          "inputs": [
            {
              "type": "address",
              "name": "spender",
              "indexed": true
            },
            {
              "type": "address",
              "name": "flagger",
              "indexed": true
            },
            {
              "type": "uint8",
              "name": "reason"
            },
            {
              "type": "uint64",
              "name": "chainBlock"
            }
          ]
        },
        {
          "name": "Unflagged",
          "type": "event",
          "inputs": [
            {
              "type": "address",
              "name": "spender",
              "indexed": true
            },
            {
              "type": "address",
              "name": "flagger",
              "indexed": true
            },
            {
              "type": "uint64",
              "name": "chainBlock"
            }
          ]
        },
        {
          "name": "ZeroSpender",
          "type": "error",
          "inputs": []
        },
        {
          "name": "BadName",
          "type": "error",
          "inputs": []
        },
        {
          "name": "BadUrl",
          "type": "error",
          "inputs": []
        },
        {
          "name": "BadCategory",
          "type": "error",
          "inputs": [
            {
              "type": "uint8",
              "name": "category"
            }
          ]
        },
        {
          "name": "BadReason",
          "type": "error",
          "inputs": [
            {
              "type": "uint8",
              "name": "reason"
            }
          ]
        },
        {
          "name": "NoLabel",
          "type": "error",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            },
            {
              "type": "address",
              "name": "author"
            }
          ]
        },
        {
          "name": "AlreadyFlagged",
          "type": "error",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            }
          ]
        },
        {
          "name": "NotFlagged",
          "type": "error",
          "inputs": [
            {
              "type": "address",
              "name": "spender"
            }
          ]
        },
        {
          "name": "SelfFlag",
          "type": "error",
          "inputs": []
        },
        {
          "name": "PageTooLarge",
          "type": "error",
          "inputs": []
        }
      ]
    }
  },
  "notes": "Categories 1..8, flag reasons 1..6. One label and one flag per wallet per spender. No owner, no fees, never holds funds, never hides anything."
}