{
  "name": "Morvio",
  "chain": {
    "name": "Robinhood Chain",
    "id": 4663,
    "rpc": "https://rpc.mainnet.chain.robinhood.com",
    "explorer": "https://robinhoodchain.blockscout.com"
  },
  "contracts": {
    "MorvioCharacterBook": {
      "address": "0x907b486f4856fd6f2fff71a920cc114cea3916ee",
      "deployedBlock": 104958291,
      "status": "deployed",
      "abi": [
        {
          "type": "function",
          "name": "MAX_BIO",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "MAX_HANDLE",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "MAX_NAME",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "MAX_PAGE",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "MAX_REASON",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint8",
              "internalType": "uint8"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "MAX_URI",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "MAX_VERSIONS",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint32",
              "internalType": "uint32"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "MIN_HANDLE",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "acceptOwnership",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "addVersion",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "manifestHash",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "uri",
              "type": "string",
              "internalType": "string"
            }
          ],
          "outputs": [
            {
              "name": "version",
              "type": "uint32",
              "internalType": "uint32"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "chainBlock",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint64",
              "internalType": "uint64"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "endorse",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "flag",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "reason",
              "type": "uint8",
              "internalType": "uint8"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "getCharacter",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "tuple",
              "internalType": "struct MorvioCharacterBook.Character",
              "components": [
                {
                  "name": "creator",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "owner",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "pendingOwner",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "createdAt",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "createdBlock",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "parentId",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "parentVersion",
                  "type": "uint32",
                  "internalType": "uint32"
                },
                {
                  "name": "versionCount",
                  "type": "uint32",
                  "internalType": "uint32"
                },
                {
                  "name": "remixCount",
                  "type": "uint32",
                  "internalType": "uint32"
                },
                {
                  "name": "endorsements",
                  "type": "uint32",
                  "internalType": "uint32"
                },
                {
                  "name": "flags",
                  "type": "uint32",
                  "internalType": "uint32"
                },
                {
                  "name": "status",
                  "type": "uint8",
                  "internalType": "enum MorvioCharacterBook.Status"
                },
                {
                  "name": "remixOpen",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "name",
                  "type": "string",
                  "internalType": "string"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "getVersion",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "version",
              "type": "uint32",
              "internalType": "uint32"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "tuple",
              "internalType": "struct MorvioCharacterBook.Version",
              "components": [
                {
                  "name": "manifestHash",
                  "type": "bytes32",
                  "internalType": "bytes32"
                },
                {
                  "name": "publishedBy",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "publishedAt",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "publishedBlock",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "uri",
                  "type": "string",
                  "internalType": "string"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "handleOwner",
          "inputs": [
            {
              "name": "handle",
              "type": "string",
              "internalType": "string"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "hasEndorsed",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "hasFlagged",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "idsByCreator",
          "inputs": [
            {
              "name": "creator",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "offset",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "count",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint64[]",
              "internalType": "uint64[]"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "offerOwnership",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "to",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "page",
          "inputs": [
            {
              "name": "fromId",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "count",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "characters",
              "type": "tuple[]",
              "internalType": "struct MorvioCharacterBook.Character[]",
              "components": [
                {
                  "name": "creator",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "owner",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "pendingOwner",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "createdAt",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "createdBlock",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "parentId",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "parentVersion",
                  "type": "uint32",
                  "internalType": "uint32"
                },
                {
                  "name": "versionCount",
                  "type": "uint32",
                  "internalType": "uint32"
                },
                {
                  "name": "remixCount",
                  "type": "uint32",
                  "internalType": "uint32"
                },
                {
                  "name": "endorsements",
                  "type": "uint32",
                  "internalType": "uint32"
                },
                {
                  "name": "flags",
                  "type": "uint32",
                  "internalType": "uint32"
                },
                {
                  "name": "status",
                  "type": "uint8",
                  "internalType": "enum MorvioCharacterBook.Status"
                },
                {
                  "name": "remixOpen",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "name",
                  "type": "string",
                  "internalType": "string"
                }
              ]
            },
            {
              "name": "latest",
              "type": "tuple[]",
              "internalType": "struct MorvioCharacterBook.Version[]",
              "components": [
                {
                  "name": "manifestHash",
                  "type": "bytes32",
                  "internalType": "bytes32"
                },
                {
                  "name": "publishedBy",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "publishedAt",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "publishedBlock",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "uri",
                  "type": "string",
                  "internalType": "string"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "profileOf",
          "inputs": [
            {
              "name": "creator",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "tuple",
              "internalType": "struct MorvioCharacterBook.Profile",
              "components": [
                {
                  "name": "handle",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "bio",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "updatedAt",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "published",
                  "type": "uint32",
                  "internalType": "uint32"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "publish",
          "inputs": [
            {
              "name": "name",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "manifestHash",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "uri",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "parentId",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "parentVersion",
              "type": "uint32",
              "internalType": "uint32"
            },
            {
              "name": "remixOpen",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "outputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "remixesOf",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "offset",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "count",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint64[]",
              "internalType": "uint64[]"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "roleOf",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "uint8",
              "internalType": "enum MorvioCharacterBook.Role"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "setProfile",
          "inputs": [
            {
              "name": "handle",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "bio",
              "type": "string",
              "internalType": "string"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setRemixOpen",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "open",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setRole",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "account",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "role",
              "type": "uint8",
              "internalType": "enum MorvioCharacterBook.Role"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setStatus",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "status",
              "type": "uint8",
              "internalType": "enum MorvioCharacterBook.Status"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "total",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint64",
              "internalType": "uint64"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "totalEndorsements",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "totalFlags",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "totalVersions",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "versions",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "fromVersion",
              "type": "uint32",
              "internalType": "uint32"
            },
            {
              "name": "count",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "out",
              "type": "tuple[]",
              "internalType": "struct MorvioCharacterBook.Version[]",
              "components": [
                {
                  "name": "manifestHash",
                  "type": "bytes32",
                  "internalType": "bytes32"
                },
                {
                  "name": "publishedBy",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "publishedAt",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "publishedBlock",
                  "type": "uint64",
                  "internalType": "uint64"
                },
                {
                  "name": "uri",
                  "type": "string",
                  "internalType": "string"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "event",
          "name": "CharacterPublished",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "indexed": true,
              "internalType": "uint64"
            },
            {
              "name": "creator",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "parentId",
              "type": "uint64",
              "indexed": true,
              "internalType": "uint64"
            },
            {
              "name": "parentVersion",
              "type": "uint32",
              "indexed": false,
              "internalType": "uint32"
            },
            {
              "name": "name",
              "type": "string",
              "indexed": false,
              "internalType": "string"
            },
            {
              "name": "manifestHash",
              "type": "bytes32",
              "indexed": false,
              "internalType": "bytes32"
            },
            {
              "name": "uri",
              "type": "string",
              "indexed": false,
              "internalType": "string"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "Endorsed",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "indexed": true,
              "internalType": "uint64"
            },
            {
              "name": "by",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "Flagged",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "indexed": true,
              "internalType": "uint64"
            },
            {
              "name": "by",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "reason",
              "type": "uint8",
              "indexed": false,
              "internalType": "uint8"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipMoved",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "indexed": true,
              "internalType": "uint64"
            },
            {
              "name": "from",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "to",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipOffered",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "indexed": true,
              "internalType": "uint64"
            },
            {
              "name": "from",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "to",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "ProfileSet",
          "inputs": [
            {
              "name": "creator",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "handle",
              "type": "string",
              "indexed": false,
              "internalType": "string"
            },
            {
              "name": "bio",
              "type": "string",
              "indexed": false,
              "internalType": "string"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "RemixToggled",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "indexed": true,
              "internalType": "uint64"
            },
            {
              "name": "open",
              "type": "bool",
              "indexed": false,
              "internalType": "bool"
            },
            {
              "name": "by",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "RoleSet",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "indexed": true,
              "internalType": "uint64"
            },
            {
              "name": "account",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "role",
              "type": "uint8",
              "indexed": false,
              "internalType": "enum MorvioCharacterBook.Role"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "StatusChanged",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "indexed": true,
              "internalType": "uint64"
            },
            {
              "name": "status",
              "type": "uint8",
              "indexed": false,
              "internalType": "enum MorvioCharacterBook.Status"
            },
            {
              "name": "by",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "VersionAdded",
          "inputs": [
            {
              "name": "id",
              "type": "uint64",
              "indexed": true,
              "internalType": "uint64"
            },
            {
              "name": "version",
              "type": "uint32",
              "indexed": false,
              "internalType": "uint32"
            },
            {
              "name": "by",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "manifestHash",
              "type": "bytes32",
              "indexed": false,
              "internalType": "bytes32"
            },
            {
              "name": "uri",
              "type": "string",
              "indexed": false,
              "internalType": "string"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "AlreadyEndorsed",
          "inputs": []
        },
        {
          "type": "error",
          "name": "AlreadyFlagged",
          "inputs": []
        },
        {
          "type": "error",
          "name": "BadAddress",
          "inputs": []
        },
        {
          "type": "error",
          "name": "BadBio",
          "inputs": []
        },
        {
          "type": "error",
          "name": "BadHandle",
          "inputs": []
        },
        {
          "type": "error",
          "name": "BadHash",
          "inputs": []
        },
        {
          "type": "error",
          "name": "BadName",
          "inputs": []
        },
        {
          "type": "error",
          "name": "BadReason",
          "inputs": []
        },
        {
          "type": "error",
          "name": "BadRole",
          "inputs": []
        },
        {
          "type": "error",
          "name": "BadStatus",
          "inputs": []
        },
        {
          "type": "error",
          "name": "BadUri",
          "inputs": []
        },
        {
          "type": "error",
          "name": "CharacterLocked",
          "inputs": []
        },
        {
          "type": "error",
          "name": "CharacterRetired",
          "inputs": []
        },
        {
          "type": "error",
          "name": "HandleTaken",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NoChange",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NoPendingOwner",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotCurator",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotEditor",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotOwner",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotPendingOwner",
          "inputs": []
        },
        {
          "type": "error",
          "name": "OwnCharacter",
          "inputs": []
        },
        {
          "type": "error",
          "name": "RemixClosed",
          "inputs": []
        },
        {
          "type": "error",
          "name": "SameManifest",
          "inputs": []
        },
        {
          "type": "error",
          "name": "TooManyVersions",
          "inputs": []
        },
        {
          "type": "error",
          "name": "UnknownCharacter",
          "inputs": []
        },
        {
          "type": "error",
          "name": "UnknownVersion",
          "inputs": []
        }
      ]
    }
  },
  "notes": "manifestHash is keccak256 of canonical JSON (object keys sorted at every depth, no whitespace). No owner, no fees, holds no funds."
}