{
  "_format": "hh-sol-artifact-1",
  "contractName": "IController",
  "sourceName": "contracts/interfaces/IController.sol",
  "abi": [
    {
      "inputs": [],
      "name": "ControllerInvalidIncentivizationFeeError",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ControllerInvalidLiquidationFeeError",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ControllerInvalidMinFundingFeeError",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ControllerInvalidProtocolFeeError",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ControllerNoZeroCoordinatorError",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ControllerNotContractAddressError",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "controllerId",
          "type": "uint256"
        }
      ],
      "name": "ControllerNotOwnerError",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ControllerNotPauserError",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "controllerId",
          "type": "uint256"
        }
      ],
      "name": "ControllerNotPendingOwnerError",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract ICollateral",
          "name": "newCollateral",
          "type": "address"
        }
      ],
      "name": "CollateralUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "coordinatorId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "CoordinatorCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "coordinatorId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "CoordinatorOwnerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "coordinatorId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newPendingOwner",
          "type": "address"
        }
      ],
      "name": "CoordinatorPendingOwnerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "coordinatorId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newTreasury",
          "type": "address"
        }
      ],
      "name": "CoordinatorTreasuryUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "UFixed18",
          "name": "newIncentivizationFee",
          "type": "uint256"
        }
      ],
      "name": "IncentivizationFeeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IIncentivizer",
          "name": "newIncentivizer",
          "type": "address"
        }
      ],
      "name": "IncentivizerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "UFixed18",
          "name": "newLiquidationFee",
          "type": "uint256"
        }
      ],
      "name": "LiquidationFeeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "UFixed18",
          "name": "newMinCollateral",
          "type": "uint256"
        }
      ],
      "name": "MinCollateralUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "UFixed18",
          "name": "newMinFundingFee",
          "type": "uint256"
        }
      ],
      "name": "MinFundingFeeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IMultiInvoker",
          "name": "newMultiInvoker",
          "type": "address"
        }
      ],
      "name": "MultiInvokerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "newPaused",
          "type": "bool"
        }
      ],
      "name": "PausedUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newPauser",
          "type": "address"
        }
      ],
      "name": "PauserUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IBeacon",
          "name": "newProductBeacon",
          "type": "address"
        }
      ],
      "name": "ProductBeaconUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "symbol",
              "type": "string"
            },
            {
              "components": [
                {
                  "internalType": "enum PayoffDefinitionLib.PayoffType",
                  "name": "payoffType",
                  "type": "uint8"
                },
                {
                  "internalType": "enum PayoffDefinitionLib.PayoffDirection",
                  "name": "payoffDirection",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes30",
                  "name": "data",
                  "type": "bytes30"
                }
              ],
              "internalType": "struct PayoffDefinition",
              "name": "payoffDefinition",
              "type": "tuple"
            },
            {
              "internalType": "contract IOracleProvider",
              "name": "oracle",
              "type": "address"
            },
            {
              "internalType": "UFixed18",
              "name": "maintenance",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "fundingFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "makerFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "takerFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "positionFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "makerLimit",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "PackedFixed18",
                  "name": "minRate",
                  "type": "int128"
                },
                {
                  "internalType": "PackedFixed18",
                  "name": "maxRate",
                  "type": "int128"
                },
                {
                  "internalType": "PackedFixed18",
                  "name": "targetRate",
                  "type": "int128"
                },
                {
                  "internalType": "PackedUFixed18",
                  "name": "targetUtilization",
                  "type": "uint128"
                }
              ],
              "internalType": "struct JumpRateUtilizationCurve",
              "name": "utilizationCurve",
              "type": "tuple"
            }
          ],
          "indexed": false,
          "internalType": "struct IProduct.ProductInfo",
          "name": "productInfo",
          "type": "tuple"
        }
      ],
      "name": "ProductCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newProgramsPerProduct",
          "type": "uint256"
        }
      ],
      "name": "ProgramsPerProductUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "UFixed18",
          "name": "newProtocolFee",
          "type": "uint256"
        }
      ],
      "name": "ProtocolFeeUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "coordinatorId",
          "type": "uint256"
        }
      ],
      "name": "acceptCoordinatorOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "collateral",
      "outputs": [
        {
          "internalType": "contract ICollateral",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "coordinatorFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "collateralId",
          "type": "uint256"
        }
      ],
      "name": "coordinators",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "pendingOwner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "treasury",
              "type": "address"
            }
          ],
          "internalType": "struct IController.Coordinator",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "createCoordinator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "coordinatorId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "symbol",
              "type": "string"
            },
            {
              "components": [
                {
                  "internalType": "enum PayoffDefinitionLib.PayoffType",
                  "name": "payoffType",
                  "type": "uint8"
                },
                {
                  "internalType": "enum PayoffDefinitionLib.PayoffDirection",
                  "name": "payoffDirection",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes30",
                  "name": "data",
                  "type": "bytes30"
                }
              ],
              "internalType": "struct PayoffDefinition",
              "name": "payoffDefinition",
              "type": "tuple"
            },
            {
              "internalType": "contract IOracleProvider",
              "name": "oracle",
              "type": "address"
            },
            {
              "internalType": "UFixed18",
              "name": "maintenance",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "fundingFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "makerFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "takerFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "positionFee",
              "type": "uint256"
            },
            {
              "internalType": "UFixed18",
              "name": "makerLimit",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "PackedFixed18",
                  "name": "minRate",
                  "type": "int128"
                },
                {
                  "internalType": "PackedFixed18",
                  "name": "maxRate",
                  "type": "int128"
                },
                {
                  "internalType": "PackedFixed18",
                  "name": "targetRate",
                  "type": "int128"
                },
                {
                  "internalType": "PackedUFixed18",
                  "name": "targetUtilization",
                  "type": "uint128"
                }
              ],
              "internalType": "struct JumpRateUtilizationCurve",
              "name": "utilizationCurve",
              "type": "tuple"
            }
          ],
          "internalType": "struct IProduct.ProductInfo",
          "name": "productInfo",
          "type": "tuple"
        }
      ],
      "name": "createProduct",
      "outputs": [
        {
          "internalType": "contract IProduct",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "incentivizationFee",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "incentivizer",
      "outputs": [
        {
          "internalType": "contract IIncentivizer",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ICollateral",
          "name": "collateral_",
          "type": "address"
        },
        {
          "internalType": "contract IIncentivizer",
          "name": "incentivizer_",
          "type": "address"
        },
        {
          "internalType": "contract IBeacon",
          "name": "productBeacon_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "isProduct",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "liquidationFee",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minCollateral",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minFundingFee",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "multiInvoker",
      "outputs": [
        {
          "internalType": "contract IMultiInvoker",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "coordinatorId",
          "type": "uint256"
        }
      ],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pauser",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "productBeacon",
      "outputs": [
        {
          "internalType": "contract IBeacon",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "programsPerProduct",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protocolFee",
      "outputs": [
        {
          "internalType": "UFixed18",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IProduct",
          "name": "product",
          "type": "address"
        }
      ],
      "name": "treasury",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "coordinatorId",
          "type": "uint256"
        }
      ],
      "name": "treasury",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "treasury",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ICollateral",
          "name": "newCollateral",
          "type": "address"
        }
      ],
      "name": "updateCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "coordinatorId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "newPendingOwner",
          "type": "address"
        }
      ],
      "name": "updateCoordinatorPendingOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "coordinatorId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "newTreasury",
          "type": "address"
        }
      ],
      "name": "updateCoordinatorTreasury",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "UFixed18",
          "name": "newIncentivizationFee",
          "type": "uint256"
        }
      ],
      "name": "updateIncentivizationFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IIncentivizer",
          "name": "newIncentivizer",
          "type": "address"
        }
      ],
      "name": "updateIncentivizer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "UFixed18",
          "name": "newLiquidationFee",
          "type": "uint256"
        }
      ],
      "name": "updateLiquidationFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "UFixed18",
          "name": "newMinCollateral",
          "type": "uint256"
        }
      ],
      "name": "updateMinCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "UFixed18",
          "name": "newMinFundingFee",
          "type": "uint256"
        }
      ],
      "name": "updateMinFundingFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IMultiInvoker",
          "name": "newMultiInvoker",
          "type": "address"
        }
      ],
      "name": "updateMultiInvoker",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "newPaused",
          "type": "bool"
        }
      ],
      "name": "updatePaused",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newPauser",
          "type": "address"
        }
      ],
      "name": "updatePauser",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IBeacon",
          "name": "newProductBeacon",
          "type": "address"
        }
      ],
      "name": "updateProductBeacon",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newProductsPerProduct",
          "type": "uint256"
        }
      ],
      "name": "updateProgramsPerProduct",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "UFixed18",
          "name": "newProtocolFee",
          "type": "uint256"
        }
      ],
      "name": "updateProtocolFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
