[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_cowSettlement",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_swapController",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_master",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_weth",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_enzymeV4VaultProxyAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_safe",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_dai",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_usdc",
        "type": "address"
      },
      {
        "internalType": "contract IEnzymeFundValueCalculatorRouter",
        "name": "_enzymeFundValueCalculatorRouter",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_minPoolEth",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "feeInEth",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "maxFee",
        "type": "uint256"
      }
    ],
    "name": "AboveMaxFee",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "maxValidTo",
        "type": "uint256"
      }
    ],
    "name": "AboveMaxValidTo",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "minAmount",
        "type": "uint256"
      }
    ],
    "name": "AmountOutTooLow",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "minValidTo",
        "type": "uint256"
      }
    ],
    "name": "BelowMinValidTo",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "minValidSwapTime",
        "type": "uint256"
      }
    ],
    "name": "InsufficientTimeBetweenSwaps",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenBalance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "limit",
        "type": "uint256"
      }
    ],
    "name": "InvalidBalance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "invalidAsset",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "validAsset",
        "type": "address"
      }
    ],
    "name": "InvalidDenominationAsset",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "postSwapBalance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "limit",
        "type": "uint256"
      }
    ],
    "name": "InvalidPostSwapBalance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "validReceiver",
        "type": "address"
      }
    ],
    "name": "InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "token",
        "type": "string"
      }
    ],
    "name": "InvalidTokenAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NoOrderInPlace",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyController",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "currentOrderUID",
        "type": "bytes"
      }
    ],
    "name": "OrderInProgress",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "providedOrderUID",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "expectedOrderUID",
        "type": "bytes"
      }
    ],
    "name": "OrderUidMismatch",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "TokenDisabled",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "TransferFailed",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "kind",
        "type": "string"
      }
    ],
    "name": "UnsupportedTokenBalance",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "components": [
          {
            "internalType": "contract IERC20",
            "name": "sellToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "buyToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "sellAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "buyAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint32",
            "name": "validTo",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "appData",
            "type": "bytes32"
          },
          {
            "internalType": "uint256",
            "name": "feeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes32",
            "name": "kind",
            "type": "bytes32"
          },
          {
            "internalType": "bool",
            "name": "partiallyFillable",
            "type": "bool"
          },
          {
            "internalType": "bytes32",
            "name": "sellTokenBalance",
            "type": "bytes32"
          },
          {
            "internalType": "bytes32",
            "name": "buyTokenBalance",
            "type": "bytes32"
          }
        ],
        "indexed": false,
        "internalType": "struct GPv2Order.Data",
        "name": "order",
        "type": "tuple"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "filledAmount",
        "type": "uint256"
      }
    ],
    "name": "OrderClosed",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "components": [
          {
            "internalType": "contract IERC20",
            "name": "sellToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "buyToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "sellAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "buyAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint32",
            "name": "validTo",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "appData",
            "type": "bytes32"
          },
          {
            "internalType": "uint256",
            "name": "feeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes32",
            "name": "kind",
            "type": "bytes32"
          },
          {
            "internalType": "bool",
            "name": "partiallyFillable",
            "type": "bool"
          },
          {
            "internalType": "bytes32",
            "name": "sellTokenBalance",
            "type": "bytes32"
          },
          {
            "internalType": "bytes32",
            "name": "buyTokenBalance",
            "type": "bytes32"
          }
        ],
        "indexed": false,
        "internalType": "struct GPv2Order.Data",
        "name": "order",
        "type": "tuple"
      }
    ],
    "name": "OrderPlaced",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "fromAsset",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "toAsset",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      }
    ],
    "name": "Swapped",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "asset",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "TransferredToSafe",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "ETH",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MAX_FEE",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MAX_SLIPPAGE_DENOMINATOR",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MAX_VALID_TO_PERIOD",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MIN_TIME_BETWEEN_ORDERS",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MIN_VALID_TO_PERIOD",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "allowedSafeTransferAssets",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "contract IERC20",
            "name": "sellToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "buyToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "sellAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "buyAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint32",
            "name": "validTo",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "appData",
            "type": "bytes32"
          },
          {
            "internalType": "uint256",
            "name": "feeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes32",
            "name": "kind",
            "type": "bytes32"
          },
          {
            "internalType": "bool",
            "name": "partiallyFillable",
            "type": "bool"
          },
          {
            "internalType": "bytes32",
            "name": "sellTokenBalance",
            "type": "bytes32"
          },
          {
            "internalType": "bytes32",
            "name": "buyTokenBalance",
            "type": "bytes32"
          }
        ],
        "internalType": "struct GPv2Order.Data",
        "name": "order",
        "type": "tuple"
      }
    ],
    "name": "closeOrder",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "cowSettlement",
    "outputs": [
      {
        "internalType": "contract ICowSettlement",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "cowVaultRelayer",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "currentOrderUID",
    "outputs": [
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "domainSeparator",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "enzymeFundValueCalculatorRouter",
    "outputs": [
      {
        "internalType": "contract IEnzymeFundValueCalculatorRouter",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "enzymeV4VaultProxyAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "contract IERC20",
            "name": "sellToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "buyToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "sellAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "buyAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint32",
            "name": "validTo",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "appData",
            "type": "bytes32"
          },
          {
            "internalType": "uint256",
            "name": "feeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes32",
            "name": "kind",
            "type": "bytes32"
          },
          {
            "internalType": "bool",
            "name": "partiallyFillable",
            "type": "bool"
          },
          {
            "internalType": "bytes32",
            "name": "sellTokenBalance",
            "type": "bytes32"
          },
          {
            "internalType": "bytes32",
            "name": "buyTokenBalance",
            "type": "bytes32"
          }
        ],
        "internalType": "struct GPv2Order.Data",
        "name": "order",
        "type": "tuple"
      }
    ],
    "name": "getDigest",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "contract IERC20",
            "name": "sellToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "buyToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "sellAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "buyAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint32",
            "name": "validTo",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "appData",
            "type": "bytes32"
          },
          {
            "internalType": "uint256",
            "name": "feeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes32",
            "name": "kind",
            "type": "bytes32"
          },
          {
            "internalType": "bool",
            "name": "partiallyFillable",
            "type": "bool"
          },
          {
            "internalType": "bytes32",
            "name": "sellTokenBalance",
            "type": "bytes32"
          },
          {
            "internalType": "bytes32",
            "name": "buyTokenBalance",
            "type": "bytes32"
          }
        ],
        "internalType": "struct GPv2Order.Data",
        "name": "order",
        "type": "tuple"
      }
    ],
    "name": "getUID",
    "outputs": [
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "master",
    "outputs": [
      {
        "internalType": "contract INXMMaster",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "minPoolEth",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "orderInProgress",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "contract IERC20",
            "name": "sellToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "buyToken",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "sellAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "buyAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint32",
            "name": "validTo",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "appData",
            "type": "bytes32"
          },
          {
            "internalType": "uint256",
            "name": "feeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes32",
            "name": "kind",
            "type": "bytes32"
          },
          {
            "internalType": "bool",
            "name": "partiallyFillable",
            "type": "bool"
          },
          {
            "internalType": "bytes32",
            "name": "sellTokenBalance",
            "type": "bytes32"
          },
          {
            "internalType": "bytes32",
            "name": "buyTokenBalance",
            "type": "bytes32"
          }
        ],
        "internalType": "struct GPv2Order.Data",
        "name": "order",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "orderUID",
        "type": "bytes"
      }
    ],
    "name": "placeOrder",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "assetAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "recoverAsset",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "asset",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "requestAsset",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "safe",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "swapController",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amountOutMin",
        "type": "uint256"
      }
    ],
    "name": "swapETHForEnzymeVaultShare",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amountOutMin",
        "type": "uint256"
      }
    ],
    "name": "swapEnzymeVaultShareForETH",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "transferRequest",
    "outputs": [
      {
        "internalType": "address",
        "name": "asset",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "requestedAsset",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "requestedAmount",
        "type": "uint256"
      }
    ],
    "name": "transferRequestedAsset",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "weth",
    "outputs": [
      {
        "internalType": "contract IWeth",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "stateMutability": "payable",
    "type": "receive"
  }
]