{
  "_format": "hh-sol-artifact-1",
  "contractName": "ModuleHooks",
  "sourceName": "contracts/modules/commons/ModuleHooks.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        }
      ],
      "name": "HookAlreadyExists",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        }
      ],
      "name": "HookDoesNotExist",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_self",
          "type": "address"
        }
      ],
      "name": "OnlySelfAuth",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_implementation",
          "type": "address"
        }
      ],
      "name": "DefinedHook",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "_implementation",
          "type": "address"
        }
      ],
      "name": "addHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        }
      ],
      "name": "readHook",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        }
      ],
      "name": "removeHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_interfaceID",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50610ad5806100206000396000f3fe6080604052600436106100745760003560e01c80634fcf3eca1161004e5780634fcf3eca14610249578063b93ea7ad14610269578063bc197c8114610289578063f23a6e61146102d15761007b565b806301ffc9a714610159578063150b7a021461018e5780631a9b2337146102045761007b565b3661007b57005b600436106101575760006100b26000357fffffffff0000000000000000000000000000000000000000000000000000000016610317565b905073ffffffffffffffffffffffffffffffffffffffff811615610155576000808273ffffffffffffffffffffffffffffffffffffffff166000366040516100fb9291906107b1565b600060405180830381855af49150503d8060008114610136576040519150601f19603f3d011682016040523d82523d6000602084013e61013b565b606091505b50915091508161014d57805160208201fd5b805160208201f35b505b005b34801561016557600080fd5b506101796101743660046107f6565b61036b565b60405190151581526020015b60405180910390f35b34801561019a57600080fd5b506101d36101a9366004610885565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610185565b34801561021057600080fd5b5061022461021f3660046107f6565b6104ed565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610185565b34801561025557600080fd5b506101576102643660046107f6565b6104f8565b34801561027557600080fd5b506101576102843660046108f4565b6105c8565b34801561029557600080fd5b506101d36102a436600461096c565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b3480156102dd57600080fd5b506101d36102ec366004610a27565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60006103657fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610693565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba500000000000000000000000000000000000000000000000000000000014806103fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061044a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b8061049657507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b156104a357506001919050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610365565b600061036582610317565b33301461053e576040517fe12588940000000000000000000000000000000000000000000000000000000081523360048201523060248201526044015b60405180910390fd5b600061054982610317565b73ffffffffffffffffffffffffffffffffffffffff16036105ba576040517f1c3812cc0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000082166004820152602401610535565b6105c58160006106f1565b50565b333014610609576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610535565b600061061483610317565b73ffffffffffffffffffffffffffffffffffffffff1614610685576040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000083166004820152602401610535565b61068f82826106f1565b5050565b60008083836040516020016106b2929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b604080517fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1206020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008516828401819052835180840385018152606084018086528151919093012073ffffffffffffffffffffffffffffffffffffffff8616908190559152608082015290517f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19181900360a00190a15050565b8183823760009101908152919050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146107f157600080fd5b919050565b60006020828403121561080857600080fd5b610811826107c1565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107f157600080fd5b60008083601f84011261084e57600080fd5b50813567ffffffffffffffff81111561086657600080fd5b60208301915083602082850101111561087e57600080fd5b9250929050565b60008060008060006080868803121561089d57600080fd5b6108a686610818565b94506108b460208701610818565b935060408601359250606086013567ffffffffffffffff8111156108d757600080fd5b6108e38882890161083c565b969995985093965092949392505050565b6000806040838503121561090757600080fd5b610910836107c1565b915061091e60208401610818565b90509250929050565b60008083601f84011261093957600080fd5b50813567ffffffffffffffff81111561095157600080fd5b6020830191508360208260051b850101111561087e57600080fd5b60008060008060008060008060a0898b03121561098857600080fd5b61099189610818565b975061099f60208a01610818565b9650604089013567ffffffffffffffff808211156109bc57600080fd5b6109c88c838d01610927565b909850965060608b01359150808211156109e157600080fd5b6109ed8c838d01610927565b909650945060808b0135915080821115610a0657600080fd5b50610a138b828c0161083c565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215610a4057600080fd5b610a4987610818565b9550610a5760208801610818565b94506040870135935060608701359250608087013567ffffffffffffffff811115610a8157600080fd5b610a8d89828a0161083c565b979a969950949750929593949250505056fea2646970667358221220e41b3c8b71dc52acf394b069c7c5362791390cf20814c0f6c9e7e28ff9b832d964736f6c63430008120033",
  "deployedBytecode": "0x6080604052600436106100745760003560e01c80634fcf3eca1161004e5780634fcf3eca14610249578063b93ea7ad14610269578063bc197c8114610289578063f23a6e61146102d15761007b565b806301ffc9a714610159578063150b7a021461018e5780631a9b2337146102045761007b565b3661007b57005b600436106101575760006100b26000357fffffffff0000000000000000000000000000000000000000000000000000000016610317565b905073ffffffffffffffffffffffffffffffffffffffff811615610155576000808273ffffffffffffffffffffffffffffffffffffffff166000366040516100fb9291906107b1565b600060405180830381855af49150503d8060008114610136576040519150601f19603f3d011682016040523d82523d6000602084013e61013b565b606091505b50915091508161014d57805160208201fd5b805160208201f35b505b005b34801561016557600080fd5b506101796101743660046107f6565b61036b565b60405190151581526020015b60405180910390f35b34801561019a57600080fd5b506101d36101a9366004610885565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610185565b34801561021057600080fd5b5061022461021f3660046107f6565b6104ed565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610185565b34801561025557600080fd5b506101576102643660046107f6565b6104f8565b34801561027557600080fd5b506101576102843660046108f4565b6105c8565b34801561029557600080fd5b506101d36102a436600461096c565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b3480156102dd57600080fd5b506101d36102ec366004610a27565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60006103657fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610693565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba500000000000000000000000000000000000000000000000000000000014806103fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061044a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b8061049657507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b156104a357506001919050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610365565b600061036582610317565b33301461053e576040517fe12588940000000000000000000000000000000000000000000000000000000081523360048201523060248201526044015b60405180910390fd5b600061054982610317565b73ffffffffffffffffffffffffffffffffffffffff16036105ba576040517f1c3812cc0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000082166004820152602401610535565b6105c58160006106f1565b50565b333014610609576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610535565b600061061483610317565b73ffffffffffffffffffffffffffffffffffffffff1614610685576040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000083166004820152602401610535565b61068f82826106f1565b5050565b60008083836040516020016106b2929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b604080517fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1206020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008516828401819052835180840385018152606084018086528151919093012073ffffffffffffffffffffffffffffffffffffffff8616908190559152608082015290517f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19181900360a00190a15050565b8183823760009101908152919050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146107f157600080fd5b919050565b60006020828403121561080857600080fd5b610811826107c1565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107f157600080fd5b60008083601f84011261084e57600080fd5b50813567ffffffffffffffff81111561086657600080fd5b60208301915083602082850101111561087e57600080fd5b9250929050565b60008060008060006080868803121561089d57600080fd5b6108a686610818565b94506108b460208701610818565b935060408601359250606086013567ffffffffffffffff8111156108d757600080fd5b6108e38882890161083c565b969995985093965092949392505050565b6000806040838503121561090757600080fd5b610910836107c1565b915061091e60208401610818565b90509250929050565b60008083601f84011261093957600080fd5b50813567ffffffffffffffff81111561095157600080fd5b6020830191508360208260051b850101111561087e57600080fd5b60008060008060008060008060a0898b03121561098857600080fd5b61099189610818565b975061099f60208a01610818565b9650604089013567ffffffffffffffff808211156109bc57600080fd5b6109c88c838d01610927565b909850965060608b01359150808211156109e157600080fd5b6109ed8c838d01610927565b909650945060808b0135915080821115610a0657600080fd5b50610a138b828c0161083c565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215610a4057600080fd5b610a4987610818565b9550610a5760208801610818565b94506040870135935060608701359250608087013567ffffffffffffffff811115610a8157600080fd5b610a8d89828a0161083c565b979a969950949750929593949250505056fea2646970667358221220e41b3c8b71dc52acf394b069c7c5362791390cf20814c0f6c9e7e28ff9b832d964736f6c63430008120033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
