@velora-dex/sdk 8.0.0
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/LICENSE +7 -0
- package/README.md +494 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/examples/customFetcher.d.ts +3 -0
- package/dist/examples/customFetcher.d.ts.map +1 -0
- package/dist/examples/delta.d.ts +2 -0
- package/dist/examples/delta.d.ts.map +1 -0
- package/dist/examples/ethersV6.d.ts +2 -0
- package/dist/examples/ethersV6.d.ts.map +1 -0
- package/dist/examples/limitOrders_all.d.ts +2 -0
- package/dist/examples/limitOrders_all.d.ts.map +1 -0
- package/dist/examples/limitOrders_partial.d.ts +2 -0
- package/dist/examples/limitOrders_partial.d.ts.map +1 -0
- package/dist/examples/limitOrders_postOrder.d.ts +2 -0
- package/dist/examples/limitOrders_postOrder.d.ts.map +1 -0
- package/dist/examples/partial.d.ts +2 -0
- package/dist/examples/partial.d.ts.map +1 -0
- package/dist/examples/quote.d.ts +2 -0
- package/dist/examples/quote.d.ts.map +1 -0
- package/dist/examples/sdk.d.ts +2 -0
- package/dist/examples/sdk.d.ts.map +1 -0
- package/dist/examples/simple.d.ts +2 -0
- package/dist/examples/simple.d.ts.map +1 -0
- package/dist/examples/simpleQuote.d.ts +2 -0
- package/dist/examples/simpleQuote.d.ts.map +1 -0
- package/dist/examples/viem.d.ts +2 -0
- package/dist/examples/viem.d.ts.map +1 -0
- package/dist/examples/wagmi.d.ts +43 -0
- package/dist/examples/wagmi.d.ts.map +1 -0
- package/dist/examples/web3.d.ts +2 -0
- package/dist/examples/web3.d.ts.map +1 -0
- package/dist/gas.d.ts +8 -0
- package/dist/gas.d.ts.map +1 -0
- package/dist/helpers/approve.d.ts +8 -0
- package/dist/helpers/approve.d.ts.map +1 -0
- package/dist/helpers/fetchers/axios.d.ts +5 -0
- package/dist/helpers/fetchers/axios.d.ts.map +1 -0
- package/dist/helpers/fetchers/fetch.d.ts +5 -0
- package/dist/helpers/fetchers/fetch.d.ts.map +1 -0
- package/dist/helpers/index.d.ts +13 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/misc.d.ts +48 -0
- package/dist/helpers/misc.d.ts.map +1 -0
- package/dist/helpers/providers/ethers.d.ts +10 -0
- package/dist/helpers/providers/ethers.d.ts.map +1 -0
- package/dist/helpers/providers/ethersV6.d.ts +8 -0
- package/dist/helpers/providers/ethersV6.d.ts.map +1 -0
- package/dist/helpers/providers/helpers.d.ts +3 -0
- package/dist/helpers/providers/helpers.d.ts.map +1 -0
- package/dist/helpers/providers/viem.d.ts +23 -0
- package/dist/helpers/providers/viem.d.ts.map +1 -0
- package/dist/helpers/providers/web3.d.ts +9 -0
- package/dist/helpers/providers/web3.d.ts.map +1 -0
- package/dist/helpers/token.d.ts +38 -0
- package/dist/helpers/token.d.ts.map +1 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/methods/common/orders/buildOrderData.d.ts +27 -0
- package/dist/methods/common/orders/buildOrderData.d.ts.map +1 -0
- package/dist/methods/common/orders/encoding.d.ts +23 -0
- package/dist/methods/common/orders/encoding.d.ts.map +1 -0
- package/dist/methods/common/orders/misc.d.ts +27 -0
- package/dist/methods/common/orders/misc.d.ts.map +1 -0
- package/dist/methods/common/orders/signature.d.ts +9 -0
- package/dist/methods/common/orders/signature.d.ts.map +1 -0
- package/dist/methods/common/orders/types.d.ts +8 -0
- package/dist/methods/common/orders/types.d.ts.map +1 -0
- package/dist/methods/delta/approveForDelta.d.ts +8 -0
- package/dist/methods/delta/approveForDelta.d.ts.map +1 -0
- package/dist/methods/delta/buildCrosschainOrderBridge.d.ts +23 -0
- package/dist/methods/delta/buildCrosschainOrderBridge.d.ts.map +1 -0
- package/dist/methods/delta/buildDeltaOrder.d.ts +49 -0
- package/dist/methods/delta/buildDeltaOrder.d.ts.map +1 -0
- package/dist/methods/delta/getBridgeInfo.d.ts +9 -0
- package/dist/methods/delta/getBridgeInfo.d.ts.map +1 -0
- package/dist/methods/delta/getDeltaContract.d.ts +9 -0
- package/dist/methods/delta/getDeltaContract.d.ts.map +1 -0
- package/dist/methods/delta/getDeltaOrders.d.ts +22 -0
- package/dist/methods/delta/getDeltaOrders.d.ts.map +1 -0
- package/dist/methods/delta/getDeltaPrice.d.ts +58 -0
- package/dist/methods/delta/getDeltaPrice.d.ts.map +1 -0
- package/dist/methods/delta/getMulticallHandlers.d.ts +9 -0
- package/dist/methods/delta/getMulticallHandlers.d.ts.map +1 -0
- package/dist/methods/delta/getPartnerFee.d.ts +16 -0
- package/dist/methods/delta/getPartnerFee.d.ts.map +1 -0
- package/dist/methods/delta/helpers/across.d.ts +22 -0
- package/dist/methods/delta/helpers/across.d.ts.map +1 -0
- package/dist/methods/delta/helpers/buildDeltaOrderData.d.ts +35 -0
- package/dist/methods/delta/helpers/buildDeltaOrderData.d.ts.map +1 -0
- package/dist/methods/delta/helpers/composePermit.d.ts +5 -0
- package/dist/methods/delta/helpers/composePermit.d.ts.map +1 -0
- package/dist/methods/delta/helpers/misc.d.ts +3 -0
- package/dist/methods/delta/helpers/misc.d.ts.map +1 -0
- package/dist/methods/delta/helpers/types.d.ts +96 -0
- package/dist/methods/delta/helpers/types.d.ts.map +1 -0
- package/dist/methods/delta/index.d.ts +28 -0
- package/dist/methods/delta/index.d.ts.map +1 -0
- package/dist/methods/delta/isTokenSupportedInDelta.d.ts +8 -0
- package/dist/methods/delta/isTokenSupportedInDelta.d.ts.map +1 -0
- package/dist/methods/delta/postDeltaOrder.d.ts +23 -0
- package/dist/methods/delta/postDeltaOrder.d.ts.map +1 -0
- package/dist/methods/delta/signDeltaOrder.d.ts +12 -0
- package/dist/methods/delta/signDeltaOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/approveForOrder.d.ts +12 -0
- package/dist/methods/limitOrders/approveForOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/buildOrder.d.ts +11 -0
- package/dist/methods/limitOrders/buildOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/cancelOrder.d.ts +9 -0
- package/dist/methods/limitOrders/cancelOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/fillOrderDirectly.d.ts +30 -0
- package/dist/methods/limitOrders/fillOrderDirectly.d.ts.map +1 -0
- package/dist/methods/limitOrders/getOrders.d.ts +39 -0
- package/dist/methods/limitOrders/getOrders.d.ts.map +1 -0
- package/dist/methods/limitOrders/getOrdersContract.d.ts +8 -0
- package/dist/methods/limitOrders/getOrdersContract.d.ts.map +1 -0
- package/dist/methods/limitOrders/helpers/buildOrderData.d.ts +43 -0
- package/dist/methods/limitOrders/helpers/buildOrderData.d.ts.map +1 -0
- package/dist/methods/limitOrders/helpers/misc.d.ts +9 -0
- package/dist/methods/limitOrders/helpers/misc.d.ts.map +1 -0
- package/dist/methods/limitOrders/helpers/types.d.ts +49 -0
- package/dist/methods/limitOrders/helpers/types.d.ts.map +1 -0
- package/dist/methods/limitOrders/index.d.ts +30 -0
- package/dist/methods/limitOrders/index.d.ts.map +1 -0
- package/dist/methods/limitOrders/postOrder.d.ts +10 -0
- package/dist/methods/limitOrders/postOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/signOrder.d.ts +7 -0
- package/dist/methods/limitOrders/signOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/transaction.d.ts +23 -0
- package/dist/methods/limitOrders/transaction.d.ts.map +1 -0
- package/dist/methods/nftOrders/approveForOrder.d.ts +12 -0
- package/dist/methods/nftOrders/approveForOrder.d.ts.map +1 -0
- package/dist/methods/nftOrders/buildOrder.d.ts +11 -0
- package/dist/methods/nftOrders/buildOrder.d.ts.map +1 -0
- package/dist/methods/nftOrders/cancelOrder.d.ts +8 -0
- package/dist/methods/nftOrders/cancelOrder.d.ts.map +1 -0
- package/dist/methods/nftOrders/getOrders.d.ts +18 -0
- package/dist/methods/nftOrders/getOrders.d.ts.map +1 -0
- package/dist/methods/nftOrders/getOrdersContract.d.ts +8 -0
- package/dist/methods/nftOrders/getOrdersContract.d.ts.map +1 -0
- package/dist/methods/nftOrders/helpers/buildOrderData.d.ts +52 -0
- package/dist/methods/nftOrders/helpers/buildOrderData.d.ts.map +1 -0
- package/dist/methods/nftOrders/helpers/misc.d.ts +13 -0
- package/dist/methods/nftOrders/helpers/misc.d.ts.map +1 -0
- package/dist/methods/nftOrders/helpers/types.d.ts +39 -0
- package/dist/methods/nftOrders/helpers/types.d.ts.map +1 -0
- package/dist/methods/nftOrders/index.d.ts +23 -0
- package/dist/methods/nftOrders/index.d.ts.map +1 -0
- package/dist/methods/nftOrders/postOrder.d.ts +10 -0
- package/dist/methods/nftOrders/postOrder.d.ts.map +1 -0
- package/dist/methods/nftOrders/signOrder.d.ts +7 -0
- package/dist/methods/nftOrders/signOrder.d.ts.map +1 -0
- package/dist/methods/nftOrders/transaction.d.ts +23 -0
- package/dist/methods/nftOrders/transaction.d.ts.map +1 -0
- package/dist/methods/quote/getQuote.d.ts +51 -0
- package/dist/methods/quote/getQuote.d.ts.map +1 -0
- package/dist/methods/swap/adapters.d.ts +8 -0
- package/dist/methods/swap/adapters.d.ts.map +1 -0
- package/dist/methods/swap/approve.d.ts +10 -0
- package/dist/methods/swap/approve.d.ts.map +1 -0
- package/dist/methods/swap/balance.d.ts +23 -0
- package/dist/methods/swap/balance.d.ts.map +1 -0
- package/dist/methods/swap/helpers/normalizeRateOptions.d.ts +12 -0
- package/dist/methods/swap/helpers/normalizeRateOptions.d.ts.map +1 -0
- package/dist/methods/swap/index.d.ts +13 -0
- package/dist/methods/swap/index.d.ts.map +1 -0
- package/dist/methods/swap/rates.d.ts +52 -0
- package/dist/methods/swap/rates.d.ts.map +1 -0
- package/dist/methods/swap/spender.d.ts +21 -0
- package/dist/methods/swap/spender.d.ts.map +1 -0
- package/dist/methods/swap/swapTx.d.ts +158 -0
- package/dist/methods/swap/swapTx.d.ts.map +1 -0
- package/dist/methods/swap/token.d.ts +8 -0
- package/dist/methods/swap/token.d.ts.map +1 -0
- package/dist/methods/swap/transaction.d.ts +115 -0
- package/dist/methods/swap/transaction.d.ts.map +1 -0
- package/dist/sdk/full.d.ts +17 -0
- package/dist/sdk/full.d.ts.map +1 -0
- package/dist/sdk/partial.d.ts +31 -0
- package/dist/sdk/partial.d.ts.map +1 -0
- package/dist/sdk/simple.d.ts +75 -0
- package/dist/sdk/simple.d.ts.map +1 -0
- package/dist/sdk.cjs.development.js +5182 -0
- package/dist/sdk.cjs.development.js.map +1 -0
- package/dist/sdk.cjs.production.min.js +2 -0
- package/dist/sdk.cjs.production.min.js.map +1 -0
- package/dist/sdk.esm.js +5102 -0
- package/dist/sdk.esm.js.map +1 -0
- package/dist/types.d.ts +161 -0
- package/dist/types.d.ts.map +1 -0
- package/docs/DELTA.md +207 -0
- package/package.json +126 -0
- package/src/constants.ts +16 -0
- package/src/examples/customFetcher.ts +44 -0
- package/src/examples/delta.ts +127 -0
- package/src/examples/ethersV6.ts +38 -0
- package/src/examples/limitOrders_all.ts +135 -0
- package/src/examples/limitOrders_partial.ts +171 -0
- package/src/examples/limitOrders_postOrder.ts +77 -0
- package/src/examples/partial.ts +34 -0
- package/src/examples/quote.ts +205 -0
- package/src/examples/sdk.ts +39 -0
- package/src/examples/simple.ts +44 -0
- package/src/examples/simpleQuote.ts +98 -0
- package/src/examples/viem.ts +120 -0
- package/src/examples/wagmi.ts +68 -0
- package/src/examples/web3.ts +32 -0
- package/src/gas.ts +7 -0
- package/src/helpers/approve.ts +60 -0
- package/src/helpers/fetchers/axios.ts +34 -0
- package/src/helpers/fetchers/fetch.ts +67 -0
- package/src/helpers/index.ts +27 -0
- package/src/helpers/misc.ts +160 -0
- package/src/helpers/providers/ethers.ts +192 -0
- package/src/helpers/providers/ethersV6.ts +121 -0
- package/src/helpers/providers/helpers.ts +36 -0
- package/src/helpers/providers/viem.ts +205 -0
- package/src/helpers/providers/web3.ts +154 -0
- package/src/helpers/token.ts +75 -0
- package/src/index.ts +425 -0
- package/src/methods/common/orders/buildOrderData.ts +29 -0
- package/src/methods/common/orders/encoding.ts +216 -0
- package/src/methods/common/orders/misc.ts +86 -0
- package/src/methods/common/orders/signature.ts +68 -0
- package/src/methods/common/orders/types.ts +13 -0
- package/src/methods/delta/approveForDelta.ts +38 -0
- package/src/methods/delta/buildCrosschainOrderBridge.ts +84 -0
- package/src/methods/delta/buildDeltaOrder.ts +192 -0
- package/src/methods/delta/getBridgeInfo.ts +38 -0
- package/src/methods/delta/getDeltaContract.ts +29 -0
- package/src/methods/delta/getDeltaOrders.ts +102 -0
- package/src/methods/delta/getDeltaPrice.ts +122 -0
- package/src/methods/delta/getMulticallHandlers.ts +44 -0
- package/src/methods/delta/getPartnerFee.ts +58 -0
- package/src/methods/delta/helpers/across.ts +255 -0
- package/src/methods/delta/helpers/buildDeltaOrderData.ts +153 -0
- package/src/methods/delta/helpers/composePermit.ts +76 -0
- package/src/methods/delta/helpers/misc.ts +32 -0
- package/src/methods/delta/helpers/types.ts +110 -0
- package/src/methods/delta/index.ts +146 -0
- package/src/methods/delta/isTokenSupportedInDelta.ts +54 -0
- package/src/methods/delta/postDeltaOrder.ts +50 -0
- package/src/methods/delta/signDeltaOrder.ts +41 -0
- package/src/methods/limitOrders/approveForOrder.ts +36 -0
- package/src/methods/limitOrders/buildOrder.ts +56 -0
- package/src/methods/limitOrders/cancelOrder.ts +111 -0
- package/src/methods/limitOrders/fillOrderDirectly.ts +277 -0
- package/src/methods/limitOrders/getOrders.ts +151 -0
- package/src/methods/limitOrders/getOrdersContract.ts +20 -0
- package/src/methods/limitOrders/helpers/buildOrderData.ts +121 -0
- package/src/methods/limitOrders/helpers/misc.ts +64 -0
- package/src/methods/limitOrders/helpers/types.ts +70 -0
- package/src/methods/limitOrders/index.ts +154 -0
- package/src/methods/limitOrders/postOrder.ts +74 -0
- package/src/methods/limitOrders/signOrder.ts +29 -0
- package/src/methods/limitOrders/transaction.ts +231 -0
- package/src/methods/nftOrders/approveForOrder.ts +79 -0
- package/src/methods/nftOrders/buildOrder.ts +52 -0
- package/src/methods/nftOrders/cancelOrder.ts +23 -0
- package/src/methods/nftOrders/getOrders.ts +84 -0
- package/src/methods/nftOrders/getOrdersContract.ts +24 -0
- package/src/methods/nftOrders/helpers/buildOrderData.ts +131 -0
- package/src/methods/nftOrders/helpers/misc.ts +92 -0
- package/src/methods/nftOrders/helpers/types.ts +50 -0
- package/src/methods/nftOrders/index.ts +139 -0
- package/src/methods/nftOrders/postOrder.ts +71 -0
- package/src/methods/nftOrders/signOrder.ts +29 -0
- package/src/methods/nftOrders/transaction.ts +234 -0
- package/src/methods/quote/getQuote.ts +131 -0
- package/src/methods/swap/adapters.ts +49 -0
- package/src/methods/swap/approve.ts +51 -0
- package/src/methods/swap/balance.ts +147 -0
- package/src/methods/swap/helpers/normalizeRateOptions.ts +55 -0
- package/src/methods/swap/index.ts +38 -0
- package/src/methods/swap/rates.ts +276 -0
- package/src/methods/swap/spender.ts +76 -0
- package/src/methods/swap/swapTx.ts +266 -0
- package/src/methods/swap/token.ts +35 -0
- package/src/methods/swap/transaction.ts +310 -0
- package/src/sdk/full.ts +54 -0
- package/src/sdk/partial.ts +107 -0
- package/src/sdk/simple.ts +429 -0
- package/src/types.ts +240 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { ethers } from 'ethers';
|
|
4
|
+
import {
|
|
5
|
+
constructPartialSDK,
|
|
6
|
+
constructFullSDK,
|
|
7
|
+
constructGetAdapters,
|
|
8
|
+
constructEthersV6ContractCaller,
|
|
9
|
+
constructAxiosFetcher,
|
|
10
|
+
} from '..';
|
|
11
|
+
|
|
12
|
+
const fetcher = constructAxiosFetcher(axios);
|
|
13
|
+
|
|
14
|
+
const provider = ethers.getDefaultProvider(1);
|
|
15
|
+
const contractCaller = constructEthersV6ContractCaller({
|
|
16
|
+
ethersV6ProviderOrSigner: provider,
|
|
17
|
+
EthersV6Contract: ethers.Contract,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const sdk = constructFullSDK({
|
|
21
|
+
chainId: 1,
|
|
22
|
+
fetcher,
|
|
23
|
+
contractCaller,
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const res = sdk.swap.getAdapters();
|
|
27
|
+
|
|
28
|
+
// type Promise<ContractTransaction>
|
|
29
|
+
const txResponse = sdk.swap.approveToken('1', '0x...');
|
|
30
|
+
// type Promise<ContractTransaction[]>
|
|
31
|
+
const txResponses = sdk.swap.approveTokenBulk('1', ['0x...']);
|
|
32
|
+
|
|
33
|
+
const partial = constructPartialSDK(
|
|
34
|
+
{ apiURL: '', chainId: 1, fetcher },
|
|
35
|
+
constructGetAdapters
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const res1 = partial.getAdapters();
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import BigNumber from 'bignumber.js';
|
|
4
|
+
import { ethers } from 'ethersV5';
|
|
5
|
+
import { assert } from 'ts-essentials';
|
|
6
|
+
import {
|
|
7
|
+
// swap methods
|
|
8
|
+
constructPartialSDK,
|
|
9
|
+
constructEthersContractCaller,
|
|
10
|
+
constructAxiosFetcher,
|
|
11
|
+
// limitOrders methods
|
|
12
|
+
constructAllLimitOrdersHandlers,
|
|
13
|
+
// extra types
|
|
14
|
+
LimitOrderFromApi,
|
|
15
|
+
SwappableOrder,
|
|
16
|
+
} from '..';
|
|
17
|
+
|
|
18
|
+
const account = '0x1234...';
|
|
19
|
+
|
|
20
|
+
const fetcher = constructAxiosFetcher(axios);
|
|
21
|
+
|
|
22
|
+
// provider must have write access to account
|
|
23
|
+
// this would usually be wallet provider (Metamask)
|
|
24
|
+
const provider = ethers.getDefaultProvider(1);
|
|
25
|
+
const contractCaller = constructEthersContractCaller(
|
|
26
|
+
{
|
|
27
|
+
ethersProviderOrSigner: provider,
|
|
28
|
+
EthersContract: ethers.Contract,
|
|
29
|
+
},
|
|
30
|
+
account
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
// type BuildLimitOrderFunctions
|
|
34
|
+
// & SignLimitOrderFunctions
|
|
35
|
+
// & CancelLimitOrderFunctions<ethers.ContractTransaction>
|
|
36
|
+
// & ApproveTokenFunctions<ethers.ContractTransaction>
|
|
37
|
+
const limitOrderSDK = constructPartialSDK(
|
|
38
|
+
{
|
|
39
|
+
chainId: 1,
|
|
40
|
+
fetcher,
|
|
41
|
+
contractCaller,
|
|
42
|
+
},
|
|
43
|
+
constructAllLimitOrdersHandlers
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
|
|
47
|
+
const HEX = '0x2b591e99afe9f32eaa6214f7b7629768c40eeb39';
|
|
48
|
+
|
|
49
|
+
const orderInput = {
|
|
50
|
+
nonce: 1,
|
|
51
|
+
expiry: Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 7, // week from now, in sec
|
|
52
|
+
makerAsset: DAI,
|
|
53
|
+
takerAsset: HEX,
|
|
54
|
+
makerAmount: (1e18).toString(10),
|
|
55
|
+
takerAmount: (8e18).toString(10),
|
|
56
|
+
maker: account,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
async function run() {
|
|
60
|
+
// approve token for the limit order
|
|
61
|
+
const tx1: ethers.ContractTransaction =
|
|
62
|
+
await limitOrderSDK.approveMakerTokenForLimitOrder(
|
|
63
|
+
orderInput.makerAmount,
|
|
64
|
+
orderInput.makerAsset
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
// builds + signs + posts order to API
|
|
68
|
+
// new limit order returned from API
|
|
69
|
+
const newLimitOrder: LimitOrderFromApi = await limitOrderSDK.submitLimitOrder(
|
|
70
|
+
orderInput
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// to act as order taker
|
|
74
|
+
const anotherAccount = '0x5678...';
|
|
75
|
+
|
|
76
|
+
const limitOrdersSDKForTaker = constructPartialSDK(
|
|
77
|
+
{
|
|
78
|
+
chainId: 1,
|
|
79
|
+
fetcher,
|
|
80
|
+
contractCaller: constructEthersContractCaller(
|
|
81
|
+
{
|
|
82
|
+
ethersProviderOrSigner: provider,
|
|
83
|
+
EthersContract: ethers.Contract,
|
|
84
|
+
},
|
|
85
|
+
anotherAccount
|
|
86
|
+
),
|
|
87
|
+
},
|
|
88
|
+
constructAllLimitOrdersHandlers
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
const tx2: ethers.ContractTransaction =
|
|
92
|
+
await limitOrdersSDKForTaker.approveTakerTokenForLimitOrder(
|
|
93
|
+
orderInput.takerAmount,
|
|
94
|
+
orderInput.takerAsset
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
const executingOrder: SwappableOrder = {
|
|
98
|
+
...newLimitOrder,
|
|
99
|
+
permitMakerAsset: newLimitOrder.permitMakerAsset || undefined,
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const { gas: payloadGas, ...LOPayloadTxParams } =
|
|
103
|
+
await limitOrdersSDKForTaker.buildLimitOrderTx({
|
|
104
|
+
srcDecimals: 18,
|
|
105
|
+
destDecimals: 18,
|
|
106
|
+
userAddress: anotherAccount, // taker
|
|
107
|
+
orders: [executingOrder],
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const tx5Params = {
|
|
111
|
+
...LOPayloadTxParams,
|
|
112
|
+
gasPrice:
|
|
113
|
+
LOPayloadTxParams.gasPrice &&
|
|
114
|
+
'0x' + new BigNumber(LOPayloadTxParams.gasPrice).toString(16),
|
|
115
|
+
maxFeePerGas:
|
|
116
|
+
LOPayloadTxParams.maxFeePerGas &&
|
|
117
|
+
'0x' + new BigNumber(LOPayloadTxParams.maxFeePerGas).toString(16),
|
|
118
|
+
maxPriorityFeePerGas:
|
|
119
|
+
LOPayloadTxParams.maxPriorityFeePerGas &&
|
|
120
|
+
'0x' + new BigNumber(LOPayloadTxParams.maxPriorityFeePerGas).toString(16),
|
|
121
|
+
gasLimit: '0x' + new BigNumber(payloadGas || 5000000).toString(16),
|
|
122
|
+
value: '0x' + new BigNumber(LOPayloadTxParams.value).toString(16),
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
console.log('SENDING TX', tx5Params);
|
|
126
|
+
|
|
127
|
+
assert(
|
|
128
|
+
provider instanceof ethers.providers.JsonRpcProvider,
|
|
129
|
+
'provider has signer (JsonRpcProvider)'
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
const tx3 = await provider
|
|
133
|
+
.getSigner(anotherAccount)
|
|
134
|
+
.sendTransaction(tx5Params);
|
|
135
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import BigNumber from 'bignumber.js';
|
|
4
|
+
import { ethers } from 'ethersV5';
|
|
5
|
+
import { assert } from 'ts-essentials';
|
|
6
|
+
import {
|
|
7
|
+
// swap methods
|
|
8
|
+
constructPartialSDK,
|
|
9
|
+
constructEthersContractCaller,
|
|
10
|
+
constructAxiosFetcher,
|
|
11
|
+
// limitOrders methods
|
|
12
|
+
constructBuildLimitOrder,
|
|
13
|
+
constructCancelLimitOrder,
|
|
14
|
+
constructSignLimitOrder,
|
|
15
|
+
constructGetLimitOrders,
|
|
16
|
+
constructPostLimitOrder,
|
|
17
|
+
constructApproveTokenForLimitOrder,
|
|
18
|
+
// extra types
|
|
19
|
+
SignableOrderData,
|
|
20
|
+
LimitOrderToSend,
|
|
21
|
+
constructBuildLimitOrderTx,
|
|
22
|
+
} from '..';
|
|
23
|
+
|
|
24
|
+
const account = '0x1234...';
|
|
25
|
+
|
|
26
|
+
const fetcher = constructAxiosFetcher(axios);
|
|
27
|
+
|
|
28
|
+
// provider must have write access to account
|
|
29
|
+
// this would usually be wallet provider (Metamask)
|
|
30
|
+
const provider = ethers.getDefaultProvider(1);
|
|
31
|
+
const contractCaller = constructEthersContractCaller(
|
|
32
|
+
{
|
|
33
|
+
ethersProviderOrSigner: provider,
|
|
34
|
+
EthersContract: ethers.Contract,
|
|
35
|
+
},
|
|
36
|
+
account
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
// type BuildLimitOrderFunctions
|
|
40
|
+
// & SignLimitOrderFunctions
|
|
41
|
+
// & CancelLimitOrderFunctions<ethers.ContractTransaction>
|
|
42
|
+
// & ApproveTokenFunctions<ethers.ContractTransaction>
|
|
43
|
+
const limitOrderSDK = constructPartialSDK(
|
|
44
|
+
{
|
|
45
|
+
chainId: 1,
|
|
46
|
+
fetcher,
|
|
47
|
+
contractCaller,
|
|
48
|
+
},
|
|
49
|
+
constructBuildLimitOrder,
|
|
50
|
+
constructCancelLimitOrder,
|
|
51
|
+
constructSignLimitOrder,
|
|
52
|
+
constructPostLimitOrder,
|
|
53
|
+
constructGetLimitOrders,
|
|
54
|
+
constructApproveTokenForLimitOrder
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
|
|
58
|
+
const HEX = '0x2b591e99afe9f32eaa6214f7b7629768c40eeb39';
|
|
59
|
+
|
|
60
|
+
const orderInput = {
|
|
61
|
+
nonce: 1,
|
|
62
|
+
expiry: Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 7, // week from now, in sec
|
|
63
|
+
makerAsset: DAI,
|
|
64
|
+
takerAsset: HEX,
|
|
65
|
+
makerAmount: (1e18).toString(10),
|
|
66
|
+
takerAmount: (8e18).toString(10),
|
|
67
|
+
maker: account,
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
async function run() {
|
|
71
|
+
/// cancelling current orders
|
|
72
|
+
const { orders: currentOrders } = await limitOrderSDK.getLimitOrders({
|
|
73
|
+
maker: account,
|
|
74
|
+
type: 'LIMIT',
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
if (currentOrders[0]?.orderHash) {
|
|
78
|
+
const tx1: ethers.ContractTransaction =
|
|
79
|
+
await limitOrderSDK.cancelLimitOrder(currentOrders[0].orderHash);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const moreOrderHashes = currentOrders
|
|
83
|
+
.slice(1, 2)
|
|
84
|
+
.map((order) => order.orderHash);
|
|
85
|
+
|
|
86
|
+
const tx2: ethers.ContractTransaction =
|
|
87
|
+
await limitOrderSDK.cancelLimitOrderBulk(moreOrderHashes);
|
|
88
|
+
|
|
89
|
+
/// creating a new order
|
|
90
|
+
|
|
91
|
+
const tx3: ethers.ContractTransaction =
|
|
92
|
+
await limitOrderSDK.approveMakerTokenForLimitOrder(
|
|
93
|
+
orderInput.makerAmount,
|
|
94
|
+
orderInput.makerAsset
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
const signableOrderData: SignableOrderData =
|
|
98
|
+
await limitOrderSDK.buildLimitOrder(orderInput);
|
|
99
|
+
|
|
100
|
+
const signature: string = await limitOrderSDK.signLimitOrder(
|
|
101
|
+
signableOrderData
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
const orderToPostToApi: LimitOrderToSend = {
|
|
105
|
+
...signableOrderData.data,
|
|
106
|
+
signature,
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const newOrder = await limitOrderSDK.postLimitOrder(orderToPostToApi);
|
|
110
|
+
|
|
111
|
+
/// filling an order
|
|
112
|
+
|
|
113
|
+
// to act as order taker
|
|
114
|
+
const anotherAccount = '0x5678...';
|
|
115
|
+
|
|
116
|
+
const limitOrderSDKForTaker = constructPartialSDK(
|
|
117
|
+
{
|
|
118
|
+
chainId: 1,
|
|
119
|
+
fetcher,
|
|
120
|
+
contractCaller: constructEthersContractCaller(
|
|
121
|
+
{
|
|
122
|
+
ethersProviderOrSigner: provider,
|
|
123
|
+
EthersContract: ethers.Contract,
|
|
124
|
+
},
|
|
125
|
+
anotherAccount
|
|
126
|
+
),
|
|
127
|
+
},
|
|
128
|
+
constructBuildLimitOrderTx,
|
|
129
|
+
constructApproveTokenForLimitOrder
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
const tx4: ethers.ContractTransaction =
|
|
133
|
+
await limitOrderSDKForTaker.approveTakerTokenForLimitOrder(
|
|
134
|
+
orderInput.takerAmount,
|
|
135
|
+
orderInput.takerAsset
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
const { gas: payloadGas, ...LOPayloadTxParams } =
|
|
139
|
+
await limitOrderSDKForTaker.buildLimitOrderTx({
|
|
140
|
+
srcDecimals: 18,
|
|
141
|
+
destDecimals: 18,
|
|
142
|
+
userAddress: anotherAccount, // taker
|
|
143
|
+
orders: [orderToPostToApi],
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
const tx5Params = {
|
|
147
|
+
...LOPayloadTxParams,
|
|
148
|
+
gasPrice:
|
|
149
|
+
LOPayloadTxParams.gasPrice &&
|
|
150
|
+
'0x' + new BigNumber(LOPayloadTxParams.gasPrice).toString(16),
|
|
151
|
+
maxFeePerGas:
|
|
152
|
+
LOPayloadTxParams.maxFeePerGas &&
|
|
153
|
+
'0x' + new BigNumber(LOPayloadTxParams.maxFeePerGas).toString(16),
|
|
154
|
+
maxPriorityFeePerGas:
|
|
155
|
+
LOPayloadTxParams.maxPriorityFeePerGas &&
|
|
156
|
+
'0x' + new BigNumber(LOPayloadTxParams.maxPriorityFeePerGas).toString(16),
|
|
157
|
+
gasLimit: '0x' + new BigNumber(payloadGas || 5000000).toString(16),
|
|
158
|
+
value: '0x' + new BigNumber(LOPayloadTxParams.value).toString(16),
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
console.log('SENDING TX', tx5Params);
|
|
162
|
+
|
|
163
|
+
assert(
|
|
164
|
+
provider instanceof ethers.providers.JsonRpcProvider,
|
|
165
|
+
'provider has signer (JsonRpcProvider)'
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
const tx5 = await provider
|
|
169
|
+
.getSigner(anotherAccount)
|
|
170
|
+
.sendTransaction(tx5Params);
|
|
171
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { ethers } from 'ethersV5';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
// swap methods
|
|
7
|
+
constructPartialSDK,
|
|
8
|
+
constructEthersContractCaller,
|
|
9
|
+
constructAxiosFetcher,
|
|
10
|
+
// limitOrders methods
|
|
11
|
+
constructBuildLimitOrder,
|
|
12
|
+
constructSignLimitOrder,
|
|
13
|
+
constructPostLimitOrder,
|
|
14
|
+
// extra types
|
|
15
|
+
SignableOrderData,
|
|
16
|
+
LimitOrderToSend,
|
|
17
|
+
} from '..';
|
|
18
|
+
|
|
19
|
+
const wallet = ethers.Wallet.createRandom();
|
|
20
|
+
|
|
21
|
+
const fetcher = constructAxiosFetcher(axios);
|
|
22
|
+
|
|
23
|
+
const provider = wallet.connect(ethers.getDefaultProvider(1));
|
|
24
|
+
const contractCaller = constructEthersContractCaller(
|
|
25
|
+
{
|
|
26
|
+
ethersProviderOrSigner: provider,
|
|
27
|
+
EthersContract: ethers.Contract,
|
|
28
|
+
},
|
|
29
|
+
wallet.address
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
// type BuildLimitOrderFunctions
|
|
33
|
+
// & SignLimitOrderFunctions
|
|
34
|
+
// & PostLimitOrderFunctions
|
|
35
|
+
|
|
36
|
+
const limitOrderSDK = constructPartialSDK(
|
|
37
|
+
{
|
|
38
|
+
chainId: 1,
|
|
39
|
+
fetcher,
|
|
40
|
+
contractCaller,
|
|
41
|
+
},
|
|
42
|
+
constructBuildLimitOrder,
|
|
43
|
+
constructSignLimitOrder,
|
|
44
|
+
constructPostLimitOrder
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
|
|
48
|
+
const HEX = '0x2b591e99afe9f32eaa6214f7b7629768c40eeb39';
|
|
49
|
+
|
|
50
|
+
const orderInput = {
|
|
51
|
+
nonce: 1,
|
|
52
|
+
expiry: Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 7, // week from now, in sec
|
|
53
|
+
makerAsset: DAI,
|
|
54
|
+
takerAsset: HEX,
|
|
55
|
+
makerAmount: (1e18).toString(10),
|
|
56
|
+
takerAmount: (8e18).toString(10),
|
|
57
|
+
maker: wallet.address,
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
async function run() {
|
|
61
|
+
const signableOrderData: SignableOrderData =
|
|
62
|
+
await limitOrderSDK.buildLimitOrder(orderInput);
|
|
63
|
+
|
|
64
|
+
const signature: string = await limitOrderSDK.signLimitOrder(
|
|
65
|
+
signableOrderData
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const orderToPostToApi: LimitOrderToSend = {
|
|
69
|
+
...signableOrderData.data,
|
|
70
|
+
signature,
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const newOrder = await limitOrderSDK.postLimitOrder(orderToPostToApi);
|
|
74
|
+
console.log(newOrder);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
run();
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { ethers } from 'ethersV5';
|
|
4
|
+
import {
|
|
5
|
+
constructPartialSDK,
|
|
6
|
+
constructGetAdapters,
|
|
7
|
+
constructApproveToken,
|
|
8
|
+
constructEthersContractCaller,
|
|
9
|
+
constructAxiosFetcher,
|
|
10
|
+
} from '..';
|
|
11
|
+
|
|
12
|
+
const fetcher = constructAxiosFetcher(axios);
|
|
13
|
+
|
|
14
|
+
const provider = ethers.getDefaultProvider(1);
|
|
15
|
+
const contractCaller = constructEthersContractCaller({
|
|
16
|
+
ethersProviderOrSigner: provider,
|
|
17
|
+
EthersContract: ethers.Contract,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// type AdaptersFunctions & ApproveTokenFunctions<ethers.ContractTransaction>
|
|
21
|
+
const part1 = constructPartialSDK(
|
|
22
|
+
{
|
|
23
|
+
chainId: 1,
|
|
24
|
+
fetcher,
|
|
25
|
+
contractCaller,
|
|
26
|
+
},
|
|
27
|
+
constructGetAdapters,
|
|
28
|
+
constructApproveToken
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
// type Promise<AdaptersAsObject>
|
|
32
|
+
const res1 = part1.getAdapters();
|
|
33
|
+
// type Promise<ethers.ContractTransaction>
|
|
34
|
+
const res2 = part1.approveToken('123', '0x...');
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { ethers, Wallet } from 'ethersV5';
|
|
4
|
+
import {
|
|
5
|
+
constructPartialSDK,
|
|
6
|
+
constructEthersContractCaller,
|
|
7
|
+
constructAxiosFetcher,
|
|
8
|
+
constructAllDeltaOrdersHandlers,
|
|
9
|
+
constructGetQuote,
|
|
10
|
+
constructSwapSDK,
|
|
11
|
+
OptimalRate,
|
|
12
|
+
DeltaPrice,
|
|
13
|
+
isFetcherError,
|
|
14
|
+
} from '..';
|
|
15
|
+
|
|
16
|
+
const fetcher = constructAxiosFetcher(axios);
|
|
17
|
+
|
|
18
|
+
const provider = ethers.getDefaultProvider(1);
|
|
19
|
+
const signer = Wallet.createRandom().connect(provider);
|
|
20
|
+
const account = signer.address;
|
|
21
|
+
const contractCaller = constructEthersContractCaller({
|
|
22
|
+
ethersProviderOrSigner: provider,
|
|
23
|
+
EthersContract: ethers.Contract,
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// type AdaptersFunctions & ApproveTokenFunctions<ethers.ContractTransaction>
|
|
27
|
+
const quoteSDK = constructPartialSDK(
|
|
28
|
+
{
|
|
29
|
+
chainId: 1,
|
|
30
|
+
fetcher,
|
|
31
|
+
contractCaller,
|
|
32
|
+
},
|
|
33
|
+
constructAllDeltaOrdersHandlers,
|
|
34
|
+
constructSwapSDK,
|
|
35
|
+
constructGetQuote
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const DAI_TOKEN = '0x6b175474e89094c44da98b954eedeac495271d0f';
|
|
39
|
+
const USDC_TOKEN = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* mode='delta' example
|
|
43
|
+
*/
|
|
44
|
+
async function deltaQuote() {
|
|
45
|
+
const amount = '1000000000000'; // wei
|
|
46
|
+
|
|
47
|
+
const quote = await quoteSDK.getQuote({
|
|
48
|
+
srcToken: DAI_TOKEN,
|
|
49
|
+
destToken: USDC_TOKEN,
|
|
50
|
+
amount,
|
|
51
|
+
userAddress: account,
|
|
52
|
+
srcDecimals: 18,
|
|
53
|
+
destDecimals: 18,
|
|
54
|
+
mode: 'delta',
|
|
55
|
+
side: 'SELL',
|
|
56
|
+
// partner: "..." // if available
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
const deltaPrice = quote.delta;
|
|
61
|
+
await handleDeltaQuote({ amount, deltaPrice });
|
|
62
|
+
} catch (error) {
|
|
63
|
+
if (isFetcherError(error)) {
|
|
64
|
+
const data = error.response?.data;
|
|
65
|
+
console.log(`Delta Quote failed: ${data.errorType} - ${data.details}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* mode='market' example
|
|
72
|
+
*/
|
|
73
|
+
async function marketQuote() {
|
|
74
|
+
const amount = '1000000000000'; // wei
|
|
75
|
+
|
|
76
|
+
const quote = await quoteSDK.getQuote({
|
|
77
|
+
srcToken: DAI_TOKEN,
|
|
78
|
+
destToken: USDC_TOKEN,
|
|
79
|
+
amount,
|
|
80
|
+
userAddress: account,
|
|
81
|
+
srcDecimals: 18,
|
|
82
|
+
destDecimals: 18,
|
|
83
|
+
mode: 'market',
|
|
84
|
+
side: 'SELL',
|
|
85
|
+
// partner: "..." // if available
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
const TokenTransferProxy = await quoteSDK.getSpender();
|
|
89
|
+
|
|
90
|
+
// or sign a Permit1 or Permit2 TransferFrom for TokenTransferProxy
|
|
91
|
+
const approveTxHash = quoteSDK.approveToken(amount, DAI_TOKEN);
|
|
92
|
+
|
|
93
|
+
const txParams = await quoteSDK.buildTx({
|
|
94
|
+
srcToken: DAI_TOKEN,
|
|
95
|
+
destToken: USDC_TOKEN,
|
|
96
|
+
srcAmount: amount,
|
|
97
|
+
slippage: 250, // 2.5%
|
|
98
|
+
priceRoute: quote.market,
|
|
99
|
+
userAddress: account,
|
|
100
|
+
// partner: '...' // if available
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
const swapTx = await handleMarketQuote({ amount, priceRoute: quote.market });
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* mode='all' example
|
|
108
|
+
*/
|
|
109
|
+
async function allQuote() {
|
|
110
|
+
const amount = '1000000000000'; // wei
|
|
111
|
+
|
|
112
|
+
const quote = await quoteSDK.getQuote({
|
|
113
|
+
srcToken: DAI_TOKEN,
|
|
114
|
+
destToken: USDC_TOKEN,
|
|
115
|
+
amount,
|
|
116
|
+
userAddress: account,
|
|
117
|
+
srcDecimals: 18,
|
|
118
|
+
destDecimals: 18,
|
|
119
|
+
mode: 'all',
|
|
120
|
+
side: 'SELL',
|
|
121
|
+
// partner: "..." // if available
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
if ('delta' in quote) {
|
|
125
|
+
const deltaPrice = quote.delta;
|
|
126
|
+
await handleDeltaQuote({ amount, deltaPrice });
|
|
127
|
+
} else {
|
|
128
|
+
console.log(
|
|
129
|
+
`Delta Quote failed: ${quote.fallbackReason.errorType} - ${quote.fallbackReason.details}`
|
|
130
|
+
);
|
|
131
|
+
const swapTx = await handleMarketQuote({
|
|
132
|
+
amount,
|
|
133
|
+
priceRoute: quote.market,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async function handleDeltaQuote({
|
|
139
|
+
amount,
|
|
140
|
+
deltaPrice,
|
|
141
|
+
}: {
|
|
142
|
+
amount: string;
|
|
143
|
+
deltaPrice: DeltaPrice;
|
|
144
|
+
}) {
|
|
145
|
+
/**
|
|
146
|
+
* refer to examples/delta for more details
|
|
147
|
+
*/
|
|
148
|
+
const DeltaContract = await quoteSDK.getDeltaContract();
|
|
149
|
+
|
|
150
|
+
// or sign a Permit1 or Permit2 TransferFrom for DeltaContract
|
|
151
|
+
await quoteSDK.approveTokenForDelta(amount, DAI_TOKEN);
|
|
152
|
+
|
|
153
|
+
const slippagePercent = 0.5;
|
|
154
|
+
const destAmountAfterSlippage = BigInt(
|
|
155
|
+
// get rid of exponential notation
|
|
156
|
+
|
|
157
|
+
+(+deltaPrice.destAmount * (1 - slippagePercent / 100)).toFixed(0)
|
|
158
|
+
// get rid of decimals
|
|
159
|
+
).toString(10);
|
|
160
|
+
|
|
161
|
+
const deltaAuction = await quoteSDK.submitDeltaOrder({
|
|
162
|
+
deltaPrice,
|
|
163
|
+
owner: account,
|
|
164
|
+
// beneficiary: anotherAccount, // if need to send destToken to another account
|
|
165
|
+
// permit: "0x1234...", // if signed a Permit1 or Permit2 TransferFrom for DeltaContract
|
|
166
|
+
srcToken: DAI_TOKEN,
|
|
167
|
+
destToken: USDC_TOKEN,
|
|
168
|
+
srcAmount: amount,
|
|
169
|
+
destAmount: destAmountAfterSlippage, // minimum acceptable destAmount
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// poll if necessary
|
|
173
|
+
const auction = await quoteSDK.getDeltaOrderById(deltaAuction.id);
|
|
174
|
+
if (auction?.status === 'EXECUTED') {
|
|
175
|
+
console.log('Auction was executed');
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return auction;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
async function handleMarketQuote({
|
|
182
|
+
amount,
|
|
183
|
+
priceRoute,
|
|
184
|
+
}: {
|
|
185
|
+
amount: string;
|
|
186
|
+
priceRoute: OptimalRate;
|
|
187
|
+
}) {
|
|
188
|
+
const TokenTransferProxy = await quoteSDK.getSpender();
|
|
189
|
+
|
|
190
|
+
// or sign a Permit1 or Permit2 TransferFrom for TokenTransferProxy
|
|
191
|
+
const approveTxHash = quoteSDK.approveToken(amount, DAI_TOKEN);
|
|
192
|
+
|
|
193
|
+
const txParams = await quoteSDK.buildTx({
|
|
194
|
+
srcToken: DAI_TOKEN,
|
|
195
|
+
destToken: USDC_TOKEN,
|
|
196
|
+
srcAmount: amount,
|
|
197
|
+
slippage: 250, // 2.5%
|
|
198
|
+
priceRoute,
|
|
199
|
+
userAddress: account,
|
|
200
|
+
// partner: '...' // if available
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
const swapTx = await signer.sendTransaction(txParams);
|
|
204
|
+
return swapTx;
|
|
205
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { ethers } from 'ethersV5';
|
|
4
|
+
import {
|
|
5
|
+
constructPartialSDK,
|
|
6
|
+
constructFullSDK,
|
|
7
|
+
constructGetAdapters,
|
|
8
|
+
constructEthersV5ContractCaller,
|
|
9
|
+
constructAxiosFetcher,
|
|
10
|
+
} from '..';
|
|
11
|
+
|
|
12
|
+
const fetcher = constructAxiosFetcher(axios);
|
|
13
|
+
|
|
14
|
+
const provider = ethers.getDefaultProvider(1);
|
|
15
|
+
const contractCaller = constructEthersV5ContractCaller({
|
|
16
|
+
ethersProviderOrSigner: provider,
|
|
17
|
+
EthersContract: ethers.Contract,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const sdk = constructFullSDK({
|
|
21
|
+
apiURL: '',
|
|
22
|
+
chainId: 1,
|
|
23
|
+
fetcher,
|
|
24
|
+
contractCaller,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const res = sdk.swap.getAdapters();
|
|
28
|
+
|
|
29
|
+
// type Promise<ContractTransaction>
|
|
30
|
+
const txResponse = sdk.swap.approveToken('1', '0x...');
|
|
31
|
+
// type Promise<ContractTransaction[]>
|
|
32
|
+
const txResponses = sdk.swap.approveTokenBulk('1', ['0x...']);
|
|
33
|
+
|
|
34
|
+
const partial = constructPartialSDK(
|
|
35
|
+
{ apiURL: '', chainId: 1, fetcher },
|
|
36
|
+
constructGetAdapters
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const res1 = partial.getAdapters();
|