{
  "_format": "hh-sol-artifact-1",
  "contractName": "Controller",
  "sourceName": "contracts/Controller.sol",
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "depositBaseFee",
              "type": "uint128"
            },
            {
              "internalType": "uint32",
              "name": "depositFeeRate",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "finalizeTxGas",
              "type": "uint32"
            }
          ],
          "internalType": "struct Config.Config_",
          "name": "_config",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "AddRelayer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "RemoveRelayer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "depositBaseFee",
              "type": "uint128"
            },
            {
              "internalType": "uint32",
              "name": "depositFeeRate",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "finalizeTxGas",
              "type": "uint32"
            }
          ],
          "indexed": false,
          "internalType": "struct Config.Config_",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "UpdateConfig",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MAXPCT",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "addRelayer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "config",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "depositBaseFee",
          "type": "uint128"
        },
        {
          "internalType": "uint32",
          "name": "depositFeeRate",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "finalizeTxGas",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "relayers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "removeRelayer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "depositBaseFee",
              "type": "uint128"
            },
            {
              "internalType": "uint32",
              "name": "depositFeeRate",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "finalizeTxGas",
              "type": "uint32"
            }
          ],
          "internalType": "struct Config.Config_",
          "name": "_config",
          "type": "tuple"
        }
      ],
      "name": "updateConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint128",
          "name": "_depositBaseFee",
          "type": "uint128"
        }
      ],
      "name": "updateDepositBaseFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_depositFeeRate",
          "type": "uint32"
        }
      ],
      "name": "updateDepositFeeRate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_finalizeTxGas",
          "type": "uint32"
        }
      ],
      "name": "updateFinalizeTxGas",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620010d2380380620010d2833981016040819052620000349162000317565b6200003f336200006e565b6200005c620000566002546001600160a01b031690565b6200008c565b620000678162000131565b5062000469565b600380546001600160a01b03191690556200008981620001b5565b50565b6001600160a01b03811660009081526020819052604090205460ff1615620000d15760405162461bcd60e51b8152600401620000c89062000344565b60405180910390fd5b6001600160a01b03811660009081526020819052604090819020805460ff19166001179055517f7c363f8df6087ba61be7d84b7a936d5eb39ebd1ab56dd8188a27a60e3b301a27906200012690839062000394565b60405180910390a150565b80516001805460208401516040808601516001600160801b039095166001600160a01b031990931692909217600160801b63ffffffff928316021763ffffffff60a01b1916600160a01b919094160292909217815590517fc3b5a50e47b6b36cbfdf9f2816f54bcadaa46c6d4469b530f5e1fd8cc70e8fd891620001269162000459565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b038211171562000245576200024562000207565b6040525050565b60006200025860405190565b90506200026682826200021d565b919050565b6001600160801b0381165b81146200008957600080fd5b80516200028f816200026b565b92915050565b63ffffffff811662000276565b80516200028f8162000295565b600060608284031215620002c657620002c6600080fd5b620002d260606200024c565b90506000620002e2848462000282565b8252506020620002f584848301620002a2565b60208301525060406200030b84828501620002a2565b60408301525092915050565b6000606082840312156200032e576200032e600080fd5b60006200033c8484620002af565b949350505050565b602080825281016200028f81600e81526d72656c617965722065786973747360901b602082015260400190565b60006001600160a01b0382166200028f565b6200038e8162000371565b82525050565b602081016200028f828462000383565b60006001600160801b0382166200028f565b6001600160801b0381166200038e565b60006200028f620003d78360801c90565b63ffffffff1690565b63ffffffff81166200038e565b60006200028f620003d78360a01c90565b805460608301906200041081620003a4565b6200041c8582620003b6565b506200042881620003c6565b620004376020860182620003e0565b506200044381620003ed565b620004526040860182620003e0565b5050505050565b606081016200028f8284620003fe565b610c5980620004796000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806379502c55116100a2578063c8dc8a0c11610071578063c8dc8a0c14610220578063cb11b9f414610233578063dd39f00d1461024a578063e30c39781461025d578063f2fde38b1461026e57600080fd5b806379502c55146101bb57806379ba5097146101f65780638456cb59146101fe5780638da5cb5b1461020657600080fd5b80635300f841116100de5780635300f841146101535780635c975abb1461018c57806360f0a5ac146101a0578063715018a6146101b357600080fd5b806310c58d65146101105780631251d14e1461012557806328ad6c16146101385780633f4ba83a1461014b575b600080fd5b61012361011e36600461076c565b610281565b005b61012361013336600461076c565b610295565b61012361014636600461086c565b6102a6565b6101236102b7565b6101766101613660046108b2565b60006020819052908152604090205460ff1681565b60405161018391906108dd565b60405180910390f35b60035461017690600160a01b900460ff1681565b6101236101ae3660046108b2565b610300565b610123610311565b6001546101e7906001600160801b0381169063ffffffff600160801b8204811691600160a01b90041683565b60405161018393929190610906565b610123610325565b61012361035a565b6002546001600160a01b03165b6040516101839190610937565b61012361022e366004610945565b6103a1565b61023d620f424081565b6040516101839190610966565b6101236102583660046108b2565b6103b2565b6003546001600160a01b0316610213565b61012361027c3660046108b2565b6103c3565b610289610434565b6102928161045e565b50565b61029d610434565b610292816104a3565b6102ae610434565b61029281610516565b6102bf610434565b600354600160a01b900460ff166102f15760405162461bcd60e51b81526004016102e890610998565b60405180910390fd5b6003805460ff60a01b19169055565b610308610434565b61029281610586565b610319610434565b6103236000610611565b565b60035433906001600160a01b031681146103515760405162461bcd60e51b81526004016102e8906109f1565b61029281610611565b610362610434565b600354600160a01b900460ff161561038c5760405162461bcd60e51b81526004016102e890610a26565b6003805460ff60a01b1916600160a01b179055565b6103a9610434565b6102928161062a565b6103ba610434565b6102928161066a565b6103cb610434565b600380546001600160a01b0383166001600160a01b031990911681179091556103fc6002546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6002546001600160a01b031633146103235760405162461bcd60e51b81526004016102e890610a68565b6001805463ffffffff60a01b1916600160a01b63ffffffff841602178155604051600080516020610c048339815191529161049891610aff565b60405180910390a150565b6104b16014620f4240610b23565b63ffffffff168163ffffffff1611156104dc5760405162461bcd60e51b81526004016102e890610b84565b6001805463ffffffff60801b1916600160801b63ffffffff841602178155604051600080516020610c048339815191529161049891610aff565b80516001805460208401516040808601516001600160801b039095166001600160a01b031990931692909217600160801b63ffffffff928316021763ffffffff60a01b1916600160a01b91909416029290921781559051600080516020610c048339815191529161049891610aff565b6001600160a01b03811660009081526020819052604090205460ff166105be5760405162461bcd60e51b81526004016102e890610bbe565b6001600160a01b03811660009081526020819052604090819020805460ff19166001179055517f370e7a3077485fd8cef64916374045a1bfae1d0984617c2833e614ed87b9d0df90610498908390610937565b600380546001600160a01b0319169055610292816106f6565b600180546fffffffffffffffffffffffffffffffff19166001600160801b038316178155604051600080516020610c048339815191529161049891610aff565b6001600160a01b03811660009081526020819052604090205460ff16156106a35760405162461bcd60e51b81526004016102e890610bf3565b6001600160a01b03811660009081526020819052604090819020805460ff19166001179055517f7c363f8df6087ba61be7d84b7a936d5eb39ebd1ab56dd8188a27a60e3b301a2790610498908390610937565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b63ffffffff81165b811461029257600080fd5b803561076681610748565b92915050565b60006020828403121561078157610781600080fd5b600061078d848461075b565b949350505050565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156107d1576107d1610795565b6040525050565b60006107e360405190565b90506107ef82826107ab565b919050565b6001600160801b038116610750565b8035610766816107f4565b60006060828403121561082357610823600080fd5b61082d60606107d8565b9050600061083b8484610803565b825250602061084c8484830161075b565b60208301525060406108608482850161075b565b60408301525092915050565b60006060828403121561088157610881600080fd5b600061078d848461080e565b60006001600160a01b038216610766565b6107508161088d565b80356107668161089e565b6000602082840312156108c7576108c7600080fd5b600061078d84846108a7565b8015155b82525050565b6020810161076682846108d3565b6001600160801b0381166108d7565b63ffffffff81166108d7565b6060810161091482866108eb565b61092160208301856108fa565b61078d60408301846108fa565b6108d78161088d565b60208101610766828461092e565b60006020828403121561095a5761095a600080fd5b600061078d8484610803565b6020810161076682846108fa565b600a8152600060208201691b9bdd081c185d5cd95960b21b815291505b5060200190565b6020808252810161076681610974565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b60208082528101610766816109a8565b600e81526000602082016d185b1c9958591e481c185d5cd95960921b81529150610991565b6020808252810161076681610a01565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000610991565b6020808252810161076681610a36565b60006001600160801b038216610766565b6000610766610a988360801c90565b63ffffffff1690565b6000610766610a988360a01c90565b80546060830190610ac081610a78565b610aca85826108eb565b50610ad481610a89565b610ae160208601826108fa565b50610aeb81610aa1565b610af860408601826108fa565b5050505050565b606081016107668284610ab0565b634e487b7160e01b600052601260045260246000fd5b63ffffffff9182169116600082610b3c57610b3c610b0d565b500490565b602681526000602082017f6665652072617465206d757374206265206c657373206f7220657175616c207481526568616e20352560d01b602082015291506109ea565b6020808252810161076681610b41565b60138152600060208201723737b732bc34b9ba32b73a103932b630bcb2b960691b81529150610991565b6020808252810161076681610b94565b600e81526000602082016d72656c617965722065786973747360901b81529150610991565b6020808252810161076681610bce56fec3b5a50e47b6b36cbfdf9f2816f54bcadaa46c6d4469b530f5e1fd8cc70e8fd8a26469706673582212200c8a3ff6a53e91a1870eebd914c8f994f4b819040d0fc1dadbc27b634f6c0adc64736f6c63430008140033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806379502c55116100a2578063c8dc8a0c11610071578063c8dc8a0c14610220578063cb11b9f414610233578063dd39f00d1461024a578063e30c39781461025d578063f2fde38b1461026e57600080fd5b806379502c55146101bb57806379ba5097146101f65780638456cb59146101fe5780638da5cb5b1461020657600080fd5b80635300f841116100de5780635300f841146101535780635c975abb1461018c57806360f0a5ac146101a0578063715018a6146101b357600080fd5b806310c58d65146101105780631251d14e1461012557806328ad6c16146101385780633f4ba83a1461014b575b600080fd5b61012361011e36600461076c565b610281565b005b61012361013336600461076c565b610295565b61012361014636600461086c565b6102a6565b6101236102b7565b6101766101613660046108b2565b60006020819052908152604090205460ff1681565b60405161018391906108dd565b60405180910390f35b60035461017690600160a01b900460ff1681565b6101236101ae3660046108b2565b610300565b610123610311565b6001546101e7906001600160801b0381169063ffffffff600160801b8204811691600160a01b90041683565b60405161018393929190610906565b610123610325565b61012361035a565b6002546001600160a01b03165b6040516101839190610937565b61012361022e366004610945565b6103a1565b61023d620f424081565b6040516101839190610966565b6101236102583660046108b2565b6103b2565b6003546001600160a01b0316610213565b61012361027c3660046108b2565b6103c3565b610289610434565b6102928161045e565b50565b61029d610434565b610292816104a3565b6102ae610434565b61029281610516565b6102bf610434565b600354600160a01b900460ff166102f15760405162461bcd60e51b81526004016102e890610998565b60405180910390fd5b6003805460ff60a01b19169055565b610308610434565b61029281610586565b610319610434565b6103236000610611565b565b60035433906001600160a01b031681146103515760405162461bcd60e51b81526004016102e8906109f1565b61029281610611565b610362610434565b600354600160a01b900460ff161561038c5760405162461bcd60e51b81526004016102e890610a26565b6003805460ff60a01b1916600160a01b179055565b6103a9610434565b6102928161062a565b6103ba610434565b6102928161066a565b6103cb610434565b600380546001600160a01b0383166001600160a01b031990911681179091556103fc6002546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6002546001600160a01b031633146103235760405162461bcd60e51b81526004016102e890610a68565b6001805463ffffffff60a01b1916600160a01b63ffffffff841602178155604051600080516020610c048339815191529161049891610aff565b60405180910390a150565b6104b16014620f4240610b23565b63ffffffff168163ffffffff1611156104dc5760405162461bcd60e51b81526004016102e890610b84565b6001805463ffffffff60801b1916600160801b63ffffffff841602178155604051600080516020610c048339815191529161049891610aff565b80516001805460208401516040808601516001600160801b039095166001600160a01b031990931692909217600160801b63ffffffff928316021763ffffffff60a01b1916600160a01b91909416029290921781559051600080516020610c048339815191529161049891610aff565b6001600160a01b03811660009081526020819052604090205460ff166105be5760405162461bcd60e51b81526004016102e890610bbe565b6001600160a01b03811660009081526020819052604090819020805460ff19166001179055517f370e7a3077485fd8cef64916374045a1bfae1d0984617c2833e614ed87b9d0df90610498908390610937565b600380546001600160a01b0319169055610292816106f6565b600180546fffffffffffffffffffffffffffffffff19166001600160801b038316178155604051600080516020610c048339815191529161049891610aff565b6001600160a01b03811660009081526020819052604090205460ff16156106a35760405162461bcd60e51b81526004016102e890610bf3565b6001600160a01b03811660009081526020819052604090819020805460ff19166001179055517f7c363f8df6087ba61be7d84b7a936d5eb39ebd1ab56dd8188a27a60e3b301a2790610498908390610937565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b63ffffffff81165b811461029257600080fd5b803561076681610748565b92915050565b60006020828403121561078157610781600080fd5b600061078d848461075b565b949350505050565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156107d1576107d1610795565b6040525050565b60006107e360405190565b90506107ef82826107ab565b919050565b6001600160801b038116610750565b8035610766816107f4565b60006060828403121561082357610823600080fd5b61082d60606107d8565b9050600061083b8484610803565b825250602061084c8484830161075b565b60208301525060406108608482850161075b565b60408301525092915050565b60006060828403121561088157610881600080fd5b600061078d848461080e565b60006001600160a01b038216610766565b6107508161088d565b80356107668161089e565b6000602082840312156108c7576108c7600080fd5b600061078d84846108a7565b8015155b82525050565b6020810161076682846108d3565b6001600160801b0381166108d7565b63ffffffff81166108d7565b6060810161091482866108eb565b61092160208301856108fa565b61078d60408301846108fa565b6108d78161088d565b60208101610766828461092e565b60006020828403121561095a5761095a600080fd5b600061078d8484610803565b6020810161076682846108fa565b600a8152600060208201691b9bdd081c185d5cd95960b21b815291505b5060200190565b6020808252810161076681610974565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b60208082528101610766816109a8565b600e81526000602082016d185b1c9958591e481c185d5cd95960921b81529150610991565b6020808252810161076681610a01565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000610991565b6020808252810161076681610a36565b60006001600160801b038216610766565b6000610766610a988360801c90565b63ffffffff1690565b6000610766610a988360a01c90565b80546060830190610ac081610a78565b610aca85826108eb565b50610ad481610a89565b610ae160208601826108fa565b50610aeb81610aa1565b610af860408601826108fa565b5050505050565b606081016107668284610ab0565b634e487b7160e01b600052601260045260246000fd5b63ffffffff9182169116600082610b3c57610b3c610b0d565b500490565b602681526000602082017f6665652072617465206d757374206265206c657373206f7220657175616c207481526568616e20352560d01b602082015291506109ea565b6020808252810161076681610b41565b60138152600060208201723737b732bc34b9ba32b73a103932b630bcb2b960691b81529150610991565b6020808252810161076681610b94565b600e81526000602082016d72656c617965722065786973747360901b81529150610991565b6020808252810161076681610bce56fec3b5a50e47b6b36cbfdf9f2816f54bcadaa46c6d4469b530f5e1fd8cc70e8fd8a26469706673582212200c8a3ff6a53e91a1870eebd914c8f994f4b819040d0fc1dadbc27b634f6c0adc64736f6c63430008140033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
