yarn add ccip-sdk
-
OrderBookApi
- provides the ability to retrieve orders and trades from the CoW Protocol order-book, as well as add and cancel them -
OrderSigningUtils
- serves to sign orders and cancel them using EIP-712
import { OrderBookApi, OrderSigningUtils, SubgraphApi } from 'ccip-sdk'
const chainId = 100 // Gnosis chain
const orderBookApi = new OrderBookApi({ chainId })
const orderSigningUtils = new OrderSigningUtils()
import { OrderBookApi, OrderSigningUtils, SupportedChainId } from '@cowprotocol/cow-sdk'
import { Web3Provider } from '@ethersproject/providers'
const account = 'YOUR_WALLET_ADDRESS'
const chainId = 5 // Goerli
const provider = new Web3Provider(window.ethereum)
const signer = provider.getSigner()
const quoteRequest = {
sellToken: '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6', // WETH goerli
buyToken: '0x02abbdbaaa7b1bb64b5c878f7ac17f8dda169532', // GNO goerli
from: account,
receiver: account,
sellAmountBeforeFee: (0.4 * 10 ** 18).toString(), // 0.4 WETH
kind: OrderQuoteSide.kind.SELL,
}
const orderBookApi = new OrderBookApi({ chainId: SupportedChainId.GOERLI })
async function main() {
const { quote } = await orderBookApi.getQuote(quoteRequest)
const orderSigningResult = await OrderSigningUtils.signOrder(quote, chainId, signer)
const orderId = await orderBookApi.sendOrder({ ...quote, ...orderSigningResult })
const order = await orderBookApi.getOrder(orderId)
const trades = await orderBookApi.getTrades({ orderId })
const orderCancellationSigningResult = await OrderSigningUtils.signOrderCancellations([orderId], chainId, signer)
const cancellationResult = await orderBookApi.sendSignedOrderCancellations({...orderCancellationSigningResult, orderUids: [orderId] })
console.log('Results: ', { orderId, order, trades, orderCancellationSigningResult, cancellationResult })
}
OrderBookApi
- is a main tool for working
Since the API supports different networks and environments, there are some options to configure it.
chainId
- can be one of SupportedChainId.MAINNET
, SupportedChainId.GNOSIS_CHAIN
, or SupportedChainId.GOERLI
env
- this parameter affects which environment will be used:
-
https://api.cow.fi
forprod
(default) -
https://barn.api.cow.fi
forstaging
import { OrderBookApi } from '@cowprotocol/cow-sdk'
const orderBookApi = new OrderBookApi({
chainId: SupportedChainId.GOERLI,
env: 'staging' // <-----
})
In case you need to use custom endpoints (e.g. you use a proxy), you can do it this way:
import { OrderBookApi } from '@cowprotocol/cow-sdk'
const orderBookApi = new OrderBookApi({
chainId: SupportedChainId.GOERLI,
baseUrls: { // <-----
[SupportedChainId.MAINNET]: 'https://YOUR_ENDPOINT/mainnet',
[SupportedChainId.GNOSIS_CHAIN]: 'https://YOUR_ENDPOINT/xdai',
[SupportedChainId.GOERLI]: 'https://YOUR_ENDPOINT/goerli',
}
})
The client's limiter settings can be configured as well:
import { OrderBookApi } from '@cowprotocol/cow-sdk'
import { BackoffOptions } from 'exponential-backoff'
import { RateLimiterOpts } from 'limiter'
const limiterOpts: RateLimiterOpts = {
tokensPerInterval: 5,
interval: 'second',
}
const backOffOpts: BackoffOptions = {
numOfAttempts: 5,
maxDelay: Infinity,
jitter: 'none',
}
const orderBookApi = new OrderBookApi(
{chainId: SupportedChainId.GOERLI, limiterOpts, backOffOpts},
)
One way to make the most out of the SDK is to get familiar with its architecture.
yarn
yarn build
# Build in watch mode
yarn start
yarn test
Some parts of the SDK are automatically generated. This is the case for the Order Book API and the Subgraph API
# Re-create automatically generated code
yarn codegen