@cowprotocol/sdk-trading 0.2.1-beta.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -57
- package/dist/index.d.mts +15 -3
- package/dist/index.d.ts +15 -3
- package/dist/index.js +89 -45
- package/dist/index.mjs +76 -32
- package/package.json +24 -25
package/README.md
CHANGED
|
@@ -75,6 +75,7 @@ const adapter = new ViemAdapter({
|
|
|
75
75
|
chain: sepolia,
|
|
76
76
|
transport: http('YOUR_RPC_URL')
|
|
77
77
|
}),
|
|
78
|
+
// You also can set `walletClient` instead of `signer` using `useWalletClient` from wagmi
|
|
78
79
|
signer: privateKeyToAccount('YOUR_PRIVATE_KEY' as `0x${string}`)
|
|
79
80
|
})
|
|
80
81
|
|
|
@@ -104,63 +105,6 @@ const orderId = await sdk.postSwapOrder(parameters)
|
|
|
104
105
|
console.log('Order created, id: ', orderId)
|
|
105
106
|
```
|
|
106
107
|
|
|
107
|
-
### Usage with Umbrella SDK
|
|
108
|
-
|
|
109
|
-
```typescript
|
|
110
|
-
import { CowSdk, SupportedChainId, OrderKind, TradeParameters } from '@cowprotocol/cow-sdk'
|
|
111
|
-
import { ViemAdapter } from '@cowprotocol/sdk-viem-adapter'
|
|
112
|
-
import { createPublicClient, http, privateKeyToAccount } from 'viem'
|
|
113
|
-
import { sepolia } from 'viem/chains'
|
|
114
|
-
|
|
115
|
-
const adapter = new ViemAdapter({
|
|
116
|
-
provider: createPublicClient({
|
|
117
|
-
chain: sepolia,
|
|
118
|
-
transport: http('YOUR_RPC_URL')
|
|
119
|
-
}),
|
|
120
|
-
signer: privateKeyToAccount('YOUR_PRIVATE_KEY' as `0x${string}`)
|
|
121
|
-
})
|
|
122
|
-
|
|
123
|
-
// Initialize the unified SDK
|
|
124
|
-
const sdk = new CowSdk({
|
|
125
|
-
chainId: SupportedChainId.SEPOLIA,
|
|
126
|
-
adapter,
|
|
127
|
-
tradingOptions: {
|
|
128
|
-
traderParams: {
|
|
129
|
-
appCode: 'YOUR_APP_CODE',
|
|
130
|
-
},
|
|
131
|
-
options: {
|
|
132
|
-
chainId: SupportedChainId.SEPOLIA,
|
|
133
|
-
},
|
|
134
|
-
},
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
// Define trade parameters
|
|
138
|
-
const parameters: TradeParameters = {
|
|
139
|
-
kind: OrderKind.BUY,
|
|
140
|
-
sellToken: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14',
|
|
141
|
-
sellTokenDecimals: 18,
|
|
142
|
-
buyToken: '0x0625afb445c3b6b7b929342a04a22599fd5dbb59',
|
|
143
|
-
buyTokenDecimals: 18,
|
|
144
|
-
amount: '120000000000000000',
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Post the order
|
|
148
|
-
const orderId = await sdk.trading.postSwapOrder(parameters)
|
|
149
|
-
console.log('Order created, id: ', orderId)
|
|
150
|
-
|
|
151
|
-
// Or you can just initialize the SDK and import the trading class in another file:
|
|
152
|
-
// you don't necessarily need to use the trading from inside of CowSdk:
|
|
153
|
-
//...
|
|
154
|
-
const sdk = new CowSdk({
|
|
155
|
-
chainId: SupportedChainId.SEPOLIA,
|
|
156
|
-
adapter,
|
|
157
|
-
})
|
|
158
|
-
// Other file:
|
|
159
|
-
import { TradingSdk } from '@cowprotocol/cow-sdk'
|
|
160
|
-
// parameters without passing the adapter. the adapter will be controlled by the umbrella
|
|
161
|
-
const trading = new TradingSdk(...)
|
|
162
|
-
```
|
|
163
|
-
|
|
164
108
|
### Options
|
|
165
109
|
|
|
166
110
|
For detailed information about trading steps you can enable the SDK logging:
|
|
@@ -176,6 +120,7 @@ const adapter = new ViemAdapter({
|
|
|
176
120
|
chain: sepolia,
|
|
177
121
|
transport: http('YOUR_RPC_URL')
|
|
178
122
|
}),
|
|
123
|
+
// You also can set `walletClient` instead of `signer` using `useWalletClient` from wagmi
|
|
179
124
|
signer: privateKeyToAccount('YOUR_PRIVATE_KEY' as `0x${string}`)
|
|
180
125
|
})
|
|
181
126
|
|
|
@@ -224,6 +169,7 @@ const adapter = new ViemAdapter({
|
|
|
224
169
|
chain: sepolia,
|
|
225
170
|
transport: http('YOUR_RPC_URL')
|
|
226
171
|
}),
|
|
172
|
+
// You also can set `walletClient` instead of `signer` using `useWalletClient` from wagmi
|
|
227
173
|
signer: privateKeyToAccount('YOUR_PRIVATE_KEY' as `0x${string}`)
|
|
228
174
|
})
|
|
229
175
|
|
|
@@ -281,6 +227,7 @@ const adapter = new ViemAdapter({
|
|
|
281
227
|
chain: sepolia,
|
|
282
228
|
transport: http('YOUR_RPC_URL')
|
|
283
229
|
}),
|
|
230
|
+
// You also can set `walletClient` instead of `signer` using `useWalletClient` from wagmi
|
|
284
231
|
signer: privateKeyToAccount('YOUR_PRIVATE_KEY' as `0x${string}`)
|
|
285
232
|
})
|
|
286
233
|
|
|
@@ -334,6 +281,7 @@ const adapter = new ViemAdapter({
|
|
|
334
281
|
chain: sepolia,
|
|
335
282
|
transport: http('YOUR_RPC_URL')
|
|
336
283
|
}),
|
|
284
|
+
// You also can set `walletClient` instead of `signer` using `useWalletClient` from wagmi
|
|
337
285
|
signer: privateKeyToAccount('YOUR_PRIVATE_KEY' as `0x${string}`)
|
|
338
286
|
})
|
|
339
287
|
|
package/dist/index.d.mts
CHANGED
|
@@ -69,6 +69,16 @@ interface TraderParameters {
|
|
|
69
69
|
type QuoterParameters = Omit<TraderParameters, 'signer'> & {
|
|
70
70
|
account: AccountAddress;
|
|
71
71
|
};
|
|
72
|
+
interface SlippageToleranceResponse {
|
|
73
|
+
slippageBps: number | null;
|
|
74
|
+
}
|
|
75
|
+
interface SlippageToleranceRequest {
|
|
76
|
+
chainId: SupportedChainId;
|
|
77
|
+
sellToken: OrderParameters['sellToken'];
|
|
78
|
+
buyToken: OrderParameters['buyToken'];
|
|
79
|
+
sellAmount?: bigint;
|
|
80
|
+
buyAmount?: bigint;
|
|
81
|
+
}
|
|
72
82
|
/**
|
|
73
83
|
* Trade type, assets, amounts, and optional parameters.
|
|
74
84
|
*/
|
|
@@ -108,6 +118,10 @@ interface SwapAdvancedSettings {
|
|
|
108
118
|
appData?: AppDataParams;
|
|
109
119
|
additionalParams?: PostTradeAdditionalParams;
|
|
110
120
|
quoteSigner?: SignerLike;
|
|
121
|
+
/**
|
|
122
|
+
* An optional callback to use custom logic for slippage suggestion
|
|
123
|
+
*/
|
|
124
|
+
getSlippageSuggestion?(request: SlippageToleranceRequest): Promise<SlippageToleranceResponse>;
|
|
111
125
|
}
|
|
112
126
|
interface LimitOrderAdvancedSettings {
|
|
113
127
|
appData?: AppDataParams;
|
|
@@ -240,8 +254,6 @@ type WithPartialTraderParams<T> = T & Partial<TraderParameters>;
|
|
|
240
254
|
interface TradingSdkOptions {
|
|
241
255
|
enableLogging: boolean;
|
|
242
256
|
orderBookApi: OrderBookApi;
|
|
243
|
-
utmContent?: string;
|
|
244
|
-
disableUtm?: boolean;
|
|
245
257
|
}
|
|
246
258
|
declare class TradingSdk {
|
|
247
259
|
traderParams: Partial<TraderParameters>;
|
|
@@ -335,4 +347,4 @@ declare function getTradeParametersAfterQuote({ quoteParameters, sellToken, }: {
|
|
|
335
347
|
sellToken: string;
|
|
336
348
|
}): TradeParameters;
|
|
337
349
|
|
|
338
|
-
export { type AppDataRootSchema, type BuildAppDataParams, type EthFlowOrderExistsCallback, type LimitOrderAdvancedSettings, type LimitOrderParameters, type LimitTradeParameters, type LimitTradeParametersFromQuote, ORDER_PRIMARY_TYPE, type OrderPostingResult, type OrderTypedData, type PostTradeAdditionalParams, type QuoteAndPost, type QuoteResults, type QuoteResultsSerialized, type QuoteResultsWithSigner, type QuoterParameters, type SigningStepManager, type SwapAdvancedSettings, type SwapParameters, type TradeBaseParameters, type TradeOptionalParameters, type TradeParameters, type TraderParameters, type TradingAppDataInfo, TradingSdk, type TradingSdkOptions, type TradingTransactionParams, type WithPartialTraderParams, buildAppData, calculateUniqueOrderId, generateAppDataFromDoc, getEthFlowContract, getEthFlowTransaction, getOrderToSign, getPartnerFeeBps, getPreSignTransaction, getQuote, getQuoteWithSigner, getTradeParametersAfterQuote, mapQuoteAmountsAndCosts, mergeAppDataDoc, postCoWProtocolTrade, postLimitOrder, postSellNativeCurrencyOrder, postSwapOrder, postSwapOrderFromQuote, suggestSlippageBps, swapParamsToLimitOrderParams };
|
|
350
|
+
export { type AppDataRootSchema, type BuildAppDataParams, type EthFlowOrderExistsCallback, type LimitOrderAdvancedSettings, type LimitOrderParameters, type LimitTradeParameters, type LimitTradeParametersFromQuote, ORDER_PRIMARY_TYPE, type OrderPostingResult, type OrderTypedData, type PostTradeAdditionalParams, type QuoteAndPost, type QuoteResults, type QuoteResultsSerialized, type QuoteResultsWithSigner, type QuoterParameters, type SigningStepManager, type SlippageToleranceRequest, type SlippageToleranceResponse, type SwapAdvancedSettings, type SwapParameters, type TradeBaseParameters, type TradeOptionalParameters, type TradeParameters, type TraderParameters, type TradingAppDataInfo, TradingSdk, type TradingSdkOptions, type TradingTransactionParams, type WithPartialTraderParams, buildAppData, calculateUniqueOrderId, generateAppDataFromDoc, getEthFlowContract, getEthFlowTransaction, getOrderToSign, getPartnerFeeBps, getPreSignTransaction, getQuote, getQuoteWithSigner, getTradeParametersAfterQuote, mapQuoteAmountsAndCosts, mergeAppDataDoc, postCoWProtocolTrade, postLimitOrder, postSellNativeCurrencyOrder, postSwapOrder, postSwapOrderFromQuote, suggestSlippageBps, swapParamsToLimitOrderParams };
|
package/dist/index.d.ts
CHANGED
|
@@ -69,6 +69,16 @@ interface TraderParameters {
|
|
|
69
69
|
type QuoterParameters = Omit<TraderParameters, 'signer'> & {
|
|
70
70
|
account: AccountAddress;
|
|
71
71
|
};
|
|
72
|
+
interface SlippageToleranceResponse {
|
|
73
|
+
slippageBps: number | null;
|
|
74
|
+
}
|
|
75
|
+
interface SlippageToleranceRequest {
|
|
76
|
+
chainId: SupportedChainId;
|
|
77
|
+
sellToken: OrderParameters['sellToken'];
|
|
78
|
+
buyToken: OrderParameters['buyToken'];
|
|
79
|
+
sellAmount?: bigint;
|
|
80
|
+
buyAmount?: bigint;
|
|
81
|
+
}
|
|
72
82
|
/**
|
|
73
83
|
* Trade type, assets, amounts, and optional parameters.
|
|
74
84
|
*/
|
|
@@ -108,6 +118,10 @@ interface SwapAdvancedSettings {
|
|
|
108
118
|
appData?: AppDataParams;
|
|
109
119
|
additionalParams?: PostTradeAdditionalParams;
|
|
110
120
|
quoteSigner?: SignerLike;
|
|
121
|
+
/**
|
|
122
|
+
* An optional callback to use custom logic for slippage suggestion
|
|
123
|
+
*/
|
|
124
|
+
getSlippageSuggestion?(request: SlippageToleranceRequest): Promise<SlippageToleranceResponse>;
|
|
111
125
|
}
|
|
112
126
|
interface LimitOrderAdvancedSettings {
|
|
113
127
|
appData?: AppDataParams;
|
|
@@ -240,8 +254,6 @@ type WithPartialTraderParams<T> = T & Partial<TraderParameters>;
|
|
|
240
254
|
interface TradingSdkOptions {
|
|
241
255
|
enableLogging: boolean;
|
|
242
256
|
orderBookApi: OrderBookApi;
|
|
243
|
-
utmContent?: string;
|
|
244
|
-
disableUtm?: boolean;
|
|
245
257
|
}
|
|
246
258
|
declare class TradingSdk {
|
|
247
259
|
traderParams: Partial<TraderParameters>;
|
|
@@ -335,4 +347,4 @@ declare function getTradeParametersAfterQuote({ quoteParameters, sellToken, }: {
|
|
|
335
347
|
sellToken: string;
|
|
336
348
|
}): TradeParameters;
|
|
337
349
|
|
|
338
|
-
export { type AppDataRootSchema, type BuildAppDataParams, type EthFlowOrderExistsCallback, type LimitOrderAdvancedSettings, type LimitOrderParameters, type LimitTradeParameters, type LimitTradeParametersFromQuote, ORDER_PRIMARY_TYPE, type OrderPostingResult, type OrderTypedData, type PostTradeAdditionalParams, type QuoteAndPost, type QuoteResults, type QuoteResultsSerialized, type QuoteResultsWithSigner, type QuoterParameters, type SigningStepManager, type SwapAdvancedSettings, type SwapParameters, type TradeBaseParameters, type TradeOptionalParameters, type TradeParameters, type TraderParameters, type TradingAppDataInfo, TradingSdk, type TradingSdkOptions, type TradingTransactionParams, type WithPartialTraderParams, buildAppData, calculateUniqueOrderId, generateAppDataFromDoc, getEthFlowContract, getEthFlowTransaction, getOrderToSign, getPartnerFeeBps, getPreSignTransaction, getQuote, getQuoteWithSigner, getTradeParametersAfterQuote, mapQuoteAmountsAndCosts, mergeAppDataDoc, postCoWProtocolTrade, postLimitOrder, postSellNativeCurrencyOrder, postSwapOrder, postSwapOrderFromQuote, suggestSlippageBps, swapParamsToLimitOrderParams };
|
|
350
|
+
export { type AppDataRootSchema, type BuildAppDataParams, type EthFlowOrderExistsCallback, type LimitOrderAdvancedSettings, type LimitOrderParameters, type LimitTradeParameters, type LimitTradeParametersFromQuote, ORDER_PRIMARY_TYPE, type OrderPostingResult, type OrderTypedData, type PostTradeAdditionalParams, type QuoteAndPost, type QuoteResults, type QuoteResultsSerialized, type QuoteResultsWithSigner, type QuoterParameters, type SigningStepManager, type SlippageToleranceRequest, type SlippageToleranceResponse, type SwapAdvancedSettings, type SwapParameters, type TradeBaseParameters, type TradeOptionalParameters, type TradeParameters, type TraderParameters, type TradingAppDataInfo, TradingSdk, type TradingSdkOptions, type TradingTransactionParams, type WithPartialTraderParams, buildAppData, calculateUniqueOrderId, generateAppDataFromDoc, getEthFlowContract, getEthFlowTransaction, getOrderToSign, getPartnerFeeBps, getPreSignTransaction, getQuote, getQuoteWithSigner, getTradeParametersAfterQuote, mapQuoteAmountsAndCosts, mergeAppDataDoc, postCoWProtocolTrade, postLimitOrder, postSellNativeCurrencyOrder, postSwapOrder, postSwapOrderFromQuote, suggestSlippageBps, swapParamsToLimitOrderParams };
|
package/dist/index.js
CHANGED
|
@@ -63,12 +63,7 @@ var import_sdk_order_book = require("@cowprotocol/sdk-order-book");
|
|
|
63
63
|
var import_sdk_config = require("@cowprotocol/sdk-config");
|
|
64
64
|
var DEFAULT_QUOTE_VALIDITY = 60 * 30;
|
|
65
65
|
var DEFAULT_SLIPPAGE_BPS = 50;
|
|
66
|
-
var ETH_FLOW_DEFAULT_SLIPPAGE_BPS =
|
|
67
|
-
...(0, import_sdk_config.mapSupportedNetworks)(DEFAULT_SLIPPAGE_BPS),
|
|
68
|
-
// 0.5% by default for most chains
|
|
69
|
-
[import_sdk_config.SupportedChainId.MAINNET]: 200
|
|
70
|
-
// 2% for mainnet
|
|
71
|
-
};
|
|
66
|
+
var ETH_FLOW_DEFAULT_SLIPPAGE_BPS = (0, import_sdk_config.mapSupportedNetworks)(DEFAULT_SLIPPAGE_BPS);
|
|
72
67
|
var SIGN_SCHEME_MAP = {
|
|
73
68
|
[import_sdk_order_book.EcdsaSigningScheme.EIP712]: import_sdk_order_book.SigningScheme.EIP712,
|
|
74
69
|
[import_sdk_order_book.EcdsaSigningScheme.ETHSIGN]: import_sdk_order_book.SigningScheme.ETHSIGN
|
|
@@ -409,8 +404,8 @@ async function postCoWProtocolTrade(orderBookApi, appData, params, additionalPar
|
|
|
409
404
|
}
|
|
410
405
|
|
|
411
406
|
// src/getQuote.ts
|
|
412
|
-
var
|
|
413
|
-
var
|
|
407
|
+
var import_sdk_common10 = require("@cowprotocol/sdk-common");
|
|
408
|
+
var import_sdk_order_book7 = require("@cowprotocol/sdk-order-book");
|
|
414
409
|
|
|
415
410
|
// src/appDataUtils.ts
|
|
416
411
|
var import_sdk_app_data = require("@cowprotocol/sdk-app-data");
|
|
@@ -549,12 +544,54 @@ function suggestSlippageBps(params) {
|
|
|
549
544
|
slippage: totalSlippageBps
|
|
550
545
|
});
|
|
551
546
|
const slippageBps = (0, import_sdk_common8.percentageToBps)(slippagePercent);
|
|
552
|
-
|
|
547
|
+
const lowerCap = isEthFlow ? ETH_FLOW_DEFAULT_SLIPPAGE_BPS[trader.chainId] : 0;
|
|
548
|
+
return Math.max(Math.min(slippageBps, MAX_SLIPPAGE_BPS), lowerCap);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
// src/resolveSlippageSuggestion.ts
|
|
552
|
+
var import_sdk_order_book6 = require("@cowprotocol/sdk-order-book");
|
|
553
|
+
var import_sdk_common9 = require("@cowprotocol/sdk-common");
|
|
554
|
+
async function resolveSlippageSuggestion(chainId, tradeParameters, trader, quote, isEthFlow, advancedSettings) {
|
|
555
|
+
const suggestSlippageParams = {
|
|
556
|
+
isEthFlow,
|
|
557
|
+
quote,
|
|
558
|
+
tradeParameters,
|
|
559
|
+
trader,
|
|
560
|
+
advancedSettings
|
|
561
|
+
};
|
|
562
|
+
const getSlippageSuggestion = advancedSettings?.getSlippageSuggestion;
|
|
563
|
+
const priceQuality = advancedSettings?.quoteRequest?.priceQuality ?? import_sdk_order_book6.PriceQuality.OPTIMAL;
|
|
564
|
+
const defaultSuggestion = suggestSlippageBps(suggestSlippageParams);
|
|
565
|
+
if (priceQuality === import_sdk_order_book6.PriceQuality.FAST || !getSlippageSuggestion) {
|
|
566
|
+
return { slippageBps: defaultSuggestion };
|
|
567
|
+
}
|
|
568
|
+
const amountsAndCosts = (0, import_sdk_order_book6.getQuoteAmountsAndCosts)({
|
|
569
|
+
orderParams: quote.quote,
|
|
570
|
+
slippagePercentBps: 0,
|
|
571
|
+
partnerFeeBps: getPartnerFeeBps(tradeParameters.partnerFee),
|
|
572
|
+
sellDecimals: tradeParameters.sellTokenDecimals,
|
|
573
|
+
buyDecimals: tradeParameters.buyTokenDecimals
|
|
574
|
+
});
|
|
575
|
+
try {
|
|
576
|
+
const suggestedSlippage = await getSlippageSuggestion({
|
|
577
|
+
chainId,
|
|
578
|
+
sellToken: tradeParameters.sellToken,
|
|
579
|
+
buyToken: tradeParameters.buyToken,
|
|
580
|
+
sellAmount: amountsAndCosts.afterSlippage.sellAmount,
|
|
581
|
+
buyAmount: amountsAndCosts.afterSlippage.buyAmount
|
|
582
|
+
});
|
|
583
|
+
return {
|
|
584
|
+
slippageBps: Math.max(suggestedSlippage.slippageBps ?? 0, defaultSuggestion)
|
|
585
|
+
};
|
|
586
|
+
} catch (e) {
|
|
587
|
+
(0, import_sdk_common9.log)(`getSlippageSuggestion() error: ${e.message || String(e)}`);
|
|
588
|
+
return { slippageBps: defaultSuggestion };
|
|
589
|
+
}
|
|
553
590
|
}
|
|
554
591
|
|
|
555
592
|
// src/getQuote.ts
|
|
556
593
|
var ETH_FLOW_AUX_QUOTE_PARAMS = {
|
|
557
|
-
signingScheme:
|
|
594
|
+
signingScheme: import_sdk_order_book7.SigningScheme.EIP1271,
|
|
558
595
|
onchainOrder: true,
|
|
559
596
|
// Ethflow orders are subsidized in the backend.
|
|
560
597
|
// This means we can assume the verification gas costs are zero for the quote/fee estimation
|
|
@@ -574,13 +611,13 @@ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBoo
|
|
|
574
611
|
slippageBps,
|
|
575
612
|
env = "prod"
|
|
576
613
|
} = tradeParameters;
|
|
577
|
-
(0,
|
|
614
|
+
(0, import_sdk_common10.log)(
|
|
578
615
|
`getQuote for: Swap ${amount} ${sellToken} for ${buyToken} on chain ${chainId} with ${slippageBps !== void 0 ? `${slippageBps} BPS` : "AUTO"} slippage`
|
|
579
616
|
);
|
|
580
|
-
const orderBookApi = _orderBookApi || new
|
|
617
|
+
const orderBookApi = _orderBookApi || new import_sdk_order_book7.OrderBookApi({ chainId, env });
|
|
581
618
|
const receiver = tradeParameters.receiver || from;
|
|
582
619
|
const isSell = kind === "sell";
|
|
583
|
-
(0,
|
|
620
|
+
(0, import_sdk_common10.log)("Building app data...");
|
|
584
621
|
const defaultSlippageBps = getDefaultSlippageBps(chainId, isEthFlow);
|
|
585
622
|
const slippageBpsOrDefault = slippageBps ?? defaultSlippageBps;
|
|
586
623
|
const buildAppDataParams = {
|
|
@@ -591,7 +628,7 @@ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBoo
|
|
|
591
628
|
};
|
|
592
629
|
const appDataInfo = await buildAppData(buildAppDataParams, advancedSettings?.appData);
|
|
593
630
|
const { appDataKeccak256, fullAppData } = appDataInfo;
|
|
594
|
-
(0,
|
|
631
|
+
(0, import_sdk_common10.log)(`App data: appDataKeccak256=${appDataKeccak256} fullAppData=${fullAppData}`);
|
|
595
632
|
const quoteRequest = {
|
|
596
633
|
from,
|
|
597
634
|
sellToken,
|
|
@@ -600,31 +637,32 @@ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBoo
|
|
|
600
637
|
validFor,
|
|
601
638
|
appData: fullAppData,
|
|
602
639
|
appDataHash: appDataKeccak256,
|
|
603
|
-
priceQuality:
|
|
640
|
+
priceQuality: import_sdk_order_book7.PriceQuality.OPTIMAL,
|
|
604
641
|
// Do not change this parameter because we rely on the fact that quote has id
|
|
605
|
-
signingScheme:
|
|
642
|
+
signingScheme: import_sdk_order_book7.SigningScheme.EIP712,
|
|
606
643
|
...isEthFlow ? ETH_FLOW_AUX_QUOTE_PARAMS : {},
|
|
607
|
-
...isSell ? { kind:
|
|
644
|
+
...isSell ? { kind: import_sdk_order_book7.OrderQuoteSideKindSell.SELL, sellAmountBeforeFee: amount } : { kind: import_sdk_order_book7.OrderQuoteSideKindBuy.BUY, buyAmountAfterFee: amount },
|
|
608
645
|
...advancedSettings?.quoteRequest
|
|
609
646
|
};
|
|
610
|
-
(0,
|
|
647
|
+
(0, import_sdk_common10.log)("Getting quote...");
|
|
611
648
|
const quote = await orderBookApi.getQuote(quoteRequest);
|
|
612
|
-
const suggestedSlippageBps =
|
|
613
|
-
|
|
614
|
-
quote,
|
|
649
|
+
const { slippageBps: suggestedSlippageBps } = await resolveSlippageSuggestion(
|
|
650
|
+
chainId,
|
|
615
651
|
tradeParameters,
|
|
616
652
|
trader,
|
|
653
|
+
quote,
|
|
654
|
+
isEthFlow,
|
|
617
655
|
advancedSettings
|
|
618
|
-
|
|
656
|
+
);
|
|
619
657
|
const commonResult = {
|
|
620
658
|
isEthFlow,
|
|
621
659
|
quote,
|
|
622
660
|
orderBookApi,
|
|
623
|
-
suggestedSlippageBps
|
|
661
|
+
suggestedSlippageBps: suggestedSlippageBps || defaultSlippageBps
|
|
624
662
|
};
|
|
625
663
|
if (slippageBps === void 0) {
|
|
626
|
-
if (suggestedSlippageBps
|
|
627
|
-
(0,
|
|
664
|
+
if (suggestedSlippageBps) {
|
|
665
|
+
(0, import_sdk_common10.log)(
|
|
628
666
|
`Suggested slippage is greater than ${defaultSlippageBps} BPS (default), using the suggested slippage (${suggestedSlippageBps} BPS)`
|
|
629
667
|
);
|
|
630
668
|
const newAppDataInfo = await buildAppData(
|
|
@@ -634,7 +672,7 @@ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBoo
|
|
|
634
672
|
},
|
|
635
673
|
advancedSettings?.appData
|
|
636
674
|
);
|
|
637
|
-
(0,
|
|
675
|
+
(0, import_sdk_common10.log)(
|
|
638
676
|
`App data with new suggested slippage: appDataKeccak256=${newAppDataInfo.appDataKeccak256} fullAppData=${newAppDataInfo.fullAppData}`
|
|
639
677
|
);
|
|
640
678
|
return {
|
|
@@ -644,9 +682,7 @@ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBoo
|
|
|
644
682
|
slippageBps: suggestedSlippageBps
|
|
645
683
|
};
|
|
646
684
|
} else {
|
|
647
|
-
(0,
|
|
648
|
-
`Suggested slippage is only ${suggestedSlippageBps} BPS. Using the default slippage (${defaultSlippageBps} BPS)`
|
|
649
|
-
);
|
|
685
|
+
(0, import_sdk_common10.log)(`No suggested slippage. Using the default slippage (${defaultSlippageBps} BPS)`);
|
|
650
686
|
}
|
|
651
687
|
}
|
|
652
688
|
return {
|
|
@@ -661,7 +697,7 @@ async function getQuote(_tradeParameters, trader, advancedSettings, _orderBookAp
|
|
|
661
697
|
const { quote, orderBookApi, tradeParameters, slippageBps, suggestedSlippageBps, appDataInfo, isEthFlow } = await getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBookApi);
|
|
662
698
|
const { partnerFee, sellTokenDecimals, buyTokenDecimals } = tradeParameters;
|
|
663
699
|
const { chainId, account: from } = trader;
|
|
664
|
-
const amountsAndCosts = (0,
|
|
700
|
+
const amountsAndCosts = (0, import_sdk_order_book7.getQuoteAmountsAndCosts)({
|
|
665
701
|
orderParams: quote.quote,
|
|
666
702
|
slippagePercentBps: slippageBps,
|
|
667
703
|
partnerFeeBps: getPartnerFeeBps(partnerFee),
|
|
@@ -688,7 +724,7 @@ async function getQuote(_tradeParameters, trader, advancedSettings, _orderBookAp
|
|
|
688
724
|
};
|
|
689
725
|
}
|
|
690
726
|
async function getTrader(swapParameters) {
|
|
691
|
-
const signer = (0,
|
|
727
|
+
const signer = (0, import_sdk_common10.getGlobalAdapter)().signerOrNull();
|
|
692
728
|
const account = swapParameters.owner || await signer?.getAddress();
|
|
693
729
|
return {
|
|
694
730
|
chainId: swapParameters.chainId,
|
|
@@ -697,7 +733,7 @@ async function getTrader(swapParameters) {
|
|
|
697
733
|
};
|
|
698
734
|
}
|
|
699
735
|
async function getQuoteWithSigner(swapParameters, advancedSettings, orderBookApi) {
|
|
700
|
-
const adapter = (0,
|
|
736
|
+
const adapter = (0, import_sdk_common10.getGlobalAdapter)();
|
|
701
737
|
const signer = swapParameters.signer ? adapter.createSigner(swapParameters.signer) : adapter.signer;
|
|
702
738
|
const trader = await getTrader(swapParameters);
|
|
703
739
|
const result = await getQuote(swapParameters, trader, advancedSettings, orderBookApi);
|
|
@@ -754,8 +790,8 @@ async function postSwapOrderFromQuote({
|
|
|
754
790
|
}
|
|
755
791
|
|
|
756
792
|
// src/postLimitOrder.ts
|
|
757
|
-
var
|
|
758
|
-
var
|
|
793
|
+
var import_sdk_order_book8 = require("@cowprotocol/sdk-order-book");
|
|
794
|
+
var import_sdk_common11 = require("@cowprotocol/sdk-common");
|
|
759
795
|
async function postLimitOrder(params, advancedSettings, _orderBookApi) {
|
|
760
796
|
const appDataSlippage = advancedSettings?.appData?.metadata?.quote?.slippageBips;
|
|
761
797
|
const partnerFeeOverride = advancedSettings?.appData?.metadata?.partnerFee;
|
|
@@ -772,9 +808,9 @@ async function postLimitOrder(params, advancedSettings, _orderBookApi) {
|
|
|
772
808
|
params.env = "prod";
|
|
773
809
|
}
|
|
774
810
|
const { appCode, chainId, sellToken, buyToken, sellAmount, buyAmount, partnerFee } = params;
|
|
775
|
-
(0,
|
|
776
|
-
const orderBookApi = _orderBookApi || new
|
|
777
|
-
(0,
|
|
811
|
+
(0, import_sdk_common11.log)(`Limit order ${sellAmount} ${sellToken} for ${buyAmount} ${buyToken} on chain ${chainId}`);
|
|
812
|
+
const orderBookApi = _orderBookApi || new import_sdk_order_book8.OrderBookApi({ chainId, env: params.env });
|
|
813
|
+
(0, import_sdk_common11.log)("Building app data...");
|
|
778
814
|
const appDataInfo = await buildAppData(
|
|
779
815
|
{
|
|
780
816
|
slippageBps: params.slippageBps,
|
|
@@ -789,9 +825,9 @@ async function postLimitOrder(params, advancedSettings, _orderBookApi) {
|
|
|
789
825
|
|
|
790
826
|
// src/getPreSignTransaction.ts
|
|
791
827
|
var import_sdk_config5 = require("@cowprotocol/sdk-config");
|
|
792
|
-
var
|
|
828
|
+
var import_sdk_common12 = require("@cowprotocol/sdk-common");
|
|
793
829
|
async function getPreSignTransaction(signer, chainId, account, orderId) {
|
|
794
|
-
const contract =
|
|
830
|
+
const contract = import_sdk_common12.ContractFactory.createSettlementContract(account, signer);
|
|
795
831
|
const settlementContractAddress = import_sdk_config5.COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS[chainId];
|
|
796
832
|
const preSignatureCall = contract.interface.encodeFunctionData("setPreSignature", [orderId, true]);
|
|
797
833
|
const gas = await contract.estimateGas.setPreSignature?.(orderId, true).catch(() => GAS_LIMIT_DEFAULT) || GAS_LIMIT_DEFAULT;
|
|
@@ -805,21 +841,29 @@ async function getPreSignTransaction(signer, chainId, account, orderId) {
|
|
|
805
841
|
}
|
|
806
842
|
|
|
807
843
|
// src/tradingSdk.ts
|
|
808
|
-
var import_sdk_common12 = require("@cowprotocol/sdk-common");
|
|
809
844
|
var import_sdk_common13 = require("@cowprotocol/sdk-common");
|
|
845
|
+
var import_sdk_common14 = require("@cowprotocol/sdk-common");
|
|
810
846
|
var TradingSdk = class {
|
|
811
847
|
constructor(traderParams = {}, options = {}, adapter) {
|
|
812
848
|
this.traderParams = traderParams;
|
|
813
849
|
this.options = options;
|
|
814
850
|
if (options.enableLogging !== void 0) {
|
|
815
|
-
(0,
|
|
851
|
+
(0, import_sdk_common13.enableLogging)(options.enableLogging);
|
|
816
852
|
}
|
|
817
853
|
if (adapter) {
|
|
818
|
-
(0,
|
|
854
|
+
(0, import_sdk_common14.setGlobalAdapter)(adapter);
|
|
819
855
|
}
|
|
820
856
|
}
|
|
821
857
|
setTraderParams(params) {
|
|
822
858
|
this.traderParams = { ...this.traderParams, ...params };
|
|
859
|
+
if (this.options.orderBookApi) {
|
|
860
|
+
if (params.chainId) {
|
|
861
|
+
this.options.orderBookApi.context.chainId = params.chainId;
|
|
862
|
+
}
|
|
863
|
+
if (params.env) {
|
|
864
|
+
this.options.orderBookApi.context.env = params.env;
|
|
865
|
+
}
|
|
866
|
+
}
|
|
823
867
|
return this;
|
|
824
868
|
}
|
|
825
869
|
async getQuote(params, advancedSettings) {
|
|
@@ -839,7 +883,7 @@ var TradingSdk = class {
|
|
|
839
883
|
}),
|
|
840
884
|
// It's important to get a fresh instance of the signer
|
|
841
885
|
// Because quote might be called with another signer
|
|
842
|
-
signer: (0,
|
|
886
|
+
signer: (0, import_sdk_common13.getGlobalAdapter)().signer
|
|
843
887
|
}
|
|
844
888
|
},
|
|
845
889
|
advancedSettings2
|
|
@@ -900,7 +944,7 @@ var TradingSdk = class {
|
|
|
900
944
|
);
|
|
901
945
|
}
|
|
902
946
|
async getPreSignTransaction(params) {
|
|
903
|
-
const adapter = (0,
|
|
947
|
+
const adapter = (0, import_sdk_common13.getGlobalAdapter)();
|
|
904
948
|
const traderParams = this.mergeParams(params);
|
|
905
949
|
const signer = traderParams.signer ? adapter.createSigner(traderParams.signer) : adapter.signer;
|
|
906
950
|
return getPreSignTransaction(signer, traderParams.chainId, params.account, params.orderId);
|
|
@@ -909,7 +953,7 @@ var TradingSdk = class {
|
|
|
909
953
|
const { chainId, signer, appCode, env } = params;
|
|
910
954
|
const traderParams = {
|
|
911
955
|
chainId: chainId || this.traderParams.chainId,
|
|
912
|
-
signer: signer || this.traderParams.signer,
|
|
956
|
+
signer: signer || this.traderParams.signer || (0, import_sdk_common13.getGlobalAdapter)().signer,
|
|
913
957
|
appCode: appCode || this.traderParams.appCode,
|
|
914
958
|
env: env || this.traderParams.env
|
|
915
959
|
};
|
package/dist/index.mjs
CHANGED
|
@@ -3,15 +3,10 @@ import { SigningScheme as SigningScheme3 } from "@cowprotocol/sdk-order-book";
|
|
|
3
3
|
|
|
4
4
|
// src/consts.ts
|
|
5
5
|
import { EcdsaSigningScheme, SigningScheme } from "@cowprotocol/sdk-order-book";
|
|
6
|
-
import { mapSupportedNetworks
|
|
6
|
+
import { mapSupportedNetworks } from "@cowprotocol/sdk-config";
|
|
7
7
|
var DEFAULT_QUOTE_VALIDITY = 60 * 30;
|
|
8
8
|
var DEFAULT_SLIPPAGE_BPS = 50;
|
|
9
|
-
var ETH_FLOW_DEFAULT_SLIPPAGE_BPS =
|
|
10
|
-
...mapSupportedNetworks(DEFAULT_SLIPPAGE_BPS),
|
|
11
|
-
// 0.5% by default for most chains
|
|
12
|
-
[SupportedChainId.MAINNET]: 200
|
|
13
|
-
// 2% for mainnet
|
|
14
|
-
};
|
|
9
|
+
var ETH_FLOW_DEFAULT_SLIPPAGE_BPS = mapSupportedNetworks(DEFAULT_SLIPPAGE_BPS);
|
|
15
10
|
var SIGN_SCHEME_MAP = {
|
|
16
11
|
[EcdsaSigningScheme.EIP712]: SigningScheme.EIP712,
|
|
17
12
|
[EcdsaSigningScheme.ETHSIGN]: SigningScheme.ETHSIGN
|
|
@@ -364,13 +359,13 @@ async function postCoWProtocolTrade(orderBookApi, appData, params, additionalPar
|
|
|
364
359
|
}
|
|
365
360
|
|
|
366
361
|
// src/getQuote.ts
|
|
367
|
-
import { getGlobalAdapter as getGlobalAdapter5, log as
|
|
362
|
+
import { getGlobalAdapter as getGlobalAdapter5, log as log4 } from "@cowprotocol/sdk-common";
|
|
368
363
|
import {
|
|
369
|
-
getQuoteAmountsAndCosts as
|
|
364
|
+
getQuoteAmountsAndCosts as getQuoteAmountsAndCosts3,
|
|
370
365
|
OrderBookApi as OrderBookApi3,
|
|
371
366
|
OrderQuoteSideKindBuy,
|
|
372
367
|
OrderQuoteSideKindSell,
|
|
373
|
-
PriceQuality,
|
|
368
|
+
PriceQuality as PriceQuality2,
|
|
374
369
|
SigningScheme as SigningScheme4
|
|
375
370
|
} from "@cowprotocol/sdk-order-book";
|
|
376
371
|
|
|
@@ -514,7 +509,49 @@ function suggestSlippageBps(params) {
|
|
|
514
509
|
slippage: totalSlippageBps
|
|
515
510
|
});
|
|
516
511
|
const slippageBps = percentageToBps(slippagePercent);
|
|
517
|
-
|
|
512
|
+
const lowerCap = isEthFlow ? ETH_FLOW_DEFAULT_SLIPPAGE_BPS[trader.chainId] : 0;
|
|
513
|
+
return Math.max(Math.min(slippageBps, MAX_SLIPPAGE_BPS), lowerCap);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// src/resolveSlippageSuggestion.ts
|
|
517
|
+
import { getQuoteAmountsAndCosts as getQuoteAmountsAndCosts2, PriceQuality } from "@cowprotocol/sdk-order-book";
|
|
518
|
+
import { log as log3 } from "@cowprotocol/sdk-common";
|
|
519
|
+
async function resolveSlippageSuggestion(chainId, tradeParameters, trader, quote, isEthFlow, advancedSettings) {
|
|
520
|
+
const suggestSlippageParams = {
|
|
521
|
+
isEthFlow,
|
|
522
|
+
quote,
|
|
523
|
+
tradeParameters,
|
|
524
|
+
trader,
|
|
525
|
+
advancedSettings
|
|
526
|
+
};
|
|
527
|
+
const getSlippageSuggestion = advancedSettings?.getSlippageSuggestion;
|
|
528
|
+
const priceQuality = advancedSettings?.quoteRequest?.priceQuality ?? PriceQuality.OPTIMAL;
|
|
529
|
+
const defaultSuggestion = suggestSlippageBps(suggestSlippageParams);
|
|
530
|
+
if (priceQuality === PriceQuality.FAST || !getSlippageSuggestion) {
|
|
531
|
+
return { slippageBps: defaultSuggestion };
|
|
532
|
+
}
|
|
533
|
+
const amountsAndCosts = getQuoteAmountsAndCosts2({
|
|
534
|
+
orderParams: quote.quote,
|
|
535
|
+
slippagePercentBps: 0,
|
|
536
|
+
partnerFeeBps: getPartnerFeeBps(tradeParameters.partnerFee),
|
|
537
|
+
sellDecimals: tradeParameters.sellTokenDecimals,
|
|
538
|
+
buyDecimals: tradeParameters.buyTokenDecimals
|
|
539
|
+
});
|
|
540
|
+
try {
|
|
541
|
+
const suggestedSlippage = await getSlippageSuggestion({
|
|
542
|
+
chainId,
|
|
543
|
+
sellToken: tradeParameters.sellToken,
|
|
544
|
+
buyToken: tradeParameters.buyToken,
|
|
545
|
+
sellAmount: amountsAndCosts.afterSlippage.sellAmount,
|
|
546
|
+
buyAmount: amountsAndCosts.afterSlippage.buyAmount
|
|
547
|
+
});
|
|
548
|
+
return {
|
|
549
|
+
slippageBps: Math.max(suggestedSlippage.slippageBps ?? 0, defaultSuggestion)
|
|
550
|
+
};
|
|
551
|
+
} catch (e) {
|
|
552
|
+
log3(`getSlippageSuggestion() error: ${e.message || String(e)}`);
|
|
553
|
+
return { slippageBps: defaultSuggestion };
|
|
554
|
+
}
|
|
518
555
|
}
|
|
519
556
|
|
|
520
557
|
// src/getQuote.ts
|
|
@@ -539,13 +576,13 @@ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBoo
|
|
|
539
576
|
slippageBps,
|
|
540
577
|
env = "prod"
|
|
541
578
|
} = tradeParameters;
|
|
542
|
-
|
|
579
|
+
log4(
|
|
543
580
|
`getQuote for: Swap ${amount} ${sellToken} for ${buyToken} on chain ${chainId} with ${slippageBps !== void 0 ? `${slippageBps} BPS` : "AUTO"} slippage`
|
|
544
581
|
);
|
|
545
582
|
const orderBookApi = _orderBookApi || new OrderBookApi3({ chainId, env });
|
|
546
583
|
const receiver = tradeParameters.receiver || from;
|
|
547
584
|
const isSell = kind === "sell";
|
|
548
|
-
|
|
585
|
+
log4("Building app data...");
|
|
549
586
|
const defaultSlippageBps = getDefaultSlippageBps(chainId, isEthFlow);
|
|
550
587
|
const slippageBpsOrDefault = slippageBps ?? defaultSlippageBps;
|
|
551
588
|
const buildAppDataParams = {
|
|
@@ -556,7 +593,7 @@ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBoo
|
|
|
556
593
|
};
|
|
557
594
|
const appDataInfo = await buildAppData(buildAppDataParams, advancedSettings?.appData);
|
|
558
595
|
const { appDataKeccak256, fullAppData } = appDataInfo;
|
|
559
|
-
|
|
596
|
+
log4(`App data: appDataKeccak256=${appDataKeccak256} fullAppData=${fullAppData}`);
|
|
560
597
|
const quoteRequest = {
|
|
561
598
|
from,
|
|
562
599
|
sellToken,
|
|
@@ -565,31 +602,32 @@ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBoo
|
|
|
565
602
|
validFor,
|
|
566
603
|
appData: fullAppData,
|
|
567
604
|
appDataHash: appDataKeccak256,
|
|
568
|
-
priceQuality:
|
|
605
|
+
priceQuality: PriceQuality2.OPTIMAL,
|
|
569
606
|
// Do not change this parameter because we rely on the fact that quote has id
|
|
570
607
|
signingScheme: SigningScheme4.EIP712,
|
|
571
608
|
...isEthFlow ? ETH_FLOW_AUX_QUOTE_PARAMS : {},
|
|
572
609
|
...isSell ? { kind: OrderQuoteSideKindSell.SELL, sellAmountBeforeFee: amount } : { kind: OrderQuoteSideKindBuy.BUY, buyAmountAfterFee: amount },
|
|
573
610
|
...advancedSettings?.quoteRequest
|
|
574
611
|
};
|
|
575
|
-
|
|
612
|
+
log4("Getting quote...");
|
|
576
613
|
const quote = await orderBookApi.getQuote(quoteRequest);
|
|
577
|
-
const suggestedSlippageBps =
|
|
578
|
-
|
|
579
|
-
quote,
|
|
614
|
+
const { slippageBps: suggestedSlippageBps } = await resolveSlippageSuggestion(
|
|
615
|
+
chainId,
|
|
580
616
|
tradeParameters,
|
|
581
617
|
trader,
|
|
618
|
+
quote,
|
|
619
|
+
isEthFlow,
|
|
582
620
|
advancedSettings
|
|
583
|
-
|
|
621
|
+
);
|
|
584
622
|
const commonResult = {
|
|
585
623
|
isEthFlow,
|
|
586
624
|
quote,
|
|
587
625
|
orderBookApi,
|
|
588
|
-
suggestedSlippageBps
|
|
626
|
+
suggestedSlippageBps: suggestedSlippageBps || defaultSlippageBps
|
|
589
627
|
};
|
|
590
628
|
if (slippageBps === void 0) {
|
|
591
|
-
if (suggestedSlippageBps
|
|
592
|
-
|
|
629
|
+
if (suggestedSlippageBps) {
|
|
630
|
+
log4(
|
|
593
631
|
`Suggested slippage is greater than ${defaultSlippageBps} BPS (default), using the suggested slippage (${suggestedSlippageBps} BPS)`
|
|
594
632
|
);
|
|
595
633
|
const newAppDataInfo = await buildAppData(
|
|
@@ -599,7 +637,7 @@ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBoo
|
|
|
599
637
|
},
|
|
600
638
|
advancedSettings?.appData
|
|
601
639
|
);
|
|
602
|
-
|
|
640
|
+
log4(
|
|
603
641
|
`App data with new suggested slippage: appDataKeccak256=${newAppDataInfo.appDataKeccak256} fullAppData=${newAppDataInfo.fullAppData}`
|
|
604
642
|
);
|
|
605
643
|
return {
|
|
@@ -609,9 +647,7 @@ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBoo
|
|
|
609
647
|
slippageBps: suggestedSlippageBps
|
|
610
648
|
};
|
|
611
649
|
} else {
|
|
612
|
-
|
|
613
|
-
`Suggested slippage is only ${suggestedSlippageBps} BPS. Using the default slippage (${defaultSlippageBps} BPS)`
|
|
614
|
-
);
|
|
650
|
+
log4(`No suggested slippage. Using the default slippage (${defaultSlippageBps} BPS)`);
|
|
615
651
|
}
|
|
616
652
|
}
|
|
617
653
|
return {
|
|
@@ -626,7 +662,7 @@ async function getQuote(_tradeParameters, trader, advancedSettings, _orderBookAp
|
|
|
626
662
|
const { quote, orderBookApi, tradeParameters, slippageBps, suggestedSlippageBps, appDataInfo, isEthFlow } = await getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBookApi);
|
|
627
663
|
const { partnerFee, sellTokenDecimals, buyTokenDecimals } = tradeParameters;
|
|
628
664
|
const { chainId, account: from } = trader;
|
|
629
|
-
const amountsAndCosts =
|
|
665
|
+
const amountsAndCosts = getQuoteAmountsAndCosts3({
|
|
630
666
|
orderParams: quote.quote,
|
|
631
667
|
slippagePercentBps: slippageBps,
|
|
632
668
|
partnerFeeBps: getPartnerFeeBps(partnerFee),
|
|
@@ -720,7 +756,7 @@ async function postSwapOrderFromQuote({
|
|
|
720
756
|
|
|
721
757
|
// src/postLimitOrder.ts
|
|
722
758
|
import { OrderBookApi as OrderBookApi4 } from "@cowprotocol/sdk-order-book";
|
|
723
|
-
import { log as
|
|
759
|
+
import { log as log5 } from "@cowprotocol/sdk-common";
|
|
724
760
|
async function postLimitOrder(params, advancedSettings, _orderBookApi) {
|
|
725
761
|
const appDataSlippage = advancedSettings?.appData?.metadata?.quote?.slippageBips;
|
|
726
762
|
const partnerFeeOverride = advancedSettings?.appData?.metadata?.partnerFee;
|
|
@@ -737,9 +773,9 @@ async function postLimitOrder(params, advancedSettings, _orderBookApi) {
|
|
|
737
773
|
params.env = "prod";
|
|
738
774
|
}
|
|
739
775
|
const { appCode, chainId, sellToken, buyToken, sellAmount, buyAmount, partnerFee } = params;
|
|
740
|
-
|
|
776
|
+
log5(`Limit order ${sellAmount} ${sellToken} for ${buyAmount} ${buyToken} on chain ${chainId}`);
|
|
741
777
|
const orderBookApi = _orderBookApi || new OrderBookApi4({ chainId, env: params.env });
|
|
742
|
-
|
|
778
|
+
log5("Building app data...");
|
|
743
779
|
const appDataInfo = await buildAppData(
|
|
744
780
|
{
|
|
745
781
|
slippageBps: params.slippageBps,
|
|
@@ -785,6 +821,14 @@ var TradingSdk = class {
|
|
|
785
821
|
}
|
|
786
822
|
setTraderParams(params) {
|
|
787
823
|
this.traderParams = { ...this.traderParams, ...params };
|
|
824
|
+
if (this.options.orderBookApi) {
|
|
825
|
+
if (params.chainId) {
|
|
826
|
+
this.options.orderBookApi.context.chainId = params.chainId;
|
|
827
|
+
}
|
|
828
|
+
if (params.env) {
|
|
829
|
+
this.options.orderBookApi.context.env = params.env;
|
|
830
|
+
}
|
|
831
|
+
}
|
|
788
832
|
return this;
|
|
789
833
|
}
|
|
790
834
|
async getQuote(params, advancedSettings) {
|
|
@@ -874,7 +918,7 @@ var TradingSdk = class {
|
|
|
874
918
|
const { chainId, signer, appCode, env } = params;
|
|
875
919
|
const traderParams = {
|
|
876
920
|
chainId: chainId || this.traderParams.chainId,
|
|
877
|
-
signer: signer || this.traderParams.signer,
|
|
921
|
+
signer: signer || this.traderParams.signer || getGlobalAdapter6().signer,
|
|
878
922
|
appCode: appCode || this.traderParams.appCode,
|
|
879
923
|
env: env || this.traderParams.env
|
|
880
924
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cowprotocol/sdk-trading",
|
|
3
|
-
"version": "0.2.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "CowProtocol trading",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -13,22 +13,7 @@
|
|
|
13
13
|
"publishConfig": {
|
|
14
14
|
"access": "public"
|
|
15
15
|
},
|
|
16
|
-
"scripts": {
|
|
17
|
-
"build": "tsup src/index.ts --format esm,cjs --dts",
|
|
18
|
-
"lint": "eslint src/**/*.ts",
|
|
19
|
-
"test": "jest",
|
|
20
|
-
"test:watch": "jest --watch",
|
|
21
|
-
"test:coverage": "jest --coverage --json --outputFile=jest.results.json && npx coveralls < ./coverage/lcov.info",
|
|
22
|
-
"test:coverage:html": "jest --silent=false --coverage --coverageReporters html",
|
|
23
|
-
"typecheck": "tsc --noEmit",
|
|
24
|
-
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
25
|
-
"prepublishOnly": "npm run build"
|
|
26
|
-
},
|
|
27
16
|
"devDependencies": {
|
|
28
|
-
"@cow-sdk/typescript-config": "workspace:*",
|
|
29
|
-
"@cowprotocol/sdk-ethers-v5-adapter": "workspace:*",
|
|
30
|
-
"@cowprotocol/sdk-ethers-v6-adapter": "workspace:*",
|
|
31
|
-
"@cowprotocol/sdk-viem-adapter": "workspace:*",
|
|
32
17
|
"@ethersproject/constants": "^5.7.0",
|
|
33
18
|
"@types/jest": "^29.5.12",
|
|
34
19
|
"@types/node": "^20.17.31",
|
|
@@ -42,15 +27,29 @@
|
|
|
42
27
|
"ethers-v6": "npm:ethers@^6.13.7",
|
|
43
28
|
"viem": "^2.28.4",
|
|
44
29
|
"ts-jest": "^29.0.0",
|
|
45
|
-
"tsx": "^4.19.4"
|
|
30
|
+
"tsx": "^4.19.4",
|
|
31
|
+
"@cow-sdk/typescript-config": "0.0.0-beta.0",
|
|
32
|
+
"@cowprotocol/sdk-ethers-v5-adapter": "0.1.1",
|
|
33
|
+
"@cowprotocol/sdk-ethers-v6-adapter": "0.1.1",
|
|
34
|
+
"@cowprotocol/sdk-viem-adapter": "0.1.1"
|
|
46
35
|
},
|
|
47
36
|
"dependencies": {
|
|
48
|
-
"
|
|
49
|
-
"@cowprotocol/sdk-
|
|
50
|
-
"@cowprotocol/sdk-
|
|
51
|
-
"@cowprotocol/sdk-order-
|
|
52
|
-
"@cowprotocol/sdk-
|
|
53
|
-
"@cowprotocol/sdk-
|
|
54
|
-
"
|
|
37
|
+
"deepmerge": "^4.3.1",
|
|
38
|
+
"@cowprotocol/sdk-common": "0.2.0",
|
|
39
|
+
"@cowprotocol/sdk-config": "0.1.0",
|
|
40
|
+
"@cowprotocol/sdk-order-signing": "0.1.4",
|
|
41
|
+
"@cowprotocol/sdk-app-data": "4.0.1",
|
|
42
|
+
"@cowprotocol/sdk-order-book": "0.1.1",
|
|
43
|
+
"@cowprotocol/sdk-contracts-ts": "0.3.0"
|
|
44
|
+
},
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsup src/index.ts --format esm,cjs --dts",
|
|
47
|
+
"lint": "eslint src/**/*.ts",
|
|
48
|
+
"test": "jest",
|
|
49
|
+
"test:watch": "jest --watch",
|
|
50
|
+
"test:coverage": "jest --coverage --json --outputFile=jest.results.json && npx coveralls < ./coverage/lcov.info",
|
|
51
|
+
"test:coverage:html": "jest --silent=false --coverage --coverageReporters html",
|
|
52
|
+
"typecheck": "tsc --noEmit",
|
|
53
|
+
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
|
|
55
54
|
}
|
|
56
|
-
}
|
|
55
|
+
}
|