{
  "_format": "hh-sol-artifact-1",
  "contractName": "BaseMultisig",
  "sourceName": "contracts/governance/BaseMultisig.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AlreadyVoted",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "DuplicateSigner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSignerThreshold",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSigners",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotSigner",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "topic",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "signerEpoch",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        }
      ],
      "name": "MultisigOperationExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "topic",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "signerEpoch",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "voteCount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        }
      ],
      "name": "MultisigVoted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "newAccounts",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newThreshold",
          "type": "uint256"
        }
      ],
      "name": "SignersRotated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "topic",
          "type": "bytes32"
        }
      ],
      "name": "getSignerVotesCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "topic",
          "type": "bytes32"
        }
      ],
      "name": "hasSignerVoted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isSigner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "newAccounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "newThreshold",
          "type": "uint256"
        }
      ],
      "name": "rotateSigners",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "signerAccounts",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "signerEpoch",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "signerThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "signers",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "votingPerTopic",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "voteCount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162000fed38038062000fed8339810160408190526200003491620002e9565b62000040828262000048565b505062000459565b60008054905b81811015620000ab5760006002016000806000018381548110620000765762000076620003c3565b60009182526020808320909101546001600160a01b031683528201929092526040019020805460ff191690556001016200004e565b5050815180821115620000d157604051635e231fff60e01b815260040160405180910390fd5b81600003620000f357604051632b47c13b60e01b815260040160405180910390fd5b6003600081546200010490620003d9565b9091555082516200011d90600090602086019062000235565b50600182905560005b81811015620001f4576000848281518110620001465762000146620003c3565b6020908102919091018101516001600160a01b0381166000908152600290925260409091205490915060ff1615620001a057604051637010e27960e11b81526001600160a01b038216600482015260240160405180910390fd5b6001600160a01b038116620001c857604051635e231fff60e01b815260040160405180910390fd5b6001600160a01b03166000908152600260205260409020805460ff191660019081179091550162000126565b507fbc9753cf3d526725c425068c2040206cc37ba734f24a64b8b4f7dea6aaac52ff83836040516200022892919062000401565b60405180910390a1505050565b8280548282559060005260206000209081019282156200028d579160200282015b828111156200028d57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000256565b506200029b9291506200029f565b5090565b5b808211156200029b5760008155600101620002a0565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620002e457600080fd5b919050565b60008060408385031215620002fd57600080fd5b82516001600160401b03808211156200031557600080fd5b818501915085601f8301126200032a57600080fd5b8151602082821115620003415762000341620002b6565b8160051b604051601f19603f83011681018181108682111715620003695762000369620002b6565b6040529283528183019350848101820192898411156200038857600080fd5b948201945b83861015620003b157620003a186620002cc565b855294820194938201936200038d565b97909101519698969750505050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201620003fa57634e487b7160e01b600052601160045260246000fd5b5060010190565b604080825283519082018190526000906020906060840190828701845b82811015620004455781516001600160a01b0316845292840192908401906001016200041e565b505050602093909301939093525092915050565b610b8480620004696000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80635b814063116100765780637df73e271161005b5780637df73e271461015e578063a4a4f39014610197578063d4d4bb051461019f57600080fd5b80635b814063146101325780635e187d391461013b57600080fd5b806316045059146100a85780631f1f0675146100e65780633f1a3e681461011357806346f0975a14610128575b600080fd5b6100d36100b6366004610846565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100d36100f4366004610868565b6003546000908152600460209081526040808320938352929052205490565b6101266101213660046108d9565b6101b4565b005b6001546100d39081565b6100d360035481565b61014e6101493660046109c2565b6101d2565b60405190151581526020016100dd565b61014e61016c3660046109ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b6001546100d3565b6101a761021a565b6040516100dd9190610a60565b6101bc61028b565b6101c4575050565b6101ce828261045d565b5050565b6003546000908152600460209081526040808320848452825280832073ffffffffffffffffffffffffffffffffffffffff8616845260010190915290205460ff165b92915050565b60606000800180548060200260200160405190810160405280929190818152602001828054801561028157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610256575b5050505050905090565b3360009081526002602052604081205460ff166102d4576040517fa1b035c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080366040516102e6929190610a73565b604080519182900390912060035460008181526004602090815284822084835281528482203383526001810190915293902054919350919060ff1615610358576040517f7c9a1cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260018281016020526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682179055825461039d91610ab2565b600154909150808210156103f65760408051838152602081018390523391869188917fa29ef665b15de72fb0f9499de0c5117604a84be72f9b4927e0229e8dd5b5609e910160405180910390a450905550600092915050565b3373ffffffffffffffffffffffffffffffffffffffff1684867fa39abd2703fe38eb3fceec05311fe5122b861aa739147236cebfc09aee7bfed18460405161044091815260200190565b60405180910390a461045183610717565b60019550505050505090565b60008054905b818110156104e6576000600201600080600001838154811061048757610487610ac5565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600101610463565b5050815180821115610524576040517f5e231fff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000361055e576040517f2b47c13b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036000815461056d90610af4565b9091555082516105849060009060208601906107a7565b50600182905560005b818110156106d85760008482815181106105a9576105a9610ac5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600290925260409091205490915060ff1615610635576040517fe021c4f200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610682576040517f5e231fff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091550161058d565b507fbc9753cf3d526725c425068c2040206cc37ba734f24a64b8b4f7dea6aaac52ff838360405161070a929190610b2c565b60405180910390a1505050565b60008082558054905b818110156107a25782600101600080600001838154811061074357610743610ac5565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600101610720565b505050565b828054828255906000526020600020908101928215610821579160200282015b8281111561082157825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906107c7565b5061082d929150610831565b5090565b5b8082111561082d5760008155600101610832565b6000806040838503121561085957600080fd5b50508035926020909101359150565b60006020828403121561087a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146108d457600080fd5b919050565b600080604083850312156108ec57600080fd5b823567ffffffffffffffff8082111561090457600080fd5b818501915085601f83011261091857600080fd5b813560208282111561092c5761092c610881565b8160051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110868211171561096f5761096f610881565b60405292835281830193508481018201928984111561098d57600080fd5b948201945b838610156109b2576109a3866108b0565b85529482019493820193610992565b9997909101359750505050505050565b600080604083850312156109d557600080fd5b6109de836108b0565b946020939093013593505050565b6000602082840312156109fe57600080fd5b610a07826108b0565b9392505050565b60008151808452602080850194506020840160005b83811015610a5557815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101610a23565b509495945050505050565b602081526000610a076020830184610a0e565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561021457610214610a83565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610b2557610b25610a83565b5060010190565b604081526000610b3f6040830185610a0e565b9050826020830152939250505056fea26469706673582212201b342212039a27ba8b04dd80a65fd0f98158196a817e5e5ce1402a94c9faca3c64736f6c63430008170033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80635b814063116100765780637df73e271161005b5780637df73e271461015e578063a4a4f39014610197578063d4d4bb051461019f57600080fd5b80635b814063146101325780635e187d391461013b57600080fd5b806316045059146100a85780631f1f0675146100e65780633f1a3e681461011357806346f0975a14610128575b600080fd5b6100d36100b6366004610846565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100d36100f4366004610868565b6003546000908152600460209081526040808320938352929052205490565b6101266101213660046108d9565b6101b4565b005b6001546100d39081565b6100d360035481565b61014e6101493660046109c2565b6101d2565b60405190151581526020016100dd565b61014e61016c3660046109ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b6001546100d3565b6101a761021a565b6040516100dd9190610a60565b6101bc61028b565b6101c4575050565b6101ce828261045d565b5050565b6003546000908152600460209081526040808320848452825280832073ffffffffffffffffffffffffffffffffffffffff8616845260010190915290205460ff165b92915050565b60606000800180548060200260200160405190810160405280929190818152602001828054801561028157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610256575b5050505050905090565b3360009081526002602052604081205460ff166102d4576040517fa1b035c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080366040516102e6929190610a73565b604080519182900390912060035460008181526004602090815284822084835281528482203383526001810190915293902054919350919060ff1615610358576040517f7c9a1cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260018281016020526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682179055825461039d91610ab2565b600154909150808210156103f65760408051838152602081018390523391869188917fa29ef665b15de72fb0f9499de0c5117604a84be72f9b4927e0229e8dd5b5609e910160405180910390a450905550600092915050565b3373ffffffffffffffffffffffffffffffffffffffff1684867fa39abd2703fe38eb3fceec05311fe5122b861aa739147236cebfc09aee7bfed18460405161044091815260200190565b60405180910390a461045183610717565b60019550505050505090565b60008054905b818110156104e6576000600201600080600001838154811061048757610487610ac5565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600101610463565b5050815180821115610524576040517f5e231fff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000361055e576040517f2b47c13b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036000815461056d90610af4565b9091555082516105849060009060208601906107a7565b50600182905560005b818110156106d85760008482815181106105a9576105a9610ac5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600290925260409091205490915060ff1615610635576040517fe021c4f200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610682576040517f5e231fff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091550161058d565b507fbc9753cf3d526725c425068c2040206cc37ba734f24a64b8b4f7dea6aaac52ff838360405161070a929190610b2c565b60405180910390a1505050565b60008082558054905b818110156107a25782600101600080600001838154811061074357610743610ac5565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600101610720565b505050565b828054828255906000526020600020908101928215610821579160200282015b8281111561082157825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906107c7565b5061082d929150610831565b5090565b5b8082111561082d5760008155600101610832565b6000806040838503121561085957600080fd5b50508035926020909101359150565b60006020828403121561087a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146108d457600080fd5b919050565b600080604083850312156108ec57600080fd5b823567ffffffffffffffff8082111561090457600080fd5b818501915085601f83011261091857600080fd5b813560208282111561092c5761092c610881565b8160051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110868211171561096f5761096f610881565b60405292835281830193508481018201928984111561098d57600080fd5b948201945b838610156109b2576109a3866108b0565b85529482019493820193610992565b9997909101359750505050505050565b600080604083850312156109d557600080fd5b6109de836108b0565b946020939093013593505050565b6000602082840312156109fe57600080fd5b610a07826108b0565b9392505050565b60008151808452602080850194506020840160005b83811015610a5557815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101610a23565b509495945050505050565b602081526000610a076020830184610a0e565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561021457610214610a83565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610b2557610b25610a83565b5060010190565b604081526000610b3f6040830185610a0e565b9050826020830152939250505056fea26469706673582212201b342212039a27ba8b04dd80a65fd0f98158196a817e5e5ce1402a94c9faca3c64736f6c63430008170033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
