{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_custom",
          "type": "address"
        }
      ],
      "name": "enrollCustom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        }
      ],
      "name": "ensureLocalToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "_local",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        }
      ],
      "name": "getLocalAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "_local",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getTokenId",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "isLocalOrigin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        }
      ],
      "name": "mustHaveLocalToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_oldRepr",
          "type": "address"
        }
      ],
      "name": "oldReprToCurrentRepr",
      "outputs": [
        {
          "internalType": "address",
          "name": "_currentRepr",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "enrollCustom(uint32,bytes32,address)": "28b1aea0",
    "ensureLocalToken(uint32,bytes32)": "b869d89a",
    "getLocalAddress(uint32,bytes32)": "589b3c64",
    "getTokenId(address)": "f1537686",
    "isLocalOrigin(address)": "c86415cb",
    "mustHaveLocalToken(uint32,bytes32)": "2c3da59c",
    "oldReprToCurrentRepr(address)": "0e71e251"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/interfaces/ITokenRegistry.sol",
    "id": 33704,
    "exportedSymbols": {
      "BridgeMessage": [
        30301
      ],
      "IBridgeToken": [
        33609
      ],
      "IERC20": [
        27517
      ],
      "ITokenRegistry": [
        33703
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:1062:44",
    "nodes": [
      {
        "id": 33637,
        "nodeType": "PragmaDirective",
        "src": "46:22:44",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 33639,
        "nodeType": "ImportDirective",
        "src": "116:48:44",
        "absolutePath": "packages/contracts-bridge/contracts/interfaces/IBridgeToken.sol",
        "file": "./IBridgeToken.sol",
        "scope": 33704,
        "sourceUnit": 33610,
        "symbolAliases": [
          {
            "foreign": {
              "id": 33638,
              "name": "IBridgeToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:12:44",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 33641,
        "nodeType": "ImportDirective",
        "src": "165:51:44",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeMessage.sol",
        "file": "../BridgeMessage.sol",
        "scope": 33704,
        "sourceUnit": 30302,
        "symbolAliases": [
          {
            "foreign": {
              "id": 33640,
              "name": "BridgeMessage",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "173:13:44",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 33643,
        "nodeType": "ImportDirective",
        "src": "264:70:44",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "scope": 33704,
        "sourceUnit": 27518,
        "symbolAliases": [
          {
            "foreign": {
              "id": 33642,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "272:6:44",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 33703,
        "nodeType": "ContractDefinition",
        "src": "336:771:44",
        "nodes": [
          {
            "id": 33650,
            "nodeType": "FunctionDefinition",
            "src": "367:68:44",
            "functionSelector": "c86415cb",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "isLocalOrigin",
            "parameters": {
              "id": 33646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33645,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 33650,
                  "src": "390:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33644,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "390:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "389:16:44"
            },
            "returnParameters": {
              "id": 33649,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33648,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33650,
                  "src": "429:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 33647,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "429:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "428:6:44"
            },
            "scope": 33703,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33659,
            "nodeType": "FunctionDefinition",
            "src": "441:105:44",
            "functionSelector": "b869d89a",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ensureLocalToken",
            "parameters": {
              "id": 33655,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33652,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 33659,
                  "src": "467:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 33651,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "467:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33654,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33659,
                  "src": "483:11:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 33653,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "483:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "466:29:44"
            },
            "returnParameters": {
              "id": 33658,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33657,
                  "mutability": "mutable",
                  "name": "_local",
                  "nodeType": "VariableDeclaration",
                  "scope": 33659,
                  "src": "530:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33656,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "530:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "529:16:44"
            },
            "scope": 33703,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33668,
            "nodeType": "FunctionDefinition",
            "src": "552:112:44",
            "functionSelector": "2c3da59c",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "mustHaveLocalToken",
            "parameters": {
              "id": 33664,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33661,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 33668,
                  "src": "580:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 33660,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "580:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33663,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33668,
                  "src": "596:11:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 33662,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "596:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "579:29:44"
            },
            "returnParameters": {
              "id": 33667,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33666,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33668,
                  "src": "656:6:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$27517",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 33665,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27517,
                    "src": "656:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$27517",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "655:8:44"
            },
            "scope": 33703,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33677,
            "nodeType": "FunctionDefinition",
            "src": "670:117:44",
            "functionSelector": "589b3c64",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getLocalAddress",
            "parameters": {
              "id": 33673,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33670,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 33677,
                  "src": "695:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 33669,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "695:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33672,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33677,
                  "src": "711:11:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 33671,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "711:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "694:29:44"
            },
            "returnParameters": {
              "id": 33676,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33675,
                  "mutability": "mutable",
                  "name": "_local",
                  "nodeType": "VariableDeclaration",
                  "scope": 33677,
                  "src": "771:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33674,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "771:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "770:16:44"
            },
            "scope": 33703,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33686,
            "nodeType": "FunctionDefinition",
            "src": "793:76:44",
            "functionSelector": "f1537686",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getTokenId",
            "parameters": {
              "id": 33680,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33679,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 33686,
                  "src": "813:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33678,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "813:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "812:16:44"
            },
            "returnParameters": {
              "id": 33685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33682,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33686,
                  "src": "852:6:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 33681,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "852:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33684,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33686,
                  "src": "860:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 33683,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "860:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "851:17:44"
            },
            "scope": 33703,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33695,
            "nodeType": "FunctionDefinition",
            "src": "875:107:44",
            "functionSelector": "28b1aea0",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "enrollCustom",
            "parameters": {
              "id": 33693,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33688,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 33695,
                  "src": "906:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 33687,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "906:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33690,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33695,
                  "src": "930:11:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 33689,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "930:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33692,
                  "mutability": "mutable",
                  "name": "_custom",
                  "nodeType": "VariableDeclaration",
                  "scope": 33695,
                  "src": "951:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33691,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "951:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "896:76:44"
            },
            "returnParameters": {
              "id": 33694,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "981:0:44"
            },
            "scope": 33703,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33702,
            "nodeType": "FunctionDefinition",
            "src": "988:117:44",
            "functionSelector": "0e71e251",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "oldReprToCurrentRepr",
            "parameters": {
              "id": 33698,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33697,
                  "mutability": "mutable",
                  "name": "_oldRepr",
                  "nodeType": "VariableDeclaration",
                  "scope": 33702,
                  "src": "1018:16:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33696,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1018:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1017:18:44"
            },
            "returnParameters": {
              "id": 33701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33700,
                  "mutability": "mutable",
                  "name": "_currentRepr",
                  "nodeType": "VariableDeclaration",
                  "scope": 33702,
                  "src": "1083:20:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33699,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1083:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1082:22:44"
            },
            "scope": 33703,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          33703
        ],
        "name": "ITokenRegistry",
        "scope": 33704
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 44
}