[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_registryAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_cowSettlement",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_enzymeV4VaultProxyAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_weth",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "AboveMaxValidTo",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "BelowMinValidTo",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "FeeNotZero",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "expectedFromAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "actualFromAmount",
        "type": "uint256"
      }
    ],
    "name": "FromAmountMismatch",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "expectedFromAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "actualFromAmount",
        "type": "uint256"
      }
    ],
    "name": "FromAmountTooHigh",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "requestedAsset",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "orderAsset",
        "type": "address"
      }
    ],
    "name": "InvalidAsset",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "expectedAsset",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "actualAsset",
        "type": "address"
      }
    ],
    "name": "InvalidDenominationAsset",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "validReceiver",
        "type": "address"
      }
    ],
    "name": "InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidRecoveryReceiver",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidSwapKind",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "asset",
        "type": "address"
      }
    ],
    "name": "InvalidSwapOperationForAsset",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NoOrderToClose",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyAdvisoryBoard",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyController",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyMember",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlySafe",
    "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": "uint256",
        "name": "currentState",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "checks",
        "type": "uint256"
      }
    ],
    "name": "Paused",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SafeAssetAmountIsZero",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "requestedAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "SafeAssetAmountMismatch",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "requestedAsset",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "asset",
        "type": "address"
      }
    ],
    "name": "SafeAssetMismatch",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "asset",
        "type": "address"
      }
    ],
    "name": "SafeAssetNotAllowed",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "asset",
        "type": "address"
      }
    ],
    "name": "SameAssetSwapRequest",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "blockTimestamp",
        "type": "uint256"
      }
    ],
    "name": "SwapDeadlineExceeded",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "expectedMaxFromAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "actualFromAmount",
        "type": "uint256"
      }
    ],
    "name": "SwappedFromAmountTooHigh",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "expectedMinToAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "actualToAmount",
        "type": "uint256"
      }
    ],
    "name": "SwappedToAmountTooLow",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "expectedToAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "actualToAmount",
        "type": "uint256"
      }
    ],
    "name": "ToAmountMismatch",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "expectedToAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "actualToAmount",
        "type": "uint256"
      }
    ],
    "name": "ToAmountTooLow",
    "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": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "callerIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "authorizedBitmap",
        "type": "uint256"
      }
    ],
    "name": "Unauthorized",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "asset",
        "type": "address"
      }
    ],
    "name": "UnsupportedAsset",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "kind",
        "type": "string"
      }
    ],
    "name": "UnsupportedTokenBalance",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ZeroBalance",
    "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": "fromAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "toAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "enum ISwapOperator.SwapKind",
        "name": "swapKind",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "deadline",
        "type": "uint32"
      }
    ],
    "name": "SwapRequestCreated",
    "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": "fromAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "toAmount",
        "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_VALID_TO_PERIOD",
    "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": [
      {
        "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": "enzymeComptroller",
    "outputs": [
      {
        "internalType": "contract IEnzymeV4Comptroller",
        "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": "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": [],
    "name": "pool",
    "outputs": [
      {
        "internalType": "contract IPool",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "assetAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "recoverAsset",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "registry",
    "outputs": [
      {
        "internalType": "contract IRegistry",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "fromAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "toAsset",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "fromAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "toAmount",
            "type": "uint256"
          },
          {
            "internalType": "enum ISwapOperator.SwapKind",
            "name": "swapKind",
            "type": "uint8"
          },
          {
            "internalType": "uint32",
            "name": "deadline",
            "type": "uint32"
          }
        ],
        "internalType": "struct ISwapOperator.SwapRequest",
        "name": "request",
        "type": "tuple"
      }
    ],
    "name": "requestAssetSwap",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_swapController",
        "type": "address"
      }
    ],
    "name": "setSwapController",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "swapController",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "fromAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "toAmountMin",
        "type": "uint256"
      }
    ],
    "name": "swapETHForEnzymeVaultShare",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "fromAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "toAmountMin",
        "type": "uint256"
      }
    ],
    "name": "swapEnzymeVaultShareForETH",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "swapRequest",
    "outputs": [
      {
        "internalType": "address",
        "name": "fromAsset",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "toAsset",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "fromAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "toAmount",
        "type": "uint256"
      },
      {
        "internalType": "enum ISwapOperator.SwapKind",
        "name": "swapKind",
        "type": "uint8"
      },
      {
        "internalType": "uint32",
        "name": "deadline",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "weth",
    "outputs": [
      {
        "internalType": "contract IWeth",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "stateMutability": "payable",
    "type": "receive"
  }
]