{"version":3,"file":"index.modern.mjs","sources":["../src/constants/chains.ts","../src/utils/common.ts","../src/constants/index.ts","../src/utils/sign.ts","../src/api/cow/errors/OperatorError.ts","../src/api/cow/errors/QuoteError.ts","../src/types/index.ts","../src/constants/tokens.ts","../src/utils/tokens.ts","../src/api/base/index.ts","../src/api/cow/index.ts","../src/api/cow-subgraph/queries.ts","../src/api/cow-subgraph/index.ts","../src/utils/appData.ts","../src/api/metadata/index.ts","../src/utils/ipfs.ts","../src/utils/context.ts","../src/api/0x/error/index.ts","../src/api/0x/utils.ts","../src/api/0x/index.ts","../src/utils/market.ts","../src/CowSdk.ts","../src/api/cow-subgraph/graphql.ts"],"sourcesContent":["export enum SupportedChainId {\n  MAINNET = 1,\n  RINKEBY = 4,\n  GOERLI = 5,\n  GNOSIS_CHAIN = 100,\n}\n\nexport const ALL_SUPPORTED_CHAIN_IDS: SupportedChainId[] = [\n  SupportedChainId.MAINNET,\n  SupportedChainId.RINKEBY,\n  SupportedChainId.GOERLI,\n  SupportedChainId.GNOSIS_CHAIN,\n]\n","export class CowError extends Error {\n  error_code?: string\n\n  constructor(message: string, error_code?: string) {\n    super(message)\n    this.error_code = error_code\n  }\n}\n\nexport function objectToQueryString(o: { [key: string]: string | number | undefined }): string {\n  if (!o) {\n    return ''\n  }\n\n  const qs = new URLSearchParams()\n\n  for (const key of Object.keys(o)) {\n    const value = o[key]\n    if (value) {\n      qs.append(key, value.toString())\n    }\n  }\n\n  const qsResult = qs.toString()\n\n  return qsResult ? `?${qsResult}` : ''\n}\n\nexport const logPrefix = 'cow-sdk:'\n\nexport function fromHexString(hexString: string) {\n  const stringMatch = hexString.match(/.{1,2}/g)\n  if (!stringMatch) return\n  return new Uint8Array(stringMatch.map((byte) => parseInt(byte, 16)))\n}\n","import contractNetworks from '@cowprotocol/contracts/networks.json'\nimport { SupportedChainId as ChainId } from './chains'\n\nconst { GPv2Settlement } = JSON.parse(contractNetworks as unknown as string) as typeof contractNetworks\n\nexport const GP_SETTLEMENT_CONTRACT_ADDRESS: Partial<Record<number, string>> = {\n  [ChainId.MAINNET]: GPv2Settlement[ChainId.MAINNET].address,\n  [ChainId.RINKEBY]: GPv2Settlement[ChainId.RINKEBY].address,\n  [ChainId.GOERLI]: GPv2Settlement[ChainId.GOERLI].address,\n  [ChainId.GNOSIS_CHAIN]: GPv2Settlement[ChainId.GNOSIS_CHAIN].address,\n}\n\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nexport const DEFAULT_APP_DATA_HASH = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nexport const DEFAULT_IPFS_READ_URI = 'https://gnosis.mypinata.cloud/ipfs'\nexport const DEFAULT_IPFS_WRITE_URI = 'https://api.pinata.cloud'\n","import {\n  domain as domainGp,\n  signOrder as signOrderGp,\n  signOrderCancellation as signOrderCancellationGp,\n  EcdsaSignature,\n  Order,\n  OrderCancellation as OrderCancellationGp,\n  Signature,\n  TypedDataV3Signer,\n  IntChainIdTypedDataV4Signer,\n  SigningScheme,\n} from '@cowprotocol/contracts'\nimport log from 'loglevel'\n\nimport { SupportedChainId as ChainId } from '../constants/chains'\nimport { GP_SETTLEMENT_CONTRACT_ADDRESS } from '../constants'\nimport { TypedDataDomain, Signer } from '@ethersproject/abstract-signer'\nimport { CowError, logPrefix } from './common'\n\n// For error codes, see:\n// - https://eth.wiki/json-rpc/json-rpc-error-codes-improvement-proposal\n// - https://www.jsonrpc.org/specification#error_object\nconst METAMASK_SIGNATURE_ERROR_CODE = -32603\nconst METHOD_NOT_FOUND_ERROR_CODE = -32601\nconst V4_ERROR_MSG_REGEX = /eth_signTypedData_v4 does not exist/i\nconst V3_ERROR_MSG_REGEX = /eth_signTypedData_v3 does not exist/i\nconst RPC_REQUEST_FAILED_REGEX = /RPC request failed/i\nconst METAMASK_STRING_CHAINID_REGEX = /provided chainid .* must match the active chainid/i\n\nexport type UnsignedOrder = Omit<Order, 'receiver'> & { receiver: string }\n\nexport interface SignOrderParams {\n  chainId: ChainId\n  signer: Signer\n  order: UnsignedOrder\n  signingScheme: SigningScheme\n}\n\n// posted to /api/v1/orders on Order creation\n// serializable, so no BigNumbers\n//  See https://protocol-rinkeby.dev.gnosisdev.com/api/\nexport interface OrderCreation extends UnsignedOrder {\n  signingScheme: SigningScheme // signed method\n\n  // Signature is used for:\n  //  - Signature: EIP-712,ETHSIGN\n  //  - Owner address: for PRESIGN\n  signature: string // 65 bytes encoded as hex without `0x` prefix. r + s + v from the spec\n  quoteId?: number | null\n}\n\nexport interface SingOrderCancellationParams {\n  chainId: ChainId\n  signer: Signer\n  orderId: string\n  signingScheme: SigningScheme\n}\n\nexport interface OrderCancellation extends OrderCancellationGp {\n  signature: string\n  signingScheme: SigningScheme\n}\n\nexport type SigningSchemeValue = 'eip712' | 'ethsign' | 'eip1271' | 'presign'\n\ninterface SchemaInfo {\n  libraryValue: number\n  apiValue: SigningSchemeValue\n}\nconst mapSigningSchema: Map<SigningScheme, SchemaInfo> = new Map([\n  [SigningScheme.EIP712, { libraryValue: 0, apiValue: 'eip712' }],\n  [SigningScheme.ETHSIGN, { libraryValue: 1, apiValue: 'ethsign' }],\n  [SigningScheme.EIP1271, { libraryValue: 2, apiValue: 'eip1271' }],\n  [SigningScheme.PRESIGN, { libraryValue: 3, apiValue: 'presign' }],\n])\n\nfunction _getSigningSchemeInfo(ecdaSigningScheme: SigningScheme): SchemaInfo {\n  const value = mapSigningSchema.get(ecdaSigningScheme)\n  if (value === undefined) {\n    throw new CowError('Unknown schema ' + ecdaSigningScheme)\n  }\n\n  return value\n}\n\ninterface ProviderRpcError extends Error {\n  message: string\n  code: number\n  data?: unknown\n}\n\nfunction isProviderRpcError(error: unknown): error is ProviderRpcError {\n  return (error as ProviderRpcError).code !== undefined || (error as ProviderRpcError).message !== undefined\n}\n\nexport function getSigningSchemeApiValue(ecdaSigningScheme: SigningScheme): string {\n  return _getSigningSchemeInfo(ecdaSigningScheme).apiValue\n}\n\nexport function getSigningSchemeLibValue(ecdaSigningScheme: SigningScheme): number {\n  return _getSigningSchemeInfo(ecdaSigningScheme).libraryValue\n}\n\nfunction _getDomain(chainId: ChainId): TypedDataDomain {\n  // Get settlement contract address\n  const settlementContract = GP_SETTLEMENT_CONTRACT_ADDRESS[chainId]\n\n  if (!settlementContract) {\n    throw new CowError('Unsupported network. Settlement contract is not deployed')\n  }\n\n  return domainGp(chainId, settlementContract)\n}\n\nasync function _signOrder(params: SignOrderParams): Promise<Signature> {\n  const { chainId, signer, order, signingScheme } = params\n\n  const domain = _getDomain(chainId)\n\n  return signOrderGp(domain, order, signer, getSigningSchemeLibValue(signingScheme))\n}\n\nasync function _signOrderCancellation(params: SingOrderCancellationParams): Promise<Signature> {\n  const { chainId, signer, signingScheme, orderId } = params\n\n  const domain = _getDomain(chainId)\n\n  return signOrderCancellationGp(domain, orderId, signer, getSigningSchemeLibValue(signingScheme))\n}\n\nexport type SigningResult = { signature?: string; signingScheme: SigningScheme }\n\nasync function _signPayload(\n  payload: Pick<SignOrderParams, 'order' & 'chainId'> | Pick<SingOrderCancellationParams, 'chainId' & 'orderId'>,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  signFn: (params: any) => Promise<Signature>,\n  signer: Signer,\n  signingMethod: 'v4' | 'int_v4' | 'v3' | 'eth_sign' = 'v4'\n): Promise<SigningResult> {\n  const signingScheme: SigningScheme = signingMethod === 'eth_sign' ? SigningScheme.ETHSIGN : SigningScheme.EIP712\n  let signature: Signature | null = null\n\n  let _signer\n  try {\n    switch (signingMethod) {\n      case 'v3':\n        _signer = new TypedDataV3Signer(signer)\n        break\n      case 'int_v4':\n        _signer = new IntChainIdTypedDataV4Signer(signer)\n        break\n      default:\n        _signer = signer\n    }\n  } catch (e) {\n    log.error(logPrefix, 'Wallet not supported:', e)\n    throw new CowError('Wallet not supported')\n  }\n\n  try {\n    signature = (await signFn({ ...payload, signer: _signer, signingScheme })) as EcdsaSignature // Only ECDSA signing supported for now\n  } catch (e) {\n    if (!isProviderRpcError(e)) {\n      // Some other error signing. Let it bubble up.\n      log.error(logPrefix, e)\n      throw e\n    }\n\n    if (e.code === METHOD_NOT_FOUND_ERROR_CODE || RPC_REQUEST_FAILED_REGEX.test(e.message)) {\n      // Maybe the wallet returns the proper error code? We can only hope 🤞\n      // OR it failed with a generic message, there's no error code set, and we also hope it'll work\n      // with other methods...\n      switch (signingMethod) {\n        case 'v4':\n          return _signPayload(payload, signFn, signer, 'v3')\n        case 'v3':\n          return _signPayload(payload, signFn, signer, 'eth_sign')\n        default:\n          throw e\n      }\n    } else if (METAMASK_STRING_CHAINID_REGEX.test(e.message)) {\n      // Metamask now enforces chainId to be an integer\n      return _signPayload(payload, signFn, signer, 'int_v4')\n    } else if (e.code === METAMASK_SIGNATURE_ERROR_CODE) {\n      // We tried to sign order the nice way.\n      // That works fine for regular MM addresses. Does not work for Hardware wallets, though.\n      // See https://github.com/MetaMask/metamask-extension/issues/10240#issuecomment-810552020\n      // So, when that specific error occurs, we know this is a problem with MM + HW.\n      // Then, we fallback to ETHSIGN.\n      return _signPayload(payload, signFn, signer, 'eth_sign')\n    } else if (V4_ERROR_MSG_REGEX.test(e.message)) {\n      // Failed with `v4`, and the wallet does not set the proper error code\n      return _signPayload(payload, signFn, signer, 'v3')\n    } else if (V3_ERROR_MSG_REGEX.test(e.message)) {\n      // Failed with `v3`, and the wallet does not set the proper error code\n      return _signPayload(payload, signFn, signer, 'eth_sign')\n    }\n  }\n  return { signature: signature?.data.toString(), signingScheme }\n}\n/**\n * Returns the signature for the specified order with the signing scheme encoded\n * into the signature.\n * @export\n * @param {UnsignedOrder} order The order to sign.\n * @param {ChainId} chainId The chain Id\n * @param {Signer} signer The owner for the order used to sign.\n * @return {*} Encoded signature including signing scheme for the order.\n */\nexport async function signOrder(order: UnsignedOrder, chainId: ChainId, signer: Signer): Promise<SigningResult> {\n  return _signPayload({ order, chainId }, _signOrder, signer)\n}\n\n/**\n * Returns the signature for the Order Cancellation with the signing scheme encoded\n * into the signature.\n *\n * @export\n * @param {string} orderId The unique identifier of the order being cancelled.\n * @param {ChainId} chainId The chain Id\n * @param {Signer} signer The owner for the order used to sign.\n * @return {*} Encoded signature including signing scheme for the order.\n */\nexport async function signOrderCancellation(orderId: string, chainId: ChainId, signer: Signer): Promise<SigningResult> {\n  return _signPayload({ orderId, chainId }, _signOrderCancellation, signer)\n}\n","import log from 'loglevel'\nimport { CowError, logPrefix } from '../../../utils/common'\n\ntype ApiActionType = 'get' | 'create' | 'delete'\n\nexport interface ApiErrorObject {\n  errorType: ApiErrorCodes\n  description: string\n  data?: unknown\n}\n\n// Conforms to backend API\n// https://github.com/gnosis/gp-v2-services/blob/d932e11c9a2125fdba239530be7684799f694909/crates/orderbook/openapi.yml#L801\n// and\n// https://github.com/gnosis/gp-v2-services/blob/d932e11c9a2125fdba239530be7684799f694909/crates/orderbook/openapi.yml#L740\nexport enum ApiErrorCodes {\n  DuplicateOrder = 'DuplicateOrder',\n  InvalidSignature = 'InvalidSignature',\n  MissingOrderData = 'MissingOrderData',\n  InsufficientValidTo = 'InsufficientValidTo',\n  InsufficientAllowance = 'InsufficientAllowance',\n  InsufficientBalance = 'InsufficientBalance',\n  InsufficientFee = 'InsufficientFee',\n  WrongOwner = 'WrongOwner',\n  NotFound = 'NotFound',\n  OrderNotFound = 'OrderNotFound',\n  AlreadyCancelled = 'AlreadyCancelled',\n  OrderFullyExecuted = 'OrderFullyExecuted',\n  OrderExpired = 'OrderExpired',\n  NoLiquidity = 'NoLiquidity',\n  UnsupportedToken = 'UnsupportedToken',\n  AmountIsZero = 'AmountIsZero',\n  SellAmountDoesNotCoverFee = 'SellAmountDoesNotCoverFee',\n  TransferEthToContract = 'TransferEthToContract',\n  UNHANDLED_GET_ERROR = 'UNHANDLED_GET_ERROR',\n  UNHANDLED_CREATE_ERROR = 'UNHANDLED_CREATE_ERROR',\n  UNHANDLED_DELETE_ERROR = 'UNHANDLED_DELETE_ERROR',\n}\n\nexport enum ApiErrorCodeDetails {\n  DuplicateOrder = 'There was another identical order already submitted. Please try again.',\n  InsufficientFee = \"The signed fee is insufficient. It's possible that is higher now due to a change in the gas price, ether price, or the sell token price. Please try again to get an updated fee quote.\",\n  InvalidSignature = 'The order signature is invalid. Check whether your Wallet app supports off-chain signing.',\n  MissingOrderData = 'The order has missing information',\n  InsufficientValidTo = 'The order you are signing is already expired. This can happen if you set a short expiration in the settings and waited too long before signing the transaction. Please try again.',\n  InsufficientAllowance = \"The account doesn't have enough funds\",\n  InsufficientBalance = 'The account needs to approve the selling token in order to trade',\n  WrongOwner = \"The signature is invalid.\\n\\nIt's likely that the signing method provided by your wallet doesn't comply with the standards required by CowSwap.\\n\\nCheck whether your Wallet app supports off-chain signing (EIP-712 or ETHSIGN).\",\n  NotFound = 'Token pair selected has insufficient liquidity',\n  OrderNotFound = 'The order you are trying to cancel does not exist',\n  AlreadyCancelled = 'Order is already cancelled',\n  OrderFullyExecuted = 'Order is already filled',\n  OrderExpired = 'Order is expired',\n  NoLiquidity = 'Token pair selected has insufficient liquidity',\n  UnsupportedToken = 'One of the tokens you are trading is unsupported. Please read the FAQ for more info.',\n  AmountIsZero = 'Amount is zero',\n  SellAmountDoesNotCoverFee = 'Sell amount does not sufficiently cover the current fee',\n  TransferEthToContract = 'Sending the native currency to smart contract wallets is not currently supported',\n  UNHANDLED_GET_ERROR = 'Order fetch failed. This may be due to a server or network connectivity issue. Please try again later.',\n  UNHANDLED_CREATE_ERROR = 'The order was not accepted by the network',\n  UNHANDLED_DELETE_ERROR = 'The order cancellation was not accepted by the network',\n}\n\nfunction _mapActionToErrorDetail(action?: ApiActionType) {\n  switch (action) {\n    case 'get':\n      return ApiErrorCodeDetails.UNHANDLED_GET_ERROR\n    case 'create':\n      return ApiErrorCodeDetails.UNHANDLED_CREATE_ERROR\n    case 'delete':\n      return ApiErrorCodeDetails.UNHANDLED_DELETE_ERROR\n    default:\n      log.error(\n        logPrefix,\n        '[OperatorError::_mapActionToErrorDetails] Uncaught error mapping error action type to server error. Please try again later.'\n      )\n      return 'Something failed. Please try again later.'\n  }\n}\n\nexport default class OperatorError extends CowError {\n  name = 'OperatorError'\n  description: ApiErrorObject['description']\n\n  // Status 400 errors\n  // https://github.com/gnosis/gp-v2-services/blob/9014ae55412a356e46343e051aefeb683cc69c41/orderbook/openapi.yml#L563\n  static apiErrorDetails = ApiErrorCodeDetails\n\n  public static async getErrorMessage(response: Response, action: ApiActionType) {\n    try {\n      const orderPostError: ApiErrorObject = await response.json()\n\n      if (orderPostError.errorType) {\n        const errorMessage = OperatorError.apiErrorDetails[orderPostError.errorType]\n        // shouldn't fall through as this error constructor expects the error code to exist but just in case\n        return errorMessage || orderPostError.errorType\n      } else {\n        log.error(logPrefix, 'Unknown reason for bad order submission', orderPostError)\n        return orderPostError.description\n      }\n    } catch (error) {\n      log.error(logPrefix, 'Error handling a 400 error. Likely a problem deserialising the JSON response')\n      return _mapActionToErrorDetail(action)\n    }\n  }\n  static async getErrorFromStatusCode(response: Response, action: 'create' | 'delete') {\n    switch (response.status) {\n      case 400:\n      case 404:\n        return this.getErrorMessage(response, action)\n\n      case 403:\n        return `The order cannot be ${action === 'create' ? 'accepted' : 'cancelled'}. Your account is deny-listed.`\n\n      case 429:\n        return `The order cannot be ${\n          action === 'create' ? 'accepted. Too many order placements' : 'cancelled. Too many order cancellations'\n        }. Please, retry in a minute`\n\n      case 500:\n      default:\n        log.error(\n          logPrefix,\n          `[OperatorError::getErrorFromStatusCode] Error ${\n            action === 'create' ? 'creating' : 'cancelling'\n          } the order, status code:`,\n          response.status || 'unknown'\n        )\n        return `Error ${action === 'create' ? 'creating' : 'cancelling'} the order`\n    }\n  }\n  constructor(apiError: ApiErrorObject) {\n    super(apiError.description, apiError.errorType)\n\n    this.description = apiError.description\n    this.message = ApiErrorCodeDetails[apiError.errorType]\n  }\n}\n\nexport function isValidOperatorError(error: unknown): error is OperatorError {\n  return error instanceof OperatorError\n}\n","import log from 'loglevel'\nimport { CowError, logPrefix } from '../../../utils/common'\nimport { ApiErrorCodes, ApiErrorObject } from './OperatorError'\n\nexport interface GpQuoteErrorObject {\n  errorType: GpQuoteErrorCodes\n  description: string\n  data?: unknown\n}\n\n// Conforms to backend API\n// https://github.com/gnosis/gp-v2-services/blob/0bd5f7743bebaa5acd3be13e35ede2326a096f14/orderbook/openapi.yml#L562\nexport enum GpQuoteErrorCodes {\n  UnsupportedToken = 'UnsupportedToken',\n  InsufficientLiquidity = 'InsufficientLiquidity',\n  FeeExceedsFrom = 'FeeExceedsFrom',\n  ZeroPrice = 'ZeroPrice',\n  UNHANDLED_ERROR = 'UNHANDLED_ERROR',\n}\n\nexport enum GpQuoteErrorDetails {\n  UnsupportedToken = 'One of the tokens you are trading is unsupported. Please read the FAQ for more info.',\n  InsufficientLiquidity = 'Token pair selected has insufficient liquidity',\n  FeeExceedsFrom = 'Current fee exceeds entered \"from\" amount',\n  ZeroPrice = 'Quoted price is zero. This is likely due to a significant price difference between the two tokens. Please try increasing amounts.',\n  UNHANDLED_ERROR = 'Quote fetch failed. This may be due to a server or network connectivity issue. Please try again later.',\n}\n\nexport function mapOperatorErrorToQuoteError(error?: ApiErrorObject): GpQuoteErrorObject {\n  switch (error?.errorType) {\n    case ApiErrorCodes.NotFound:\n    case ApiErrorCodes.NoLiquidity:\n      return {\n        errorType: GpQuoteErrorCodes.InsufficientLiquidity,\n        description: GpQuoteErrorDetails.InsufficientLiquidity,\n      }\n\n    case ApiErrorCodes.SellAmountDoesNotCoverFee:\n      return {\n        errorType: GpQuoteErrorCodes.FeeExceedsFrom,\n        description: GpQuoteErrorDetails.FeeExceedsFrom,\n        data: error?.data,\n      }\n\n    case ApiErrorCodes.UnsupportedToken:\n      return {\n        errorType: GpQuoteErrorCodes.UnsupportedToken,\n        description: error.description,\n      }\n    case ApiErrorCodes.SellAmountDoesNotCoverFee:\n      return {\n        errorType: GpQuoteErrorCodes.FeeExceedsFrom,\n        description: error.description,\n      }\n    default:\n      return { errorType: GpQuoteErrorCodes.UNHANDLED_ERROR, description: GpQuoteErrorDetails.UNHANDLED_ERROR }\n  }\n}\n\nexport default class GpQuoteError extends CowError {\n  name = 'QuoteErrorObject'\n  description: string\n  // any data attached\n  data?: unknown\n\n  // Status 400 errors\n  // https://github.com/gnosis/gp-v2-services/blob/9014ae55412a356e46343e051aefeb683cc69c41/orderbook/openapi.yml#L563\n  static quoteErrorDetails = GpQuoteErrorDetails\n\n  public static async getErrorMessage(response: Response) {\n    try {\n      const orderPostError: GpQuoteErrorObject = await response.json()\n\n      if (orderPostError.errorType) {\n        const errorMessage = GpQuoteError.quoteErrorDetails[orderPostError.errorType]\n        // shouldn't fall through as this error constructor expects the error code to exist but just in case\n        return errorMessage || orderPostError.errorType\n      } else {\n        log.error(logPrefix, 'Unknown reason for bad quote fetch', orderPostError)\n        return orderPostError.description\n      }\n    } catch (error) {\n      log.error(logPrefix, 'Error handling 400/404 error. Likely a problem deserialising the JSON response')\n      return GpQuoteError.quoteErrorDetails.UNHANDLED_ERROR\n    }\n  }\n\n  static async getErrorFromStatusCode(response: Response) {\n    switch (response.status) {\n      case 400:\n      case 404:\n        return this.getErrorMessage(response)\n\n      case 500:\n      default:\n        log.error(\n          logPrefix,\n          '[QuoteError::getErrorFromStatusCode] Error fetching quote, status code:',\n          response.status || 'unknown'\n        )\n        return 'Error fetching quote'\n    }\n  }\n  constructor(quoteError: GpQuoteErrorObject) {\n    super(quoteError.description, quoteError.errorType)\n\n    this.description = quoteError.description\n    this.message = GpQuoteError.quoteErrorDetails[quoteError.errorType]\n    this.data = quoteError?.data\n  }\n}\n\nexport function isValidQuoteError(error: unknown): error is GpQuoteError {\n  return error instanceof GpQuoteError\n}\n","export * from '../api/cow/types'\nexport * from '../api/metadata/types'\nexport { OrderKind } from '@cowprotocol/contracts'\nexport class Token {\n  constructor(public symbol: string, public address: string) {}\n}\n","import { SupportedChainId as ChainId } from './chains'\nimport { Token } from '../types'\n\nexport const XDAI_SYMBOL = 'XDAI'\n\nexport const WRAPPED_NATIVE_TOKEN: Record<ChainId, Token> = {\n  [ChainId.MAINNET]: new Token('WETH', '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),\n  [ChainId.RINKEBY]: new Token('WETH', '0xc778417E063141139Fce010982780140Aa0cD5Ab'),\n  [ChainId.GOERLI]: new Token('WETH', '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6'),\n  [ChainId.GNOSIS_CHAIN]: new Token('WXDAI', '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d'),\n}\n\nexport const NATIVE: Record<ChainId, string> = {\n  [ChainId.MAINNET]: 'ETH',\n  [ChainId.RINKEBY]: 'ETH',\n  [ChainId.GOERLI]: 'ETH',\n  [ChainId.GNOSIS_CHAIN]: XDAI_SYMBOL,\n}\n","import { SupportedChainId as ChainId } from '../constants/chains'\nimport { NATIVE, WRAPPED_NATIVE_TOKEN } from '../constants/tokens'\n\nexport function toErc20Address(tokenAddress: string, chainId: ChainId): string {\n  let checkedAddress = tokenAddress\n\n  if (tokenAddress === NATIVE[chainId]) {\n    checkedAddress = WRAPPED_NATIVE_TOKEN[chainId].address\n  }\n\n  return checkedAddress\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { SupportedChainId } from '../../constants/chains'\nimport { CowError } from '../../utils/common'\nimport { Context } from '../../utils/context'\nimport { Options } from '../cow/types'\nimport fetch from 'cross-fetch'\n\ninterface ConstructorParams {\n  context: Context\n  name: string\n  apiVersion?: string\n  // we want getApiUrl to accept any parameters but return a specific type\n  getApiUrl: (...params: any[]) => Partial<Record<SupportedChainId, string>>\n  defaultHeaders?: HeadersInit\n}\n\nconst DEFAULT_HEADERS = { 'Content-Type': 'application/json' }\nconst DEFAULT_API_VERSION = 'v1'\nexport default class BaseApi {\n  context\n  API_NAME\n  API_VERSION\n  API_URL_GETTER\n  DEFAULT_HEADERS\n\n  constructor({\n    context,\n    name,\n    getApiUrl,\n    defaultHeaders = DEFAULT_HEADERS,\n    apiVersion = DEFAULT_API_VERSION,\n  }: ConstructorParams) {\n    this.context = context\n    this.API_NAME = name\n    this.API_VERSION = apiVersion\n    this.API_URL_GETTER = getApiUrl\n    this.DEFAULT_HEADERS = defaultHeaders\n  }\n\n  protected async getApiBaseUrl(...params: unknown[]): Promise<string> {\n    const chainId = await this.context.chainId\n    const baseUrl = this.API_URL_GETTER(...params)[chainId]\n\n    if (!baseUrl) {\n      throw new CowError(`Unsupported Network. The ${this.API_NAME} API is not deployed in the Network ` + chainId)\n    } else {\n      return baseUrl + '/' + this.API_VERSION\n    }\n  }\n\n  protected post(url: string, data: unknown, options: Options = {}): Promise<Response> {\n    return this.handleMethod(url, 'POST', this.fetch.bind(this), this.API_URL_GETTER, options, data)\n  }\n\n  protected get(url: string, options: Options = {}): Promise<Response> {\n    return this.handleMethod(url, 'GET', this.fetch.bind(this), this.API_URL_GETTER, options)\n  }\n\n  protected delete(url: string, data: unknown, options: Options = {}): Promise<Response> {\n    return this.handleMethod(url, 'DELETE', this.fetch.bind(this), this.API_URL_GETTER, options, data)\n  }\n\n  protected async handleMethod(\n    url: string,\n    method: 'GET' | 'POST' | 'DELETE',\n    fetchFn: BaseApi['fetch'],\n    getApiUrl: BaseApi['API_URL_GETTER'],\n    options: Options = {},\n    data?: unknown\n  ): Promise<Response> {\n    const { chainId: networkId, requestOptions } = options\n    const chainId = networkId || (await this.context.chainId)\n\n    const uri = getApiUrl(options.apiUrlGetterParams)\n\n    return fetchFn(url, method, `${uri[chainId]}/${this.API_VERSION}`, data, requestOptions)\n  }\n\n  protected async fetch(\n    url: string,\n    method: 'GET' | 'POST' | 'DELETE',\n    baseUrl: string,\n    data?: unknown,\n    requestOptions?: RequestInit\n  ): Promise<Response> {\n    return fetch(baseUrl + url, {\n      headers: this.DEFAULT_HEADERS,\n      ...requestOptions,\n      method,\n      body: data !== undefined ? JSON.stringify(data) : data,\n    })\n  }\n}\n","import log from 'loglevel'\nimport fetch from 'cross-fetch'\nimport { OrderKind, QuoteQuery } from '@cowprotocol/contracts'\nimport { SupportedChainId as ChainId } from '../../constants/chains'\nimport { getSigningSchemeApiValue, OrderCreation } from '../../utils/sign'\nimport OperatorError, { ApiErrorCodeDetails, ApiErrorCodes, ApiErrorObject } from './errors/OperatorError'\nimport QuoteError, {\n  GpQuoteErrorCodes,\n  GpQuoteErrorObject,\n  mapOperatorErrorToQuoteError,\n  GpQuoteErrorDetails,\n} from './errors/QuoteError'\nimport { toErc20Address } from '../../utils/tokens'\nimport { FeeQuoteParams, PriceInformation, PriceQuoteParams, SimpleGetQuoteResponse } from './types'\n\nimport { ZERO_ADDRESS } from '../../constants'\nimport {\n  GetOrdersParams,\n  GetTradesParams,\n  OrderCancellationParams,\n  OrderID,\n  OrderMetaData,\n  ProfileData,\n  TradeMetaData,\n  Options,\n} from './types'\nimport { CowError, logPrefix, objectToQueryString } from '../../utils/common'\nimport { Context } from '../../utils/context'\nimport BaseApi from '../base'\n\nconst API_URL_VERSION = 'v1'\n\nfunction getGnosisProtocolUrl(isDev: boolean): Record<ChainId, string> {\n  if (isDev) {\n    return {\n      [ChainId.MAINNET]: 'https://barn.api.cow.fi/mainnet/api',\n      [ChainId.RINKEBY]: 'https://barn.api.cow.fi/rinkeby/api',\n      [ChainId.GOERLI]: 'https://barn.api.cow.fi/goerli/api',\n      [ChainId.GNOSIS_CHAIN]: 'https://barn.api.cow.fi/xdai/api',\n    }\n  }\n\n  return {\n    [ChainId.MAINNET]: 'https://api.cow.fi/mainnet/api',\n    [ChainId.RINKEBY]: 'https://api.cow.fi/rinkeby/api',\n    [ChainId.GOERLI]: 'https://api.cow.fi/goerli/api',\n    [ChainId.GNOSIS_CHAIN]: 'https://api.cow.fi/xdai/api',\n  }\n}\n\nfunction getProfileUrl(isDev: boolean): Partial<Record<ChainId, string>> {\n  if (isDev) {\n    return {\n      [ChainId.MAINNET]: 'https://barn.api.cow.fi/affiliate/api',\n    }\n  }\n\n  return {\n    [ChainId.MAINNET]: 'https://api.cow.fi/affiliate/api',\n  }\n}\n\nconst UNHANDLED_QUOTE_ERROR: GpQuoteErrorObject = {\n  errorType: GpQuoteErrorCodes.UNHANDLED_ERROR,\n  description: GpQuoteErrorDetails.UNHANDLED_ERROR,\n}\n\nconst UNHANDLED_ORDER_ERROR: ApiErrorObject = {\n  errorType: ApiErrorCodes.UNHANDLED_CREATE_ERROR,\n  description: ApiErrorCodeDetails.UNHANDLED_CREATE_ERROR,\n}\n\nasync function _handleQuoteResponse<T = unknown, P extends QuoteQuery = QuoteQuery>(\n  response: Response,\n  params?: P\n): Promise<T> {\n  if (!response.ok) {\n    const errorObj: ApiErrorObject = await response.json()\n\n    // we need to map the backend error codes to match our own for quotes\n    const mappedError = mapOperatorErrorToQuoteError(errorObj)\n    const quoteError = new QuoteError(mappedError)\n\n    if (params) {\n      const { sellToken, buyToken } = params\n      log.error(logPrefix, `Error querying fee from API - sellToken: ${sellToken}, buyToken: ${buyToken}`)\n    }\n\n    throw quoteError\n  } else {\n    return response.json()\n  }\n}\n\nexport class CowApi extends BaseApi {\n  constructor(context: Context) {\n    super({ context, name: 'CoW Protocol', apiVersion: API_URL_VERSION, getApiUrl: getGnosisProtocolUrl })\n  }\n\n  async getProfileData(address: string, options: Options = {}): Promise<ProfileData | null> {\n    const { chainId: networkId, isDevEnvironment } = options\n    const chainId = networkId || (await this.context.chainId)\n    log.debug(logPrefix, `[api:${this.API_NAME}] Get profile data for`, chainId, address)\n    if (chainId !== ChainId.MAINNET) {\n      log.info(logPrefix, 'Profile data is only available for mainnet')\n      return null\n    }\n\n    const response = await this.getProfile(`/profile/${address}`, { chainId, isDevEnvironment })\n\n    if (!response.ok) {\n      const errorResponse = await response.json()\n      log.error(logPrefix, errorResponse)\n      throw new CowError(errorResponse?.description)\n    } else {\n      return response.json()\n    }\n  }\n\n  async getTrades(params: GetTradesParams, options: Options = {}): Promise<TradeMetaData[]> {\n    const { chainId: networkId, isDevEnvironment = this.context.isDevEnvironment } = options\n    const { owner, orderId, limit, offset } = params\n    if (owner && orderId) {\n      throw new CowError('Cannot specify both owner and orderId')\n    }\n    const qsParams = objectToQueryString({ owner, orderUid: orderId, limit, offset })\n    const chainId = networkId || (await this.context.chainId)\n    log.debug(logPrefix, '[util:operator] Get trades for', chainId, { owner, orderId, limit, offset })\n    try {\n      const response = await this.get(`/trades${qsParams}`, { chainId, isDevEnvironment })\n\n      if (!response.ok) {\n        const errorResponse = await response.json()\n        throw new OperatorError(errorResponse)\n      } else {\n        return response.json()\n      }\n    } catch (error) {\n      log.error(logPrefix, 'Error getting trades:', error)\n      if (error instanceof OperatorError) throw error\n\n      throw new CowError('Error getting trades: ' + error)\n    }\n  }\n\n  async getOrders(params: GetOrdersParams, options: Options = {}): Promise<OrderMetaData[]> {\n    const { chainId: networkId, isDevEnvironment = this.context.isDevEnvironment } = options\n    const { owner, limit = 1000, offset = 0 } = params\n    const queryString = objectToQueryString({ limit, offset })\n    const chainId = networkId || (await this.context.chainId)\n    log.debug(logPrefix, `[api:${this.API_NAME}] Get orders for `, chainId, owner, limit, offset)\n\n    try {\n      const response = await this.get(`/account/${owner}/orders/${queryString}`, { chainId, isDevEnvironment })\n\n      if (!response.ok) {\n        const errorResponse: ApiErrorObject = await response.json()\n        throw new OperatorError(errorResponse)\n      } else {\n        return response.json()\n      }\n    } catch (error) {\n      log.error(logPrefix, 'Error getting orders information:', error)\n      if (error instanceof OperatorError) throw error\n\n      throw new OperatorError(UNHANDLED_ORDER_ERROR)\n    }\n  }\n\n  async getTxOrders(txHash: string, options: Options = {}): Promise<OrderMetaData[]> {\n    const { chainId: networkId, isDevEnvironment } = options\n    const chainId = networkId || (await this.context.chainId)\n    log.debug(`[api:${this.API_NAME}] Get tx orders for `, chainId, txHash)\n\n    try {\n      const response = await this.get(`/transactions/${txHash}/orders`, { chainId, isDevEnvironment })\n\n      if (!response.ok) {\n        const errorResponse: ApiErrorObject = await response.json()\n        throw new OperatorError(errorResponse)\n      } else {\n        return response.json()\n      }\n    } catch (error) {\n      log.error('Error getting transaction orders information:', error)\n      if (error instanceof OperatorError) throw error\n      throw new OperatorError(UNHANDLED_ORDER_ERROR)\n    }\n  }\n\n  async getOrder(orderId: string, options: Options = {}): Promise<OrderMetaData | null> {\n    const { chainId: networkId, isDevEnvironment } = options\n    const chainId = networkId || (await this.context.chainId)\n    log.debug(logPrefix, `[api:${this.API_NAME}] Get order for `, chainId, orderId)\n    try {\n      const response = await this.get(`/orders/${orderId}`, { chainId, isDevEnvironment })\n\n      if (!response.ok) {\n        const errorResponse: ApiErrorObject = await response.json()\n        throw new OperatorError(errorResponse)\n      } else {\n        return response.json()\n      }\n    } catch (error) {\n      log.error(logPrefix, 'Error getting order information:', error)\n      if (error instanceof OperatorError) throw error\n\n      throw new OperatorError(UNHANDLED_ORDER_ERROR)\n    }\n  }\n\n  async getPriceQuoteLegacy(params: PriceQuoteParams, options: Options = {}): Promise<PriceInformation | null> {\n    const { chainId: networkId, isDevEnvironment } = options\n    const { baseToken, quoteToken, amount, kind } = params\n    const chainId = networkId || (await this.context.chainId)\n    log.debug(logPrefix, `[api:${this.API_NAME}] Get price from API`, params, 'for', chainId)\n\n    const response = await this.get(\n      `/markets/${toErc20Address(baseToken, chainId)}-${toErc20Address(quoteToken, chainId)}/${kind}/${amount}`,\n      { chainId, isDevEnvironment }\n    ).catch((error) => {\n      log.error(logPrefix, 'Error getting price quote:', error)\n      throw new QuoteError(UNHANDLED_QUOTE_ERROR)\n    })\n\n    return _handleQuoteResponse<PriceInformation | null>(response)\n  }\n\n  async getQuote(params: FeeQuoteParams, options: Options = {}): Promise<SimpleGetQuoteResponse> {\n    const { chainId: networkId, isDevEnvironment } = options\n    const chainId = networkId || (await this.context.chainId)\n    const quoteParams = this.mapNewToLegacyParams(params, chainId)\n    const response = await this.post('/quote', quoteParams, { chainId, isDevEnvironment })\n\n    return _handleQuoteResponse<SimpleGetQuoteResponse>(response)\n  }\n\n  async sendSignedOrderCancellation(params: OrderCancellationParams, options: Options = {}): Promise<void> {\n    const { chainId: networkId, isDevEnvironment } = options\n    const { cancellation, owner: from } = params\n    const chainId = networkId || (await this.context.chainId)\n    log.debug(logPrefix, `[api:${this.API_NAME}] Delete signed order for network`, chainId, cancellation)\n\n    const response = await this.delete(\n      `/orders/${cancellation.orderUid}`,\n      {\n        signature: cancellation.signature,\n        signingScheme: getSigningSchemeApiValue(cancellation.signingScheme),\n        from,\n      },\n      { chainId, isDevEnvironment }\n    )\n\n    if (!response.ok) {\n      // Raise an exception\n      const errorMessage = await OperatorError.getErrorFromStatusCode(response, 'delete')\n      throw new CowError(errorMessage)\n    }\n\n    log.debug(logPrefix, `[api:${this.API_NAME}] Cancelled order`, cancellation.orderUid, chainId)\n  }\n\n  async sendOrder(\n    params: { order: Omit<OrderCreation, 'appData'>; owner: string },\n    options: Options = {}\n  ): Promise<OrderID> {\n    const fullOrder: OrderCreation = { ...params.order, appData: this.context.appDataHash }\n    const { chainId: networkId, isDevEnvironment } = options\n    const chainId = networkId || (await this.context.chainId)\n    const { owner } = params\n    log.debug(logPrefix, `[api:${this.API_NAME}] Post signed order for network`, chainId, fullOrder)\n\n    // Call API\n    const response = await this.post(\n      `/orders`,\n      {\n        ...fullOrder,\n        signingScheme: getSigningSchemeApiValue(fullOrder.signingScheme),\n        from: owner,\n      },\n      { chainId, isDevEnvironment }\n    )\n\n    // Handle response\n    if (!response.ok) {\n      // Raise an exception\n      const errorMessage = await OperatorError.getErrorFromStatusCode(response, 'create')\n      throw new CowError(errorMessage)\n    }\n\n    const uid = (await response.json()) as string\n    log.debug(logPrefix, `[api:${this.API_NAME}] Success posting the signed order`, uid)\n    return uid\n  }\n\n  async getOrderLink(orderId: OrderID): Promise<string> {\n    const baseUrl = await this.getApiBaseUrl()\n\n    return baseUrl + `/orders/${orderId}`\n  }\n\n  private getProfile(url: string, options: Options = {}): Promise<Response> {\n    return this.handleMethod(url, 'GET', this.fetchProfile.bind(this), getProfileUrl, options)\n  }\n\n  private mapNewToLegacyParams(params: FeeQuoteParams, chainId: ChainId): QuoteQuery {\n    const { amount, kind, userAddress, receiver, validTo, sellToken, buyToken } = params\n    const fallbackAddress = userAddress || ZERO_ADDRESS\n\n    const baseParams = {\n      sellToken: toErc20Address(sellToken, chainId),\n      buyToken: toErc20Address(buyToken, chainId),\n      from: fallbackAddress,\n      receiver: receiver || fallbackAddress,\n      appData: this.context.appDataHash,\n      validTo,\n      partiallyFillable: false,\n    }\n\n    const finalParams: QuoteQuery =\n      kind === OrderKind.SELL\n        ? {\n            kind: OrderKind.SELL,\n            sellAmountBeforeFee: amount,\n            ...baseParams,\n          }\n        : {\n            kind: OrderKind.BUY,\n            buyAmountAfterFee: amount,\n            ...baseParams,\n          }\n\n    return finalParams\n  }\n\n  protected getApiBaseUrl(): Promise<string> {\n    return super.getApiBaseUrl(this.context.isDevEnvironment)\n  }\n\n  private async fetchProfile(\n    url: string,\n    method: 'GET' | 'POST' | 'DELETE',\n    baseUrl: string,\n    data?: unknown\n  ): Promise<Response> {\n    return fetch(baseUrl + url, {\n      headers: this.DEFAULT_HEADERS,\n      method,\n      body: data !== undefined ? JSON.stringify(data) : data,\n    })\n  }\n\n  protected async handleMethod(\n    url: string,\n    method: 'GET' | 'POST' | 'DELETE',\n    fetchFn: CowApi['fetch'] | CowApi['fetchProfile'],\n    getUrl: typeof getGnosisProtocolUrl | typeof getProfileUrl,\n    options: Options = {},\n    data?: unknown\n  ): Promise<Response> {\n    const { chainId: networkId, isDevEnvironment, requestOptions } = options\n    const prodUri = getUrl(false)\n    const barnUri = getUrl(true)\n    const chainId = networkId || (await this.context.chainId)\n\n    let response\n    if (isDevEnvironment === undefined) {\n      try {\n        response = await fetchFn(url, method, `${prodUri[chainId]}/${this.API_VERSION}`, data, requestOptions)\n      } catch (error) {\n        response = await fetchFn(url, method, `${barnUri[chainId]}/${this.API_VERSION}`, data, requestOptions)\n      }\n    } else {\n      const uri = isDevEnvironment ? barnUri : prodUri\n      response = await fetchFn(url, method, `${uri[chainId]}/${this.API_VERSION}`, data, requestOptions)\n    }\n    return response\n  }\n}\n","import { gql } from 'graphql-request'\n\nexport const TOTALS_QUERY = gql`\n  query Totals {\n    totals {\n      tokens\n      orders\n      traders\n      settlements\n      volumeUsd\n      volumeEth\n      feesUsd\n      feesEth\n    }\n  }\n`\n\nexport const LAST_DAYS_VOLUME_QUERY = gql`\n  query LastDaysVolume($days: Int!) {\n    dailyTotals(orderBy: timestamp, orderDirection: desc, first: $days) {\n      timestamp\n      volumeUsd\n    }\n  }\n`\n\nexport const LAST_HOURS_VOLUME_QUERY = gql`\n  query LastHoursVolume($hours: Int!) {\n    hourlyTotals(orderBy: timestamp, orderDirection: desc, first: $hours) {\n      timestamp\n      volumeUsd\n    }\n  }\n`\n","import log from 'loglevel'\nimport fetch from 'cross-fetch'\nimport { GraphQLClient, Variables } from 'graphql-request'\nimport { DocumentNode } from 'graphql'\nimport { CowError } from '../../utils/common'\nimport { Context } from '../../utils/context'\nimport { SupportedChainId as ChainId } from '../../constants/chains'\nimport { LastDaysVolumeQuery, LastHoursVolumeQuery, TotalsQuery } from './graphql'\nimport { LAST_DAYS_VOLUME_QUERY, LAST_HOURS_VOLUME_QUERY, TOTALS_QUERY } from './queries'\n\nexport const subgraphUrls: Record<ChainId, string> = {\n  [ChainId.MAINNET]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow',\n  [ChainId.RINKEBY]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow-rinkeby',\n  [ChainId.GOERLI]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow-goerli',\n  [ChainId.GNOSIS_CHAIN]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow-gc',\n}\n\nexport class CowSubgraphApi {\n  context: Context\n  clients: Record<ChainId, GraphQLClient>\n\n  API_NAME = 'CoW Protocol Subgraph'\n\n  constructor(context: Context) {\n    this.context = context\n    this.clients = this.createClients()\n  }\n\n  private createClients(): Record<ChainId, GraphQLClient> {\n    return {\n      [ChainId.MAINNET]: new GraphQLClient(subgraphUrls[ChainId.MAINNET], { fetch }),\n      [ChainId.RINKEBY]: new GraphQLClient(subgraphUrls[ChainId.RINKEBY], { fetch }),\n      [ChainId.GOERLI]: new GraphQLClient(subgraphUrls[ChainId.GOERLI], { fetch }),\n      [ChainId.GNOSIS_CHAIN]: new GraphQLClient(subgraphUrls[ChainId.GNOSIS_CHAIN], { fetch }),\n    }\n  }\n\n  async getBaseUrl(): Promise<string> {\n    const chainId = await this.context.chainId\n    return subgraphUrls[chainId]\n  }\n\n  async getTotals(): Promise<TotalsQuery['totals'][0]> {\n    const chainId = await this.context.chainId\n    log.debug(`[subgraph:${this.API_NAME}] Get totals for:`, chainId)\n    const response = await this.runQuery<TotalsQuery>(TOTALS_QUERY)\n    return response.totals[0]\n  }\n\n  async getLastDaysVolume(days: number): Promise<LastDaysVolumeQuery> {\n    const chainId = await this.context.chainId\n    log.debug(`[subgraph:${this.API_NAME}] Get last ${days} days volume for:`, chainId)\n    return this.runQuery<LastDaysVolumeQuery>(LAST_DAYS_VOLUME_QUERY, { days })\n  }\n\n  async getLastHoursVolume(hours: number): Promise<LastHoursVolumeQuery> {\n    const chainId = await this.context.chainId\n    log.debug(`[subgraph:${this.API_NAME}] Get last ${hours} hours volume for:`, chainId)\n    return this.runQuery<LastHoursVolumeQuery>(LAST_HOURS_VOLUME_QUERY, { hours })\n  }\n\n  async runQuery<T>(query: string | DocumentNode, variables?: Variables): Promise<T> {\n    try {\n      const chainId = await this.context.chainId\n      const client = this.clients[chainId]\n      const response = await client.request(query, variables)\n      return response\n    } catch (error) {\n      log.error(error)\n      const baseUrl = await this.getBaseUrl()\n      throw new CowError(\n        `Error running query: ${query}. Variables: ${JSON.stringify(variables)}. API: ${baseUrl}. Inner Error: ${error}`\n      )\n    }\n  }\n}\n","import Ajv, { ValidateFunction } from 'ajv'\nimport { fromHexString } from './common'\nimport { DEFAULT_IPFS_READ_URI } from '../constants'\nimport { AppDataDoc } from '../types'\n\nlet validate: ValidateFunction | undefined\nlet ajv: Ajv\n\ninterface ValidationResult {\n  result: boolean\n  errors?: string\n}\n\nasync function getValidator(): Promise<{ ajv: Ajv; validate: ValidateFunction }> {\n  if (!ajv) {\n    ajv = new Ajv()\n  }\n\n  if (!validate) {\n    const appDataSchema = await import('../schemas/appData.schema.json')\n    validate = ajv.compile(appDataSchema)\n  }\n\n  return { ajv, validate }\n}\n\nexport async function getSerializedCID(hash: string): Promise<void | string> {\n  const cidVersion = 0x1 //cidv1\n  const codec = 0x70 //dag-pb\n  const type = 0x12 //sha2-256\n  const length = 32 //256 bits\n  const _hash = hash.replace(/(^0x)/, '')\n\n  const hexHash = fromHexString(_hash)\n\n  if (!hexHash) return\n\n  const uint8array = Uint8Array.from([cidVersion, codec, type, length, ...hexHash])\n  const { CID } = await import('multiformats/cid')\n  return CID.decode(uint8array).toV0().toString()\n}\n\nexport async function loadIpfsFromCid(cid: string, ipfsUri = DEFAULT_IPFS_READ_URI): Promise<AppDataDoc> {\n  const { default: fetch } = await import('cross-fetch')\n  const response = await fetch(`${ipfsUri}/${cid}`)\n\n  return await response.json()\n}\n\nexport async function validateAppDataDocument(appDataDocument: unknown): Promise<ValidationResult> {\n  const { ajv, validate } = await getValidator()\n  const result = !!validate(appDataDocument)\n\n  return {\n    result,\n    errors: ajv.errors ? ajv.errorsText(ajv.errors) : undefined,\n  }\n}\n","import log from 'loglevel'\nimport { Context } from '../../utils/context'\nimport { getSerializedCID, loadIpfsFromCid, validateAppDataDocument } from '../../utils/appData'\nimport { calculateIpfsCidV0, pinJSONToIPFS } from '../../utils/ipfs'\nimport { AppDataDoc, IpfsHashInfo, MetadataDoc, OptionalAppDataProperties } from './types'\nimport { CowError } from '../../utils/common'\n\nconst DEFAULT_APP_CODE = 'CowSwap'\nconst DEFAULT_APP_VERSION = '0.4.0'\n\nexport class MetadataApi {\n  context: Context\n\n  constructor(context: Context) {\n    this.context = context\n  }\n\n  generateAppDataDoc(metadata: MetadataDoc = {}, optionalProperties?: OptionalAppDataProperties): AppDataDoc {\n    const { appCode = DEFAULT_APP_CODE, environment } = optionalProperties || {}\n\n    return {\n      version: DEFAULT_APP_VERSION,\n      appCode,\n      environment,\n      metadata: {\n        ...metadata,\n      },\n    }\n  }\n\n  async decodeAppData(hash: string): Promise<void | AppDataDoc> {\n    try {\n      const cidV0 = await getSerializedCID(hash)\n      if (!cidV0) throw new CowError('Error getting serialized CID')\n      return loadIpfsFromCid(cidV0)\n    } catch (e) {\n      const error = e as CowError\n      log.error('Error decoding AppData:', error)\n      throw new CowError('Error decoding AppData: ' + error.message)\n    }\n  }\n\n  async cidToAppDataHex(ipfsHash: string): Promise<string | void> {\n    const { CID } = await import('multiformats/cid')\n\n    const { digest } = CID.parse(ipfsHash).multihash\n    return `0x${Buffer.from(digest).toString('hex')}`\n  }\n\n  async appDataHexToCid(hash: string): Promise<string | void> {\n    const cidV0 = await getSerializedCID(hash)\n    if (!cidV0) throw new CowError('Error getting serialized CID')\n    return cidV0\n  }\n\n  /**\n   * Calculates appDataHash WITHOUT publishing file to IPFS\n   *\n   * This method is intended to quickly generate the appDataHash independent\n   * of IPFS upload/pinning\n   * The hash is deterministic thus uploading it to IPFS will give you the same\n   * result\n   *\n   * WARNING!\n   * One important caveat is that - like `uploadMetadataDocToIpfs` method - the\n   * calculation is done with a stringified file without a new line at the end.\n   * That means that you will get different results if the file is uploaded\n   * directly as a file. For example:\n   *\n   * Consider the content `hello world`.\n   *\n   * Using IPFS's cli tool to updload a file with the contents above\n   * (`ipfs add file`), it'll have the line ending and result in this CIDv0:\n   * QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o\n   *\n   * While using this method - and `uploadMetadataDocToIpfs` - will give you\n   * this CIDv0:\n   * Qmf412jQZiuVUtdgnB36FXFX7xg5V6KEbSJ4dpQuhkLyfD\n   *\n   * @param appData\n   */\n  async calculateAppDataHash(appData: AppDataDoc): Promise<IpfsHashInfo | void> {\n    const validation = await validateAppDataDocument(appData)\n    if (!validation?.result) {\n      throw new CowError('Invalid appData provided', validation?.errors)\n    }\n\n    try {\n      const cidV0 = await calculateIpfsCidV0(appData)\n      const appDataHash = await this.cidToAppDataHex(cidV0)\n\n      if (!appDataHash) {\n        throw new CowError(`Could not extract appDataHash from calculated cidV0 ${cidV0}`)\n      }\n\n      return { cidV0, appDataHash }\n    } catch (e) {\n      const error = e as CowError\n      throw new CowError('Failed to calculate appDataHash', error.message)\n    }\n  }\n\n  async uploadMetadataDocToIpfs(appDataDoc: AppDataDoc): Promise<string | void> {\n    const { IpfsHash } = await pinJSONToIPFS(appDataDoc, this.context.ipfs)\n    return this.cidToAppDataHex(IpfsHash)\n  }\n}\n","import { CowError } from './common'\nimport { Ipfs } from './context'\nimport { AppDataDoc } from '../api/metadata/types'\nimport { DEFAULT_IPFS_WRITE_URI } from '../constants'\n\ntype PinataPinResponse = {\n  IpfsHash: string\n  PinSize: number\n  Timestamp: string\n}\n\nexport async function pinJSONToIPFS(\n  file: unknown,\n  { writeUri = DEFAULT_IPFS_WRITE_URI, pinataApiKey = '', pinataApiSecret = '' }: Ipfs\n): Promise<PinataPinResponse> {\n  const { default: fetch } = await import('cross-fetch')\n\n  if (!pinataApiKey || !pinataApiSecret) {\n    throw new CowError('You need to pass IPFS api credentials.')\n  }\n\n  const body = JSON.stringify({\n    pinataContent: file,\n    pinataMetadata: { name: 'appData' },\n  })\n\n  const pinataUrl = `${writeUri}/pinning/pinJSONToIPFS`\n\n  const response = await fetch(pinataUrl, {\n    method: 'POST',\n    body,\n    headers: {\n      'Content-Type': 'application/json',\n      pinata_api_key: pinataApiKey,\n      pinata_secret_api_key: pinataApiSecret,\n    },\n  })\n\n  const data = await response.json()\n\n  if (response.status !== 200) {\n    throw new Error(data.error.details || data.error)\n  }\n\n  return data\n}\n\nexport async function calculateIpfsCidV0(doc: AppDataDoc): Promise<string> {\n  const docString = JSON.stringify(doc)\n\n  const { of } = await import('ipfs-only-hash')\n  return of(docString, { cidVersion: 0 })\n}\n","import { Signer } from 'ethers'\nimport log from 'loglevel'\nimport { CowError, logPrefix } from './common'\nimport { SupportedChainId as ChainId, SupportedChainId } from '../constants/chains'\nimport { DEFAULT_APP_DATA_HASH, DEFAULT_IPFS_READ_URI, DEFAULT_IPFS_WRITE_URI } from '../constants'\n\nexport interface Ipfs {\n  uri?: string\n  writeUri?: string\n  readUri?: string\n  pinataApiKey?: string\n  pinataApiSecret?: string\n}\n\nexport interface CowContext {\n  appDataHash?: string\n  isDevEnvironment?: boolean\n  signer?: Signer\n  ipfs?: Ipfs\n}\n\nexport const DefaultCowContext = {\n  appDataHash: DEFAULT_APP_DATA_HASH,\n  isDevEnvironment: false,\n  ipfs: {\n    readUri: DEFAULT_IPFS_READ_URI,\n    writeUri: DEFAULT_IPFS_WRITE_URI,\n    apiKey: undefined,\n    apiSecret: undefined,\n  },\n}\n\n/**\n *\n *\n * @export\n * @class Context\n * @implements {Required<CowContext>}\n */\nexport class Context implements Partial<CowContext> {\n  updateContext(cowContext: CowContext, chainId: ChainId) {\n    this.setParams(chainId, cowContext)\n  }\n  #context: CowContext = {}\n  #chainId: ChainId = SupportedChainId.MAINNET\n\n  constructor(chainId: ChainId, context: CowContext) {\n    this.setParams(chainId, context)\n  }\n\n  private setParams(chainId: ChainId, context: CowContext) {\n    this.#chainId = this.updateChainId(chainId)\n    this.#context = {\n      ...DefaultCowContext,\n      ...context,\n      ipfs: {\n        ...DefaultCowContext.ipfs,\n        ...context.ipfs,\n      },\n    }\n  }\n\n  updateChainId(chainId: ChainId) {\n    if (!ChainId[chainId]) {\n      throw new CowError(`Invalid chainId: ${chainId}`)\n    }\n\n    log.debug(logPrefix, `Updating chainId to: ${chainId}`)\n\n    this.#chainId = chainId\n    return chainId\n  }\n\n  get chainId(): Promise<ChainId> {\n    const provider = this.#context.signer?.provider\n    if (!provider) {\n      return Promise.resolve(this.#chainId)\n    }\n\n    log.debug(logPrefix, 'Getting chainId from provider')\n\n    const getAndReconciliateNetwork = async () => {\n      const network = await provider.getNetwork()\n      const chainId = network.chainId\n\n      if (chainId !== this.#chainId) {\n        log.debug(\n          logPrefix,\n          `ChainId mismatch: Provider's chainId: ${chainId} vs Context's chainId: ${\n            this.#chainId\n          }. Updating Context's chainId`\n        )\n        this.updateChainId(chainId)\n      }\n      return chainId\n    }\n\n    return getAndReconciliateNetwork()\n  }\n\n  get appDataHash(): string {\n    return this.#context.appDataHash ?? DefaultCowContext.appDataHash\n  }\n\n  get isDevEnvironment(): boolean {\n    return this.#context.isDevEnvironment ?? DefaultCowContext.isDevEnvironment\n  }\n\n  get signer(): Signer | undefined {\n    return this.#context.signer\n  }\n\n  get ipfs(): Ipfs {\n    return this.#context.ipfs ?? DefaultCowContext.ipfs\n  }\n}\n","import log from 'loglevel'\nimport { CowError } from '../../../utils/common'\n\ninterface ValidationError {\n  field: string\n  code: number\n  reason: string\n}\n\nexport interface ZeroXErrorResponse {\n  code: number\n  reason: string\n  validationErrors?: ValidationError[]\n}\n\nexport const logPrefix = '0x-sdk:'\nexport default class ZeroXError extends CowError {\n  name = 'ZeroXError'\n  description\n  message\n\n  // Status 400 errors - https://docs.0x.org/0x-api-swap/api-references#introduction\n  public static async getErrorMessage(response: Response) {\n    try {\n      const errorResponse: ZeroXErrorResponse = await response.json()\n\n      if (errorResponse.validationErrors?.length) {\n        const errorMessage = errorResponse.validationErrors?.[0].reason || errorResponse.reason\n        // shouldn't fall through as this error constructor expects the error code to exist but just in case\n        return errorMessage\n      } else if (errorResponse?.reason) {\n        log.error(logPrefix, 'Unknown validation reason for bad price request', errorResponse)\n        return errorResponse.reason\n      } else {\n        throw new Error('Error response body properties \"reason\" and \"validationErrors\" missing.')\n      }\n    } catch (error) {\n      const isError = error instanceof Error\n      log.error(\n        logPrefix,\n        'Error handling a 4xx error. Likely a problem deserialising the JSON response.',\n        isError && error?.message\n      )\n      return isError\n        ? error?.message\n        : 'Price fetch failed. This may be due to a server or network connectivity issue. Please try again later.'\n    }\n  }\n\n  static async getErrorFromStatusCode(response: Response) {\n    switch (response.status) {\n      case 400:\n        return this.getErrorMessage(response)\n\n      case 404:\n        return 'Not found'\n      case 429:\n        return 'Too many requests - Rate limit exceeded'\n      case 500:\n        return 'Internal server error'\n      case 501:\n        return 'Not Implemented'\n      case 503:\n        return 'Server Error - Too many open connections'\n\n      default:\n        log.error(logPrefix, 'Error fetching quote, status code:', response.status || 'unknown')\n        return 'Error fetching quote'\n    }\n  }\n\n  constructor(apiError: ZeroXErrorResponse) {\n    super(apiError.reason, apiError.code.toString())\n    this.description = apiError.validationErrors?.[0].reason || apiError.reason\n    this.message = apiError.reason\n  }\n}\n","import { OrderKind } from '@cowprotocol/contracts'\nimport log from 'loglevel'\nimport { SupportedChainId } from '../../constants/chains'\nimport { objectToQueryString, CowError } from '../../utils/common'\nimport { PriceInformation, PriceQuoteParams } from '../cow/types'\nimport ZeroXError, { ZeroXErrorResponse, logPrefix } from './error'\nimport { MatchaOptions, MatchaPriceQuote } from './types'\n\nexport function get0xUrls(): Partial<Record<SupportedChainId, string>> {\n  // Support: Mainnet, Ropsten, Polygon, Binance Smart Chain\n  // See https://0x.org/docs/api#introduction\n  return {\n    [SupportedChainId.MAINNET]: 'https://api.0x.org/swap',\n  }\n}\n\nexport function normaliseQuoteResponse(priceRaw: MatchaPriceQuote | null, kind: OrderKind): PriceInformation | null {\n  if (!priceRaw || !priceRaw.price) {\n    return null\n  }\n\n  const { sellAmount, buyAmount, sellTokenAddress, buyTokenAddress } = priceRaw\n\n  if (kind === OrderKind.BUY) {\n    return { amount: sellAmount, token: sellTokenAddress }\n  } else {\n    return { amount: buyAmount, token: buyTokenAddress }\n  }\n}\n\nexport function getMatchaChainId(chainId: SupportedChainId): SupportedChainId | null {\n  switch (chainId) {\n    // Support: Mainnet, Ropsten, Polygon, Binance Smart Chain\n    // See https://0x.org/docs/api#introduction\n    // but we only support mainnet of that list so..\n    case SupportedChainId.MAINNET:\n      return chainId\n\n    default:\n      // Unsupported network\n      return null\n  }\n}\n\nexport function optionsToMatchaParamsUrl({\n  excludedSources,\n  affiliateAddress,\n}: {\n  excludedSources: MatchaOptions['excludedSources']\n  affiliateAddress: string\n}): string {\n  const excludedSourceString = extractExcludedSources({ excludedSources })\n\n  return objectToQueryString({ excludedSources: excludedSourceString, affiliateAddress })\n}\n\nexport async function handleQuoteResponse<T = unknown, P extends PriceQuoteParams = PriceQuoteParams>(\n  response: Response,\n  params?: P\n): Promise<T> {\n  if (!response.ok) {\n    const errorObj: ZeroXErrorResponse = await response.clone().json()\n\n    let priceError\n    if (errorObj?.code && errorObj?.reason) {\n      priceError = new ZeroXError(errorObj)\n    } else {\n      const errorMessage = await ZeroXError.getErrorFromStatusCode(response.clone())\n      priceError = new ZeroXError({ code: response.status, reason: errorMessage })\n    }\n\n    if (params) {\n      const { quoteToken, baseToken } = params\n      log.error(logPrefix, `Error querying fee from API - quoteToken: ${quoteToken}, baseToken: ${baseToken}`)\n    }\n\n    throw priceError\n  } else {\n    return response.json()\n  }\n}\n\nexport function throwOrReturnAffiliateAddress({\n  affiliateAddressMap,\n  chainId,\n}: {\n  affiliateAddressMap: MatchaOptions['affiliateAddressMap']\n  chainId: SupportedChainId\n}): string {\n  const affiliateAddress = affiliateAddressMap[chainId]\n  if (!affiliateAddress) {\n    throw _getMissingAffiliateAddressError({ affiliateAddressMap, chainId })\n  }\n\n  return affiliateAddress\n}\n\nexport function extractExcludedSources({ excludedSources }: Pick<MatchaOptions, 'excludedSources'>) {\n  return excludedSources.length > 0 ? excludedSources.join(',') : ''\n}\n\nfunction _getMissingAffiliateAddressError(params: Record<string, unknown>): CowError {\n  return new CowError(`Invalid affiliate address! Parameters passed: ${JSON.stringify(params, null, 2)}`)\n}\n","import { OrderKind } from '@cowprotocol/contracts'\nimport log from 'loglevel'\nimport { GP_SETTLEMENT_CONTRACT_ADDRESS } from '../../constants'\nimport { SupportedChainId } from '../../constants/chains'\nimport { objectToQueryString } from '../../utils/common'\nimport { Context } from '../../utils/context'\nimport { getTokensFromMarket } from '../../utils/market'\nimport { toErc20Address } from '../../utils/tokens'\n\nimport BaseApi from '../base'\n\nimport { Options, PriceQuoteParams } from '../cow/types'\nimport { logPrefix } from './error'\nimport { ERC20BridgeSource, MatchaOptions, MatchaPriceQuote } from './types'\nimport {\n  throwOrReturnAffiliateAddress,\n  optionsToMatchaParamsUrl,\n  extractExcludedSources,\n  handleQuoteResponse,\n  getMatchaChainId,\n  get0xUrls,\n} from './utils'\n\nconst EXCLUDED_SOURCES: ERC20BridgeSource[] = []\nconst API_VERSION = 'v1'\n\nexport class ZeroXApi extends BaseApi {\n  MATCHA_OPTIONS: MatchaOptions\n  MATCHA_OPTIONS_URL: string\n\n  constructor(\n    chainId: SupportedChainId,\n    { affiliateAddressMap, excludedSources }: MatchaOptions = {\n      affiliateAddressMap: GP_SETTLEMENT_CONTRACT_ADDRESS,\n      excludedSources: EXCLUDED_SOURCES,\n    }\n  ) {\n    super({ context: new Context(chainId, {}), name: '0x', apiVersion: API_VERSION, getApiUrl: get0xUrls })\n\n    // checks if missing affiliate address from address map and throws if undefined else returns address string\n    const affiliateAddress = throwOrReturnAffiliateAddress({ affiliateAddressMap, chainId })\n\n    this.MATCHA_OPTIONS = { affiliateAddressMap, excludedSources }\n    this.MATCHA_OPTIONS_URL = optionsToMatchaParamsUrl({\n      excludedSources: excludedSources,\n      affiliateAddress,\n    })\n  }\n\n  async getQuote(params: PriceQuoteParams, options: Options = {}): Promise<MatchaPriceQuote | null> {\n    const { amount, baseToken, quoteToken, kind } = params\n    const { chainId: customChainId, isDevEnvironment = this.context.isDevEnvironment } = options\n    const chainId = customChainId || (await this.context.chainId)\n    // this is handled via an error on L51 via the fetch call\n    // but we can handle it here to control the flow better\n    const networkId = getMatchaChainId(chainId)\n    if (networkId == null) {\n      log.debug(logPrefix, 'Network not supported')\n      // Unsupported network\n      return null\n    }\n\n    log.debug(logPrefix, `Get price from ${this.API_NAME}`, params, this.MATCHA_OPTIONS)\n\n    // Buy/sell token and side (sell/buy)\n    const { sellToken, buyToken } = getTokensFromMarket({\n      baseToken: toErc20Address(baseToken, chainId),\n      quoteToken: toErc20Address(quoteToken, chainId),\n      kind,\n    })\n    const affiliateAddress = throwOrReturnAffiliateAddress({\n      affiliateAddressMap: this.MATCHA_OPTIONS.affiliateAddressMap,\n      chainId,\n    })\n    const swapSide = kind === OrderKind.BUY ? 'buyAmount' : 'sellAmount'\n    const response = await this.get(\n      `/price${objectToQueryString({\n        sellToken,\n        buyToken,\n        [swapSide]: amount,\n        affiliateAddress,\n        excludedSources: extractExcludedSources(this.MATCHA_OPTIONS),\n      })}`,\n      { chainId, isDevEnvironment }\n    ).catch((error) => {\n      log.error(`Error getting ${this.API_NAME} price quote:`, error)\n      throw new Error(error)\n    })\n\n    return handleQuoteResponse(response)\n  }\n\n  public async updateOptions({ affiliateAddressMap, excludedSources }: Partial<MatchaOptions>) {\n    const chainId = await this.context.chainId\n\n    if (affiliateAddressMap) {\n      log.debug(logPrefix, 'Updating 0x options affiliate address to', affiliateAddressMap)\n      this.MATCHA_OPTIONS.affiliateAddressMap = affiliateAddressMap\n    }\n    if (excludedSources) {\n      log.debug(logPrefix, 'Updating 0x options excludedSources to', excludedSources)\n      this.MATCHA_OPTIONS.excludedSources = excludedSources\n    }\n\n    const affiliateAddress = throwOrReturnAffiliateAddress({\n      affiliateAddressMap: this.MATCHA_OPTIONS.affiliateAddressMap,\n      chainId,\n    })\n\n    this.MATCHA_OPTIONS_URL = optionsToMatchaParamsUrl({\n      ...this.MATCHA_OPTIONS,\n      affiliateAddress,\n    })\n  }\n}\n","import { OrderKind } from '@cowprotocol/contracts'\n\ninterface Market<T = string> {\n  baseToken: T\n  quoteToken: T\n}\n\nexport interface CanonicalMarketParams<T> {\n  sellToken: T\n  buyToken: T\n  kind: OrderKind\n}\n\nexport interface TokensFromMarketParams<T> extends Market<T> {\n  kind: OrderKind\n}\n\nexport function getCanonicalMarket<T>({ sellToken, buyToken, kind }: CanonicalMarketParams<T>): Market<T> {\n  // TODO: Implement smarter logic https://github.com/cowprotocol/explorer/issues/9\n\n  // Not big reasoning on my selection of what is base and what is quote (important thing in this PR is just to do a consistent selection)\n  // The used reasoning is:\n  //    - If I sell apples, the quote is EUR (buy token)\n  //    - If I buy apples, the quote is EUR (sell token)\n  if (kind === OrderKind.SELL) {\n    return {\n      baseToken: sellToken,\n      quoteToken: buyToken,\n    }\n  } else {\n    return {\n      baseToken: buyToken,\n      quoteToken: sellToken,\n    }\n  }\n}\n\nexport function getTokensFromMarket<T>({\n  quoteToken,\n  baseToken,\n  kind,\n}: TokensFromMarketParams<T>): Omit<CanonicalMarketParams<T>, 'kind'> {\n  if (kind === OrderKind.SELL) {\n    return {\n      sellToken: baseToken,\n      buyToken: quoteToken,\n    }\n  } else {\n    return {\n      buyToken: baseToken,\n      sellToken: quoteToken,\n    }\n  }\n}\n","import { Signer } from 'ethers'\nimport log, { LogLevelDesc } from 'loglevel'\nimport { CowError } from './utils/common'\nimport { CowApi, CowSubgraphApi, MetadataApi } from './api'\nimport { SupportedChainId as ChainId, SupportedChainId } from './constants/chains'\nimport { validateAppDataDocument } from './utils/appData'\nimport { Context, CowContext } from './utils/context'\nimport { signOrder, signOrderCancellation, UnsignedOrder } from './utils/sign'\nimport { ZeroXApi } from './api/0x'\nimport { MatchaOptions } from './api/0x/types'\n\ntype Options = {\n  loglevel?: LogLevelDesc\n  matchaOptions?: MatchaOptions\n}\n\nexport class CowSdk<T extends ChainId> {\n  context: Context\n  cowApi: CowApi\n  metadataApi: MetadataApi\n  cowSubgraphApi: CowSubgraphApi\n  zeroXApi: ZeroXApi\n\n  constructor(chainId: T = SupportedChainId.MAINNET as T, cowContext: CowContext = {}, options: Options = {}) {\n    this.context = new Context(chainId, { ...cowContext })\n    this.cowApi = new CowApi(this.context)\n    this.cowSubgraphApi = new CowSubgraphApi(this.context)\n    this.metadataApi = new MetadataApi(this.context)\n    this.zeroXApi = new ZeroXApi(chainId, options.matchaOptions)\n    log.setLevel(options.loglevel || 'error')\n  }\n\n  updateChainId = (chainId: ChainId) => {\n    this.context.updateChainId(chainId)\n  }\n\n  updateContext = async (cowContext: CowContext, chainId?: ChainId) => {\n    const networkId = await this.context.chainId\n    this.context.updateContext(cowContext, chainId || networkId)\n  }\n\n  validateAppDataDocument = validateAppDataDocument\n\n  async signOrder(order: Omit<UnsignedOrder, 'appData'>) {\n    const signer = this._checkSigner()\n    const chainId = await this.context.chainId\n    return signOrder({ ...order, appData: this.context.appDataHash }, chainId, signer)\n  }\n\n  async signOrderCancellation(orderId: string) {\n    const signer = this._checkSigner()\n    const chainId = await this.context.chainId\n    return signOrderCancellation(orderId, chainId, signer)\n  }\n\n  _checkSigner(signer: Signer | undefined = this.context.signer) {\n    if (!signer) {\n      throw new CowError('No signer available')\n    }\n\n    return signer\n  }\n}\n\nexport default CowSdk\n","export type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n  ID: string;\n  String: string;\n  Boolean: boolean;\n  Int: number;\n  Float: number;\n  BigDecimal: any;\n  BigInt: any;\n  Bytes: any;\n};\n\nexport type BlockChangedFilter = {\n  number_gte: Scalars['Int'];\n};\n\nexport type Block_Height = {\n  hash?: InputMaybe<Scalars['Bytes']>;\n  number?: InputMaybe<Scalars['Int']>;\n  number_gte?: InputMaybe<Scalars['Int']>;\n};\n\nexport type Bundle = {\n  __typename?: 'Bundle';\n  /** Price of ETH in usd */\n  ethPriceUSD: Scalars['BigDecimal'];\n  /** Singleton #1 */\n  id: Scalars['ID'];\n};\n\nexport type Bundle_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  ethPriceUSD?: InputMaybe<Scalars['BigDecimal']>;\n  ethPriceUSD_gt?: InputMaybe<Scalars['BigDecimal']>;\n  ethPriceUSD_gte?: InputMaybe<Scalars['BigDecimal']>;\n  ethPriceUSD_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  ethPriceUSD_lt?: InputMaybe<Scalars['BigDecimal']>;\n  ethPriceUSD_lte?: InputMaybe<Scalars['BigDecimal']>;\n  ethPriceUSD_not?: InputMaybe<Scalars['BigDecimal']>;\n  ethPriceUSD_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n};\n\nexport enum Bundle_OrderBy {\n  EthPriceUsd = 'ethPriceUSD',\n  Id = 'id'\n}\n\nexport type DailyTotal = {\n  __typename?: 'DailyTotal';\n  /** Total fees in Eth */\n  feesEth?: Maybe<Scalars['BigDecimal']>;\n  /** Total fees in USD */\n  feesUsd?: Maybe<Scalars['BigDecimal']>;\n  /** Day timestamp */\n  id: Scalars['ID'];\n  /** Number of trades */\n  numberOfTrades: Scalars['BigInt'];\n  /** Total number of orders placed */\n  orders: Scalars['BigInt'];\n  /** Total number of batches settled */\n  settlements: Scalars['BigInt'];\n  /** Start day timestamp */\n  timestamp: Scalars['Int'];\n  /** Traded tokens */\n  tokens: Array<Token>;\n  /** Total number of tokens traded */\n  totalTokens: Scalars['BigInt'];\n  /** Total traded volume in ETH */\n  volumeEth?: Maybe<Scalars['BigDecimal']>;\n  /** Total traded volume in USD */\n  volumeUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\n\nexport type DailyTotalTokensArgs = {\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Token_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  where?: InputMaybe<Token_Filter>;\n};\n\nexport type DailyTotal_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  feesEth?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  feesEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  feesUsd?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  feesUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  numberOfTrades?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_gt?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_gte?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  numberOfTrades_lt?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_lte?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_not?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  orders?: InputMaybe<Scalars['BigInt']>;\n  orders_gt?: InputMaybe<Scalars['BigInt']>;\n  orders_gte?: InputMaybe<Scalars['BigInt']>;\n  orders_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  orders_lt?: InputMaybe<Scalars['BigInt']>;\n  orders_lte?: InputMaybe<Scalars['BigInt']>;\n  orders_not?: InputMaybe<Scalars['BigInt']>;\n  orders_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  settlements?: InputMaybe<Scalars['BigInt']>;\n  settlements_gt?: InputMaybe<Scalars['BigInt']>;\n  settlements_gte?: InputMaybe<Scalars['BigInt']>;\n  settlements_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  settlements_lt?: InputMaybe<Scalars['BigInt']>;\n  settlements_lte?: InputMaybe<Scalars['BigInt']>;\n  settlements_not?: InputMaybe<Scalars['BigInt']>;\n  settlements_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  timestamp?: InputMaybe<Scalars['Int']>;\n  timestamp_gt?: InputMaybe<Scalars['Int']>;\n  timestamp_gte?: InputMaybe<Scalars['Int']>;\n  timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  timestamp_lt?: InputMaybe<Scalars['Int']>;\n  timestamp_lte?: InputMaybe<Scalars['Int']>;\n  timestamp_not?: InputMaybe<Scalars['Int']>;\n  timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  tokens?: InputMaybe<Array<Scalars['String']>>;\n  tokens_?: InputMaybe<Token_Filter>;\n  tokens_contains?: InputMaybe<Array<Scalars['String']>>;\n  tokens_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n  tokens_not?: InputMaybe<Array<Scalars['String']>>;\n  tokens_not_contains?: InputMaybe<Array<Scalars['String']>>;\n  tokens_not_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n  totalTokens?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_gt?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_gte?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  totalTokens_lt?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_lte?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_not?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeEth?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum DailyTotal_OrderBy {\n  FeesEth = 'feesEth',\n  FeesUsd = 'feesUsd',\n  Id = 'id',\n  NumberOfTrades = 'numberOfTrades',\n  Orders = 'orders',\n  Settlements = 'settlements',\n  Timestamp = 'timestamp',\n  Tokens = 'tokens',\n  TotalTokens = 'totalTokens',\n  VolumeEth = 'volumeEth',\n  VolumeUsd = 'volumeUsd'\n}\n\nexport type HourlyTotal = {\n  __typename?: 'HourlyTotal';\n  /** Total fees in Eth */\n  feesEth?: Maybe<Scalars['BigDecimal']>;\n  /** Total fees in USD */\n  feesUsd?: Maybe<Scalars['BigDecimal']>;\n  /** Hour timestamp */\n  id: Scalars['ID'];\n  /** Number of trades */\n  numberOfTrades: Scalars['BigInt'];\n  /** Total number of orders placed */\n  orders: Scalars['BigInt'];\n  /** Total number of batches settled */\n  settlements: Scalars['BigInt'];\n  /** Start hour timestamp */\n  timestamp: Scalars['Int'];\n  /** Traded tokens */\n  tokens: Array<Token>;\n  /** Total number of tokens traded */\n  totalTokens: Scalars['BigInt'];\n  /** Total traded volume in ETH */\n  volumeEth?: Maybe<Scalars['BigDecimal']>;\n  /** Total traded volume in USD */\n  volumeUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\n\nexport type HourlyTotalTokensArgs = {\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Token_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  where?: InputMaybe<Token_Filter>;\n};\n\nexport type HourlyTotal_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  feesEth?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  feesEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  feesUsd?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  feesUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  numberOfTrades?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_gt?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_gte?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  numberOfTrades_lt?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_lte?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_not?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  orders?: InputMaybe<Scalars['BigInt']>;\n  orders_gt?: InputMaybe<Scalars['BigInt']>;\n  orders_gte?: InputMaybe<Scalars['BigInt']>;\n  orders_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  orders_lt?: InputMaybe<Scalars['BigInt']>;\n  orders_lte?: InputMaybe<Scalars['BigInt']>;\n  orders_not?: InputMaybe<Scalars['BigInt']>;\n  orders_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  settlements?: InputMaybe<Scalars['BigInt']>;\n  settlements_gt?: InputMaybe<Scalars['BigInt']>;\n  settlements_gte?: InputMaybe<Scalars['BigInt']>;\n  settlements_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  settlements_lt?: InputMaybe<Scalars['BigInt']>;\n  settlements_lte?: InputMaybe<Scalars['BigInt']>;\n  settlements_not?: InputMaybe<Scalars['BigInt']>;\n  settlements_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  timestamp?: InputMaybe<Scalars['Int']>;\n  timestamp_gt?: InputMaybe<Scalars['Int']>;\n  timestamp_gte?: InputMaybe<Scalars['Int']>;\n  timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  timestamp_lt?: InputMaybe<Scalars['Int']>;\n  timestamp_lte?: InputMaybe<Scalars['Int']>;\n  timestamp_not?: InputMaybe<Scalars['Int']>;\n  timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  tokens?: InputMaybe<Array<Scalars['String']>>;\n  tokens_?: InputMaybe<Token_Filter>;\n  tokens_contains?: InputMaybe<Array<Scalars['String']>>;\n  tokens_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n  tokens_not?: InputMaybe<Array<Scalars['String']>>;\n  tokens_not_contains?: InputMaybe<Array<Scalars['String']>>;\n  tokens_not_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n  totalTokens?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_gt?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_gte?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  totalTokens_lt?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_lte?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_not?: InputMaybe<Scalars['BigInt']>;\n  totalTokens_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeEth?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum HourlyTotal_OrderBy {\n  FeesEth = 'feesEth',\n  FeesUsd = 'feesUsd',\n  Id = 'id',\n  NumberOfTrades = 'numberOfTrades',\n  Orders = 'orders',\n  Settlements = 'settlements',\n  Timestamp = 'timestamp',\n  Tokens = 'tokens',\n  TotalTokens = 'totalTokens',\n  VolumeEth = 'volumeEth',\n  VolumeUsd = 'volumeUsd'\n}\n\nexport type Order = {\n  __typename?: 'Order';\n  /** Trade's OrderUid to hex string */\n  id: Scalars['ID'];\n  /** block's timestamp on invalidate event */\n  invalidateTimestamp?: Maybe<Scalars['Int']>;\n  /** Boolean value to show if the order is signed */\n  isSigned?: Maybe<Scalars['Boolean']>;\n  /** Boolean value true by default unless is invalidated by the event */\n  isValid?: Maybe<Scalars['Boolean']>;\n  /** Trade's owner or presign User */\n  owner?: Maybe<User>;\n  /** block's timestamp on presign event */\n  presignTimestamp?: Maybe<Scalars['Int']>;\n  /** Array of trades on the order */\n  trades?: Maybe<Array<Trade>>;\n  /** block's timestamp on trade event */\n  tradesTimestamp?: Maybe<Scalars['Int']>;\n};\n\n\nexport type OrderTradesArgs = {\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Trade_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  where?: InputMaybe<Trade_Filter>;\n};\n\n/** Defines the order direction, either ascending or descending */\nexport enum OrderDirection {\n  Asc = 'asc',\n  Desc = 'desc'\n}\n\nexport type Order_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  invalidateTimestamp?: InputMaybe<Scalars['Int']>;\n  invalidateTimestamp_gt?: InputMaybe<Scalars['Int']>;\n  invalidateTimestamp_gte?: InputMaybe<Scalars['Int']>;\n  invalidateTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  invalidateTimestamp_lt?: InputMaybe<Scalars['Int']>;\n  invalidateTimestamp_lte?: InputMaybe<Scalars['Int']>;\n  invalidateTimestamp_not?: InputMaybe<Scalars['Int']>;\n  invalidateTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  isSigned?: InputMaybe<Scalars['Boolean']>;\n  isSigned_in?: InputMaybe<Array<Scalars['Boolean']>>;\n  isSigned_not?: InputMaybe<Scalars['Boolean']>;\n  isSigned_not_in?: InputMaybe<Array<Scalars['Boolean']>>;\n  isValid?: InputMaybe<Scalars['Boolean']>;\n  isValid_in?: InputMaybe<Array<Scalars['Boolean']>>;\n  isValid_not?: InputMaybe<Scalars['Boolean']>;\n  isValid_not_in?: InputMaybe<Array<Scalars['Boolean']>>;\n  owner?: InputMaybe<Scalars['String']>;\n  owner_?: InputMaybe<User_Filter>;\n  owner_contains?: InputMaybe<Scalars['String']>;\n  owner_contains_nocase?: InputMaybe<Scalars['String']>;\n  owner_ends_with?: InputMaybe<Scalars['String']>;\n  owner_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  owner_gt?: InputMaybe<Scalars['String']>;\n  owner_gte?: InputMaybe<Scalars['String']>;\n  owner_in?: InputMaybe<Array<Scalars['String']>>;\n  owner_lt?: InputMaybe<Scalars['String']>;\n  owner_lte?: InputMaybe<Scalars['String']>;\n  owner_not?: InputMaybe<Scalars['String']>;\n  owner_not_contains?: InputMaybe<Scalars['String']>;\n  owner_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  owner_not_ends_with?: InputMaybe<Scalars['String']>;\n  owner_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  owner_not_in?: InputMaybe<Array<Scalars['String']>>;\n  owner_not_starts_with?: InputMaybe<Scalars['String']>;\n  owner_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  owner_starts_with?: InputMaybe<Scalars['String']>;\n  owner_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  presignTimestamp?: InputMaybe<Scalars['Int']>;\n  presignTimestamp_gt?: InputMaybe<Scalars['Int']>;\n  presignTimestamp_gte?: InputMaybe<Scalars['Int']>;\n  presignTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  presignTimestamp_lt?: InputMaybe<Scalars['Int']>;\n  presignTimestamp_lte?: InputMaybe<Scalars['Int']>;\n  presignTimestamp_not?: InputMaybe<Scalars['Int']>;\n  presignTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  tradesTimestamp?: InputMaybe<Scalars['Int']>;\n  tradesTimestamp_gt?: InputMaybe<Scalars['Int']>;\n  tradesTimestamp_gte?: InputMaybe<Scalars['Int']>;\n  tradesTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  tradesTimestamp_lt?: InputMaybe<Scalars['Int']>;\n  tradesTimestamp_lte?: InputMaybe<Scalars['Int']>;\n  tradesTimestamp_not?: InputMaybe<Scalars['Int']>;\n  tradesTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  trades_?: InputMaybe<Trade_Filter>;\n};\n\nexport enum Order_OrderBy {\n  Id = 'id',\n  InvalidateTimestamp = 'invalidateTimestamp',\n  IsSigned = 'isSigned',\n  IsValid = 'isValid',\n  Owner = 'owner',\n  PresignTimestamp = 'presignTimestamp',\n  Trades = 'trades',\n  TradesTimestamp = 'tradesTimestamp'\n}\n\nexport type Pair = {\n  __typename?: 'Pair';\n  /** Token0-token1 sorted by token0 < token1 */\n  id: Scalars['ID'];\n  /** The token 0 address lower than token1 */\n  token0: Token;\n  /** Token0 last trade price */\n  token0Price?: Maybe<Scalars['BigDecimal']>;\n  /** Token 0 price expressed in token1 in the last trade */\n  token0relativePrice?: Maybe<Scalars['BigDecimal']>;\n  /** The token 1 address greater than token0 */\n  token1: Token;\n  /** Token1 last trade price */\n  token1Price?: Maybe<Scalars['BigDecimal']>;\n  /** Token 1 price expressed in token1 in the last trade */\n  token1relativePrice?: Maybe<Scalars['BigDecimal']>;\n  /** Total volume of token 0 traded */\n  volumeToken0?: Maybe<Scalars['BigInt']>;\n  /** Total volume of token 1 traded */\n  volumeToken1?: Maybe<Scalars['BigInt']>;\n  /** Total volume in Eth */\n  volumeTradedEth?: Maybe<Scalars['BigDecimal']>;\n  /** Total volume in Usd */\n  volumeTradedUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\nexport type PairDaily = {\n  __typename?: 'PairDaily';\n  /** token0-token1-timestamp sorted by token0 < token1 */\n  id: Scalars['ID'];\n  /** Start day timestamp */\n  timestamp: Scalars['Int'];\n  /** The token 0 address lower than token1 */\n  token0: Token;\n  /** Token0 last trade price */\n  token0Price?: Maybe<Scalars['BigDecimal']>;\n  /** Token 0 price expressed in token1 in the last trade */\n  token0relativePrice?: Maybe<Scalars['BigDecimal']>;\n  /** The token 1 address greater than token0 */\n  token1: Token;\n  /** Token1 last trade price */\n  token1Price?: Maybe<Scalars['BigDecimal']>;\n  /** Token 1 price expressed in token1 in the last trade */\n  token1relativePrice?: Maybe<Scalars['BigDecimal']>;\n  /** Total volume of token 0 traded */\n  volumeToken0?: Maybe<Scalars['BigInt']>;\n  /** Total volume of token 1 traded */\n  volumeToken1?: Maybe<Scalars['BigInt']>;\n  /** Total volume in Eth */\n  volumeTradedEth?: Maybe<Scalars['BigDecimal']>;\n  /** Total volume in Usd */\n  volumeTradedUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\nexport type PairDaily_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  timestamp?: InputMaybe<Scalars['Int']>;\n  timestamp_gt?: InputMaybe<Scalars['Int']>;\n  timestamp_gte?: InputMaybe<Scalars['Int']>;\n  timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  timestamp_lt?: InputMaybe<Scalars['Int']>;\n  timestamp_lte?: InputMaybe<Scalars['Int']>;\n  timestamp_not?: InputMaybe<Scalars['Int']>;\n  timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  token0?: InputMaybe<Scalars['String']>;\n  token0Price?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_not?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0_?: InputMaybe<Token_Filter>;\n  token0_contains?: InputMaybe<Scalars['String']>;\n  token0_contains_nocase?: InputMaybe<Scalars['String']>;\n  token0_ends_with?: InputMaybe<Scalars['String']>;\n  token0_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_gt?: InputMaybe<Scalars['String']>;\n  token0_gte?: InputMaybe<Scalars['String']>;\n  token0_in?: InputMaybe<Array<Scalars['String']>>;\n  token0_lt?: InputMaybe<Scalars['String']>;\n  token0_lte?: InputMaybe<Scalars['String']>;\n  token0_not?: InputMaybe<Scalars['String']>;\n  token0_not_contains?: InputMaybe<Scalars['String']>;\n  token0_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token0_not_ends_with?: InputMaybe<Scalars['String']>;\n  token0_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token0_not_starts_with?: InputMaybe<Scalars['String']>;\n  token0_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_starts_with?: InputMaybe<Scalars['String']>;\n  token0_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token0relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1?: InputMaybe<Scalars['String']>;\n  token1Price?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_not?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1_?: InputMaybe<Token_Filter>;\n  token1_contains?: InputMaybe<Scalars['String']>;\n  token1_contains_nocase?: InputMaybe<Scalars['String']>;\n  token1_ends_with?: InputMaybe<Scalars['String']>;\n  token1_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_gt?: InputMaybe<Scalars['String']>;\n  token1_gte?: InputMaybe<Scalars['String']>;\n  token1_in?: InputMaybe<Array<Scalars['String']>>;\n  token1_lt?: InputMaybe<Scalars['String']>;\n  token1_lte?: InputMaybe<Scalars['String']>;\n  token1_not?: InputMaybe<Scalars['String']>;\n  token1_not_contains?: InputMaybe<Scalars['String']>;\n  token1_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token1_not_ends_with?: InputMaybe<Scalars['String']>;\n  token1_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token1_not_starts_with?: InputMaybe<Scalars['String']>;\n  token1_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_starts_with?: InputMaybe<Scalars['String']>;\n  token1_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token1relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeToken0?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_gt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_gte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeToken0_lt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_lte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_not?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeToken1?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_gt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_gte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeToken1_lt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_lte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_not?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeTradedEth?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeTradedEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeTradedUsd?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeTradedUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum PairDaily_OrderBy {\n  Id = 'id',\n  Timestamp = 'timestamp',\n  Token0 = 'token0',\n  Token0Price = 'token0Price',\n  Token0relativePrice = 'token0relativePrice',\n  Token1 = 'token1',\n  Token1Price = 'token1Price',\n  Token1relativePrice = 'token1relativePrice',\n  VolumeToken0 = 'volumeToken0',\n  VolumeToken1 = 'volumeToken1',\n  VolumeTradedEth = 'volumeTradedEth',\n  VolumeTradedUsd = 'volumeTradedUsd'\n}\n\nexport type PairHourly = {\n  __typename?: 'PairHourly';\n  /** token0-token1-timestamp sorted by token0 < token1 */\n  id: Scalars['ID'];\n  /** Start hour timestamp */\n  timestamp: Scalars['Int'];\n  /** The token 0 address lower than token1 */\n  token0: Token;\n  /** Token0 last trade price */\n  token0Price?: Maybe<Scalars['BigDecimal']>;\n  /** Token 0 price expressed in token1 in the last trade */\n  token0relativePrice?: Maybe<Scalars['BigDecimal']>;\n  /** The token 1 address greater than token0 */\n  token1: Token;\n  /** Token1 last trade price */\n  token1Price?: Maybe<Scalars['BigDecimal']>;\n  /** Token 1 price expressed in token1 in the last trade */\n  token1relativePrice?: Maybe<Scalars['BigDecimal']>;\n  /** Total volume of token 0 traded */\n  volumeToken0?: Maybe<Scalars['BigInt']>;\n  /** Total volume of token 1 traded */\n  volumeToken1?: Maybe<Scalars['BigInt']>;\n  /** Total volume in Eth */\n  volumeTradedEth?: Maybe<Scalars['BigDecimal']>;\n  /** Total volume in Usd */\n  volumeTradedUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\nexport type PairHourly_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  timestamp?: InputMaybe<Scalars['Int']>;\n  timestamp_gt?: InputMaybe<Scalars['Int']>;\n  timestamp_gte?: InputMaybe<Scalars['Int']>;\n  timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  timestamp_lt?: InputMaybe<Scalars['Int']>;\n  timestamp_lte?: InputMaybe<Scalars['Int']>;\n  timestamp_not?: InputMaybe<Scalars['Int']>;\n  timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  token0?: InputMaybe<Scalars['String']>;\n  token0Price?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_not?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0_?: InputMaybe<Token_Filter>;\n  token0_contains?: InputMaybe<Scalars['String']>;\n  token0_contains_nocase?: InputMaybe<Scalars['String']>;\n  token0_ends_with?: InputMaybe<Scalars['String']>;\n  token0_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_gt?: InputMaybe<Scalars['String']>;\n  token0_gte?: InputMaybe<Scalars['String']>;\n  token0_in?: InputMaybe<Array<Scalars['String']>>;\n  token0_lt?: InputMaybe<Scalars['String']>;\n  token0_lte?: InputMaybe<Scalars['String']>;\n  token0_not?: InputMaybe<Scalars['String']>;\n  token0_not_contains?: InputMaybe<Scalars['String']>;\n  token0_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token0_not_ends_with?: InputMaybe<Scalars['String']>;\n  token0_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token0_not_starts_with?: InputMaybe<Scalars['String']>;\n  token0_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_starts_with?: InputMaybe<Scalars['String']>;\n  token0_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token0relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1?: InputMaybe<Scalars['String']>;\n  token1Price?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_not?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1_?: InputMaybe<Token_Filter>;\n  token1_contains?: InputMaybe<Scalars['String']>;\n  token1_contains_nocase?: InputMaybe<Scalars['String']>;\n  token1_ends_with?: InputMaybe<Scalars['String']>;\n  token1_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_gt?: InputMaybe<Scalars['String']>;\n  token1_gte?: InputMaybe<Scalars['String']>;\n  token1_in?: InputMaybe<Array<Scalars['String']>>;\n  token1_lt?: InputMaybe<Scalars['String']>;\n  token1_lte?: InputMaybe<Scalars['String']>;\n  token1_not?: InputMaybe<Scalars['String']>;\n  token1_not_contains?: InputMaybe<Scalars['String']>;\n  token1_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token1_not_ends_with?: InputMaybe<Scalars['String']>;\n  token1_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token1_not_starts_with?: InputMaybe<Scalars['String']>;\n  token1_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_starts_with?: InputMaybe<Scalars['String']>;\n  token1_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token1relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeToken0?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_gt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_gte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeToken0_lt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_lte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_not?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeToken1?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_gt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_gte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeToken1_lt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_lte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_not?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeTradedEth?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeTradedEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeTradedUsd?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeTradedUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum PairHourly_OrderBy {\n  Id = 'id',\n  Timestamp = 'timestamp',\n  Token0 = 'token0',\n  Token0Price = 'token0Price',\n  Token0relativePrice = 'token0relativePrice',\n  Token1 = 'token1',\n  Token1Price = 'token1Price',\n  Token1relativePrice = 'token1relativePrice',\n  VolumeToken0 = 'volumeToken0',\n  VolumeToken1 = 'volumeToken1',\n  VolumeTradedEth = 'volumeTradedEth',\n  VolumeTradedUsd = 'volumeTradedUsd'\n}\n\nexport type Pair_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  token0?: InputMaybe<Scalars['String']>;\n  token0Price?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_not?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0_?: InputMaybe<Token_Filter>;\n  token0_contains?: InputMaybe<Scalars['String']>;\n  token0_contains_nocase?: InputMaybe<Scalars['String']>;\n  token0_ends_with?: InputMaybe<Scalars['String']>;\n  token0_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_gt?: InputMaybe<Scalars['String']>;\n  token0_gte?: InputMaybe<Scalars['String']>;\n  token0_in?: InputMaybe<Array<Scalars['String']>>;\n  token0_lt?: InputMaybe<Scalars['String']>;\n  token0_lte?: InputMaybe<Scalars['String']>;\n  token0_not?: InputMaybe<Scalars['String']>;\n  token0_not_contains?: InputMaybe<Scalars['String']>;\n  token0_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token0_not_ends_with?: InputMaybe<Scalars['String']>;\n  token0_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token0_not_starts_with?: InputMaybe<Scalars['String']>;\n  token0_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_starts_with?: InputMaybe<Scalars['String']>;\n  token0_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token0relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  token0relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1?: InputMaybe<Scalars['String']>;\n  token1Price?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_not?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1_?: InputMaybe<Token_Filter>;\n  token1_contains?: InputMaybe<Scalars['String']>;\n  token1_contains_nocase?: InputMaybe<Scalars['String']>;\n  token1_ends_with?: InputMaybe<Scalars['String']>;\n  token1_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_gt?: InputMaybe<Scalars['String']>;\n  token1_gte?: InputMaybe<Scalars['String']>;\n  token1_in?: InputMaybe<Array<Scalars['String']>>;\n  token1_lt?: InputMaybe<Scalars['String']>;\n  token1_lte?: InputMaybe<Scalars['String']>;\n  token1_not?: InputMaybe<Scalars['String']>;\n  token1_not_contains?: InputMaybe<Scalars['String']>;\n  token1_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token1_not_ends_with?: InputMaybe<Scalars['String']>;\n  token1_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token1_not_starts_with?: InputMaybe<Scalars['String']>;\n  token1_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_starts_with?: InputMaybe<Scalars['String']>;\n  token1_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token1relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  token1relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeToken0?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_gt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_gte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeToken0_lt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_lte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_not?: InputMaybe<Scalars['BigInt']>;\n  volumeToken0_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeToken1?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_gt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_gte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeToken1_lt?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_lte?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_not?: InputMaybe<Scalars['BigInt']>;\n  volumeToken1_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeTradedEth?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeTradedEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeTradedUsd?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeTradedUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeTradedUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum Pair_OrderBy {\n  Id = 'id',\n  Token0 = 'token0',\n  Token0Price = 'token0Price',\n  Token0relativePrice = 'token0relativePrice',\n  Token1 = 'token1',\n  Token1Price = 'token1Price',\n  Token1relativePrice = 'token1relativePrice',\n  VolumeToken0 = 'volumeToken0',\n  VolumeToken1 = 'volumeToken1',\n  VolumeTradedEth = 'volumeTradedEth',\n  VolumeTradedUsd = 'volumeTradedUsd'\n}\n\nexport type Query = {\n  __typename?: 'Query';\n  /** Access to subgraph metadata */\n  _meta?: Maybe<_Meta_>;\n  bundle?: Maybe<Bundle>;\n  bundles: Array<Bundle>;\n  dailyTotal?: Maybe<DailyTotal>;\n  dailyTotals: Array<DailyTotal>;\n  hourlyTotal?: Maybe<HourlyTotal>;\n  hourlyTotals: Array<HourlyTotal>;\n  order?: Maybe<Order>;\n  orders: Array<Order>;\n  pair?: Maybe<Pair>;\n  pairDailies: Array<PairDaily>;\n  pairDaily?: Maybe<PairDaily>;\n  pairHourlies: Array<PairHourly>;\n  pairHourly?: Maybe<PairHourly>;\n  pairs: Array<Pair>;\n  settlement?: Maybe<Settlement>;\n  settlements: Array<Settlement>;\n  token?: Maybe<Token>;\n  tokenDailyTotal?: Maybe<TokenDailyTotal>;\n  tokenDailyTotals: Array<TokenDailyTotal>;\n  tokenHourlyTotal?: Maybe<TokenHourlyTotal>;\n  tokenHourlyTotals: Array<TokenHourlyTotal>;\n  tokenTradingEvent?: Maybe<TokenTradingEvent>;\n  tokenTradingEvents: Array<TokenTradingEvent>;\n  tokens: Array<Token>;\n  total?: Maybe<Total>;\n  totals: Array<Total>;\n  trade?: Maybe<Trade>;\n  trades: Array<Trade>;\n  uniswapPool?: Maybe<UniswapPool>;\n  uniswapPools: Array<UniswapPool>;\n  uniswapToken?: Maybe<UniswapToken>;\n  uniswapTokens: Array<UniswapToken>;\n  user?: Maybe<User>;\n  users: Array<User>;\n};\n\n\nexport type Query_MetaArgs = {\n  block?: InputMaybe<Block_Height>;\n};\n\n\nexport type QueryBundleArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryBundlesArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Bundle_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Bundle_Filter>;\n};\n\n\nexport type QueryDailyTotalArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryDailyTotalsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<DailyTotal_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<DailyTotal_Filter>;\n};\n\n\nexport type QueryHourlyTotalArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryHourlyTotalsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<HourlyTotal_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<HourlyTotal_Filter>;\n};\n\n\nexport type QueryOrderArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryOrdersArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Order_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Order_Filter>;\n};\n\n\nexport type QueryPairArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPairDailiesArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<PairDaily_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<PairDaily_Filter>;\n};\n\n\nexport type QueryPairDailyArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPairHourliesArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<PairHourly_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<PairHourly_Filter>;\n};\n\n\nexport type QueryPairHourlyArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPairsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Pair_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Pair_Filter>;\n};\n\n\nexport type QuerySettlementArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySettlementsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Settlement_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Settlement_Filter>;\n};\n\n\nexport type QueryTokenArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenDailyTotalArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenDailyTotalsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<TokenDailyTotal_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<TokenDailyTotal_Filter>;\n};\n\n\nexport type QueryTokenHourlyTotalArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenHourlyTotalsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<TokenHourlyTotal_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<TokenHourlyTotal_Filter>;\n};\n\n\nexport type QueryTokenTradingEventArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenTradingEventsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<TokenTradingEvent_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<TokenTradingEvent_Filter>;\n};\n\n\nexport type QueryTokensArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Token_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Token_Filter>;\n};\n\n\nexport type QueryTotalArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTotalsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Total_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Total_Filter>;\n};\n\n\nexport type QueryTradeArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTradesArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Trade_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Trade_Filter>;\n};\n\n\nexport type QueryUniswapPoolArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUniswapPoolsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<UniswapPool_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<UniswapPool_Filter>;\n};\n\n\nexport type QueryUniswapTokenArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUniswapTokensArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<UniswapToken_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<UniswapToken_Filter>;\n};\n\n\nexport type QueryUserArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUsersArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<User_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<User_Filter>;\n};\n\nexport type Settlement = {\n  __typename?: 'Settlement';\n  /** First trade timestamp */\n  firstTradeTimestamp: Scalars['Int'];\n  /** TxHash */\n  id: Scalars['ID'];\n  /** User who solved the settlement */\n  solver?: Maybe<User>;\n  /** Collection of trades */\n  trades?: Maybe<Array<Trade>>;\n  /** Transaction hash */\n  txHash: Scalars['Bytes'];\n};\n\n\nexport type SettlementTradesArgs = {\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Trade_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  where?: InputMaybe<Trade_Filter>;\n};\n\nexport type Settlement_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  firstTradeTimestamp?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_gt?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_gte?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  firstTradeTimestamp_lt?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_lte?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_not?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  solver?: InputMaybe<Scalars['String']>;\n  solver_?: InputMaybe<User_Filter>;\n  solver_contains?: InputMaybe<Scalars['String']>;\n  solver_contains_nocase?: InputMaybe<Scalars['String']>;\n  solver_ends_with?: InputMaybe<Scalars['String']>;\n  solver_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  solver_gt?: InputMaybe<Scalars['String']>;\n  solver_gte?: InputMaybe<Scalars['String']>;\n  solver_in?: InputMaybe<Array<Scalars['String']>>;\n  solver_lt?: InputMaybe<Scalars['String']>;\n  solver_lte?: InputMaybe<Scalars['String']>;\n  solver_not?: InputMaybe<Scalars['String']>;\n  solver_not_contains?: InputMaybe<Scalars['String']>;\n  solver_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  solver_not_ends_with?: InputMaybe<Scalars['String']>;\n  solver_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  solver_not_in?: InputMaybe<Array<Scalars['String']>>;\n  solver_not_starts_with?: InputMaybe<Scalars['String']>;\n  solver_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  solver_starts_with?: InputMaybe<Scalars['String']>;\n  solver_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  trades_?: InputMaybe<Trade_Filter>;\n  txHash?: InputMaybe<Scalars['Bytes']>;\n  txHash_contains?: InputMaybe<Scalars['Bytes']>;\n  txHash_in?: InputMaybe<Array<Scalars['Bytes']>>;\n  txHash_not?: InputMaybe<Scalars['Bytes']>;\n  txHash_not_contains?: InputMaybe<Scalars['Bytes']>;\n  txHash_not_in?: InputMaybe<Array<Scalars['Bytes']>>;\n};\n\nexport enum Settlement_OrderBy {\n  FirstTradeTimestamp = 'firstTradeTimestamp',\n  Id = 'id',\n  Solver = 'solver',\n  Trades = 'trades',\n  TxHash = 'txHash'\n}\n\nexport type Subscription = {\n  __typename?: 'Subscription';\n  /** Access to subgraph metadata */\n  _meta?: Maybe<_Meta_>;\n  bundle?: Maybe<Bundle>;\n  bundles: Array<Bundle>;\n  dailyTotal?: Maybe<DailyTotal>;\n  dailyTotals: Array<DailyTotal>;\n  hourlyTotal?: Maybe<HourlyTotal>;\n  hourlyTotals: Array<HourlyTotal>;\n  order?: Maybe<Order>;\n  orders: Array<Order>;\n  pair?: Maybe<Pair>;\n  pairDailies: Array<PairDaily>;\n  pairDaily?: Maybe<PairDaily>;\n  pairHourlies: Array<PairHourly>;\n  pairHourly?: Maybe<PairHourly>;\n  pairs: Array<Pair>;\n  settlement?: Maybe<Settlement>;\n  settlements: Array<Settlement>;\n  token?: Maybe<Token>;\n  tokenDailyTotal?: Maybe<TokenDailyTotal>;\n  tokenDailyTotals: Array<TokenDailyTotal>;\n  tokenHourlyTotal?: Maybe<TokenHourlyTotal>;\n  tokenHourlyTotals: Array<TokenHourlyTotal>;\n  tokenTradingEvent?: Maybe<TokenTradingEvent>;\n  tokenTradingEvents: Array<TokenTradingEvent>;\n  tokens: Array<Token>;\n  total?: Maybe<Total>;\n  totals: Array<Total>;\n  trade?: Maybe<Trade>;\n  trades: Array<Trade>;\n  uniswapPool?: Maybe<UniswapPool>;\n  uniswapPools: Array<UniswapPool>;\n  uniswapToken?: Maybe<UniswapToken>;\n  uniswapTokens: Array<UniswapToken>;\n  user?: Maybe<User>;\n  users: Array<User>;\n};\n\n\nexport type Subscription_MetaArgs = {\n  block?: InputMaybe<Block_Height>;\n};\n\n\nexport type SubscriptionBundleArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionBundlesArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Bundle_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Bundle_Filter>;\n};\n\n\nexport type SubscriptionDailyTotalArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionDailyTotalsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<DailyTotal_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<DailyTotal_Filter>;\n};\n\n\nexport type SubscriptionHourlyTotalArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionHourlyTotalsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<HourlyTotal_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<HourlyTotal_Filter>;\n};\n\n\nexport type SubscriptionOrderArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionOrdersArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Order_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Order_Filter>;\n};\n\n\nexport type SubscriptionPairArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPairDailiesArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<PairDaily_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<PairDaily_Filter>;\n};\n\n\nexport type SubscriptionPairDailyArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPairHourliesArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<PairHourly_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<PairHourly_Filter>;\n};\n\n\nexport type SubscriptionPairHourlyArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPairsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Pair_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Pair_Filter>;\n};\n\n\nexport type SubscriptionSettlementArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSettlementsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Settlement_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Settlement_Filter>;\n};\n\n\nexport type SubscriptionTokenArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenDailyTotalArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenDailyTotalsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<TokenDailyTotal_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<TokenDailyTotal_Filter>;\n};\n\n\nexport type SubscriptionTokenHourlyTotalArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenHourlyTotalsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<TokenHourlyTotal_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<TokenHourlyTotal_Filter>;\n};\n\n\nexport type SubscriptionTokenTradingEventArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenTradingEventsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<TokenTradingEvent_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<TokenTradingEvent_Filter>;\n};\n\n\nexport type SubscriptionTokensArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Token_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Token_Filter>;\n};\n\n\nexport type SubscriptionTotalArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTotalsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Total_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Total_Filter>;\n};\n\n\nexport type SubscriptionTradeArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTradesArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Trade_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<Trade_Filter>;\n};\n\n\nexport type SubscriptionUniswapPoolArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUniswapPoolsArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<UniswapPool_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<UniswapPool_Filter>;\n};\n\n\nexport type SubscriptionUniswapTokenArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUniswapTokensArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<UniswapToken_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<UniswapToken_Filter>;\n};\n\n\nexport type SubscriptionUserArgs = {\n  block?: InputMaybe<Block_Height>;\n  id: Scalars['ID'];\n  subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUsersArgs = {\n  block?: InputMaybe<Block_Height>;\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<User_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  subgraphError?: _SubgraphErrorPolicy_;\n  where?: InputMaybe<User_Filter>;\n};\n\nexport type Token = {\n  __typename?: 'Token';\n  /** Token address */\n  address: Scalars['Bytes'];\n  /** Daily totals */\n  dailyTotals: Array<TokenDailyTotal>;\n  /** Token decimals fetched by contract call */\n  decimals: Scalars['Int'];\n  /** First token trade block timestamp */\n  firstTradeTimestamp: Scalars['Int'];\n  /** History of trading for this token */\n  history: Array<TokenTradingEvent>;\n  /** Hourly totals */\n  hourlyTotals: Array<TokenHourlyTotal>;\n  /** Token address to hexString */\n  id: Scalars['ID'];\n  /** Token name fetched by ERC20 contract call */\n  name: Scalars['String'];\n  /** Total trades */\n  numberOfTrades: Scalars['Int'];\n  /** Derived price in ETH */\n  priceEth?: Maybe<Scalars['BigDecimal']>;\n  /** Derived price in USD */\n  priceUsd?: Maybe<Scalars['BigDecimal']>;\n  /** Token symbol fetched by contract call */\n  symbol: Scalars['String'];\n  /** Total volume managed in CowSwap */\n  totalVolume?: Maybe<Scalars['BigInt']>;\n  /** Total volume in Eth */\n  totalVolumeEth: Scalars['BigDecimal'];\n  /** Total volume in Usd */\n  totalVolumeUsd: Scalars['BigDecimal'];\n};\n\n\nexport type TokenDailyTotalsArgs = {\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<TokenDailyTotal_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  where?: InputMaybe<TokenDailyTotal_Filter>;\n};\n\n\nexport type TokenHistoryArgs = {\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<TokenTradingEvent_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  where?: InputMaybe<TokenTradingEvent_Filter>;\n};\n\n\nexport type TokenHourlyTotalsArgs = {\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<TokenHourlyTotal_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  where?: InputMaybe<TokenHourlyTotal_Filter>;\n};\n\nexport type TokenDailyTotal = {\n  __typename?: 'TokenDailyTotal';\n  /** Average trade price */\n  averagePrice: Scalars['BigDecimal'];\n  /** Last trade price */\n  closePrice: Scalars['BigDecimal'];\n  /** Higher trade price */\n  higherPrice: Scalars['BigDecimal'];\n  /** TokenAddress + timestamp day */\n  id: Scalars['ID'];\n  /** Lower trade price */\n  lowerPrice: Scalars['BigDecimal'];\n  /** First trade price */\n  openPrice: Scalars['BigDecimal'];\n  /** Start day timestamp */\n  timestamp: Scalars['Int'];\n  /** Token address */\n  token: Token;\n  /** Number of trades that day */\n  totalTrades: Scalars['BigInt'];\n  /** Total volume traded that day in token */\n  totalVolume: Scalars['BigInt'];\n  /** Total amount traded that day in ETH */\n  totalVolumeEth: Scalars['BigDecimal'];\n  /** Total amount traded that day in USD */\n  totalVolumeUsd: Scalars['BigDecimal'];\n};\n\nexport type TokenDailyTotal_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  averagePrice?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  averagePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  closePrice?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  closePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  higherPrice?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  higherPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  lowerPrice?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  lowerPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  openPrice?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  openPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  timestamp?: InputMaybe<Scalars['Int']>;\n  timestamp_gt?: InputMaybe<Scalars['Int']>;\n  timestamp_gte?: InputMaybe<Scalars['Int']>;\n  timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  timestamp_lt?: InputMaybe<Scalars['Int']>;\n  timestamp_lte?: InputMaybe<Scalars['Int']>;\n  timestamp_not?: InputMaybe<Scalars['Int']>;\n  timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  token?: InputMaybe<Scalars['String']>;\n  token_?: InputMaybe<Token_Filter>;\n  token_contains?: InputMaybe<Scalars['String']>;\n  token_contains_nocase?: InputMaybe<Scalars['String']>;\n  token_ends_with?: InputMaybe<Scalars['String']>;\n  token_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token_gt?: InputMaybe<Scalars['String']>;\n  token_gte?: InputMaybe<Scalars['String']>;\n  token_in?: InputMaybe<Array<Scalars['String']>>;\n  token_lt?: InputMaybe<Scalars['String']>;\n  token_lte?: InputMaybe<Scalars['String']>;\n  token_not?: InputMaybe<Scalars['String']>;\n  token_not_contains?: InputMaybe<Scalars['String']>;\n  token_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token_not_ends_with?: InputMaybe<Scalars['String']>;\n  token_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token_not_starts_with?: InputMaybe<Scalars['String']>;\n  token_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token_starts_with?: InputMaybe<Scalars['String']>;\n  token_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  totalTrades?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_gt?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_gte?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  totalTrades_lt?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_lte?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_not?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  totalVolume?: InputMaybe<Scalars['BigInt']>;\n  totalVolumeEth?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolume_gt?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_gte?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  totalVolume_lt?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_lte?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_not?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n};\n\nexport enum TokenDailyTotal_OrderBy {\n  AveragePrice = 'averagePrice',\n  ClosePrice = 'closePrice',\n  HigherPrice = 'higherPrice',\n  Id = 'id',\n  LowerPrice = 'lowerPrice',\n  OpenPrice = 'openPrice',\n  Timestamp = 'timestamp',\n  Token = 'token',\n  TotalTrades = 'totalTrades',\n  TotalVolume = 'totalVolume',\n  TotalVolumeEth = 'totalVolumeEth',\n  TotalVolumeUsd = 'totalVolumeUsd'\n}\n\nexport type TokenHourlyTotal = {\n  __typename?: 'TokenHourlyTotal';\n  /** Average trade price */\n  averagePrice: Scalars['BigDecimal'];\n  /** Last trade price */\n  closePrice: Scalars['BigDecimal'];\n  /** Higher trade price */\n  higherPrice: Scalars['BigDecimal'];\n  /** TokenAddress + timestamp hour */\n  id: Scalars['ID'];\n  /** Lower trade price */\n  lowerPrice: Scalars['BigDecimal'];\n  /** First trade price */\n  openPrice: Scalars['BigDecimal'];\n  /** Start hour timestamp */\n  timestamp: Scalars['Int'];\n  /** Token address */\n  token: Token;\n  /** Number of trades that hour */\n  totalTrades: Scalars['BigInt'];\n  /** Total volume traded that day in token */\n  totalVolume: Scalars['BigInt'];\n  /** Total amount traded that hour in ETH */\n  totalVolumeEth: Scalars['BigDecimal'];\n  /** Total amount traded that hour in USD */\n  totalVolumeUsd: Scalars['BigDecimal'];\n};\n\nexport type TokenHourlyTotal_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  averagePrice?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  averagePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  averagePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  closePrice?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  closePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  closePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  higherPrice?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  higherPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  higherPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  lowerPrice?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  lowerPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  lowerPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  openPrice?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  openPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n  openPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  timestamp?: InputMaybe<Scalars['Int']>;\n  timestamp_gt?: InputMaybe<Scalars['Int']>;\n  timestamp_gte?: InputMaybe<Scalars['Int']>;\n  timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  timestamp_lt?: InputMaybe<Scalars['Int']>;\n  timestamp_lte?: InputMaybe<Scalars['Int']>;\n  timestamp_not?: InputMaybe<Scalars['Int']>;\n  timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  token?: InputMaybe<Scalars['String']>;\n  token_?: InputMaybe<Token_Filter>;\n  token_contains?: InputMaybe<Scalars['String']>;\n  token_contains_nocase?: InputMaybe<Scalars['String']>;\n  token_ends_with?: InputMaybe<Scalars['String']>;\n  token_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token_gt?: InputMaybe<Scalars['String']>;\n  token_gte?: InputMaybe<Scalars['String']>;\n  token_in?: InputMaybe<Array<Scalars['String']>>;\n  token_lt?: InputMaybe<Scalars['String']>;\n  token_lte?: InputMaybe<Scalars['String']>;\n  token_not?: InputMaybe<Scalars['String']>;\n  token_not_contains?: InputMaybe<Scalars['String']>;\n  token_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token_not_ends_with?: InputMaybe<Scalars['String']>;\n  token_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token_not_starts_with?: InputMaybe<Scalars['String']>;\n  token_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token_starts_with?: InputMaybe<Scalars['String']>;\n  token_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  totalTrades?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_gt?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_gte?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  totalTrades_lt?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_lte?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_not?: InputMaybe<Scalars['BigInt']>;\n  totalTrades_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  totalVolume?: InputMaybe<Scalars['BigInt']>;\n  totalVolumeEth?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolume_gt?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_gte?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  totalVolume_lt?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_lte?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_not?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n};\n\nexport enum TokenHourlyTotal_OrderBy {\n  AveragePrice = 'averagePrice',\n  ClosePrice = 'closePrice',\n  HigherPrice = 'higherPrice',\n  Id = 'id',\n  LowerPrice = 'lowerPrice',\n  OpenPrice = 'openPrice',\n  Timestamp = 'timestamp',\n  Token = 'token',\n  TotalTrades = 'totalTrades',\n  TotalVolume = 'totalVolume',\n  TotalVolumeEth = 'totalVolumeEth',\n  TotalVolumeUsd = 'totalVolumeUsd'\n}\n\nexport type TokenTradingEvent = {\n  __typename?: 'TokenTradingEvent';\n  /** Amount in Eth */\n  amountEth: Scalars['BigDecimal'];\n  /** Amount in Usd */\n  amountUsd: Scalars['BigDecimal'];\n  /** Id built using token-timestamp */\n  id: Scalars['ID'];\n  /** Timestamp */\n  timestamp: Scalars['Int'];\n  /** Token */\n  token: Token;\n  /** Trade */\n  trade: Trade;\n};\n\nexport type TokenTradingEvent_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  amountEth?: InputMaybe<Scalars['BigDecimal']>;\n  amountEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  amountEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  amountEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  amountEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  amountEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  amountEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  amountEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  amountUsd?: InputMaybe<Scalars['BigDecimal']>;\n  amountUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  amountUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  amountUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  amountUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  amountUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  amountUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  amountUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  timestamp?: InputMaybe<Scalars['Int']>;\n  timestamp_gt?: InputMaybe<Scalars['Int']>;\n  timestamp_gte?: InputMaybe<Scalars['Int']>;\n  timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  timestamp_lt?: InputMaybe<Scalars['Int']>;\n  timestamp_lte?: InputMaybe<Scalars['Int']>;\n  timestamp_not?: InputMaybe<Scalars['Int']>;\n  timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  token?: InputMaybe<Scalars['String']>;\n  token_?: InputMaybe<Token_Filter>;\n  token_contains?: InputMaybe<Scalars['String']>;\n  token_contains_nocase?: InputMaybe<Scalars['String']>;\n  token_ends_with?: InputMaybe<Scalars['String']>;\n  token_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token_gt?: InputMaybe<Scalars['String']>;\n  token_gte?: InputMaybe<Scalars['String']>;\n  token_in?: InputMaybe<Array<Scalars['String']>>;\n  token_lt?: InputMaybe<Scalars['String']>;\n  token_lte?: InputMaybe<Scalars['String']>;\n  token_not?: InputMaybe<Scalars['String']>;\n  token_not_contains?: InputMaybe<Scalars['String']>;\n  token_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token_not_ends_with?: InputMaybe<Scalars['String']>;\n  token_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token_not_starts_with?: InputMaybe<Scalars['String']>;\n  token_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token_starts_with?: InputMaybe<Scalars['String']>;\n  token_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  trade?: InputMaybe<Scalars['String']>;\n  trade_?: InputMaybe<Trade_Filter>;\n  trade_contains?: InputMaybe<Scalars['String']>;\n  trade_contains_nocase?: InputMaybe<Scalars['String']>;\n  trade_ends_with?: InputMaybe<Scalars['String']>;\n  trade_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  trade_gt?: InputMaybe<Scalars['String']>;\n  trade_gte?: InputMaybe<Scalars['String']>;\n  trade_in?: InputMaybe<Array<Scalars['String']>>;\n  trade_lt?: InputMaybe<Scalars['String']>;\n  trade_lte?: InputMaybe<Scalars['String']>;\n  trade_not?: InputMaybe<Scalars['String']>;\n  trade_not_contains?: InputMaybe<Scalars['String']>;\n  trade_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  trade_not_ends_with?: InputMaybe<Scalars['String']>;\n  trade_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  trade_not_in?: InputMaybe<Array<Scalars['String']>>;\n  trade_not_starts_with?: InputMaybe<Scalars['String']>;\n  trade_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  trade_starts_with?: InputMaybe<Scalars['String']>;\n  trade_starts_with_nocase?: InputMaybe<Scalars['String']>;\n};\n\nexport enum TokenTradingEvent_OrderBy {\n  AmountEth = 'amountEth',\n  AmountUsd = 'amountUsd',\n  Id = 'id',\n  Timestamp = 'timestamp',\n  Token = 'token',\n  Trade = 'trade'\n}\n\nexport type Token_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  address?: InputMaybe<Scalars['Bytes']>;\n  address_contains?: InputMaybe<Scalars['Bytes']>;\n  address_in?: InputMaybe<Array<Scalars['Bytes']>>;\n  address_not?: InputMaybe<Scalars['Bytes']>;\n  address_not_contains?: InputMaybe<Scalars['Bytes']>;\n  address_not_in?: InputMaybe<Array<Scalars['Bytes']>>;\n  dailyTotals_?: InputMaybe<TokenDailyTotal_Filter>;\n  decimals?: InputMaybe<Scalars['Int']>;\n  decimals_gt?: InputMaybe<Scalars['Int']>;\n  decimals_gte?: InputMaybe<Scalars['Int']>;\n  decimals_in?: InputMaybe<Array<Scalars['Int']>>;\n  decimals_lt?: InputMaybe<Scalars['Int']>;\n  decimals_lte?: InputMaybe<Scalars['Int']>;\n  decimals_not?: InputMaybe<Scalars['Int']>;\n  decimals_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  firstTradeTimestamp?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_gt?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_gte?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  firstTradeTimestamp_lt?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_lte?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_not?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  history_?: InputMaybe<TokenTradingEvent_Filter>;\n  hourlyTotals_?: InputMaybe<TokenHourlyTotal_Filter>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  name?: InputMaybe<Scalars['String']>;\n  name_contains?: InputMaybe<Scalars['String']>;\n  name_contains_nocase?: InputMaybe<Scalars['String']>;\n  name_ends_with?: InputMaybe<Scalars['String']>;\n  name_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  name_gt?: InputMaybe<Scalars['String']>;\n  name_gte?: InputMaybe<Scalars['String']>;\n  name_in?: InputMaybe<Array<Scalars['String']>>;\n  name_lt?: InputMaybe<Scalars['String']>;\n  name_lte?: InputMaybe<Scalars['String']>;\n  name_not?: InputMaybe<Scalars['String']>;\n  name_not_contains?: InputMaybe<Scalars['String']>;\n  name_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  name_not_ends_with?: InputMaybe<Scalars['String']>;\n  name_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  name_not_in?: InputMaybe<Array<Scalars['String']>>;\n  name_not_starts_with?: InputMaybe<Scalars['String']>;\n  name_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  name_starts_with?: InputMaybe<Scalars['String']>;\n  name_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  numberOfTrades?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_gt?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_gte?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_in?: InputMaybe<Array<Scalars['Int']>>;\n  numberOfTrades_lt?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_lte?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_not?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  priceEth?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  priceEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  priceUsd?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  priceUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  symbol?: InputMaybe<Scalars['String']>;\n  symbol_contains?: InputMaybe<Scalars['String']>;\n  symbol_contains_nocase?: InputMaybe<Scalars['String']>;\n  symbol_ends_with?: InputMaybe<Scalars['String']>;\n  symbol_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  symbol_gt?: InputMaybe<Scalars['String']>;\n  symbol_gte?: InputMaybe<Scalars['String']>;\n  symbol_in?: InputMaybe<Array<Scalars['String']>>;\n  symbol_lt?: InputMaybe<Scalars['String']>;\n  symbol_lte?: InputMaybe<Scalars['String']>;\n  symbol_not?: InputMaybe<Scalars['String']>;\n  symbol_not_contains?: InputMaybe<Scalars['String']>;\n  symbol_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  symbol_not_ends_with?: InputMaybe<Scalars['String']>;\n  symbol_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  symbol_not_in?: InputMaybe<Array<Scalars['String']>>;\n  symbol_not_starts_with?: InputMaybe<Scalars['String']>;\n  symbol_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  symbol_starts_with?: InputMaybe<Scalars['String']>;\n  symbol_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  totalVolume?: InputMaybe<Scalars['BigInt']>;\n  totalVolumeEth?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  totalVolumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalVolume_gt?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_gte?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  totalVolume_lt?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_lte?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_not?: InputMaybe<Scalars['BigInt']>;\n  totalVolume_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n};\n\nexport enum Token_OrderBy {\n  Address = 'address',\n  DailyTotals = 'dailyTotals',\n  Decimals = 'decimals',\n  FirstTradeTimestamp = 'firstTradeTimestamp',\n  History = 'history',\n  HourlyTotals = 'hourlyTotals',\n  Id = 'id',\n  Name = 'name',\n  NumberOfTrades = 'numberOfTrades',\n  PriceEth = 'priceEth',\n  PriceUsd = 'priceUsd',\n  Symbol = 'symbol',\n  TotalVolume = 'totalVolume',\n  TotalVolumeEth = 'totalVolumeEth',\n  TotalVolumeUsd = 'totalVolumeUsd'\n}\n\nexport type Total = {\n  __typename?: 'Total';\n  /** Total fees in Eth */\n  feesEth?: Maybe<Scalars['BigDecimal']>;\n  /** Total fees in USD */\n  feesUsd?: Maybe<Scalars['BigDecimal']>;\n  /** This is a singleton entity to contain accumulators for all values. Id will be always 1 */\n  id: Scalars['ID'];\n  /** Number of trades */\n  numberOfTrades: Scalars['BigInt'];\n  /** Total number of orders placed */\n  orders: Scalars['BigInt'];\n  /** Total number of batches settled */\n  settlements: Scalars['BigInt'];\n  /** Total number of tokens traded */\n  tokens: Scalars['BigInt'];\n  /** Total number of traders */\n  traders: Scalars['BigInt'];\n  /** Total traded volume in ETH */\n  volumeEth?: Maybe<Scalars['BigDecimal']>;\n  /** Total traded volume in USD */\n  volumeUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\nexport type Total_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  feesEth?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  feesEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  feesEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  feesUsd?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  feesUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  feesUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  numberOfTrades?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_gt?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_gte?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  numberOfTrades_lt?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_lte?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_not?: InputMaybe<Scalars['BigInt']>;\n  numberOfTrades_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  orders?: InputMaybe<Scalars['BigInt']>;\n  orders_gt?: InputMaybe<Scalars['BigInt']>;\n  orders_gte?: InputMaybe<Scalars['BigInt']>;\n  orders_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  orders_lt?: InputMaybe<Scalars['BigInt']>;\n  orders_lte?: InputMaybe<Scalars['BigInt']>;\n  orders_not?: InputMaybe<Scalars['BigInt']>;\n  orders_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  settlements?: InputMaybe<Scalars['BigInt']>;\n  settlements_gt?: InputMaybe<Scalars['BigInt']>;\n  settlements_gte?: InputMaybe<Scalars['BigInt']>;\n  settlements_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  settlements_lt?: InputMaybe<Scalars['BigInt']>;\n  settlements_lte?: InputMaybe<Scalars['BigInt']>;\n  settlements_not?: InputMaybe<Scalars['BigInt']>;\n  settlements_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  tokens?: InputMaybe<Scalars['BigInt']>;\n  tokens_gt?: InputMaybe<Scalars['BigInt']>;\n  tokens_gte?: InputMaybe<Scalars['BigInt']>;\n  tokens_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  tokens_lt?: InputMaybe<Scalars['BigInt']>;\n  tokens_lte?: InputMaybe<Scalars['BigInt']>;\n  tokens_not?: InputMaybe<Scalars['BigInt']>;\n  tokens_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  traders?: InputMaybe<Scalars['BigInt']>;\n  traders_gt?: InputMaybe<Scalars['BigInt']>;\n  traders_gte?: InputMaybe<Scalars['BigInt']>;\n  traders_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  traders_lt?: InputMaybe<Scalars['BigInt']>;\n  traders_lte?: InputMaybe<Scalars['BigInt']>;\n  traders_not?: InputMaybe<Scalars['BigInt']>;\n  traders_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  volumeEth?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  volumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  volumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum Total_OrderBy {\n  FeesEth = 'feesEth',\n  FeesUsd = 'feesUsd',\n  Id = 'id',\n  NumberOfTrades = 'numberOfTrades',\n  Orders = 'orders',\n  Settlements = 'settlements',\n  Tokens = 'tokens',\n  Traders = 'traders',\n  VolumeEth = 'volumeEth',\n  VolumeUsd = 'volumeUsd'\n}\n\nexport type Trade = {\n  __typename?: 'Trade';\n  /** Trade event buyAmount */\n  buyAmount: Scalars['BigInt'];\n  /** Buy amount in Eth */\n  buyAmountEth?: Maybe<Scalars['BigDecimal']>;\n  /** Buy amount in Usd */\n  buyAmountUsd?: Maybe<Scalars['BigDecimal']>;\n  /** Trade event buyToken */\n  buyToken: Token;\n  /** Trade's fee amount */\n  feeAmount: Scalars['BigInt'];\n  /** Transaction's gas price */\n  gasPrice: Scalars['BigInt'];\n  /** This Id is composed using orderId|txHashString|eventIndex */\n  id: Scalars['ID'];\n  /** Order */\n  order: Order;\n  /** Trade event sellAmount */\n  sellAmount: Scalars['BigInt'];\n  /** Sell amount in Eth */\n  sellAmountEth?: Maybe<Scalars['BigDecimal']>;\n  /** Sell amount in Usd */\n  sellAmountUsd?: Maybe<Scalars['BigDecimal']>;\n  /** Trade event sellToken */\n  sellToken: Token;\n  /** Settlement */\n  settlement: Settlement;\n  /** Block's timestamp */\n  timestamp: Scalars['Int'];\n  /** Trade event transaction hash */\n  txHash: Scalars['Bytes'];\n};\n\nexport type Trade_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  buyAmount?: InputMaybe<Scalars['BigInt']>;\n  buyAmountEth?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  buyAmountEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  buyAmountUsd?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  buyAmountUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  buyAmountUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  buyAmount_gt?: InputMaybe<Scalars['BigInt']>;\n  buyAmount_gte?: InputMaybe<Scalars['BigInt']>;\n  buyAmount_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  buyAmount_lt?: InputMaybe<Scalars['BigInt']>;\n  buyAmount_lte?: InputMaybe<Scalars['BigInt']>;\n  buyAmount_not?: InputMaybe<Scalars['BigInt']>;\n  buyAmount_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  buyToken?: InputMaybe<Scalars['String']>;\n  buyToken_?: InputMaybe<Token_Filter>;\n  buyToken_contains?: InputMaybe<Scalars['String']>;\n  buyToken_contains_nocase?: InputMaybe<Scalars['String']>;\n  buyToken_ends_with?: InputMaybe<Scalars['String']>;\n  buyToken_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  buyToken_gt?: InputMaybe<Scalars['String']>;\n  buyToken_gte?: InputMaybe<Scalars['String']>;\n  buyToken_in?: InputMaybe<Array<Scalars['String']>>;\n  buyToken_lt?: InputMaybe<Scalars['String']>;\n  buyToken_lte?: InputMaybe<Scalars['String']>;\n  buyToken_not?: InputMaybe<Scalars['String']>;\n  buyToken_not_contains?: InputMaybe<Scalars['String']>;\n  buyToken_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  buyToken_not_ends_with?: InputMaybe<Scalars['String']>;\n  buyToken_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  buyToken_not_in?: InputMaybe<Array<Scalars['String']>>;\n  buyToken_not_starts_with?: InputMaybe<Scalars['String']>;\n  buyToken_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  buyToken_starts_with?: InputMaybe<Scalars['String']>;\n  buyToken_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  feeAmount?: InputMaybe<Scalars['BigInt']>;\n  feeAmount_gt?: InputMaybe<Scalars['BigInt']>;\n  feeAmount_gte?: InputMaybe<Scalars['BigInt']>;\n  feeAmount_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  feeAmount_lt?: InputMaybe<Scalars['BigInt']>;\n  feeAmount_lte?: InputMaybe<Scalars['BigInt']>;\n  feeAmount_not?: InputMaybe<Scalars['BigInt']>;\n  feeAmount_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  gasPrice?: InputMaybe<Scalars['BigInt']>;\n  gasPrice_gt?: InputMaybe<Scalars['BigInt']>;\n  gasPrice_gte?: InputMaybe<Scalars['BigInt']>;\n  gasPrice_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  gasPrice_lt?: InputMaybe<Scalars['BigInt']>;\n  gasPrice_lte?: InputMaybe<Scalars['BigInt']>;\n  gasPrice_not?: InputMaybe<Scalars['BigInt']>;\n  gasPrice_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  order?: InputMaybe<Scalars['String']>;\n  order_?: InputMaybe<Order_Filter>;\n  order_contains?: InputMaybe<Scalars['String']>;\n  order_contains_nocase?: InputMaybe<Scalars['String']>;\n  order_ends_with?: InputMaybe<Scalars['String']>;\n  order_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  order_gt?: InputMaybe<Scalars['String']>;\n  order_gte?: InputMaybe<Scalars['String']>;\n  order_in?: InputMaybe<Array<Scalars['String']>>;\n  order_lt?: InputMaybe<Scalars['String']>;\n  order_lte?: InputMaybe<Scalars['String']>;\n  order_not?: InputMaybe<Scalars['String']>;\n  order_not_contains?: InputMaybe<Scalars['String']>;\n  order_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  order_not_ends_with?: InputMaybe<Scalars['String']>;\n  order_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  order_not_in?: InputMaybe<Array<Scalars['String']>>;\n  order_not_starts_with?: InputMaybe<Scalars['String']>;\n  order_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  order_starts_with?: InputMaybe<Scalars['String']>;\n  order_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  sellAmount?: InputMaybe<Scalars['BigInt']>;\n  sellAmountEth?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  sellAmountEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  sellAmountUsd?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  sellAmountUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  sellAmountUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  sellAmount_gt?: InputMaybe<Scalars['BigInt']>;\n  sellAmount_gte?: InputMaybe<Scalars['BigInt']>;\n  sellAmount_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  sellAmount_lt?: InputMaybe<Scalars['BigInt']>;\n  sellAmount_lte?: InputMaybe<Scalars['BigInt']>;\n  sellAmount_not?: InputMaybe<Scalars['BigInt']>;\n  sellAmount_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  sellToken?: InputMaybe<Scalars['String']>;\n  sellToken_?: InputMaybe<Token_Filter>;\n  sellToken_contains?: InputMaybe<Scalars['String']>;\n  sellToken_contains_nocase?: InputMaybe<Scalars['String']>;\n  sellToken_ends_with?: InputMaybe<Scalars['String']>;\n  sellToken_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  sellToken_gt?: InputMaybe<Scalars['String']>;\n  sellToken_gte?: InputMaybe<Scalars['String']>;\n  sellToken_in?: InputMaybe<Array<Scalars['String']>>;\n  sellToken_lt?: InputMaybe<Scalars['String']>;\n  sellToken_lte?: InputMaybe<Scalars['String']>;\n  sellToken_not?: InputMaybe<Scalars['String']>;\n  sellToken_not_contains?: InputMaybe<Scalars['String']>;\n  sellToken_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  sellToken_not_ends_with?: InputMaybe<Scalars['String']>;\n  sellToken_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  sellToken_not_in?: InputMaybe<Array<Scalars['String']>>;\n  sellToken_not_starts_with?: InputMaybe<Scalars['String']>;\n  sellToken_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  sellToken_starts_with?: InputMaybe<Scalars['String']>;\n  sellToken_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  settlement?: InputMaybe<Scalars['String']>;\n  settlement_?: InputMaybe<Settlement_Filter>;\n  settlement_contains?: InputMaybe<Scalars['String']>;\n  settlement_contains_nocase?: InputMaybe<Scalars['String']>;\n  settlement_ends_with?: InputMaybe<Scalars['String']>;\n  settlement_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  settlement_gt?: InputMaybe<Scalars['String']>;\n  settlement_gte?: InputMaybe<Scalars['String']>;\n  settlement_in?: InputMaybe<Array<Scalars['String']>>;\n  settlement_lt?: InputMaybe<Scalars['String']>;\n  settlement_lte?: InputMaybe<Scalars['String']>;\n  settlement_not?: InputMaybe<Scalars['String']>;\n  settlement_not_contains?: InputMaybe<Scalars['String']>;\n  settlement_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  settlement_not_ends_with?: InputMaybe<Scalars['String']>;\n  settlement_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  settlement_not_in?: InputMaybe<Array<Scalars['String']>>;\n  settlement_not_starts_with?: InputMaybe<Scalars['String']>;\n  settlement_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  settlement_starts_with?: InputMaybe<Scalars['String']>;\n  settlement_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  timestamp?: InputMaybe<Scalars['Int']>;\n  timestamp_gt?: InputMaybe<Scalars['Int']>;\n  timestamp_gte?: InputMaybe<Scalars['Int']>;\n  timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  timestamp_lt?: InputMaybe<Scalars['Int']>;\n  timestamp_lte?: InputMaybe<Scalars['Int']>;\n  timestamp_not?: InputMaybe<Scalars['Int']>;\n  timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  txHash?: InputMaybe<Scalars['Bytes']>;\n  txHash_contains?: InputMaybe<Scalars['Bytes']>;\n  txHash_in?: InputMaybe<Array<Scalars['Bytes']>>;\n  txHash_not?: InputMaybe<Scalars['Bytes']>;\n  txHash_not_contains?: InputMaybe<Scalars['Bytes']>;\n  txHash_not_in?: InputMaybe<Array<Scalars['Bytes']>>;\n};\n\nexport enum Trade_OrderBy {\n  BuyAmount = 'buyAmount',\n  BuyAmountEth = 'buyAmountEth',\n  BuyAmountUsd = 'buyAmountUsd',\n  BuyToken = 'buyToken',\n  FeeAmount = 'feeAmount',\n  GasPrice = 'gasPrice',\n  Id = 'id',\n  Order = 'order',\n  SellAmount = 'sellAmount',\n  SellAmountEth = 'sellAmountEth',\n  SellAmountUsd = 'sellAmountUsd',\n  SellToken = 'sellToken',\n  Settlement = 'settlement',\n  Timestamp = 'timestamp',\n  TxHash = 'txHash'\n}\n\nexport type UniswapPool = {\n  __typename?: 'UniswapPool';\n  /** Pool address */\n  id: Scalars['ID'];\n  /** In range liquidity */\n  liquidity: Scalars['BigInt'];\n  /** Current tick */\n  tick?: Maybe<Scalars['BigInt']>;\n  /** Token0 */\n  token0: UniswapToken;\n  /** Token0 per token1 */\n  token0Price: Scalars['BigDecimal'];\n  /** Token1 */\n  token1: UniswapToken;\n  /** Token1 per token0 */\n  token1Price: Scalars['BigDecimal'];\n  /** Total token 0 across all ticks */\n  totalValueLockedToken0: Scalars['BigDecimal'];\n  /** Total token 1 across all ticks */\n  totalValueLockedToken1: Scalars['BigDecimal'];\n};\n\nexport type UniswapPool_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  liquidity?: InputMaybe<Scalars['BigInt']>;\n  liquidity_gt?: InputMaybe<Scalars['BigInt']>;\n  liquidity_gte?: InputMaybe<Scalars['BigInt']>;\n  liquidity_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  liquidity_lt?: InputMaybe<Scalars['BigInt']>;\n  liquidity_lte?: InputMaybe<Scalars['BigInt']>;\n  liquidity_not?: InputMaybe<Scalars['BigInt']>;\n  liquidity_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  tick?: InputMaybe<Scalars['BigInt']>;\n  tick_gt?: InputMaybe<Scalars['BigInt']>;\n  tick_gte?: InputMaybe<Scalars['BigInt']>;\n  tick_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  tick_lt?: InputMaybe<Scalars['BigInt']>;\n  tick_lte?: InputMaybe<Scalars['BigInt']>;\n  tick_not?: InputMaybe<Scalars['BigInt']>;\n  tick_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n  token0?: InputMaybe<Scalars['String']>;\n  token0Price?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_not?: InputMaybe<Scalars['BigDecimal']>;\n  token0Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token0_?: InputMaybe<UniswapToken_Filter>;\n  token0_contains?: InputMaybe<Scalars['String']>;\n  token0_contains_nocase?: InputMaybe<Scalars['String']>;\n  token0_ends_with?: InputMaybe<Scalars['String']>;\n  token0_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_gt?: InputMaybe<Scalars['String']>;\n  token0_gte?: InputMaybe<Scalars['String']>;\n  token0_in?: InputMaybe<Array<Scalars['String']>>;\n  token0_lt?: InputMaybe<Scalars['String']>;\n  token0_lte?: InputMaybe<Scalars['String']>;\n  token0_not?: InputMaybe<Scalars['String']>;\n  token0_not_contains?: InputMaybe<Scalars['String']>;\n  token0_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token0_not_ends_with?: InputMaybe<Scalars['String']>;\n  token0_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token0_not_starts_with?: InputMaybe<Scalars['String']>;\n  token0_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token0_starts_with?: InputMaybe<Scalars['String']>;\n  token0_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token1?: InputMaybe<Scalars['String']>;\n  token1Price?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_not?: InputMaybe<Scalars['BigDecimal']>;\n  token1Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  token1_?: InputMaybe<UniswapToken_Filter>;\n  token1_contains?: InputMaybe<Scalars['String']>;\n  token1_contains_nocase?: InputMaybe<Scalars['String']>;\n  token1_ends_with?: InputMaybe<Scalars['String']>;\n  token1_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_gt?: InputMaybe<Scalars['String']>;\n  token1_gte?: InputMaybe<Scalars['String']>;\n  token1_in?: InputMaybe<Array<Scalars['String']>>;\n  token1_lt?: InputMaybe<Scalars['String']>;\n  token1_lte?: InputMaybe<Scalars['String']>;\n  token1_not?: InputMaybe<Scalars['String']>;\n  token1_not_contains?: InputMaybe<Scalars['String']>;\n  token1_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  token1_not_ends_with?: InputMaybe<Scalars['String']>;\n  token1_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_not_in?: InputMaybe<Array<Scalars['String']>>;\n  token1_not_starts_with?: InputMaybe<Scalars['String']>;\n  token1_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  token1_starts_with?: InputMaybe<Scalars['String']>;\n  token1_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  totalValueLockedToken0?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken0_gt?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken0_gte?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken0_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalValueLockedToken0_lt?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken0_lte?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken0_not?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken0_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalValueLockedToken1?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken1_gt?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken1_gte?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken1_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  totalValueLockedToken1_lt?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken1_lte?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken1_not?: InputMaybe<Scalars['BigDecimal']>;\n  totalValueLockedToken1_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum UniswapPool_OrderBy {\n  Id = 'id',\n  Liquidity = 'liquidity',\n  Tick = 'tick',\n  Token0 = 'token0',\n  Token0Price = 'token0Price',\n  Token1 = 'token1',\n  Token1Price = 'token1Price',\n  TotalValueLockedToken0 = 'totalValueLockedToken0',\n  TotalValueLockedToken1 = 'totalValueLockedToken1'\n}\n\nexport type UniswapToken = {\n  __typename?: 'UniswapToken';\n  /** Token address */\n  address: Scalars['Bytes'];\n  /** Pools token is in that are allow listed for USD pricing */\n  allowedPools: Array<UniswapToken>;\n  /** Token decimals fetched by contract call */\n  decimals: Scalars['Int'];\n  /** Token address to hexString */\n  id: Scalars['ID'];\n  /** Token name fetched by ERC20 contract call */\n  name: Scalars['String'];\n  /** Derived price in ETH */\n  priceEth?: Maybe<Scalars['BigDecimal']>;\n  /** Derived price in USD */\n  priceUsd?: Maybe<Scalars['BigDecimal']>;\n  /** Token symbol fetched by contract call */\n  symbol: Scalars['String'];\n};\n\n\nexport type UniswapTokenAllowedPoolsArgs = {\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<UniswapToken_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  where?: InputMaybe<UniswapToken_Filter>;\n};\n\nexport type UniswapToken_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  address?: InputMaybe<Scalars['Bytes']>;\n  address_contains?: InputMaybe<Scalars['Bytes']>;\n  address_in?: InputMaybe<Array<Scalars['Bytes']>>;\n  address_not?: InputMaybe<Scalars['Bytes']>;\n  address_not_contains?: InputMaybe<Scalars['Bytes']>;\n  address_not_in?: InputMaybe<Array<Scalars['Bytes']>>;\n  allowedPools?: InputMaybe<Array<Scalars['String']>>;\n  allowedPools_?: InputMaybe<UniswapToken_Filter>;\n  allowedPools_contains?: InputMaybe<Array<Scalars['String']>>;\n  allowedPools_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n  allowedPools_not?: InputMaybe<Array<Scalars['String']>>;\n  allowedPools_not_contains?: InputMaybe<Array<Scalars['String']>>;\n  allowedPools_not_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n  decimals?: InputMaybe<Scalars['Int']>;\n  decimals_gt?: InputMaybe<Scalars['Int']>;\n  decimals_gte?: InputMaybe<Scalars['Int']>;\n  decimals_in?: InputMaybe<Array<Scalars['Int']>>;\n  decimals_lt?: InputMaybe<Scalars['Int']>;\n  decimals_lte?: InputMaybe<Scalars['Int']>;\n  decimals_not?: InputMaybe<Scalars['Int']>;\n  decimals_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  name?: InputMaybe<Scalars['String']>;\n  name_contains?: InputMaybe<Scalars['String']>;\n  name_contains_nocase?: InputMaybe<Scalars['String']>;\n  name_ends_with?: InputMaybe<Scalars['String']>;\n  name_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  name_gt?: InputMaybe<Scalars['String']>;\n  name_gte?: InputMaybe<Scalars['String']>;\n  name_in?: InputMaybe<Array<Scalars['String']>>;\n  name_lt?: InputMaybe<Scalars['String']>;\n  name_lte?: InputMaybe<Scalars['String']>;\n  name_not?: InputMaybe<Scalars['String']>;\n  name_not_contains?: InputMaybe<Scalars['String']>;\n  name_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  name_not_ends_with?: InputMaybe<Scalars['String']>;\n  name_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  name_not_in?: InputMaybe<Array<Scalars['String']>>;\n  name_not_starts_with?: InputMaybe<Scalars['String']>;\n  name_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  name_starts_with?: InputMaybe<Scalars['String']>;\n  name_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  priceEth?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  priceEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  priceEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  priceUsd?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  priceUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  priceUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  symbol?: InputMaybe<Scalars['String']>;\n  symbol_contains?: InputMaybe<Scalars['String']>;\n  symbol_contains_nocase?: InputMaybe<Scalars['String']>;\n  symbol_ends_with?: InputMaybe<Scalars['String']>;\n  symbol_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  symbol_gt?: InputMaybe<Scalars['String']>;\n  symbol_gte?: InputMaybe<Scalars['String']>;\n  symbol_in?: InputMaybe<Array<Scalars['String']>>;\n  symbol_lt?: InputMaybe<Scalars['String']>;\n  symbol_lte?: InputMaybe<Scalars['String']>;\n  symbol_not?: InputMaybe<Scalars['String']>;\n  symbol_not_contains?: InputMaybe<Scalars['String']>;\n  symbol_not_contains_nocase?: InputMaybe<Scalars['String']>;\n  symbol_not_ends_with?: InputMaybe<Scalars['String']>;\n  symbol_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n  symbol_not_in?: InputMaybe<Array<Scalars['String']>>;\n  symbol_not_starts_with?: InputMaybe<Scalars['String']>;\n  symbol_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n  symbol_starts_with?: InputMaybe<Scalars['String']>;\n  symbol_starts_with_nocase?: InputMaybe<Scalars['String']>;\n};\n\nexport enum UniswapToken_OrderBy {\n  Address = 'address',\n  AllowedPools = 'allowedPools',\n  Decimals = 'decimals',\n  Id = 'id',\n  Name = 'name',\n  PriceEth = 'priceEth',\n  PriceUsd = 'priceUsd',\n  Symbol = 'symbol'\n}\n\nexport type User = {\n  __typename?: 'User';\n  /** Owner's address */\n  address: Scalars['Bytes'];\n  /** First trade block timestamp */\n  firstTradeTimestamp: Scalars['Int'];\n  /** Trade event order owner */\n  id: Scalars['ID'];\n  /** Determine if user has solved a settlement */\n  isSolver: Scalars['Boolean'];\n  /** Solved trades */\n  numberOfTrades: Scalars['Int'];\n  /** List of orders placed by this user */\n  ordersPlaced: Array<Order>;\n  /** total amount solved by the user in Eth */\n  solvedAmountEth?: Maybe<Scalars['BigDecimal']>;\n  /** total amount solved by the user in Usd */\n  solvedAmountUsd?: Maybe<Scalars['BigDecimal']>;\n  /** total amount traded by the user in Eth */\n  tradedAmountEth?: Maybe<Scalars['BigDecimal']>;\n  /** total amount traded by the user in Usd */\n  tradedAmountUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\n\nexport type UserOrdersPlacedArgs = {\n  first?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Order_OrderBy>;\n  orderDirection?: InputMaybe<OrderDirection>;\n  skip?: InputMaybe<Scalars['Int']>;\n  where?: InputMaybe<Order_Filter>;\n};\n\nexport type User_Filter = {\n  /** Filter for the block changed event. */\n  _change_block?: InputMaybe<BlockChangedFilter>;\n  address?: InputMaybe<Scalars['Bytes']>;\n  address_contains?: InputMaybe<Scalars['Bytes']>;\n  address_in?: InputMaybe<Array<Scalars['Bytes']>>;\n  address_not?: InputMaybe<Scalars['Bytes']>;\n  address_not_contains?: InputMaybe<Scalars['Bytes']>;\n  address_not_in?: InputMaybe<Array<Scalars['Bytes']>>;\n  firstTradeTimestamp?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_gt?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_gte?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n  firstTradeTimestamp_lt?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_lte?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_not?: InputMaybe<Scalars['Int']>;\n  firstTradeTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  id?: InputMaybe<Scalars['ID']>;\n  id_gt?: InputMaybe<Scalars['ID']>;\n  id_gte?: InputMaybe<Scalars['ID']>;\n  id_in?: InputMaybe<Array<Scalars['ID']>>;\n  id_lt?: InputMaybe<Scalars['ID']>;\n  id_lte?: InputMaybe<Scalars['ID']>;\n  id_not?: InputMaybe<Scalars['ID']>;\n  id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n  isSolver?: InputMaybe<Scalars['Boolean']>;\n  isSolver_in?: InputMaybe<Array<Scalars['Boolean']>>;\n  isSolver_not?: InputMaybe<Scalars['Boolean']>;\n  isSolver_not_in?: InputMaybe<Array<Scalars['Boolean']>>;\n  numberOfTrades?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_gt?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_gte?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_in?: InputMaybe<Array<Scalars['Int']>>;\n  numberOfTrades_lt?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_lte?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_not?: InputMaybe<Scalars['Int']>;\n  numberOfTrades_not_in?: InputMaybe<Array<Scalars['Int']>>;\n  ordersPlaced_?: InputMaybe<Order_Filter>;\n  solvedAmountEth?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  solvedAmountEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  solvedAmountUsd?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  solvedAmountUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  solvedAmountUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  tradedAmountEth?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  tradedAmountEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountEth_not?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  tradedAmountUsd?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n  tradedAmountUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n  tradedAmountUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum User_OrderBy {\n  Address = 'address',\n  FirstTradeTimestamp = 'firstTradeTimestamp',\n  Id = 'id',\n  IsSolver = 'isSolver',\n  NumberOfTrades = 'numberOfTrades',\n  OrdersPlaced = 'ordersPlaced',\n  SolvedAmountEth = 'solvedAmountEth',\n  SolvedAmountUsd = 'solvedAmountUsd',\n  TradedAmountEth = 'tradedAmountEth',\n  TradedAmountUsd = 'tradedAmountUsd'\n}\n\nexport type _Block_ = {\n  __typename?: '_Block_';\n  /** The hash of the block */\n  hash?: Maybe<Scalars['Bytes']>;\n  /** The block number */\n  number: Scalars['Int'];\n};\n\n/** The type for the top-level _meta field */\nexport type _Meta_ = {\n  __typename?: '_Meta_';\n  /**\n   * Information about a specific subgraph block. The hash of the block\n   * will be null if the _meta field has a block constraint that asks for\n   * a block number. It will be filled if the _meta field has no block constraint\n   * and therefore asks for the latest  block\n   *\n   */\n  block: _Block_;\n  /** The deployment ID */\n  deployment: Scalars['String'];\n  /** If `true`, the subgraph encountered indexing errors at some past block */\n  hasIndexingErrors: Scalars['Boolean'];\n};\n\nexport enum _SubgraphErrorPolicy_ {\n  /** Data will be returned even if the subgraph has indexing errors */\n  Allow = 'allow',\n  /** If the subgraph has indexing errors, data will be omitted. The default. */\n  Deny = 'deny'\n}\n\nexport type TotalsQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type TotalsQuery = { __typename?: 'Query', totals: Array<{ __typename?: 'Total', tokens: any, orders: any, traders: any, settlements: any, volumeUsd?: any | null, volumeEth?: any | null, feesUsd?: any | null, feesEth?: any | null }> };\n\nexport type LastDaysVolumeQueryVariables = Exact<{\n  days: Scalars['Int'];\n}>;\n\n\nexport type LastDaysVolumeQuery = { __typename?: 'Query', dailyTotals: Array<{ __typename?: 'DailyTotal', timestamp: number, volumeUsd?: any | null }> };\n\nexport type LastHoursVolumeQueryVariables = Exact<{\n  hours: Scalars['Int'];\n}>;\n\n\nexport type LastHoursVolumeQuery = { __typename?: 'Query', hourlyTotals: Array<{ __typename?: 'HourlyTotal', timestamp: number, volumeUsd?: any | null }> };\n"],"names":["SupportedChainId","CowError","Error","constructor","message","error_code","super","this","objectToQueryString","o","qs","URLSearchParams","key","Object","keys","value","append","toString","qsResult","ALL_SUPPORTED_CHAIN_IDS","MAINNET","RINKEBY","GOERLI","GNOSIS_CHAIN","GPv2Settlement","JSON","parse","GP_SETTLEMENT_CONTRACT_ADDRESS","ChainId","address","V4_ERROR_MSG_REGEX","V3_ERROR_MSG_REGEX","RPC_REQUEST_FAILED_REGEX","METAMASK_STRING_CHAINID_REGEX","mapSigningSchema","Map","SigningScheme","EIP712","libraryValue","apiValue","ETHSIGN","EIP1271","PRESIGN","_getSigningSchemeInfo","ecdaSigningScheme","get","undefined","getSigningSchemeApiValue","getSigningSchemeLibValue","_getDomain","chainId","settlementContract","domainGp","async","_signOrder","params","signer","order","signingScheme","domain","signOrderGp","_signOrderCancellation","orderId","signOrderCancellationGp","_signPayload","payload","signFn","signingMethod","_signer","signature","TypedDataV3Signer","IntChainIdTypedDataV4Signer","e","log","error","_extends","code","test","_signature","data","ApiErrorCodes","ApiErrorCodeDetails","GpQuoteErrorCodes","GpQuoteErrorDetails","OperatorError","static","response","action","orderPostError","json","errorType","apiErrorDetails","description","UNHANDLED_GET_ERROR","UNHANDLED_CREATE_ERROR","UNHANDLED_DELETE_ERROR","_mapActionToErrorDetail","status","getErrorMessage","apiError","name","GpQuoteError","quoteErrorDetails","UNHANDLED_ERROR","quoteError","Token","symbol","XDAI_SYMBOL","WRAPPED_NATIVE_TOKEN","NATIVE","toErc20Address","tokenAddress","checkedAddress","DEFAULT_HEADERS","BaseApi","context","getApiUrl","defaultHeaders","apiVersion","API_NAME","API_VERSION","API_URL_GETTER","baseUrl","post","url","options","handleMethod","fetch","bind","delete","method","fetchFn","networkId","requestOptions","apiUrlGetterParams","headers","body","stringify","getGnosisProtocolUrl","isDev","getProfileUrl","UNHANDLED_QUOTE_ERROR","UNHANDLED_ORDER_ERROR","_handleQuoteResponse","ok","mappedError","mapOperatorErrorToQuoteError","NotFound","NoLiquidity","InsufficientLiquidity","SellAmountDoesNotCoverFee","FeeExceedsFrom","UnsupportedToken","QuoteError","sellToken","buyToken","CowApi","isDevEnvironment","debug","info","getProfile","errorResponse","owner","limit","offset","qsParams","orderUid","queryString","txHash","baseToken","quoteToken","amount","kind","catch","quoteParams","mapNewToLegacyParams","cancellation","from","errorMessage","getErrorFromStatusCode","fullOrder","appData","appDataHash","uid","getApiBaseUrl","fetchProfile","userAddress","receiver","validTo","fallbackAddress","baseParams","partiallyFillable","OrderKind","SELL","sellAmountBeforeFee","BUY","buyAmountAfterFee","getUrl","prodUri","barnUri","uri","TOTALS_QUERY","gql","_t","_","LAST_DAYS_VOLUME_QUERY","_t2","LAST_HOURS_VOLUME_QUERY","_t3","subgraphUrls","CowSubgraphApi","clients","createClients","GraphQLClient","runQuery","totals","days","hours","query","variables","client","request","getBaseUrl","validate","ajv","getValidator","Ajv","appDataSchema","import","compile","getSerializedCID","hash","hexHash","fromHexString","hexString","stringMatch","match","Uint8Array","map","byte","parseInt","replace","uint8array","CID","decode","toV0","validateAppDataDocument","appDataDocument","result","errors","errorsText","DEFAULT_APP_CODE","MetadataApi","generateAppDataDoc","metadata","optionalProperties","appCode","environment","version","cidV0","cid","ipfsUri","default","loadIpfsFromCid","ipfsHash","digest","multihash","Buffer","validation","doc","docString","of","cidVersion","calculateIpfsCidV0","cidToAppDataHex","appDataDoc","IpfsHash","file","writeUri","pinataApiKey","pinataApiSecret","pinataContent","pinataMetadata","pinataUrl","pinata_api_key","pinata_secret_api_key","details","pinJSONToIPFS","ipfs","DefaultCowContext","readUri","apiKey","apiSecret","Context","updateContext","cowContext","setParams","defineProperty","_chainId","writable","_classPrivateFieldLooseBase","updateChainId","_classPrivateFieldLoo","_this","provider","_context","getNetwork","getAndReconciliateNetwork","Promise","resolve","_classPrivateFieldLoo2","_classPrivateFieldLoo3","_classPrivateFieldLoo4","ZeroXError","_errorResponse$valida","_errorResponse$valida2","validationErrors","length","reason","isError","_apiError$validationE","get0xUrls","optionsToMatchaParamsUrl","excludedSources","affiliateAddress","extractExcludedSources","throwOrReturnAffiliateAddress","affiliateAddressMap","join","EXCLUDED_SOURCES","ZeroXApi","MATCHA_OPTIONS","MATCHA_OPTIONS_URL","customChainId","getMatchaChainId","getTokensFromMarket","swapSide","errorObj","clone","priceError","handleQuoteResponse","CowSdk","cowApi","metadataApi","cowSubgraphApi","zeroXApi","matchaOptions","setLevel","loglevel","_checkSigner","signOrder","signOrderCancellation","Bundle_OrderBy","DailyTotal_OrderBy","HourlyTotal_OrderBy","OrderDirection","Order_OrderBy","PairDaily_OrderBy","PairHourly_OrderBy","Pair_OrderBy","Settlement_OrderBy","TokenDailyTotal_OrderBy","TokenHourlyTotal_OrderBy","TokenTradingEvent_OrderBy","Token_OrderBy","Total_OrderBy","Trade_OrderBy","UniswapPool_OrderBy","UniswapToken_OrderBy","User_OrderBy","_SubgraphErrorPolicy_"],"mappings":"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"}