UNPKG

@cowprotocol/cow-sdk

Version:

<p align="center"> <img width="400" src="https://github.com/cowprotocol/cow-sdk/raw/main/docs/images/CoW.png" /> </p>

28 lines 280 kB
import"cross-fetch/polyfill";import{RateLimiter as t}from"limiter";import{backOff as e}from"exponential-backoff";import{gql as r,request as n}from"graphql-request";import{utils as i,Contract as o,ethers as s,constants as a,BigNumber as u}from"ethers";import{OrderBalance as l,OrderKind as h,SigningScheme as c,hashTypedData as f,isTypedDataSigner as d,ORDER_TYPE_FIELDS as p}from"@cowprotocol/contracts";import{StandardMerkleTree as m}from"@openzeppelin/merkle-tree";import{defaultAbiCoder as y,solidityKeccak256 as g,getCreate2Address as b,arrayify as v,joinSignature as A,splitSignature as w,keccak256 as E,toUtf8Bytes as T}from"ethers/lib/utils";import{Signer as I}from"@ethersproject/abstract-signer";import{MetadataApi as N,stringifyDeterministic as M}from"@cowprotocol/app-data";var k;!function(t){t[t.MAINNET=1]="MAINNET",t[t.GNOSIS_CHAIN=100]="GNOSIS_CHAIN",t[t.ARBITRUM_ONE=42161]="ARBITRUM_ONE",t[t.BASE=8453]="BASE",t[t.SEPOLIA=11155111]="SEPOLIA"}(k||(k={}));const _=["prod","staging"],S={env:"prod",chainId:k.MAINNET};class C extends Error{constructor(t,e){super(t),this.error_code=void 0,this.error_code=e}}const O="cow-sdk:",x="https://gnosis.mypinata.cloud/ipfs",R="https://api.pinata.cloud";function P(){return P=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},P.apply(this,arguments)}function B(t,e){if(null==t)return{};var r,n,i={},o=Object.keys(t);for(n=0;n<o.length;n++)e.indexOf(r=o[n])>=0||(i[r]=t[r]);return i}const D="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",L="0x2f55e8b20D0B9FEFA187AA7d00B6Cbe563605bF5",F="0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74",U="0x00E989b87700514118Fa55326CD1cCE82faebEF6",q="0x2CFFA8cf11B90C9F437567b86352169dF4009F73",G=Object.values(k).filter(t=>"number"==typeof t);function H(t){return G.reduce((e,r)=>P({},e,{[r]:"function"==typeof t?t(r):t}),{})}function z(t){return H(t)}const Q=z("0x9008D19f58AAbD9eD0D60971565AA8510560ab41"),K=z("0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"),J=z(L),V=z(F),j={[k.MAINNET]:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",[k.GNOSIS_CHAIN]:"0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d",[k.ARBITRUM_ONE]:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",[k.SEPOLIA]:"0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",[k.BASE]:"0x4200000000000000000000000000000000000006"},Y="0xba3cb449bd2b4adddbc894d8697f5170800eadec",W="0x04501b9b1d52e67f6862d157e00d13419d2d6e95",X=z(Y),Z=z(W),$=4294967295;class tt extends Error{constructor(t,e){super("string"==typeof e?e:t.statusText),this.response=void 0,this.body=void 0,this.response=t,this.body=e}}const et=[408,425,429,500,502,503,504],rt={numOfAttempts:10,maxDelay:Infinity,jitter:"none",retry:t=>!(t instanceof tt)||et.includes(t.response.status)},nt={tokensPerInterval:5,interval:"second"},it=async t=>{if(204!==t.status)try{const e=t.headers.get("Content-Type");if(e)return e.toLowerCase().startsWith("application/json")?await t.json():await t.text()}catch(t){console.error(t)}};async function ot(t,{path:r,query:n,method:i,body:o},s,a){const u=`${t}${r}${n?"?"+n:""}`,l={method:i,body:(()=>{if(o)return"string"==typeof o?o:JSON.stringify(o)})(),headers:{Accept:"application/json","Content-Type":"application/json"}};return e(async()=>{await s.removeTokens(1);const t=await fetch(u,l),e=await it(t);return t.status>=200&&t.status<300?e:Promise.reject(new tt(t,e))},a)}function st(t){return function(t){const{ethflowData:e}=t;if(!e)return t;const{userValidTo:r}=e;return P({},t,{validTo:r,owner:t.onchainUser||t.owner,sellToken:D})}(function(t){const{executedFeeAmount:e,executedFee:r}=t,n=BigInt(e||"0"),i=BigInt(r||"0");return P({},t,{totalFee:String(n+i)})}(t))}const at={[k.MAINNET]:"https://api.cow.fi/mainnet",[k.GNOSIS_CHAIN]:"https://api.cow.fi/xdai",[k.ARBITRUM_ONE]:"https://api.cow.fi/arbitrum_one",[k.BASE]:"https://api.cow.fi/base",[k.SEPOLIA]:"https://api.cow.fi/sepolia"},ut={[k.MAINNET]:"https://barn.api.cow.fi/mainnet",[k.GNOSIS_CHAIN]:"https://barn.api.cow.fi/xdai",[k.ARBITRUM_ONE]:"https://barn.api.cow.fi/arbitrum_one",[k.BASE]:"https://barn.api.cow.fi/base",[k.SEPOLIA]:"https://barn.api.cow.fi/sepolia"};function lt(t){return Object.keys(t).reduce((e,r)=>{const n=t[r];return void 0!==n&&(e[r]=n),e},{})}class ht{constructor(e={}){this.context=void 0,this.rateLimiter=void 0,this.context=P({},S,e),this.rateLimiter=new t(e.limiterOpts||nt)}getVersion(t={}){return this.fetch({path:"/api/v1/version",method:"GET"},t)}getTrades(t,e={}){if(t.owner&&t.orderUid)return Promise.reject(new C("Cannot specify both owner and orderId"));if(!t.owner&&!t.orderUid)return Promise.reject(new C("Must specify either owner or orderId"));const r=new URLSearchParams(lt(t));return this.fetch({path:"/api/v1/trades",method:"GET",query:r},e)}getOrders({owner:t,offset:e=0,limit:r=1e3},n={}){const i=new URLSearchParams(lt({offset:e.toString(),limit:r.toString()}));return this.fetch({path:`/api/v1/account/${t}/orders`,method:"GET",query:i},n).then(t=>t.map(st))}getTxOrders(t,e={}){return this.fetch({path:`/api/v1/transactions/${t}/orders`,method:"GET"},e).then(t=>t.map(st))}getOrder(t,e={}){return this.fetch({path:`/api/v1/orders/${t}`,method:"GET"},e).then(t=>st(t))}getOrderCompetitionStatus(t,e={}){return this.fetch({path:`/api/v1/orders/${t}/status`,method:"GET"},e)}getOrderMultiEnv(t,e={}){const{env:r}=this.getContextWithOverride(e),n=_.filter(t=>t!==r);let i=0;const o=r=>{const s=n[i];return r instanceof tt&&404===r.response.status&&s?(i++,this.getOrder(t,P({},e,{env:s})).catch(o)):Promise.reject(r)};return this.getOrder(t,P({},e,{env:r})).catch(o)}getQuote(t,e={}){return this.fetch({path:"/api/v1/quote",method:"POST",body:t},e)}sendSignedOrderCancellations(t,e={}){return this.fetch({path:"/api/v1/orders",method:"DELETE",body:t},e)}sendOrder(t,e={}){return this.fetch({path:"/api/v1/orders",method:"POST",body:t},e)}getNativePrice(t,e={}){return this.fetch({path:`/api/v1/token/${t}/native_price`,method:"GET"},e)}getTotalSurplus(t,e={}){return this.fetch({path:`/api/v1/users/${t}/total_surplus`,method:"GET"},e)}getAppData(t,e={}){return this.fetch({path:`/api/v1/app_data/${t}`,method:"GET"},e)}uploadAppData(t,e,r={}){return this.fetch({path:`/api/v1/app_data/${t}`,method:"PUT",body:{fullAppData:e}},r)}getSolverCompetition(t,e={}){return this.fetch({path:`/api/v1/solver_competition${"string"==typeof t?"/by_tx_hash":""}/${t}`,method:"GET"},e)}getOrderLink(t,e){const{chainId:r,env:n}=this.getContextWithOverride(e);return this.getApiBaseUrls(n)[r]+`/api/v1/orders/${t}`}getContextWithOverride(t={}){return P({},this.context,t)}getApiBaseUrls(t){return this.context.baseUrls?this.context.baseUrls:"prod"===t?at:ut}fetch(e,r={}){const{chainId:n,env:i,backoffOpts:o}=this.getContextWithOverride(r),s=this.getApiBaseUrls(i)[n],a=o||rt;return ot(s,e,r.limiterOpts?new t(r.limiterOpts):this.rateLimiter,a)}}var ct,ft,dt,pt,mt,yt,gt,bt,vt,At,wt,Et,Tt,It,Nt;!function(t){t.ERC20="erc20",t.INTERNAL="internal"}(ct||(ct={})),function(t){var e;(e=t.type||(t.type={})).OPEN="open",e.SCHEDULED="scheduled",e.ACTIVE="active",e.SOLVED="solved",e.EXECUTING="executing",e.TRADED="traded",e.CANCELLED="cancelled"}(ft||(ft={})),function(t){t.EIP712="eip712",t.ETHSIGN="ethsign"}(dt||(dt={})),function(t){var e;(e=t.placementError||(t.placementError={})).QUOTE_NOT_FOUND="QuoteNotFound",e.VALID_TO_TOO_FAR_IN_FUTURE="ValidToTooFarInFuture",e.PRE_VALIDATION_ERROR="PreValidationError"}(pt||(pt={})),function(t){var e;(e=t.errorType||(t.errorType={})).INVALID_SIGNATURE="InvalidSignature",e.WRONG_OWNER="WrongOwner",e.ORDER_NOT_FOUND="OrderNotFound",e.ALREADY_CANCELLED="AlreadyCancelled",e.ORDER_FULLY_EXECUTED="OrderFullyExecuted",e.ORDER_EXPIRED="OrderExpired",e.ON_CHAIN_ORDER="OnChainOrder"}(mt||(mt={})),function(t){t.MARKET="market",t.LIMIT="limit",t.LIQUIDITY="liquidity"}(yt||(yt={})),function(t){t.BUY="buy",t.SELL="sell"}(gt||(gt={})),function(t){var e;(e=t.errorType||(t.errorType={})).DUPLICATED_ORDER="DuplicatedOrder",e.QUOTE_NOT_FOUND="QuoteNotFound",e.QUOTE_NOT_VERIFIED="QuoteNotVerified",e.INVALID_QUOTE="InvalidQuote",e.MISSING_FROM="MissingFrom",e.WRONG_OWNER="WrongOwner",e.INVALID_EIP1271SIGNATURE="InvalidEip1271Signature",e.INSUFFICIENT_BALANCE="InsufficientBalance",e.INSUFFICIENT_ALLOWANCE="InsufficientAllowance",e.INVALID_SIGNATURE="InvalidSignature",e.SELL_AMOUNT_OVERFLOW="SellAmountOverflow",e.TRANSFER_SIMULATION_FAILED="TransferSimulationFailed",e.ZERO_AMOUNT="ZeroAmount",e.INCOMPATIBLE_SIGNING_SCHEME="IncompatibleSigningScheme",e.TOO_MANY_LIMIT_ORDERS="TooManyLimitOrders",e.TOO_MUCH_GAS="TooMuchGas",e.UNSUPPORTED_BUY_TOKEN_DESTINATION="UnsupportedBuyTokenDestination",e.UNSUPPORTED_SELL_TOKEN_SOURCE="UnsupportedSellTokenSource",e.UNSUPPORTED_ORDER_TYPE="UnsupportedOrderType",e.INSUFFICIENT_VALID_TO="InsufficientValidTo",e.EXCESSIVE_VALID_TO="ExcessiveValidTo",e.INVALID_NATIVE_SELL_TOKEN="InvalidNativeSellToken",e.SAME_BUY_AND_SELL_TOKEN="SameBuyAndSellToken",e.UNSUPPORTED_TOKEN="UnsupportedToken",e.INVALID_APP_DATA="InvalidAppData",e.APP_DATA_HASH_MISMATCH="AppDataHashMismatch",e.APPDATA_FROM_MISMATCH="AppdataFromMismatch"}(bt||(bt={})),function(t){t.BUY="buy"}(vt||(vt={})),function(t){t.SELL="sell"}(At||(At={})),function(t){t.PRESIGNATURE_PENDING="presignaturePending",t.OPEN="open",t.FULFILLED="fulfilled",t.CANCELLED="cancelled",t.EXPIRED="expired"}(wt||(wt={})),function(t){var e;(e=t.errorType||(t.errorType={})).QUOTE_NOT_VERIFIED="QuoteNotVerified",e.UNSUPPORTED_TOKEN="UnsupportedToken",e.ZERO_AMOUNT="ZeroAmount",e.UNSUPPORTED_ORDER_TYPE="UnsupportedOrderType"}(Et||(Et={})),function(t){t.FAST="fast",t.OPTIMAL="optimal",t.VERIFIED="verified"}(Tt||(Tt={})),function(t){t.ERC20="erc20",t.INTERNAL="internal",t.EXTERNAL="external"}(It||(It={})),function(t){t.EIP712="eip712",t.ETHSIGN="ethsign",t.PRESIGN="presign",t.EIP1271="eip1271"}(Nt||(Nt={}));const Mt=BigInt(1e4);function kt(t){var e;const{orderParams:r,sellDecimals:n,buyDecimals:i,slippagePercentBps:o}=t,s=null!==(e=t.partnerFeeBps)&&void 0!==e?e:0,a=r.kind===gt.SELL,u=_t(r.feeAmount,n),l=_t(r.sellAmount,n),h=_t(r.buyAmount,i),c=h.num/l.num,f=_t(l.big+u.big,n),d=_t(c*f.num,i),p=s>0?(a?d.big:l.big)*BigInt(s)/Mt:BigInt(0),m=a?{sellAmount:f.big,buyAmount:h.big-p}:{sellAmount:f.big+p,buyAmount:h.big},y=t=>t*BigInt(o)/Mt,g=a?{sellAmount:m.sellAmount,buyAmount:m.buyAmount-y(m.buyAmount)}:{sellAmount:m.sellAmount+y(m.sellAmount),buyAmount:m.buyAmount};return{isSell:a,costs:{networkFee:{amountInSellCurrency:u.big,amountInBuyCurrency:_t(c*u.num,i).big},partnerFee:{amount:p,bps:s}},beforeNetworkCosts:{sellAmount:l.big,buyAmount:d.big},afterNetworkCosts:{sellAmount:f.big,buyAmount:h.big},afterPartnerFees:m,afterSlippage:g}}function _t(t,e){if("number"==typeof t){const r=t*10**e,n=r.toFixed();return{big:BigInt(n.includes("e")?r:n),num:t}}const r=BigInt(t);return{big:r,num:Number(r)/10**e}}let St,Ct,Ot,xt=t=>t;const Rt=r(St||(St=xt` query Totals { totals { tokens orders traders settlements volumeUsd volumeEth feesUsd feesEth } } `)),Pt=r(Ct||(Ct=xt` query LastDaysVolume($days: Int!) { dailyTotals(orderBy: timestamp, orderDirection: desc, first: $days) { timestamp volumeUsd } } `)),Bt=r(Ot||(Ot=xt` query LastHoursVolume($hours: Int!) { hourlyTotals(orderBy: timestamp, orderDirection: desc, first: $hours) { timestamp volumeUsd } } `)),Dt="https://api.thegraph.com/subgraphs/name/cowprotocol",Lt={[k.MAINNET]:Dt+"/cow",[k.GNOSIS_CHAIN]:Dt+"/cow-gc",[k.ARBITRUM_ONE]:null,[k.BASE]:null,[k.SEPOLIA]:null},Ft={[k.MAINNET]:Dt+"/cow-staging",[k.GNOSIS_CHAIN]:Dt+"/cow-gc-staging",[k.ARBITRUM_ONE]:null,[k.BASE]:null,[k.SEPOLIA]:null};class Ut{constructor(t={}){this.API_NAME="CoW Protocol Subgraph",this.context=void 0,this.context=P({},S,t)}async getTotals(t={}){return(await this.runQuery(Rt,void 0,t)).totals[0]}async getLastDaysVolume(t,e={}){return this.runQuery(Pt,{days:t},e)}async getLastHoursVolume(t,e={}){return this.runQuery(Bt,{hours:t},e)}async runQuery(t,e=undefined,r={}){const{chainId:i,env:o}=this.getContextWithOverride(r),s=this.getEnvConfigs(o)[i];if(null===s)throw new Error("Unsupported Network. The subgraph API is not available in the Network "+i);try{return await n(s,t,e)}catch(r){throw console.error(`[subgraph:${this.API_NAME}]`,r),new C(`Error running query: ${t}. Variables: ${JSON.stringify(e)}. API: ${s}. Inner Error: ${r}`)}}getContextWithOverride(t={}){return P({},this.context,t)}getEnvConfigs(t){return this.context.baseUrls?this.context.baseUrls:"prod"===t?Lt:Ft}}const qt=()=>import("./utils-6c0b6c4e.js");class Gt{static async signOrder(t,e,r){const{signOrder:n}=await qt();return n(t,e,r)}static async signOrderCancellation(t,e,r){const{signOrderCancellation:n}=await qt();return n(t,e,r)}static async signOrderCancellations(t,e,r){const{signOrderCancellations:n}=await qt();return n(t,e,r)}static async getDomain(t){const{getDomain:e}=await qt();return e(t)}static async generateOrderId(t,e,r){const{generateOrderId:n}=await qt();return n(t,e,r)}static async getDomainSeparator(t){const{getDomain:e}=await qt(),{_TypedDataEncoder:r}=await import("ethers/lib/utils");return r.hashDomain(e(t))}static getEIP712Types(){return{Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}}}var Ht,zt;!function(t){t[t.PRIVATE=0]="PRIVATE",t[t.EMITTED=1]="EMITTED",t[t.SWARM=2]="SWARM",t[t.WAKU=3]="WAKU",t[t.RESERVED=4]="RESERVED",t[t.IPFS=5]="IPFS"}(Ht||(Ht={})),function(t){t.SUCCESS="SUCCESS",t.UNEXPECTED_ERROR="UNEXPECTED_ERROR",t.TRY_NEXT_BLOCK="TRY_NEXT_BLOCK",t.TRY_ON_BLOCK="TRY_ON_BLOCK",t.TRY_AT_EPOCH="TRY_AT_EPOCH",t.DONT_TRY_AGAIN="DONT_TRY_AGAIN"}(zt||(zt={}));const Qt=[{inputs:[],name:"AlreadyInitialized",type:"error"},{inputs:[],name:"DeadlineElapsed",type:"error"},{inputs:[],name:"InvalidSignature",type:"error"},{inputs:[],name:"InvalidSignature",type:"error"},{inputs:[],name:"NonceAlreadyUsed",type:"error"},{inputs:[],name:"OnlyAdmin",type:"error"},{inputs:[],name:"OnlyAdminOrTrustedExecutorOrSelf",type:"error"},{inputs:[],name:"OnlySelf",type:"error"},{inputs:[],name:"OnlyTrustedExecutor",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"r",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"s",type:"bytes32"},{indexed:!1,internalType:"uint8",name:"v",type:"uint8"}],name:"RSV",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"previousExecutor",type:"address"},{indexed:!1,internalType:"address",name:"newExecutor",type:"address"}],name:"TrustedExecutorChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{inputs:[{internalType:"address",name:"resolver",type:"address"}],name:"claimWithResolver",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"domainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bytes",name:"callData",type:"bytes"},{internalType:"bool",name:"allowFailure",type:"bool"},{internalType:"bool",name:"isDelegateCall",type:"bool"}],internalType:"struct Call[]",name:"calls",type:"tuple[]"},{internalType:"bytes32",name:"nonce",type:"bytes32"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"executeHooks",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"factory",type:"address"},{internalType:"bool",name:"claimResolver",type:"bool"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"nonce",type:"bytes32"}],name:"nonces",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"nonce",type:"bytes32"}],name:"revokeNonce",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bytes",name:"callData",type:"bytes"},{internalType:"bool",name:"allowFailure",type:"bool"},{internalType:"bool",name:"isDelegateCall",type:"bool"}],internalType:"struct Call[]",name:"calls",type:"tuple[]"}],name:"trustedExecuteHooks",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"trustedExecutor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"}],name:"updateImplementation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"who",type:"address"}],name:"updateTrustedExecutor",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];class Kt{static createInterface(){return new i.Interface(Qt)}static connect(t,e){return new o(t,Qt,e)}}Kt.abi=Qt;const Jt=[{inputs:[{internalType:"address",name:"impl",type:"address"},{internalType:"bytes32",name:"bName",type:"bytes32"},{internalType:"bytes32",name:"bNode",type:"bytes32"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"InvalidSignature",type:"error"},{inputs:[],name:"NonceAlreadyUsed",type:"error"},{inputs:[],name:"SettingEnsRecordsFailed",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"shed",type:"address"}],name:"COWShedBuilt",type:"event"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"addr",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"baseName",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"baseNode",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bytes",name:"callData",type:"bytes"},{internalType:"bool",name:"allowFailure",type:"bool"},{internalType:"bool",name:"isDelegateCall",type:"bool"}],internalType:"struct Call[]",name:"calls",type:"tuple[]"},{internalType:"bytes32",name:"nonce",type:"bytes32"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"address",name:"user",type:"address"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"executeHooks",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"forwardResolutionNodeToAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"implementation",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"initializeEns",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"bool",name:"withEns",type:"bool"}],name:"initializeProxy",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"ownerOf",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"who",type:"address"}],name:"proxyOf",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"reverseResolutionNodeToAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"pure",type:"function"}];class Vt{static createInterface(){return new i.Interface(Jt)}static connect(t,e){return new o(t,Jt,e)}}Vt.abi=Jt;const jt=[{inputs:[{internalType:"address",name:"_settlement",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"InterfaceNotSupported",type:"error"},{inputs:[],name:"InvalidHandler",type:"error"},{inputs:[],name:"ProofNotAuthed",type:"error"},{inputs:[],name:"SingleOrderNotAuthed",type:"error"},{inputs:[],name:"SwapGuardRestricted",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{components:[{internalType:"contract IConditionalOrder",name:"handler",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"},{internalType:"bytes",name:"staticInput",type:"bytes"}],indexed:!1,internalType:"struct IConditionalOrder.ConditionalOrderParams",name:"params",type:"tuple"}],name:"ConditionalOrderCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"bytes32",name:"root",type:"bytes32"},{components:[{internalType:"uint256",name:"location",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],indexed:!1,internalType:"struct ComposableCoW.Proof",name:"proof",type:"tuple"}],name:"MerkleRootSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"contract ISwapGuard",name:"swapGuard",type:"address"}],name:"SwapGuardSet",type:"event"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"bytes32",name:"",type:"bytes32"}],name:"cabinet",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"contract IConditionalOrder",name:"handler",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"},{internalType:"bytes",name:"staticInput",type:"bytes"}],internalType:"struct IConditionalOrder.ConditionalOrderParams",name:"params",type:"tuple"},{internalType:"bool",name:"dispatch",type:"bool"}],name:"create",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"contract IConditionalOrder",name:"handler",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"},{internalType:"bytes",name:"staticInput",type:"bytes"}],internalType:"struct IConditionalOrder.ConditionalOrderParams",name:"params",type:"tuple"},{internalType:"contract IValueFactory",name:"factory",type:"address"},{internalType:"bytes",name:"data",type:"bytes"},{internalType:"bool",name:"dispatch",type:"bool"}],name:"createWithContext",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"domainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{components:[{internalType:"contract IConditionalOrder",name:"handler",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"},{internalType:"bytes",name:"staticInput",type:"bytes"}],internalType:"struct IConditionalOrder.ConditionalOrderParams",name:"params",type:"tuple"},{internalType:"bytes",name:"offchainInput",type:"bytes"},{internalType:"bytes32[]",name:"proof",type:"bytes32[]"}],name:"getTradeableOrderWithSignature",outputs:[{components:[{internalType:"contract IERC20",name:"sellToken",type:"address"},{internalType:"contract IERC20",name:"buyToken",type:"address"},{internalType:"address",name:"receiver",type:"address"},{internalType:"uint256",name:"sellAmount",type:"uint256"},{internalType:"uint256",name:"buyAmount",type:"uint256"},{internalType:"uint32",name:"validTo",type:"uint32"},{internalType:"bytes32",name:"appData",type:"bytes32"},{internalType:"uint256",name:"feeAmount",type:"uint256"},{internalType:"bytes32",name:"kind",type:"bytes32"},{internalType:"bool",name:"partiallyFillable",type:"bool"},{internalType:"bytes32",name:"sellTokenBalance",type:"bytes32"},{internalType:"bytes32",name:"buyTokenBalance",type:"bytes32"}],internalType:"struct GPv2Order.Data",name:"order",type:"tuple"},{internalType:"bytes",name:"signature",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"contract IConditionalOrder",name:"handler",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"},{internalType:"bytes",name:"staticInput",type:"bytes"}],internalType:"struct IConditionalOrder.ConditionalOrderParams",name:"params",type:"tuple"}],name:"hash",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"contract Safe",name:"safe",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"bytes32",name:"_hash",type:"bytes32"},{internalType:"bytes32",name:"_domainSeparator",type:"bytes32"},{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"bytes",name:"encodeData",type:"bytes"},{internalType:"bytes",name:"payload",type:"bytes"}],name:"isValidSafeSignature",outputs:[{internalType:"bytes4",name:"magic",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"singleOrderHash",type:"bytes32"}],name:"remove",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"roots",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"root",type:"bytes32"},{components:[{internalType:"uint256",name:"location",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],internalType:"struct ComposableCoW.Proof",name:"proof",type:"tuple"}],name:"setRoot",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"root",type:"bytes32"},{components:[{internalType:"uint256",name:"location",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],internalType:"struct ComposableCoW.Proof",name:"proof",type:"tuple"},{internalType:"contract IValueFactory",name:"factory",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"setRootWithContext",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ISwapGuard",name:"swapGuard",type:"address"}],name:"setSwapGuard",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"bytes32",name:"",type:"bytes32"}],name:"singleOrders",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"swapGuards",outputs:[{internalType:"contract ISwapGuard",name:"",type:"address"}],stateMutability:"view",type:"function"}];class Yt{static createInterface(){return new i.Interface(jt)}static connect(t,e){return new o(t,jt,e)}}Yt.abi=jt;const Wt=[{inputs:[{components:[{internalType:"contract IERC20",name:"buyToken",type:"address"},{internalType:"address",name:"receiver",type:"address"},{internalType:"uint256",name:"sellAmount",type:"uint256"},{internalType:"uint256",name:"buyAmount",type:"uint256"},{internalType:"bytes32",name:"appData",type:"bytes32"},{internalType:"uint256",name:"feeAmount",type:"uint256"},{internalType:"uint32",name:"validTo",type:"uint32"},{internalType:"bool",name:"partiallyFillable",type:"bool"},{internalType:"int64",name:"quoteId",type:"int64"}],internalType:"struct EthFlowOrder.Data",name:"order",type:"tuple"}],name:"createOrder",outputs:[{internalType:"bytes32",name:"orderHash",type:"bytes32"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"contract IERC20",name:"buyToken",type:"address"},{internalType:"address",name:"receiver",type:"address"},{internalType:"uint256",name:"sellAmount",type:"uint256"},{internalType:"uint256",name:"buyAmount",type:"uint256"},{internalType:"bytes32",name:"appData",type:"bytes32"},{internalType:"uint256",name:"feeAmount",type:"uint256"},{internalType:"uint32",name:"validTo",type:"uint32"},{internalType:"bool",name:"partiallyFillable",type:"bool"},{internalType:"int64",name:"quoteId",type:"int64"}],internalType:"struct EthFlowOrder.Data",name:"order",type:"tuple"}],name:"invalidateOrder",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"orders",outputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"uint32",name:"validTo",type:"uint32"}],stateMutability:"view",type:"function"}];class Xt{static createInterface(){return new i.Interface(Wt)}static connect(t,e){return new o(t,Wt,e)}}Xt.abi=Wt;const Zt=[{anonymous:!1,inputs:[{indexed:!0,internalType:"contract Safe",name:"safe",type:"address"},{indexed:!1,internalType:"bytes32",name:"domainSeparator",type:"bytes32"},{indexed:!1,internalType:"contract ISafeSignatureVerifier",name:"verifier",type:"address"}],name:"AddedDomainVerifier",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract Safe",name:"safe",type:"address"},{indexed:!1,internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"AddedInterface",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract Safe",name:"safe",type:"address"},{indexed:!1,internalType:"bytes4",name:"selector",type:"bytes4"},{indexed:!1,internalType:"bytes32",name:"method",type:"bytes32"}],name:"AddedSafeMethod",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract Safe",name:"safe",type:"address"},{indexed:!1,internalType:"bytes32",name:"domainSeparator",type:"bytes32"},{indexed:!1,internalType:"contract ISafeSignatureVerifier",name:"oldVerifier",type:"address"},{indexed:!1,internalType:"contract ISafeSignatureVerifier",name:"newVerifier",type:"address"}],name:"ChangedDomainVerifier",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract Safe",name:"safe",type:"address"},{indexed:!1,internalType:"bytes4",name:"selector",type:"bytes4"},{indexed:!1,internalType:"bytes32",name:"oldMethod",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"newMethod",type:"bytes32"}],name:"ChangedSafeMethod",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract Safe",name:"safe",type:"address"},{indexed:!1,internalType:"bytes32",name:"domainSeparator",type:"bytes32"}],name:"RemovedDomainVerifier",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract Safe",name:"safe",type:"address"},{indexed:!1,internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"RemovedInterface",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract Safe",name:"safe",type:"address"},{indexed:!1,internalType:"bytes4",name:"selector",type:"bytes4"}],name:"RemovedSafeMethod",type:"event"},{stateMutability:"nonpayable",type:"fallback"},{inputs:[{internalType:"contract Safe",name:"",type:"address"},{internalType:"bytes32",name:"",type:"bytes32"}],name:"domainVerifiers",outputs:[{internalType:"contract ISafeSignatureVerifier",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"_hash",type:"bytes32"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"isValidSignature",outputs:[{internalType:"bytes4",name:"magic",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC1155BatchReceived",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC1155Received",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC721Received",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"contract Safe",name:"",type:"address"},{internalType:"bytes4",name:"",type:"bytes4"}],name:"safeInterfaces",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Safe",name:"",type:"address"},{internalType:"bytes4",name:"",type:"bytes4"}],name:"safeMethods",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"domainSeparator",type:"bytes32"},{internalType:"contract ISafeSignatureVerifier",name:"newVerifier",type:"address"}],name:"setDomainVerifier",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"},{internalType:"bytes32",name:"newMethod",type:"bytes32"}],name:"setSafeMethod",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"},{internalType:"bool",name:"supported",type:"bool"}],name:"setSupportedInterface",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"_interfaceId",type:"bytes4"},{internalType:"bytes32[]",name:"handlerWithSelectors",type:"bytes32[]"}],name:"setSupportedInterfaceBatch",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"}];class $t{static createInterface(){return new i.Interface(Zt)}static connect(t,e){return new o(t,Zt,e)}}$t.abi=Zt;const te=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"contract IERC20",name:"sellToken",type:"address"},{indexed:!1,internalType:"contract IERC20",name:"buyToken",type:"address"},{indexed:!1,internalType:"uint256",name:"sellAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"buyAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"feeAmount",type:"uint256"},{indexed:!1,internalType:"bytes",name:"orderUid",type:"bytes"}],name:"Trade",type:"event"},{inputs:[{internalType:"bytes",name:"orderUid",type:"bytes"},{internalType:"bool",name:"signed",type:"bool"}],name:"setPreSignature",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"orderUid",type:"bytes"}],name:"invalidateOrder",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"domainSeparator",outputs:[{name:"",type:"bytes32"}],stateMutability:"nonpayable",type:"function"}];class ee{static createInterface(){return new i.Interface(te)}static connect(t,e){return new o(t,te,e)}}ee.abi=te;const re=["erc20","0x5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9"],ne=["external","0xabee3b73373acd583a130924aad6dc38cfdc44ba0555ba94ce2ff63980ea0632"],ie=["internal","0x4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce"],oe=["sell","0xf3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775"],se=["buy","0x6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc"],ae=["tuple(address handler, bytes32 salt, bytes staticInput)"],ue=(t,e)=>`${e}@${t}`;function le(t,e){return t===J[e]}function he(t,e){return t===V[e]}async function ce(t,e,r,n){const i=$t.connect(J[r],n);return await i.callStatic.domainVerifiers(t,e)}function fe(t,e){return $t.createInterface().encodeFunctionData("setDomainVerifier",[t,e])}function de(t){return i.defaultAbiCoder.encode(ae,[t])}function pe(t){const{handler:e,salt:r,staticInput:n}=i.defaultAbiCoder.decode(ae,t)[0];return{handler:e,salt:r,staticInput:n}}function me(t,e){try{i.defaultAbiCoder.encode(t,e)}catch(t){return!1}return!0}async function ye(t){const e=await t.getBlock("latest");return{blockNumber:e.number,blockTimestamp:e.timestamp}}function ge(t){return new Date(1e3*t).toISOString()}function be(t){if(re.includes(t))return l.ERC20;if(ne.includes(t))return l.EXTERNAL;if(ie.includes(t))return l.INTERNAL;throw new Error(`Unknown balance type: ${t}`)}function ve(t){if(oe.includes(t))return h.SELL;if(se.includes(t))return h.BUY;throw new Error(`Unknown kind: ${t}`)}function Ae(t){const{sellToken:e,sellAmount:r,buyToken:n,buyAmount:i,buyTokenBalance:o,sellTokenBalance:s,feeAmount:a,kind:u,receiver:l,validTo:h,partiallyFillable:c,appData:f}=t;return{sellToken:e,sellAmount:r,buyToken:n,buyAmount:i,feeAmount:a,receiver:l,partiallyFillable:c,appData:f,validTo:Number(h),kind:ve(u.toString()),sellTokenBalance:be(s.toString()),buyTokenBalance:be(o.toString())}}function we(t){return t.isValid}let Ee,Te;function Ie(){return Ee||(Ee=Yt.createInterface()),Ee}function Ne(t,e){return Te||(Te=Yt.connect(V[t],e)),Te}class Me{constructor(t){this.handler=void 0,this.salt=void 0,this.data=void 0,this.staticInput=void 0,this.hasOffChainInput=void 0;const{handler:e,salt:r=i.keccak256(i.randomBytes(32)),data:n,hasOffChainInput:o=!1}=t;if(!s.utils.isAddress(e))throw new Error(`Invalid handler: ${e}`);if(!s.utils.isHexString(r)||32!==s.utils.hexDataLength(r))throw new Error(`Invalid salt: ${r}`);this.handler=e,this.salt=r,this.data=n,this.staticInput=this.transformDataToStruct(n),this.hasOffChainInput=o}get context(){}assertIsValid(){const t=this.isValid();if(!we(t))throw new Error(`Invalid order: ${t.reason}`)}get createCalldata(){this.assertIsValid();const t=this.context,e=Ie(),r={handler:this.handler,salt:this.salt,staticInput:this.encodeStaticInput()};if(t){const n=t.factoryArgs?i.defaultAbiCoder.encode(t.factoryArgs.argsType,t.factoryArgs.args):"0x";return e.encodeFunctionData("createWithContext",[r,t.address,n,!0])}return e.encodeFunctionData("create",[r,!0])}get removeCalldata(){return this.assertIsValid(),Ie().encodeFunctionData("remove",[this.id])}get id(){return i.keccak256(this.serialize())}get ctx(){return this.isSingleOrder?this.id:a.HashZero}get leaf(){return{handler:this.handler,salt:this.salt,staticInput:this.encodeStaticInput()}}static leafToId(t){return i.keccak256(de(t))}get offChainInput(){return"0x"}encodeStaticInputHelper(t,e){return i.defaultAbiCoder.encode(t,[e])}async poll(t){const{chainId:e,owner:r,provider:n,orderBookApi:i}=t,o=Ne(e,n);try{const n=this.isValid();if(!we(n))return{result:zt.DONT_TRY_AGAIN,reason:`InvalidConditionalOrder. Reason: ${n.reason}`};const s=await this.pollValidate(t);if(s)return s;if(!await this.isAuthorized(t))return{result:zt.DONT_TRY_AGAIN,reason:`NotAuthorized: Order ${this.id} is not authorized for ${r} on chain ${e}`};const[a,u]=await o.getTradeableOrderWithSignature(r,this.leaf,this.offChainInput,[]),l=await async function(t,e,r){const{computeOrderUid:n}=await import("@cowprotocol/contracts");return n(await Gt.getDomain(t),r,e)}(e,r,Ae(a));return await i.getOrder(l).then(()=>!0).catch(()=>!1)?await this.handlePollFailedAlreadyPresent(l,a,t)||{result:zt.TRY_NEXT_BLOCK,reason:"Order already in orderbook"}:{result:zt.SUCCESS,order:a,signature:u}}catch(t){return{result:zt.UNEXPECTED_ERROR,error:t}}}isAuthorized(t){const{chainId:e,owner:r,provider:n}=t;return Ne(e,n).callStatic.singleOrders(r,this.id)}cabinet(t){const{chainId:e,owner:r,provider:n}=t;return Ne(e,n).callStatic.cabinet(r,this.ctx)}static deserializeHelper(t,e,r,n){try{const{handler:o,salt:s,staticInput:a}=pe(t);if(o!=e)throw new Error("HandlerMismatch");const[u]=i.defaultAbiCoder.decode(r,a);return n(u,s)}catch(t){throw"HandlerMismatch"===t.message?t:new Error("InvalidSerializedConditionalOrder")}}}const ke=["orderType"],_e=["address","bytes32","bytes"],Se=["tuple(bytes32[] proof, tuple(address handler, bytes32 salt, bytes staticInput) params)[]"];class Ce{constructor(t,e,r,n=Ht.PRIVATE){if(this.chain=void 0,this.location=void 0,this.orders={},this.tree=void 0,this.ctx=void 0,this.chain=t,this.location=n,e&&0===Object.keys(e).length)throw new Error("orders must have non-zero length");if(e&&!r||!e&&r)throw new Error("orders cannot have undefined root");for(const t in e)if(e.hasOwnProperty(t)){const r=e[t];if(!Ce.orderTypeRegistry.hasOwnProperty(r.orderType))throw new Error(`Unknown order type: ${r.orderType}`)}if(e&&(this.orders=e,this.getOrGenerateTree().root!==r))throw new Error("root mismatch")}static fromJSON(t){const{chain:e,orders:r,root:n,location:i}=JSON.parse(t,(t,e)=>{if("orders"===t&&"object"==typeof e&&null!==e){const t={};for(const r in e)if(e.hasOwnProperty(r)){const n=e[r],{orderType:i}=n,o=B(n,ke);if(!Ce.orderTypeRegistry.hasOwnProperty(i))throw new Error(`Unknown order type: ${i}`);t[r]=new(0,Ce.orderTypeRegistry[i])(o)}return t}return"object"==typeof e&&null!==e&&e.hasOwnProperty("type")&&e.hasOwnProperty("hex")&&"BigNumber"===e.type?u.from(e):e}),o=new Ce(e,r,n);return o.location=i,o}toJSON(){const t=this.getOrGenerateTree().root;return JSON.stringify(P({},this,{root:t}),(t,e)=>{if("tree"!==t)return"object"==typeof e&&null!==e&&"orderType"in e?P({},e,{orderType:e.orderType}):e})}add(t){t.assertIsValid(),this.orders[t.id]=t,this.reset()}remove(t){delete this.orders[t],this.reset()}update(t,e){const r=e(this.orders[t],this.ctx);delete this.orders[t],this.orders[r.id]=r,this.reset()}getById(t){return this.orders[t]}getByIndex(t){return this.orders[this.orderIds[t]]}get orderIds(){return Object.keys(this.orders)}get root(){return this.getOrGenerateTree().root}getOrGenerateTree(){return this.tree||(this.tree=m.of(Object.values(this.orders).map(t=>[...Object.values(t.leaf)]),_e)),this.tree}static decodeFromJSON(t){return JSON.parse(t)}async prepareProofStruct(t=this.location,e,r){var n=this;return await async function(){switch(t){case Ht.PRIVATE:return"0x";case Ht.EMITTED:return n.encodeToABI(e);case Ht.SWARM:case Ht.WAKU:case Ht.IPFS:if(!r)throw new Error("Must provide an uploader function");try{return await r(n.encodeToJSON(e))}catch(e){throw new Error(`Error uploading to decentralized storage ${t}: ${e}`)}default:throw new Error("Unsupported location")}}().then(e=>{try{return i.hexlify(i.arrayify(e)),this.location=t,{location:t,data:e}}catch(t){throw new Error("data returned by uploader is invalid")}}).catch(t=>{throw new Error(`Error preparing proof struct: ${t}`)})}static async poll(t,e,r,n,i){const o=Ne(r,n),s=i?await i(t,e.params):"0x";return await o.getTradeableOrderWithSignature(t,e.params,s,e.proof)}dumpProofs(t){return this.encodeToJSON(t)}dumpProofsAndParams(t){return this.getProofs(t)}getProofs(t){return[...this.getOrGenerateTree().entries()].map(([e,r])=>t&&t(r)||void 0===t?{idx:e,value:r}:void 0).reduce((t,e)=>{if(e){const r={handler:e.value[0],salt:e.value[1],staticInput:e.value[2]};t.push({proof:this.getOrGenerateTree().getProof(e.idx),params:r})}return t},[])}encodeToABI(t){return i.defaultAbiCoder.encode(Se,[this.getProofs(t)])}encodeToJSON(t){return JSON.stringify(this.getProofs(t))}reset(){this.tree=void 0}static registerOrderType(t,e){Ce.orderTypeRegistry[t]=e}static resetOrderTypeRegistry(){Ce.orderTypeRegistry={}}}Ce.orderTypeRegistry={};class Oe{constructor(t){this.knownOrderTypes=void 0,this.knownOrderTypes=Object.entries(t).reduce((t,[e,r])=>(t[e.toLowerCase()]=r,t),{})}fromParams(t){const{handler:e}=t,r=this.knownOrderTypes[e.toLocaleLowerCase()];if(r)return r(t)}}const xe=["sellAmount","buyAmount","numberOfParts","startTime","timeBetweenParts","durationOfPart"],Re="0x6cF1e9cA41f7611dEf408122793c358a3d11E5a5",Pe="0x52eD56Da04309Aca4c3FECC595298d80C2f16BAc",Be=u.from(2).pow(32).sub(1),De=u.from(31536e3),Le=["tuple(address sellToken, address buyToken, address receiver, uint256 partSellAmount, uint256 minPartLimit, uint256 t0, uint256 n, uint256 t, uint256 span, bytes32 appData)"];var Fe,Ue;!function(t){t.AUTO="AUTO",t.LIMIT_DURATION="LIMIT_DURATION"}(Fe||(Fe={})),function(t){t.AT_MINING_TIME="AT_MINING_TIME",t.AT_EPOCH="AT_EPOCH"}(Ue||(Ue={}));const qe={startType:Ue.AT_MINING_TIME},Ge={durationType:Fe.AUTO};class He extends Me{constructor(t){const{handler:e,salt:r,data:n,hasOffChainInput:i}=t;if(e!==Re)throw new Error(`InvalidHandler: Expected: ${Re}, provided: ${e}`);super({handler:Re,salt:r,data:n,hasOffChainInput:i}),this.isSingleOrder=!0}static fromData(t,e){return new He({handler:Re,data:t,salt:e})}static fromParams(t){return He.deserialize(de(t))}get context(){return this.staticInput.t0.gt(0)?super.context:{address:Pe,factoryArgs:void 0}}get orderType(){return"twap"}isValid(){const t=(()=>{const{sellToken:t,sellAmount:e,buyToken:r,buyAmount:n,startTime:i=qe,numberOfParts:o,timeBetweenParts:s,durationOfPart:u=Ge}=this.data;if(t==r)return"InvalidSameToken";if(t==a.AddressZero||r==a.AddressZero)return"InvalidToken";if(!e.gt(a.Zero))return"InvalidSellAmount";if(!n.gt(a.Zero))return"InvalidMinBuyAmount";if(i.startType===Ue.AT_EPOCH){const t=i.epoch;if(!t.gte(a.Zero)||!t.lt(Be))return"InvalidStartTime"}return o.gt(a.One)&&o.lte(Be)?s.gt(a.Zero)&&s.lte(De)?u.durationType!==Fe.LIMIT_DURATION||u.duration.lte(s)?me(Le,[this.staticInput])?void 0:"InvalidData":"InvalidSpan":"InvalidFrequency":"InvalidNumParts"})();return t?{isValid:!1,reason:t}:{isValid:!0}}async startTimestamp(t){const{startTime:e}=this.data;if((null==e?void 0:e.startType)===Ue.AT_EPOCH)return e.epoch.toNumber();const r=await this.cabinet(t),n=i.defaultAbiCoder.decode(["uint256"],r)[0];if(n.gt(Be))throw new Error(`Cabinet epoch out of range: ${n.toString()}`);const o=n.toNumber();if(0===o)throw new Error("Cabinet is not set. Required for TWAP orders that start at mining time.");return o}endTimestamp(t){const{numberOfParts:e,timeBetweenParts:r,durationOfPart:n}=this.data;return n&&n.durationType===Fe.LIMIT_DURATION?t+e.sub(1).mul(r).add(n.duration).toNumber():t+e.mul(r).toNumber()}async pollValidate(t){const{blockInfo:e=await ye(t.provider)}=t,{blockTimestamp:r}=e;try{const e=await this.startTimestamp(t);if(e>r)return{result:zt.TRY_AT_EPOCH,epoch:e,reason:`TWAP hasn't started yet. Starts at ${e} (${ge(e)})`};const n=this.endTimestamp(e);return r>=n?{result:zt.DONT_TRY_AGAIN,reason:`TWAP has expired. Expired at ${n} (${ge(n)})`}:void 0}catch(t){var n,i;return null!=t&&null!=(n=t.message)&&n.includes("Cabinet is not set")?{result:zt.DONT_TRY_AGAIN,reason:`${null==t?void 0:t.message}. User likely removed the order.`}:null!=t&&null!=(i=t.message)&&i.includes("Cabinet epoch out of range")?{result:zt.DONT_TRY_AGAIN,reason:`${null==t?void 0:t.message}`}:{result:zt.UNEXPECTED_ERROR,reason:`Unexpected error: ${t.message}`,error:t}}}async handlePollFailedAlreadyPresent(t,e,r){const{blockInfo:n=await ye(r.provider)}=r,{blockTimestamp:i}=n,o=this.data.timeBetweenParts.toNumber(),{numberOfParts:s}=this.data,a=await this.startTimestamp(r);if(i<a)return{result:zt.UNEXPECTED_ERROR,reason:`TWAP part hash't started. First TWAP part start at ${a} (${ge(a)})`,error:void 0};const u=s.mul(o).add(a).toNumber();if(i>=u)return{result:zt.UNEXPECTED_ERROR,reason:`TWAP is expired. Expired at ${u} (${ge(u)})`,error:void 0};const l=Math.floor((i-a)/o);if(l===s.toNumber()-1)return{result:zt.DONT_TRY_AGAIN,reason:`Current active TWAP part (${l+1}/${s}) is already in the Order Book. This was the last TWAP part, no more orders need to be placed`};const h=a+(l+1)*o;return{result:zt.TRY_AT_EPOCH,epoch:h,reason:`Current active TWAP part (${l+1}/${s}) is already in the Order Book. TWAP part ${l+2} doesn't start until ${h} (${ge(h)})`}}serialize(){return de(this.leaf)}encodeStaticInput(){return super.encodeStaticInputHelper(Le,this.staticInput)}static deserialize(t){return super.deserializeHelper(t,Re,Le,(t,e)=>new He({handler:Re,salt:e,data:Qe(t)}))}toString(){const{sellAmount:t,sellToken:e,buyAmount:r,buyToken:n,numberOfParts:i,startTime:o=qe,timeBetweenParts:s,durationOfPart:a=Ge,receiver:u,appData:l}=this.data,h=o.startType===Ue.AT_MINING_TIME?"AT_MINING_TIME":o.epoch.toNumber(),c=a.durationType===Fe.AUTO?"AUTO":a.duration.toNumber(),f={sellAmount:t.toString(),sellToken:e,buyAmount:r.toString(),buyToken:n,numberOfParts:i.toString(),startTime:h,timeBetweenParts:s.toNumber(),durationOfPart:c,receiver:u,appData:l};return`${this.orderType} (${this.id}): ${JSON.stringify(f)}`}transformDataToStruct(t){return ze(t)}transformStructToData(t){return Qe(t)}}function ze(t){const{sellAmount:e,buyAmount:r,numberOfParts:n,startTime:i=qe,timeBetweenParts:o,durationOfPart:s=Ge}=t,u=B(t,xe),{partSellAmount:l,minPartLimit:h}=n&&!n.isZero()?{partSellAmount:e.div(n),minPartLimit:r.div(n)}:{partSellAmount:a.Zero,minPartLimit:a.Zero};return P({partSellAmount:l,minPartLimit:h,t0:i.startType===Ue.AT_MINING_TIME?a.Zero:i.epoch,n,t:o,span:s.durationType===Fe.AUTO?a.Zero:s.duration},u)}function Qe(t){const{n:e,partSellAmount:r,minPartLimit:n,t:i,t0:o,span:s,sellToken:a,buyToken:u,receiver:l,appData:h}=t,c=s.isZero()?{durationType:Fe.AUTO}:{durationType:Fe.LIMIT_DURATION,duration:s},f=o.isZero()?{startType:Ue.AT_MINING_TIME}:{startType:Ue.AT_EPOCH,epoch:o};return{sellAmount:r.mul(e),buyAmount:n.mul(e),startTime:f,numberOfParts:e,timeBetweenParts:i,durationOfPart:c,sellToken:a,buyToken:u,receiver:l,appData:h}}const Ke={[Re]:t=>He.fromParams(t)},Je={EIP712Domain:[{typ