{
  "name": "Coltra",
  "chain": {
    "name": "Robinhood Chain",
    "id": 4663,
    "rpc": "https://rpc.mainnet.chain.robinhood.com",
    "explorer": "https://robinhoodchain.blockscout.com"
  },
  "contracts": {
    "ColtraPlanBook": {
      "address": "0x8371581d17abbcac69e48d34b5d60623fefab1ff",
      "deployedBlock": 100401246,
      "status": "deployed",
      "abi": [
        {
          "name": "MAX_JSON_LENGTH",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "MIN_JSON_LENGTH",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "MAX_PAGE",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "activePlanCount",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "versionCount",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "ownerCount",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "savePlan",
          "type": "function",
          "stateMutability": "nonpayable",
          "inputs": [
            {
              "type": "string",
              "name": "json"
            }
          ],
          "outputs": [
            {
              "type": "uint256",
              "name": "planId"
            }
          ]
        },
        {
          "name": "updatePlan",
          "type": "function",
          "stateMutability": "nonpayable",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId"
            },
            {
              "type": "string",
              "name": "json"
            }
          ],
          "outputs": [
            {
              "type": "uint32",
              "name": "version"
            }
          ]
        },
        {
          "name": "retirePlan",
          "type": "function",
          "stateMutability": "nonpayable",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId"
            }
          ],
          "outputs": []
        },
        {
          "name": "planCount",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "getPlan",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId"
            }
          ],
          "outputs": [
            {
              "type": "tuple",
              "name": "v",
              "components": [
                {
                  "type": "uint256",
                  "name": "id"
                },
                {
                  "type": "address",
                  "name": "owner"
                },
                {
                  "type": "uint32",
                  "name": "version"
                },
                {
                  "type": "bool",
                  "name": "retired"
                },
                {
                  "type": "uint64",
                  "name": "createdBlock"
                },
                {
                  "type": "uint64",
                  "name": "updatedBlock"
                },
                {
                  "type": "uint64",
                  "name": "updatedAt"
                },
                {
                  "type": "bytes32",
                  "name": "contentHash"
                }
              ]
            }
          ]
        },
        {
          "name": "planCountOf",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "address",
              "name": "owner"
            }
          ],
          "outputs": [
            {
              "type": "uint256"
            }
          ]
        },
        {
          "name": "planIdsOf",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "address",
              "name": "owner"
            },
            {
              "type": "uint256",
              "name": "offset"
            },
            {
              "type": "uint256",
              "name": "limit"
            }
          ],
          "outputs": [
            {
              "type": "uint256[]",
              "name": "out"
            }
          ]
        },
        {
          "name": "plansOf",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "address",
              "name": "owner"
            },
            {
              "type": "uint256",
              "name": "offset"
            },
            {
              "type": "uint256",
              "name": "limit"
            }
          ],
          "outputs": [
            {
              "type": "tuple[]",
              "name": "out",
              "components": [
                {
                  "type": "uint256",
                  "name": "id"
                },
                {
                  "type": "address",
                  "name": "owner"
                },
                {
                  "type": "uint32",
                  "name": "version"
                },
                {
                  "type": "bool",
                  "name": "retired"
                },
                {
                  "type": "uint64",
                  "name": "createdBlock"
                },
                {
                  "type": "uint64",
                  "name": "updatedBlock"
                },
                {
                  "type": "uint64",
                  "name": "updatedAt"
                },
                {
                  "type": "bytes32",
                  "name": "contentHash"
                }
              ]
            }
          ]
        },
        {
          "name": "plans",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "uint256",
              "name": "fromId"
            },
            {
              "type": "uint256",
              "name": "limit"
            }
          ],
          "outputs": [
            {
              "type": "tuple[]",
              "name": "out",
              "components": [
                {
                  "type": "uint256",
                  "name": "id"
                },
                {
                  "type": "address",
                  "name": "owner"
                },
                {
                  "type": "uint32",
                  "name": "version"
                },
                {
                  "type": "bool",
                  "name": "retired"
                },
                {
                  "type": "uint64",
                  "name": "createdBlock"
                },
                {
                  "type": "uint64",
                  "name": "updatedBlock"
                },
                {
                  "type": "uint64",
                  "name": "updatedAt"
                },
                {
                  "type": "bytes32",
                  "name": "contentHash"
                }
              ]
            }
          ]
        },
        {
          "name": "versionBlocks",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId"
            },
            {
              "type": "uint256",
              "name": "offset"
            },
            {
              "type": "uint256",
              "name": "limit"
            }
          ],
          "outputs": [
            {
              "type": "uint64[]",
              "name": "out"
            }
          ]
        },
        {
          "name": "matchesCurrent",
          "type": "function",
          "stateMutability": "view",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId"
            },
            {
              "type": "string",
              "name": "json"
            }
          ],
          "outputs": [
            {
              "type": "bool"
            }
          ]
        },
        {
          "name": "chainBlock",
          "type": "function",
          "stateMutability": "view",
          "inputs": [],
          "outputs": [
            {
              "type": "uint64"
            }
          ]
        },
        {
          "name": "PlanSaved",
          "type": "event",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId",
              "indexed": true
            },
            {
              "type": "address",
              "name": "owner",
              "indexed": true
            },
            {
              "type": "uint32",
              "name": "version",
              "indexed": true
            },
            {
              "type": "bytes32",
              "name": "contentHash"
            },
            {
              "type": "string",
              "name": "json"
            },
            {
              "type": "uint64",
              "name": "chainBlock"
            }
          ]
        },
        {
          "name": "PlanRetired",
          "type": "event",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId",
              "indexed": true
            },
            {
              "type": "address",
              "name": "owner",
              "indexed": true
            },
            {
              "type": "uint32",
              "name": "version"
            },
            {
              "type": "uint64",
              "name": "chainBlock"
            }
          ]
        },
        {
          "name": "BadJson",
          "type": "error",
          "inputs": []
        },
        {
          "name": "UnknownPlan",
          "type": "error",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId"
            }
          ]
        },
        {
          "name": "NotPlanOwner",
          "type": "error",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId"
            }
          ]
        },
        {
          "name": "PlanIsRetired",
          "type": "error",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId"
            }
          ]
        },
        {
          "name": "SameContent",
          "type": "error",
          "inputs": [
            {
              "type": "uint256",
              "name": "planId"
            }
          ]
        }
      ]
    }
  },
  "notes": "A plan is a JSON object (max 4096 bytes) emitted in PlanSaved; contentHash = keccak256(json). versionBlocks(planId) gives the block of each version. No owner, no fees, never holds funds."
}