@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 • 287 kB
JavaScript
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,isTypedDataSigner as f,hashTypedData 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 v,joinSignature as b,splitSignature as A,arrayify as w,keccak256 as E,toUtf8Bytes as T}from"ethers/lib/utils";import{Signer as I}from"@ethersproject/abstract-signer";import{stringifyDeterministic as N,MetadataApi 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 P extends Error{constructor(t,e){super(t),this.error_code=void 0,this.error_code=e}}const C="cow-sdk:",x="https://gnosis.mypinata.cloud/ipfs",O="https://api.pinata.cloud",R="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",B="0x2f55e8b20D0B9FEFA187AA7d00B6Cbe563605bF5",D="0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74",L="0x00E989b87700514118Fa55326CD1cCE82faebEF6",U="0x2CFFA8cf11B90C9F437567b86352169dF4009F73",F=Object.values(k).filter(t=>"number"==typeof t);function q(t){return F.reduce((e,r)=>({...e,[r]:"function"==typeof t?t(r):t}),{})}function G(t){return q(t)}const H=G("0x9008D19f58AAbD9eD0D60971565AA8510560ab41"),z=G("0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"),j=G(B),Q=G(D),K={[k.MAINNET]:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",[k.GNOSIS_CHAIN]:"0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d",[k.ARBITRUM_ONE]:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",[k.SEPOLIA]:"0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",[k.BASE]:"0x4200000000000000000000000000000000000006"},V="0xba3cb449bd2b4adddbc894d8697f5170800eadec",J="0x04501b9b1d52e67f6862d157e00d13419d2d6e95",Y=G(V),W=G(J),X=4294967295,Z=function(t,{path:r,query:n,method:i,body:o},s,a){try{const u={Accept:"application/json","Content-Type":"application/json"},l=`${t}${r}${n?"?"+n:""}`,h={method:i,body:(()=>{if(o)return"string"==typeof o?o:JSON.stringify(o)})(),headers:u};return Promise.resolve(e(function(){try{return Promise.resolve(s.removeTokens(1)).then(function(){return Promise.resolve(fetch(l,h)).then(function(t){return Promise.resolve(nt(t)).then(function(e){return t.status>=200&&t.status<300?e:Promise.reject(new $(t,e))})})})}catch(t){return Promise.reject(t)}},a))}catch(t){return Promise.reject(t)}};class $ 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 tt=[408,425,429,500,502,503,504],et={numOfAttempts:10,maxDelay:Infinity,jitter:"none",retry:t=>!(t instanceof $)||tt.includes(t.response.status)},rt={tokensPerInterval:5,interval:"second"},nt=function(t){try{let e;const r=function(){if(204!==t.status)return function(r,n){try{var i=function(){const r=t.headers.get("Content-Type");return function(){if(r)return r.toLowerCase().startsWith("application/json")?Promise.resolve(t.json()).then(function(t){return e=1,t}):Promise.resolve(t.text()).then(function(t){return e=1,t})}()}()}catch(t){return n(t)}return i&&i.then?i.then(void 0,n):i}(0,function(t){console.error(t)})}();return Promise.resolve(r&&r.then?r.then(function(t){return e?t:void 0}):e?r:void 0)}catch(t){return Promise.reject(t)}};function it(t){return function(t){const{ethflowData:e}=t;if(!e)return t;const{userValidTo:r}=e,n=t.onchainUser||t.owner,i=R;return{...t,validTo:r,owner:n,sellToken:i}}(function(t){const{executedFeeAmount:e,executedFee:r}=t,n=BigInt(e||"0"),i=BigInt(r||"0"),o=String(n+i);return{...t,totalFee:o}}(t))}const ot={[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"},st={[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 at(t){return Object.keys(t).reduce((e,r)=>{const n=t[r];return void 0!==n&&(e[r]=n),e},{})}class ut{constructor(e={}){this.context=void 0,this.rateLimiter=void 0,this.context={...S,...e},this.rateLimiter=new t(e.limiterOpts||rt)}getVersion(t={}){return this.fetch({path:"/api/v1/version",method:"GET"},t)}getTrades(t,e={}){if(t.owner&&t.orderUid)return Promise.reject(new P("Cannot specify both owner and orderId"));if(!t.owner&&!t.orderUid)return Promise.reject(new P("Must specify either owner or orderId"));const r=new URLSearchParams(at(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(at({offset:e.toString(),limit:r.toString()}));return this.fetch({path:`/api/v1/account/${t}/orders`,method:"GET",query:i},n).then(t=>t.map(it))}getTxOrders(t,e={}){return this.fetch({path:`/api/v1/transactions/${t}/orders`,method:"GET"},e).then(t=>t.map(it))}getOrder(t,e={}){return this.fetch({path:`/api/v1/orders/${t}`,method:"GET"},e).then(t=>it(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 $&&404===r.response.status&&s?(i++,this.getOrder(t,{...e,env:s}).catch(o)):Promise.reject(r)};return this.getOrder(t,{...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{...this.context,...t}}getApiBaseUrls(t){return this.context.baseUrls?this.context.baseUrls:"prod"===t?ot:st}fetch(e,r={}){const{chainId:n,env:i,backoffOpts:o}=this.getContextWithOverride(r),s=this.getApiBaseUrls(i)[n],a=o||et,u=r.limiterOpts?new t(r.limiterOpts):this.rateLimiter;return Z(s,e,u,a)}}var lt,ht,ct,ft,dt,pt,mt,yt,gt,vt,bt,At,wt,Et,Tt;!function(t){t.ERC20="erc20",t.INTERNAL="internal"}(lt||(lt={})),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"}(ht||(ht={})),function(t){t.EIP712="eip712",t.ETHSIGN="ethsign"}(ct||(ct={})),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"}(ft||(ft={})),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"}(dt||(dt={})),function(t){t.MARKET="market",t.LIMIT="limit",t.LIQUIDITY="liquidity"}(pt||(pt={})),function(t){t.BUY="buy",t.SELL="sell"}(mt||(mt={})),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"}(yt||(yt={})),function(t){t.BUY="buy"}(gt||(gt={})),function(t){t.SELL="sell"}(vt||(vt={})),function(t){t.PRESIGNATURE_PENDING="presignaturePending",t.OPEN="open",t.FULFILLED="fulfilled",t.CANCELLED="cancelled",t.EXPIRED="expired"}(bt||(bt={})),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"}(At||(At={})),function(t){t.FAST="fast",t.OPTIMAL="optimal",t.VERIFIED="verified"}(wt||(wt={})),function(t){t.ERC20="erc20",t.INTERNAL="internal",t.EXTERNAL="external"}(Et||(Et={})),function(t){t.EIP712="eip712",t.ETHSIGN="ethsign",t.PRESIGN="presign",t.EIP1271="eip1271"}(Tt||(Tt={}));const It=BigInt(1e4);function Nt(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===mt.SELL,u=Mt(r.feeAmount,n),l=Mt(r.sellAmount,n),h=Mt(r.buyAmount,i),c=h.num/l.num,f=Mt(l.big+u.big,n),d=Mt(c*f.num,i),p=s>0?(a?d.big:l.big)*BigInt(s)/It:BigInt(0),m=a?{sellAmount:f.big,buyAmount:h.big-p}:{sellAmount:f.big+p,buyAmount:h.big},y=t=>t*BigInt(o)/It,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:Mt(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 Mt(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}}const kt=r`
query Totals {
totals {
tokens
orders
traders
settlements
volumeUsd
volumeEth
feesUsd
feesEth
}
}
`,_t=r`
query LastDaysVolume($days: Int!) {
dailyTotals(orderBy: timestamp, orderDirection: desc, first: $days) {
timestamp
volumeUsd
}
}
`,St=r`
query LastHoursVolume($hours: Int!) {
hourlyTotals(orderBy: timestamp, orderDirection: desc, first: $hours) {
timestamp
volumeUsd
}
}
`,Pt="https://api.thegraph.com/subgraphs/name/cowprotocol",Ct={[k.MAINNET]:Pt+"/cow",[k.GNOSIS_CHAIN]:Pt+"/cow-gc",[k.ARBITRUM_ONE]:null,[k.BASE]:null,[k.SEPOLIA]:null},xt={[k.MAINNET]:Pt+"/cow-staging",[k.GNOSIS_CHAIN]:Pt+"/cow-gc-staging",[k.ARBITRUM_ONE]:null,[k.BASE]:null,[k.SEPOLIA]:null};class Ot{constructor(t={}){this.API_NAME="CoW Protocol Subgraph",this.context=void 0,this.context={...S,...t}}getTotals(t={}){try{return Promise.resolve(this.runQuery(kt,void 0,t)).then(function(t){return t.totals[0]})}catch(t){return Promise.reject(t)}}getLastDaysVolume(t,e={}){try{return Promise.resolve(this.runQuery(_t,{days:t},e))}catch(t){return Promise.reject(t)}}getLastHoursVolume(t,e={}){try{return Promise.resolve(this.runQuery(St,{hours:t},e))}catch(t){return Promise.reject(t)}}runQuery(t,e=undefined,r={}){try{const i=this,{chainId:o,env:s}=i.getContextWithOverride(r),a=i.getEnvConfigs(s)[o];if(null===a)throw new Error("Unsupported Network. The subgraph API is not available in the Network "+o);return Promise.resolve(function(r,i){try{var o=Promise.resolve(n(a,t,e))}catch(t){return i(t)}return o&&o.then?o.then(void 0,i):o}(0,function(r){throw console.error(`[subgraph:${i.API_NAME}]`,r),new P(`Error running query: ${t}. Variables: ${JSON.stringify(e)}. API: ${a}. Inner Error: ${r}`)}))}catch(t){return Promise.reject(t)}}getContextWithOverride(t={}){return{...this.context,...t}}getEnvConfigs(t){return this.context.baseUrls?this.context.baseUrls:"prod"===t?Ct:xt}}const Rt=()=>import("./utils-fbaee37f.js");class Bt{static signOrder(t,e,r){try{return Promise.resolve(Rt()).then(function({signOrder:n}){return n(t,e,r)})}catch(t){return Promise.reject(t)}}static signOrderCancellation(t,e,r){try{return Promise.resolve(Rt()).then(function({signOrderCancellation:n}){return n(t,e,r)})}catch(t){return Promise.reject(t)}}static signOrderCancellations(t,e,r){try{return Promise.resolve(Rt()).then(function({signOrderCancellations:n}){return n(t,e,r)})}catch(t){return Promise.reject(t)}}static getDomain(t){try{return Promise.resolve(Rt()).then(function({getDomain:e}){return e(t)})}catch(t){return Promise.reject(t)}}static generateOrderId(t,e,r){try{return Promise.resolve(Rt()).then(function({generateOrderId:n}){return n(t,e,r)})}catch(t){return Promise.reject(t)}}static getDomainSeparator(t){try{return Promise.resolve(Rt()).then(function({getDomain:e}){return Promise.resolve(import("ethers/lib/utils")).then(function({_TypedDataEncoder:r}){return r.hashDomain(e(t))})})}catch(t){return Promise.reject(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 Dt,Lt;!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"}(Dt||(Dt={})),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"}(Lt||(Lt={}));const Ut=[{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 Ft{static createInterface(){return new i.Interface(Ut)}static connect(t,e){return new o(t,Ut,e)}}Ft.abi=Ut;const qt=[{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 Gt{static createInterface(){return new i.Interface(qt)}static connect(t,e){return new o(t,qt,e)}}Gt.abi=qt;const Ht=[{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 zt{static createInterface(){return new i.Interface(Ht)}static connect(t,e){return new o(t,Ht,e)}}zt.abi=Ht;const jt=[{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 Qt{static createInterface(){return new i.Interface(jt)}static connect(t,e){return new o(t,jt,e)}}Qt.abi=jt;const Kt=[{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 Vt{static createInterface(){return new i.Interface(Kt)}static connect(t,e){return new o(t,Kt,e)}}Vt.abi=Kt;const Jt=[{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 Yt{static createInterface(){return new i.Interface(Jt)}static connect(t,e){return new o(t,Jt,e)}}Yt.abi=Jt;const Wt=function(t){try{return Promise.resolve(t.getBlock("latest")).then(function(t){return{blockNumber:t.number,blockTimestamp:t.timestamp}})}catch(t){return Promise.reject(t)}},Xt=function(t,e,r,n){try{const i=Vt.connect(j[r],n);return Promise.resolve(i.callStatic.domainVerifiers(t,e))}catch(t){return Promise.reject(t)}},Zt=["erc20","0x5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9"],$t=["external","0xabee3b73373acd583a130924aad6dc38cfdc44ba0555ba94ce2ff63980ea0632"],te=["internal","0x4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce"],ee=["sell","0xf3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775"],re=["buy","0x6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc"],ne=["tuple(address handler, bytes32 salt, bytes staticInput)"],ie=(t,e)=>`${e}@${t}`;function oe(t,e){return t===j[e]}function se(t,e){return t===Q[e]}function ae(t,e){return Vt.createInterface().encodeFunctionData("setDomainVerifier",[t,e])}function ue(t){return i.defaultAbiCoder.encode(ne,[t])}function le(t){const{handler:e,salt:r,staticInput:n}=i.defaultAbiCoder.decode(ne,t)[0];return{handler:e,salt:r,staticInput:n}}function he(t,e){try{i.defaultAbiCoder.encode(t,e)}catch(t){return!1}return!0}function ce(t){return new Date(1e3*t).toISOString()}function fe(t){if(Zt.includes(t))return l.ERC20;if($t.includes(t))return l.EXTERNAL;if(te.includes(t))return l.INTERNAL;throw new Error(`Unknown balance type: ${t}`)}function de(t){if(ee.includes(t))return h.SELL;if(re.includes(t))return h.BUY;throw new Error(`Unknown kind: ${t}`)}function pe(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:de(u.toString()),sellTokenBalance:fe(s.toString()),buyTokenBalance:fe(o.toString())}}function me(t){return t.isValid}let ye,ge;function ve(){return ye||(ye=zt.createInterface()),ye}function be(t,e){return ge||(ge=zt.connect(Q[t],e)),ge}class Ae{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(!me(t))throw new Error(`Invalid order: ${t.reason}`)}get createCalldata(){this.assertIsValid();const t=this.context,e=ve(),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(),ve().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(ue(t))}get offChainInput(){return"0x"}encodeStaticInputHelper(t,e){return i.defaultAbiCoder.encode(t,[e])}poll(t){try{const e=this,{chainId:r,owner:n,provider:i,orderBookApi:o}=t,s=be(r,i);return Promise.resolve(function(i,a){try{var u=function(){const i=e.isValid();return me(i)?Promise.resolve(e.pollValidate(t)).then(function(i){return i||Promise.resolve(e.isAuthorized(t)).then(function(i){return i?Promise.resolve(s.getTradeableOrderWithSignature(n,e.leaf,e.offChainInput,[])).then(function([i,s]){return Promise.resolve(function(t,e,r){try{return Promise.resolve(import("@cowprotocol/contracts")).then(function({computeOrderUid:n}){return Promise.resolve(Bt.getDomain(t)).then(function(t){return n(t,r,e)})})}catch(t){return Promise.reject(t)}}(r,n,pe(i))).then(function(r){return Promise.resolve(o.getOrder(r).then(()=>!0).catch(()=>!1)).then(function(n){let o;function a(t){return o?t:{result:Lt.SUCCESS,order:i,signature:s}}const u=function(){if(n)return Promise.resolve(e.handlePollFailedAlreadyPresent(r,i,t)).then(function(t){return t?(o=1,t):(o=1,{result:Lt.TRY_NEXT_BLOCK,reason:"Order already in orderbook"})})}();return u&&u.then?u.then(a):a(u)})})}):{result:Lt.DONT_TRY_AGAIN,reason:`NotAuthorized: Order ${e.id} is not authorized for ${n} on chain ${r}`}})}):{result:Lt.DONT_TRY_AGAIN,reason:`InvalidConditionalOrder. Reason: ${i.reason}`}}()}catch(t){return a(t)}return u&&u.then?u.then(void 0,a):u}(0,function(t){return{result:Lt.UNEXPECTED_ERROR,error:t}}))}catch(t){return Promise.reject(t)}}isAuthorized(t){const{chainId:e,owner:r,provider:n}=t;return be(e,n).callStatic.singleOrders(r,this.id)}cabinet(t){const{chainId:e,owner:r,provider:n}=t;return be(e,n).callStatic.cabinet(r,this.ctx)}static deserializeHelper(t,e,r,n){try{const{handler:o,salt:s,staticInput:a}=le(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 we=["address","bytes32","bytes"],Ee=["tuple(bytes32[] proof, tuple(address handler, bytes32 salt, bytes staticInput) params)[]"];class Te{constructor(t,e,r,n=Dt.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(!Te.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{orderType:n,...i}=e[r];if(!Te.orderTypeRegistry.hasOwnProperty(n))throw new Error(`Unknown order type: ${n}`);t[r]=new(0,Te.orderTypeRegistry[n])(i)}return t}return"object"==typeof e&&null!==e&&e.hasOwnProperty("type")&&e.hasOwnProperty("hex")&&"BigNumber"===e.type?u.from(e):e}),o=new Te(e,r,n);return o.location=i,o}toJSON(){const t=this.getOrGenerateTree().root;return JSON.stringify({...this,root:t},(t,e)=>{if("tree"!==t){if("object"==typeof e&&null!==e&&"orderType"in e){const t=e;return{...t,orderType:t.orderType}}return 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)]),we)),this.tree}static decodeFromJSON(t){return JSON.parse(t)}prepareProofStruct(t,e,r){try{const n=this;void 0===t&&(t=n.location);const o=function(){try{switch(t){case Dt.PRIVATE:return Promise.resolve("0x");case Dt.EMITTED:return Promise.resolve(n.encodeToABI(e));case Dt.SWARM:case Dt.WAKU:case Dt.IPFS:if(!r)throw new Error("Must provide an uploader function");return Promise.resolve(function(t,i){try{var o=Promise.resolve(r(n.encodeToJSON(e)))}catch(t){return i(t)}return o&&o.then?o.then(void 0,i):o}(0,function(e){throw new Error(`Error uploading to decentralized storage ${t}: ${e}`)}));default:throw new Error("Unsupported location")}}catch(t){return Promise.reject(t)}};return Promise.resolve(o().then(e=>{try{return i.hexlify(i.arrayify(e)),n.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}`)}))}catch(t){return Promise.reject(t)}}static poll(t,e,r,n,i){try{function o(r){return Promise.resolve(s.getTradeableOrderWithSignature(t,e.params,r,e.proof))}const s=be(r,n);return Promise.resolve(i?Promise.resolve(i(t,e.params)).then(o):o("0x"))}catch(a){return Promise.reject(a)}}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(Ee,[this.getProofs(t)])}encodeToJSON(t){return JSON.stringify(this.getProofs(t))}reset(){this.tree=void 0}static registerOrderType(t,e){Te.orderTypeRegistry[t]=e}static resetOrderTypeRegistry(){Te.orderTypeRegistry={}}}Te.orderTypeRegistry={};class Ie{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 Ne="0x6cF1e9cA41f7611dEf408122793c358a3d11E5a5",Me="0x52eD56Da04309Aca4c3FECC595298d80C2f16BAc",ke=u.from(2).pow(32).sub(1),_e=u.from(31536e3),Se=["tuple(address sellToken, address buyToken, address receiver, uint256 partSellAmount, uint256 minPartLimit, uint256 t0, uint256 n, uint256 t, uint256 span, bytes32 appData)"];var Pe,Ce;!function(t){t.AUTO="AUTO",t.LIMIT_DURATION="LIMIT_DURATION"}(Pe||(Pe={})),function(t){t.AT_MINING_TIME="AT_MINING_TIME",t.AT_EPOCH="AT_EPOCH"}(Ce||(Ce={}));const xe={startType:Ce.AT_MINING_TIME},Oe={durationType:Pe.AUTO};class Re extends Ae{constructor(t){const{handler:e,salt:r,data:n,hasOffChainInput:i}=t;if(e!==Ne)throw new Error(`InvalidHandler: Expected: ${Ne}, provided: ${e}`);super({handler:Ne,salt:r,data:n,hasOffChainInput:i}),this.isSingleOrder=!0}static fromData(t,e){return new Re({handler:Ne,data:t,salt:e})}static fromParams(t){return Re.deserialize(ue(t))}get context(){return this.staticInput.t0.gt(0)?super.context:{address:Me,factoryArgs:void 0}}get orderType(){return"twap"}isValid(){const t=(()=>{const{sellToken:t,sellAmount:e,buyToken:r,buyAmount:n,startTime:i=xe,numberOfParts:o,timeBetweenParts:s,durationOfPart:u=Oe}=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===Ce.AT_EPOCH){const t=i.epoch;if(!t.gte(a.Zero)||!t.lt(ke))return"InvalidStartTime"}return o.gt(a.One)&&o.lte(ke)?s.gt(a.Zero)&&s.lte(_e)?u.durationType!==Pe.LIMIT_DURATION||u.duration.lte(s)?he(Se,[this.staticInput])?void 0:"InvalidData":"InvalidSpan":"InvalidFrequency":"InvalidNumParts"})();return t?{isValid:!1,reason:t}:{isValid:!0}}startTimestamp(t){try{const e=this,{startTime:r}=e.data;return r?.startType===Ce.AT_EPOCH?Promise.resolve(r.epoch.toNumber()):Promise.resolve(e.cabinet(t)).then(function(t){const e=i.defaultAbiCoder.decode(["uint256"],t)[0];if(e.gt(ke))throw new Error(`Cabinet epoch out of range: ${e.toString()}`);const r=e.toNumber();if(0===r)throw new Error("Cabinet is not set. Required for TWAP orders that start at mining time.");return r})}catch(t){return Promise.reject(t)}}endTimestamp(t){const{numberOfParts:e,timeBetweenParts:r,durationOfPart:n}=this.data;return n&&n.durationType===Pe.LIMIT_DURATION?t+e.sub(1).mul(r).add(n.duration).toNumber():t+e.mul(r).toNumber()}pollValidate(t){try{const e=this;return Promise.resolve(Wt(t.provider)).then(function(r){const{blockInfo:n=r}=t,{blockTimestamp:i}=n;return function(r,n){try{var o=Promise.resolve(e.startTimestamp(t)).then(function(t){if(t>i)return{result:Lt.TRY_AT_EPOCH,epoch:t,reason:`TWAP hasn't started yet. Starts at ${t} (${ce(t)})`};const r=e.endTimestamp(t);return i>=r?{result:Lt.DONT_TRY_AGAIN,reason:`TWAP has expired. Expired at ${r} (${ce(r)})`}:void 0})}catch(t){return n(t)}return o&&o.then?o.then(void 0,n):o}(0,function(t){return t?.message?.includes("Cabinet is not set")?{result:Lt.DONT_TRY_AGAIN,reason:`${t?.message}. User likely removed the order.`}:t?.message?.includes("Cabinet epoch out of range")?{result:Lt.DONT_TRY_AGAIN,reason:`${t?.message}`}:{result:Lt.UNEXPECTED_ERROR,reason:`Unexpected error: ${t.message}`,error:t}})})}catch(t){return Promise.reject(t)}}handlePollFailedAlreadyPresent(t,e,r){try{const t=this;return Promise.resolve(Wt(r.provider)).then(function(e){const{blockInfo:n=e}=r,{blockTimestamp:i}=n,o=t.data.timeBetweenParts.toNumber(),{numberOfParts:s}=t.data;return Promise.resolve(t.startTimestamp(r)).then(function(t){if(i<t)return{result:Lt.UNEXPECTED_ERROR,reason:`TWAP part hash't started. First TWAP part start at ${t} (${ce(t)})`,error:void 0};const e=s.mul(o).add(t).toNumber();if(i>=e)return{result:Lt.UNEXPECTED_ERROR,reason:`TWAP is expired. Expired at ${e} (${ce(e)})`,error:void 0};const r=Math.floor((i-t)/o);if(r===s.toNumber()-1)return{result:Lt.DONT_TRY_AGAIN,reason:`Current active TWAP part (${r+1}/${s}) is already in the Order Book. T