@cowprotocol/cow-sdk 5.9.0 → 5.10.0-RC.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.
Files changed (41) hide show
  1. package/README.md +44 -3
  2. package/dist/COPYRIGHT.md +13 -0
  3. package/dist/README.md +44 -3
  4. package/dist/docs/architecture.md +353 -0
  5. package/dist/examples/cra/README.md +21 -0
  6. package/dist/{index-d7269169.js → index-899857a6.js} +3 -3
  7. package/dist/index-899857a6.js.map +1 -0
  8. package/dist/index.js +2 -2
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.modern.mjs +1 -1
  11. package/dist/index.module.js +2 -2
  12. package/dist/index.module.js.map +1 -1
  13. package/dist/order-book/generated/index.d.ts +0 -1
  14. package/dist/order-book/generated/models/Auction.d.ts +1 -10
  15. package/dist/order-book/generated/models/AuctionPrices.d.ts +1 -4
  16. package/dist/order-book/generated/models/CompetitionOrderStatus.d.ts +4 -2
  17. package/dist/order-book/generated/models/ExecutedProtocolFee.d.ts +0 -6
  18. package/dist/order-book/generated/models/OnchainOrderData.d.ts +3 -9
  19. package/dist/order-book/generated/models/OrderCreation.d.ts +4 -12
  20. package/dist/order-book/generated/models/OrderMetaData.d.ts +20 -17
  21. package/dist/order-book/generated/models/OrderParameters.d.ts +1 -2
  22. package/dist/order-book/generated/models/OrderQuoteRequest.d.ts +11 -7
  23. package/dist/order-book/generated/models/OrderQuoteResponse.d.ts +1 -2
  24. package/dist/order-book/generated/models/OrderQuoteSide.d.ts +1 -2
  25. package/dist/order-book/generated/models/PriceQuality.d.ts +4 -3
  26. package/dist/order-book/generated/models/SolverSettlement.d.ts +6 -1
  27. package/dist/order-book/generated/models/UID.d.ts +4 -3
  28. package/dist/package.json +5 -3
  29. package/dist/schemas/trading/SwapAdvancedSettings.ts +2 -2
  30. package/dist/src/trading/README.md +432 -0
  31. package/dist/trading/postSwapOrder.d.ts +1 -1
  32. package/dist/trading/utils.d.ts +2 -2
  33. package/dist/{utils-7f502e5c.js → utils-14234cbd.js} +1 -1
  34. package/dist/{utils-7f502e5c.js.map → utils-14234cbd.js.map} +1 -1
  35. package/dist/{utils-be09ebbf.js → utils-40779f9d.js} +2 -2
  36. package/dist/{utils-be09ebbf.js.map → utils-40779f9d.js.map} +1 -1
  37. package/dist/{utils-83038876.js → utils-d57bf851.js} +1 -1
  38. package/dist/{utils-83038876.js.map → utils-d57bf851.js.map} +1 -1
  39. package/package.json +5 -3
  40. package/dist/index-d7269169.js.map +0 -1
  41. package/dist/order-book/generated/models/ProtocolAppData.d.ts +0 -1
package/README.md CHANGED
@@ -22,7 +22,50 @@
22
22
  yarn add @cowprotocol/cow-sdk
23
23
  ```
24
24
 
25
- ### Content
25
+ ## [Trading SDK](https://github.com/cowprotocol/cow-sdk/blob/main/src/trading/README.md)
26
+
27
+ CoW Protocol is intent based, decentralized trading protocol that allows users to trade ERC-20 tokens.
28
+
29
+ The basic swap flow:
30
+ 1. 🔎 Get a quote (price) for a trade (_or define your own price with a limit order_)
31
+ 2. ✍️ Sign the order
32
+ 3. ✅ Post the order to the order-book
33
+
34
+ The easiest way to start trading is to use the `TradingSdk`:
35
+
36
+ ```typescript
37
+ import { SupportedChainId, OrderKind, TradeParameters, TradingSdk } from '@cowprotocol/cow-sdk'
38
+
39
+ // Initialize the SDK
40
+ const sdk = new TradingSdk({
41
+ chainId: SupportedChainId.SEPOLIA,
42
+ signer: '<privateKeyOrEthersSigner>',
43
+ appCode: '<YOUR_APP_CODE>',
44
+ })
45
+
46
+ // Define trade parameters
47
+ const parameters: TradeParameters = {
48
+ kind: OrderKind.BUY,
49
+ sellToken: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14',
50
+ sellTokenDecimals: 18,
51
+ buyToken: '0x0625afb445c3b6b7b929342a04a22599fd5dbb59',
52
+ buyTokenDecimals: 18,
53
+ amount: '120000000000000000'
54
+ }
55
+
56
+ // Post the order
57
+ const orderId = await sdk.postSwapOrder(parameters)
58
+
59
+ console.log('Order created, id: ', orderId)
60
+ ```
61
+
62
+ This example is the simplest way to trade on CoW Protocol.
63
+
64
+ You might want to use more advanced parameters like `receiver`, `partiallyFillable`, `validTo` and others.
65
+ Check the [Trading SDK documentation](https://github.com/cowprotocol/cow-sdk/blob/main/src/trading/README.md) for more details.
66
+
67
+
68
+ ## Other utilities
26
69
 
27
70
  - `OrderBookApi` - provides the ability to retrieve orders and trades from the CoW Protocol order-book, as well as add and cancel them
28
71
  - `OrderSigningUtils` - serves to sign orders and cancel them using [EIP-712](https://eips.ethereum.org/EIPS/eip-712)
@@ -38,8 +81,6 @@ const subgraphApi = new SubgraphApi({ chainId })
38
81
  const orderSigningUtils = new OrderSigningUtils()
39
82
  ```
40
83
 
41
- ## Quick start
42
-
43
84
  ### Sign, fetch, post and cancel order
44
85
 
45
86
  For clarity, let's look at the use of the API with a practical example:
@@ -0,0 +1,13 @@
1
+ # Intellectual Property Notice
2
+
3
+ Copyright 2021 Gnosis Ltd
4
+
5
+ Copyrights in this project are retained by contributors. No copyright assignment
6
+ is required to contribute to this project.
7
+
8
+ Except as otherwise noted (below and/or in individual files), this project is
9
+ licensed under the Apache License, Version 2.0
10
+ ([`LICENSE-APACHE`](LICENSE-APACHE) or
11
+ http://www.apache.org/licenses/LICENSE-2.0) or the MIT license,
12
+ ([`LICENSE-MIT`](LICENSE-MIT) or http://opensource.org/licenses/MIT), at your
13
+ option.
package/dist/README.md CHANGED
@@ -22,7 +22,50 @@
22
22
  yarn add @cowprotocol/cow-sdk
23
23
  ```
24
24
 
25
- ### Content
25
+ ## [Trading SDK](https://github.com/cowprotocol/cow-sdk/blob/main/src/trading/README.md)
26
+
27
+ CoW Protocol is intent based, decentralized trading protocol that allows users to trade ERC-20 tokens.
28
+
29
+ The basic swap flow:
30
+ 1. 🔎 Get a quote (price) for a trade (_or define your own price with a limit order_)
31
+ 2. ✍️ Sign the order
32
+ 3. ✅ Post the order to the order-book
33
+
34
+ The easiest way to start trading is to use the `TradingSdk`:
35
+
36
+ ```typescript
37
+ import { SupportedChainId, OrderKind, TradeParameters, TradingSdk } from '@cowprotocol/cow-sdk'
38
+
39
+ // Initialize the SDK
40
+ const sdk = new TradingSdk({
41
+ chainId: SupportedChainId.SEPOLIA,
42
+ signer: '<privateKeyOrEthersSigner>',
43
+ appCode: '<YOUR_APP_CODE>',
44
+ })
45
+
46
+ // Define trade parameters
47
+ const parameters: TradeParameters = {
48
+ kind: OrderKind.BUY,
49
+ sellToken: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14',
50
+ sellTokenDecimals: 18,
51
+ buyToken: '0x0625afb445c3b6b7b929342a04a22599fd5dbb59',
52
+ buyTokenDecimals: 18,
53
+ amount: '120000000000000000'
54
+ }
55
+
56
+ // Post the order
57
+ const orderId = await sdk.postSwapOrder(parameters)
58
+
59
+ console.log('Order created, id: ', orderId)
60
+ ```
61
+
62
+ This example is the simplest way to trade on CoW Protocol.
63
+
64
+ You might want to use more advanced parameters like `receiver`, `partiallyFillable`, `validTo` and others.
65
+ Check the [Trading SDK documentation](https://github.com/cowprotocol/cow-sdk/blob/main/src/trading/README.md) for more details.
66
+
67
+
68
+ ## Other utilities
26
69
 
27
70
  - `OrderBookApi` - provides the ability to retrieve orders and trades from the CoW Protocol order-book, as well as add and cancel them
28
71
  - `OrderSigningUtils` - serves to sign orders and cancel them using [EIP-712](https://eips.ethereum.org/EIPS/eip-712)
@@ -38,8 +81,6 @@ const subgraphApi = new SubgraphApi({ chainId })
38
81
  const orderSigningUtils = new OrderSigningUtils()
39
82
  ```
40
83
 
41
- ## Quick start
42
-
43
84
  ### Sign, fetch, post and cancel order
44
85
 
45
86
  For clarity, let's look at the use of the API with a practical example:
@@ -0,0 +1,353 @@
1
+ # Architecture
2
+
3
+ ```mermaid
4
+ flowchart LR
5
+
6
+ SDK[cow-sdk]
7
+ OrderBookApi
8
+ SubgraphApi
9
+ MetadataApi
10
+
11
+ SDK --> OrderBookApi
12
+ SDK --> SubgraphApi
13
+ SDK --> MetadataApi
14
+ ```
15
+
16
+ The SDK has 3 main APIs
17
+
18
+ - **Order Book API**: Allows to get the open orders, historic orders, post new orders, etc.
19
+ - **Subgraph API**: Provides access to on-chain data indexed by The Graph
20
+ - **Metadata API**: Allows to encode/decode meta-data to be attached in orders
21
+
22
+ ## Model: Orders
23
+
24
+ The orders model used for the API is organized in a hierarchy:
25
+
26
+ ```mermaid
27
+ classDiagram
28
+
29
+ OrderParameters <|-- OrderCreation
30
+ OrderCreation <|-- Order
31
+ OrderMetaData <|-- Order
32
+ Order <|-- EnrichedOrder
33
+ ```
34
+
35
+ ## Model: Orders (details)
36
+
37
+ ```mermaid
38
+ classDiagram
39
+
40
+
41
+ class OrderParameters {
42
+ + sellAmount: TokenAmount;
43
+ + buyAmount: TokenAmount;
44
+ + validTo: number;
45
+ + feeAmount: TokenAmount;
46
+ + kind: OrderKind;
47
+ + partiallyFillable: boolean;
48
+ }
49
+
50
+ Address
51
+
52
+ class SellTokenSource {
53
+ <<enum>>
54
+ ERC20 = 'erc20'
55
+ INTERNAL = 'internal'
56
+ EXTERNAL = 'external'
57
+ }
58
+
59
+ class BuyTokenDestination{
60
+ <<enum>>
61
+ ERC20 = 'erc20',
62
+ INTERNAL = 'internal',
63
+ }
64
+
65
+
66
+ class SigningScheme{
67
+ <<enum>>
68
+ EIP712 = 'eip712',
69
+ ETHSIGN = 'ethsign',
70
+ PRESIGN = 'presign',
71
+ EIP1271 = 'eip1271',
72
+ }
73
+
74
+ class AppData {
75
+ string
76
+ }
77
+
78
+ class OrderKind {
79
+ <<enum>>
80
+ BUY = 'buy'
81
+ SELL = 'sell'
82
+ }
83
+
84
+ OrderParameters --> Address: sellToken
85
+ OrderParameters --> Address: buyToken
86
+ OrderParameters --> OrderKind: kind
87
+ OrderParameters "0..1" --> SellTokenSource: sellTokenBalance
88
+ OrderParameters "0..1" --> BuyTokenDestination: buyTokenBalance
89
+ OrderParameters --> SigningScheme: signingScheme
90
+ OrderParameters "0..1" --> Address: receiver
91
+ OrderParameters --> AppData: appData
92
+
93
+
94
+ class OrderCreation {
95
+ + signingScheme: SigningScheme;
96
+ + signature: Signature
97
+ + from?: Address | null
98
+ + quoteId?: number | null
99
+ }
100
+
101
+ class OrderMetaData {
102
+ + creationDate: string;
103
+ + uid: UID;
104
+ + invalidated: boolean;
105
+
106
+ + availableBalance?: TokenAmount | null;
107
+ + executedSellAmount: BigUint;
108
+ + executedSellAmountBeforeFees: BigUint;
109
+ + executedBuyAmount: BigUint;
110
+ + executedFeeAmount: BigUint;
111
+ + fullFeeAmount?: TokenAmount;
112
+ + isLiquidityOrder?: boolean;
113
+ + onchainUser?: Address;
114
+ + executedFee?: BigUint | null;
115
+ }
116
+
117
+ class OrderStatus {
118
+ <<enum>>
119
+ PRESIGNATURE_PENDING = 'presignaturePending'
120
+ OPEN = 'open'
121
+ FULFILLED = 'fulfilled'
122
+ CANCELLED = 'cancelled'
123
+ EXPIRED = 'expired'
124
+ }
125
+
126
+ class EthflowData {
127
+ + refundTxHash: TransactionHash | null;
128
+ + userValidTo: number;
129
+ + isRefunded: boolean;
130
+ }
131
+
132
+ OrderMetaData --> OrderStatus: status
133
+ OrderMetaData --> OrderClass: class
134
+ OrderMetaData --> Address2: owner
135
+ OrderMetaData "0..1" --> EthflowData: ethflowData
136
+ OrderMetaData "0..1" --> OnchainOrderData: onchainOrderData
137
+
138
+ class OrderClass {
139
+ <<enum>>
140
+ MARKET = 'market'
141
+ LIMIT = 'limit'
142
+ LIQUIDITY = 'liquidity'
143
+ }
144
+
145
+
146
+ class EnrichedOrder{
147
+ totalFee: string
148
+ }
149
+
150
+
151
+ OrderParameters <|-- OrderCreation
152
+ OrderCreation <|-- Order
153
+ OrderMetaData <|-- Order
154
+ Order <|-- EnrichedOrder
155
+
156
+
157
+ cssClass "OrderParameters,OrderCreation,OrderMetaData, Order" important
158
+ ```
159
+
160
+ ## Model: Trades
161
+
162
+ ```mermaid
163
+ classDiagram
164
+
165
+
166
+ class Trades {
167
+ + orderUid: UID
168
+ + blockNumber: number
169
+ + logIndex: number
170
+ + sellAmountBeforeFees: BigUint
171
+ }
172
+
173
+ Trades --> Address: sellToken
174
+ Trades --> Address: buyToken
175
+ Trades --> Address: owner
176
+
177
+ Trades --> TokenAmount: sellAmount
178
+ Trades --> TokenAmount: buyAmount
179
+
180
+
181
+ Trades "0..1" --> TransactionHash: txHash
182
+ ```
183
+
184
+ ## Order Book API
185
+
186
+ Allows to get the open orders, historic orders, post new orders, etc.
187
+
188
+ - 📚 [Swagger - Api Docs](https://api.cow.fi/docs)
189
+ - 📚 [Dev Docs - API](https://docs.cow.fi/cow-sdk/cow-api)
190
+
191
+ The API allows to
192
+
193
+ ```mermaid
194
+ classDiagram
195
+
196
+ class CowApi {
197
+ + getTrades(params) Promise~Trades[]~
198
+ + getOrders(parmas): Promise~EnrichedOrder[]~
199
+ + getTxOrders(tx: string): Promise~EnrichedOrder[]~
200
+ + getOrder(uid: UID): Promise~EnrichedOrder~
201
+ + getQuote(quote: OrderQuoteRequest): Promise~OrderQuoteResponse~
202
+ + sendSignedOrderCancellation(uid: UID, params): Promise~void~
203
+ + sendOrder(order: OrderCreation): Promise~UID~
204
+ + getOrderLink(uid: UID): string
205
+ }
206
+
207
+
208
+
209
+ class OrderQuoteRequest {
210
+ + sellToken: Address;
211
+ + buyToken: Address;
212
+ // ...
213
+ }
214
+
215
+
216
+ class OrderQuoteResponse{
217
+ + id?: number
218
+ + from?: Address
219
+ + expiration?: string
220
+ }
221
+
222
+ OrderQuoteResponse "0..1" --> OrderParameters: quote
223
+
224
+ CowApi ..> Trade
225
+ CowApi ..> EnrichedOrder
226
+ CowApi ..> SignedOrder
227
+ CowApi ..> OrderCreation
228
+ CowApi ..> OrderQuoteResponse
229
+ CowApi ..> OrderQuoteRequest
230
+ ```
231
+
232
+ ## API: Subgraph
233
+
234
+ Provides access to on-chain data indexed by The Graph
235
+
236
+ > ⚽️ [Playground](https://thegraph.com/hosted-service/subgraph/cowprotocol/cow)
237
+
238
+ > 📚 [Dev Docs - SubGraph](https://docs.cow.fi/cow-sdk/querying-the-cow-subgraph)
239
+
240
+ > 📄 [GitHub code](https://github.com/cowprotocol/subgraph)
241
+
242
+ **NOTE**: For details about the model, it's better to check the schema using the exported Typescript, or by reviewing the [schema definition](https://thegraph.com/hosted-service/subgraph/cowprotocol/cow).
243
+
244
+ ```mermaid
245
+ classDiagram
246
+
247
+ class CowSubgraphApi {
248
+ + getTotals(): Promise~Total~
249
+ + getLastHoursVolume(): Promise~LastHoursVolumeQuery~
250
+ + getLastDaysVolume(): Promise~LastDaysVolumeQuery~
251
+ + runQuery(query, variables): Promise~T~
252
+ }
253
+
254
+ class Total {
255
+ + volumeUsd
256
+ + volumeEth
257
+ + feesUsd
258
+ + feesEth
259
+ ...
260
+ }
261
+
262
+
263
+ class LastHoursVolumeQuery{
264
+ volumeUsd: string
265
+ ...
266
+ }
267
+
268
+ class LastDaysVolumeQuery{
269
+ volumeUsd: string
270
+ ...
271
+ }
272
+
273
+ CowSubgraphApi ..> Total
274
+ CowSubgraphApi ..> LastHoursVolumeQuery
275
+ CowSubgraphApi ..> LastDaysVolumeQuery
276
+
277
+ ```
278
+
279
+ ## API: Meta-data
280
+
281
+ Allows to encode/decode meta-data to be attached in orders
282
+
283
+ > 📚 [Dev Docs - Metadata](https://docs.cow.fi/cow-sdk/order-meta-data-appdata)
284
+
285
+ > 📄 [GitHub code](https://github.com/cowprotocol/app-data)
286
+
287
+ ```mermaid
288
+ classDiagram
289
+
290
+ class MetadataApi {
291
+ + generateAppDataDoc(params: GenerateAppDataDocParams): AppDataDoc
292
+ + validateAppDataDoc(appDataDoc: AppDataDoc): ValidateResult
293
+ + calculateAppDataHash(appDataDoc: AppDataDoc): Promise~IpfsHashInfo|void~
294
+ + uploadMetadataDocToIpfs(appDataDoc: AppDataDoc, ipfsConfig): Promise~string|void~
295
+ + decodeAppData(hash: string): AppDataDoc
296
+ + appDataHexToCid(hash: string): Promise~string|void~
297
+ }
298
+
299
+ class AppDataDoc {
300
+ version: Version;
301
+ appCode?: string;
302
+ environment?: string;
303
+ }
304
+
305
+ AppDataDoc --> Metadata: metadata
306
+
307
+ class Referrer {
308
+ version: string;
309
+ address: string;
310
+ }
311
+
312
+ class Quote {
313
+ version: string;
314
+ address: string;
315
+ }
316
+
317
+ class IpfsHashInfo {
318
+ + cidV0: string
319
+ + appDataHash: string
320
+ }
321
+
322
+ class OrderClass {
323
+ version: string;
324
+ orderClass: string;
325
+ }
326
+
327
+ class AppDataParams {
328
+ ...
329
+ }
330
+
331
+
332
+ class Metadata {
333
+ ...
334
+ }
335
+
336
+ class MetadataParams {
337
+ ...
338
+ }
339
+
340
+
341
+ MetadataApi ..> IpfsHashInfo
342
+ MetadataApi ..> GenerateAppDataDocParams
343
+ MetadataApi ..> AppDataDoc
344
+
345
+ GenerateAppDataDocParams --> AppDataParams: appDataParams
346
+ GenerateAppDataDocParams --> MetadataParams: metadataParams
347
+
348
+
349
+
350
+ Metadata --> Referrer: referrer
351
+ Metadata --> Quote: quote
352
+ Metadata --> OrderClass: orderClass
353
+ ```
@@ -0,0 +1,21 @@
1
+ # Example of CoW Protocol SDK usage
2
+
3
+ ## How to start
4
+
5
+ ### Install dependencies
6
+
7
+ ```bash
8
+ yarn install
9
+ ```
10
+
11
+ ### Run the local server
12
+
13
+ ```bash
14
+ yarn start
15
+ ```
16
+
17
+ ### Open browser with url
18
+
19
+ ```bash
20
+ http://localhost:3000
21
+ ```