@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,44 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { ethers, Wallet } from 'ethersV5';
|
|
4
|
+
import {
|
|
5
|
+
constructSimpleSDK,
|
|
6
|
+
ContractMethod,
|
|
7
|
+
SwapSide,
|
|
8
|
+
SimpleSDKProviderOptions,
|
|
9
|
+
} from '..';
|
|
10
|
+
|
|
11
|
+
const provider = ethers.getDefaultProvider(1);
|
|
12
|
+
const signer = Wallet.createRandom().connect(provider);
|
|
13
|
+
// only methods that fetch from API
|
|
14
|
+
const simpleFetchOnlySDK = constructSimpleSDK({ chainId: 1, axios });
|
|
15
|
+
|
|
16
|
+
const DAI_TOKEN = '0x6b175474e89094c44da98b954eedeac495271d0f';
|
|
17
|
+
const USDC_TOKEN = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48';
|
|
18
|
+
|
|
19
|
+
const account = signer.address;
|
|
20
|
+
|
|
21
|
+
// type Promise<OptimalRate>
|
|
22
|
+
const rateRes = simpleFetchOnlySDK.swap.getRate({
|
|
23
|
+
srcToken: DAI_TOKEN,
|
|
24
|
+
destToken: USDC_TOKEN,
|
|
25
|
+
amount: '1000000000000',
|
|
26
|
+
userAddress: account,
|
|
27
|
+
side: SwapSide.SELL,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const providerOptions: SimpleSDKProviderOptions = {
|
|
31
|
+
ethersProviderOrSigner: signer,
|
|
32
|
+
EthersContract: ethers.Contract,
|
|
33
|
+
account,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const SDKwithApprove = constructSimpleSDK(
|
|
37
|
+
{ chainId: 1, axios },
|
|
38
|
+
providerOptions
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const approveTxHash = SDKwithApprove.swap.approveToken(
|
|
42
|
+
'1000000000000',
|
|
43
|
+
DAI_TOKEN
|
|
44
|
+
);
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { ethers } from 'ethersV5';
|
|
4
|
+
import { constructSimpleSDK } from '..';
|
|
5
|
+
|
|
6
|
+
const DAI_TOKEN = '0x6b175474e89094c44da98b954eedeac495271d0f';
|
|
7
|
+
const USDC_TOKEN = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48';
|
|
8
|
+
|
|
9
|
+
async function allQuote() {
|
|
10
|
+
// @ts-expect-error assume window.ethereum is available
|
|
11
|
+
const ethersProvider = new ethers.providers.Web3Provider(window.ethereum);
|
|
12
|
+
|
|
13
|
+
const accounts = await ethersProvider.listAccounts();
|
|
14
|
+
const account = accounts[0]!;
|
|
15
|
+
const signer = ethersProvider.getSigner(account);
|
|
16
|
+
|
|
17
|
+
const simpleSDK = constructSimpleSDK(
|
|
18
|
+
{ chainId: 1, axios },
|
|
19
|
+
{
|
|
20
|
+
ethersProviderOrSigner: signer,
|
|
21
|
+
EthersContract: ethers.Contract,
|
|
22
|
+
account,
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
const amount = '1000000000000'; // wei
|
|
27
|
+
|
|
28
|
+
const quote = await simpleSDK.quote.getQuote({
|
|
29
|
+
srcToken: DAI_TOKEN,
|
|
30
|
+
destToken: USDC_TOKEN,
|
|
31
|
+
amount,
|
|
32
|
+
userAddress: account,
|
|
33
|
+
srcDecimals: 18,
|
|
34
|
+
destDecimals: 18,
|
|
35
|
+
mode: 'all', // Delta quote if possible, with fallback to Market price
|
|
36
|
+
side: 'SELL',
|
|
37
|
+
// partner: "..." // if available
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
if ('delta' in quote) {
|
|
41
|
+
const deltaPrice = quote.delta;
|
|
42
|
+
|
|
43
|
+
const DeltaContract = await simpleSDK.delta.getDeltaContract();
|
|
44
|
+
|
|
45
|
+
// or sign a Permit1 or Permit2 TransferFrom for DeltaContract
|
|
46
|
+
const approveTxHash = await simpleSDK.delta.approveTokenForDelta(
|
|
47
|
+
amount,
|
|
48
|
+
DAI_TOKEN
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const slippagePercent = 0.5;
|
|
52
|
+
const destAmountAfterSlippage = BigInt(
|
|
53
|
+
// get rid of exponential notation
|
|
54
|
+
|
|
55
|
+
+(+deltaPrice.destAmount * (1 - slippagePercent / 100)).toFixed(0)
|
|
56
|
+
// get rid of decimals
|
|
57
|
+
).toString(10);
|
|
58
|
+
|
|
59
|
+
const deltaAuction = await simpleSDK.delta.submitDeltaOrder({
|
|
60
|
+
deltaPrice,
|
|
61
|
+
owner: account,
|
|
62
|
+
// beneficiary: anotherAccount, // if need to send destToken to another account
|
|
63
|
+
// permit: "0x1234...", // if signed a Permit1 or Permit2 TransferFrom for DeltaContract
|
|
64
|
+
srcToken: DAI_TOKEN,
|
|
65
|
+
destToken: USDC_TOKEN,
|
|
66
|
+
srcAmount: amount,
|
|
67
|
+
destAmount: destAmountAfterSlippage, // minimum acceptable destAmount
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// poll if necessary
|
|
71
|
+
const auction = await simpleSDK.delta.getDeltaOrderById(deltaAuction.id);
|
|
72
|
+
if (auction?.status === 'EXECUTED') {
|
|
73
|
+
console.log('Auction was executed');
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
console.log(
|
|
77
|
+
`Delta Quote failed: ${quote.fallbackReason.errorType} - ${quote.fallbackReason.details}`
|
|
78
|
+
);
|
|
79
|
+
const priceRoute = quote.market;
|
|
80
|
+
|
|
81
|
+
const TokenTransferProxy = await simpleSDK.swap.getSpender();
|
|
82
|
+
|
|
83
|
+
// or sign a Permit1 or Permit2 TransferFrom for TokenTransferProxy
|
|
84
|
+
const approveTxHash = simpleSDK.swap.approveToken(amount, DAI_TOKEN);
|
|
85
|
+
|
|
86
|
+
const txParams = await simpleSDK.swap.buildTx({
|
|
87
|
+
srcToken: DAI_TOKEN,
|
|
88
|
+
destToken: USDC_TOKEN,
|
|
89
|
+
srcAmount: amount,
|
|
90
|
+
slippage: 250, // 2.5%
|
|
91
|
+
priceRoute,
|
|
92
|
+
userAddress: account,
|
|
93
|
+
// partner: '...' // if available
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
const swapTx = await signer.sendTransaction(txParams);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import { createWalletClient, custom } from 'viem';
|
|
3
|
+
import { mainnet } from 'viem/chains';
|
|
4
|
+
|
|
5
|
+
// declares types for window.ethereum
|
|
6
|
+
import 'viem/window';
|
|
7
|
+
import axios from 'axios';
|
|
8
|
+
import {
|
|
9
|
+
constructViemContractCaller,
|
|
10
|
+
constructAxiosFetcher,
|
|
11
|
+
constructPartialSDK,
|
|
12
|
+
constructSimpleSDK,
|
|
13
|
+
constructSubmitLimitOrder,
|
|
14
|
+
type BuildLimitOrderInput,
|
|
15
|
+
} from '../';
|
|
16
|
+
import { assert } from 'ts-essentials';
|
|
17
|
+
import { txParamsToViemTxParams } from '../helpers/providers/viem';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* necessary when using write methods from SDK:
|
|
21
|
+
* transactions: approve Token, Fill or Cancel Order,
|
|
22
|
+
* signTypedData: signing Orders.
|
|
23
|
+
*/
|
|
24
|
+
const walletClient = createWalletClient({
|
|
25
|
+
// either `viemClient` has account assigned to it at creation time,
|
|
26
|
+
// or the provider `viemClient` was created with must control `account` (viemClient.getAddresses()[0]===account);
|
|
27
|
+
// otherwise breaks with ` ProviderError: Unknown account 0x...`
|
|
28
|
+
chain: mainnet,
|
|
29
|
+
transport: custom(window.ethereum!),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// example of a minimal SDK for submitting Limit Orders only
|
|
33
|
+
async function limitOrderSDKExample() {
|
|
34
|
+
const [account] = await walletClient.getAddresses();
|
|
35
|
+
assert(account, 'account is necessary for Order signing');
|
|
36
|
+
|
|
37
|
+
const contractCaller = constructViemContractCaller(
|
|
38
|
+
walletClient,
|
|
39
|
+
account // pass account to enable write methods (tx signing, signTypedData)
|
|
40
|
+
);
|
|
41
|
+
const fetcher = constructAxiosFetcher(axios);
|
|
42
|
+
// SDK with `submitLimitOrder` and `submitP2POrder` methods only
|
|
43
|
+
const LOrderSDK = constructPartialSDK(
|
|
44
|
+
{
|
|
45
|
+
contractCaller,
|
|
46
|
+
fetcher,
|
|
47
|
+
chainId: 1, // same chain as for walletClient
|
|
48
|
+
},
|
|
49
|
+
constructSubmitLimitOrder
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
/*
|
|
53
|
+
// alternatively, SDK with all Order methods: `submitLimitOrder`, `cancelLimitOrder`, `fillLimitOrder`, `getLimitOrders`, etc. methods
|
|
54
|
+
const LOrderSDK = constructPartialSDK(
|
|
55
|
+
{
|
|
56
|
+
contractCaller,
|
|
57
|
+
fetcher,
|
|
58
|
+
chainId: 1, // same chain as for walletClient
|
|
59
|
+
},
|
|
60
|
+
constructAllLimitOrdersHandlers
|
|
61
|
+
); */
|
|
62
|
+
|
|
63
|
+
const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
|
|
64
|
+
const HEX = '0x2b591e99afe9f32eaa6214f7b7629768c40eeb39';
|
|
65
|
+
|
|
66
|
+
const orderInput: BuildLimitOrderInput = {
|
|
67
|
+
nonce: 1,
|
|
68
|
+
expiry: Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 7, // week from now, in sec
|
|
69
|
+
makerAsset: DAI,
|
|
70
|
+
takerAsset: HEX,
|
|
71
|
+
makerAmount: (1e18).toString(10),
|
|
72
|
+
takerAmount: (8e18).toString(10),
|
|
73
|
+
maker: account,
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// submitted Order if successful
|
|
77
|
+
const orderFromAPI = LOrderSDK.submitLimitOrder(orderInput);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function simpleSDKExample() {
|
|
81
|
+
const [account] = await walletClient.getAddresses();
|
|
82
|
+
assert(account, 'account is necessary for Order signing');
|
|
83
|
+
|
|
84
|
+
const simpleSDK = constructSimpleSDK(
|
|
85
|
+
{
|
|
86
|
+
axios,
|
|
87
|
+
chainId: 1, // same chain as for walletClient
|
|
88
|
+
},
|
|
89
|
+
{ viemClient: walletClient, account }
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
const ETH = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
|
|
93
|
+
const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
|
|
94
|
+
const srcAmount = (1 * 1e18).toString();
|
|
95
|
+
|
|
96
|
+
const destToken = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
97
|
+
const priceRoute = await simpleSDK.swap.getRate({
|
|
98
|
+
srcToken: ETH,
|
|
99
|
+
destToken: DAI,
|
|
100
|
+
amount: srcAmount,
|
|
101
|
+
userAddress: account,
|
|
102
|
+
side: 'SELL',
|
|
103
|
+
srcDecimals: 18,
|
|
104
|
+
destDecimals: 18,
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
const txParams = await simpleSDK.swap.buildTx({
|
|
108
|
+
srcToken: ETH,
|
|
109
|
+
destToken,
|
|
110
|
+
srcAmount,
|
|
111
|
+
slippage: 250, // 2.5%
|
|
112
|
+
priceRoute,
|
|
113
|
+
userAddress: account,
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// helper to cast all relevant string values to BigInt
|
|
117
|
+
const vTxParams = txParamsToViemTxParams(txParams);
|
|
118
|
+
|
|
119
|
+
const txHash = await walletClient.sendTransaction({ ...vTxParams, account });
|
|
120
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { mainnet } from '@wagmi/core/chains';
|
|
4
|
+
import {
|
|
5
|
+
getAccount,
|
|
6
|
+
getWalletClient,
|
|
7
|
+
sendTransaction,
|
|
8
|
+
waitForTransactionReceipt,
|
|
9
|
+
http,
|
|
10
|
+
createConfig,
|
|
11
|
+
} from '@wagmi/core';
|
|
12
|
+
import { injected } from '@wagmi/connectors';
|
|
13
|
+
import { constructSimpleSDK, txParamsToViemTxParams } from '../';
|
|
14
|
+
import { assert } from 'ts-essentials';
|
|
15
|
+
|
|
16
|
+
export const config = createConfig({
|
|
17
|
+
chains: [mainnet],
|
|
18
|
+
connectors: [injected()],
|
|
19
|
+
transports: {
|
|
20
|
+
[mainnet.id]: http(),
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
async function simpleSDKExample() {
|
|
25
|
+
const walletClient = await getWalletClient(config, { chainId: mainnet.id });
|
|
26
|
+
const account = getAccount(config).address; // make sure wallet is connected at this point
|
|
27
|
+
assert(account, 'account is necessary for Order signing');
|
|
28
|
+
|
|
29
|
+
const simpleSDK = constructSimpleSDK(
|
|
30
|
+
{
|
|
31
|
+
axios,
|
|
32
|
+
chainId: mainnet.id, // same chain as for walletClient
|
|
33
|
+
},
|
|
34
|
+
{ viemClient: walletClient, account }
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const ETH = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
|
|
38
|
+
const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
|
|
39
|
+
const srcAmount = (1 * 1e18).toString();
|
|
40
|
+
|
|
41
|
+
const destToken = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
42
|
+
const priceRoute = await simpleSDK.swap.getRate({
|
|
43
|
+
srcToken: ETH,
|
|
44
|
+
destToken: DAI,
|
|
45
|
+
amount: srcAmount,
|
|
46
|
+
userAddress: account,
|
|
47
|
+
side: 'SELL',
|
|
48
|
+
srcDecimals: 18,
|
|
49
|
+
destDecimals: 18,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
const txParams = await simpleSDK.swap.buildTx({
|
|
53
|
+
srcToken: ETH,
|
|
54
|
+
destToken,
|
|
55
|
+
srcAmount,
|
|
56
|
+
slippage: 250, // 2.5%
|
|
57
|
+
priceRoute,
|
|
58
|
+
userAddress: account,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const vTxParams = txParamsToViemTxParams(txParams);
|
|
62
|
+
|
|
63
|
+
const txHash = await sendTransaction(config, vTxParams);
|
|
64
|
+
|
|
65
|
+
const txReceipt = waitForTransactionReceipt(config, { hash: txHash });
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Look at examples/viem for more examples
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import Web3 from 'web3';
|
|
4
|
+
import {
|
|
5
|
+
constructFullSDK,
|
|
6
|
+
constructAxiosFetcher,
|
|
7
|
+
constructWeb3ContractCaller,
|
|
8
|
+
} from '..';
|
|
9
|
+
|
|
10
|
+
const fetcher = constructAxiosFetcher(axios);
|
|
11
|
+
const web3 = new Web3(Web3.givenProvider);
|
|
12
|
+
const contractCaller = constructWeb3ContractCaller(web3);
|
|
13
|
+
|
|
14
|
+
const sdk = constructFullSDK({
|
|
15
|
+
chainId: 1,
|
|
16
|
+
fetcher,
|
|
17
|
+
contractCaller,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
async function main() {
|
|
21
|
+
// type Web3UnpromiEvent
|
|
22
|
+
const eventfulTxResponse = await sdk.swap.approveToken(
|
|
23
|
+
'1000000000000000000',
|
|
24
|
+
'0xcafe001067cDEF266AfB7Eb5A286dCFD277f3dE5'
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
eventfulTxResponse.once('transactionHash', (txHash) =>
|
|
28
|
+
console.log('watch for tx', txHash)
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
main();
|
package/src/gas.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ConstructProviderFetchInput,
|
|
3
|
+
RequestParameters,
|
|
4
|
+
TxSendOverrides,
|
|
5
|
+
} from '../types';
|
|
6
|
+
import type { ExtractAbiMethodNames } from '../helpers/misc';
|
|
7
|
+
import type { Address, PriceString } from './token';
|
|
8
|
+
|
|
9
|
+
// much smaller than the whole ERC20_ABI
|
|
10
|
+
const MinERC20Abi = [
|
|
11
|
+
{
|
|
12
|
+
constant: false,
|
|
13
|
+
inputs: [
|
|
14
|
+
{ name: '_spender', type: 'address' },
|
|
15
|
+
{ name: '_value', type: 'uint256' },
|
|
16
|
+
],
|
|
17
|
+
name: 'approve',
|
|
18
|
+
outputs: [{ name: '', type: 'bool' }],
|
|
19
|
+
payable: false,
|
|
20
|
+
stateMutability: 'nonpayable',
|
|
21
|
+
type: 'function',
|
|
22
|
+
},
|
|
23
|
+
] as const;
|
|
24
|
+
|
|
25
|
+
type ApprovalMethods = ExtractAbiMethodNames<typeof MinERC20Abi>;
|
|
26
|
+
|
|
27
|
+
type ApproveContractCaller<T> = ConstructProviderFetchInput<
|
|
28
|
+
T,
|
|
29
|
+
'transactCall'
|
|
30
|
+
>['contractCaller'];
|
|
31
|
+
|
|
32
|
+
export type ApproveToken<T> = (
|
|
33
|
+
amount: PriceString,
|
|
34
|
+
tokenAddress: Address,
|
|
35
|
+
overrides?: TxSendOverrides,
|
|
36
|
+
requestParams?: RequestParameters
|
|
37
|
+
) => Promise<T>;
|
|
38
|
+
|
|
39
|
+
export type GetSpenderAsyncOrSync = (
|
|
40
|
+
requestParams?: RequestParameters
|
|
41
|
+
) => Address | Promise<Address>;
|
|
42
|
+
|
|
43
|
+
export function approveTokenMethodFactory<T>(
|
|
44
|
+
contractCaller: ApproveContractCaller<T>,
|
|
45
|
+
getSpender: GetSpenderAsyncOrSync
|
|
46
|
+
): ApproveToken<T> {
|
|
47
|
+
return async (amount, tokenAddress, overrides = {}, requestParams) => {
|
|
48
|
+
const spender = await getSpender(requestParams);
|
|
49
|
+
|
|
50
|
+
const res = await contractCaller.transactCall<ApprovalMethods>({
|
|
51
|
+
address: tokenAddress,
|
|
52
|
+
abi: MinERC20Abi,
|
|
53
|
+
contractMethod: 'approve',
|
|
54
|
+
args: [spender, amount],
|
|
55
|
+
overrides,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return res;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ExtraFetchParams, FetcherFunction } from '../../types';
|
|
2
|
+
import type { AxiosStatic } from 'axios';
|
|
3
|
+
import { FetcherError } from '../misc';
|
|
4
|
+
|
|
5
|
+
export type AxiosRequirement = Pick<AxiosStatic, 'request' | 'isAxiosError'>;
|
|
6
|
+
|
|
7
|
+
export const constructFetcher =
|
|
8
|
+
(axios: AxiosRequirement, extra?: ExtraFetchParams): FetcherFunction =>
|
|
9
|
+
async (params) => {
|
|
10
|
+
try {
|
|
11
|
+
const { requestParams, ...rest } = params;
|
|
12
|
+
// adding apiKey to headers if it's provided
|
|
13
|
+
const headers = extra?.apiKey
|
|
14
|
+
? {
|
|
15
|
+
'X-API-KEY': extra.apiKey,
|
|
16
|
+
...rest.headers,
|
|
17
|
+
...requestParams?.headers,
|
|
18
|
+
}
|
|
19
|
+
: { ...rest.headers, ...requestParams?.headers };
|
|
20
|
+
|
|
21
|
+
const allParams = { ...rest, ...requestParams, headers };
|
|
22
|
+
|
|
23
|
+
const { data } = await axios.request(allParams);
|
|
24
|
+
|
|
25
|
+
return data;
|
|
26
|
+
} catch (error: any) {
|
|
27
|
+
if (axios.isAxiosError(error)) {
|
|
28
|
+
// attach a more meaningful message and other props
|
|
29
|
+
throw new FetcherError(error);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ExtraFetchParams, FetcherFunction } from '../../types';
|
|
2
|
+
import { FetcherError } from '../misc';
|
|
3
|
+
|
|
4
|
+
// @TODO may not work with node-fetch
|
|
5
|
+
type Fetch = typeof fetch;
|
|
6
|
+
|
|
7
|
+
export const constructFetcher =
|
|
8
|
+
(fetch: Fetch, extra?: ExtraFetchParams): FetcherFunction =>
|
|
9
|
+
async (params) => {
|
|
10
|
+
try {
|
|
11
|
+
const { url, method, requestParams } = params;
|
|
12
|
+
const body = method === 'POST' ? JSON.stringify(params.data) : null;
|
|
13
|
+
// Only JSON response for POST requests
|
|
14
|
+
const POSTheaders =
|
|
15
|
+
method === 'POST' && body
|
|
16
|
+
? {
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
}
|
|
19
|
+
: undefined;
|
|
20
|
+
|
|
21
|
+
// adding apiKey to headers if it's provided
|
|
22
|
+
const apiHeaders = extra?.apiKey
|
|
23
|
+
? { 'X-API-KEY': extra.apiKey }
|
|
24
|
+
: undefined;
|
|
25
|
+
|
|
26
|
+
// all headers combined
|
|
27
|
+
const headers =
|
|
28
|
+
POSTheaders || apiHeaders || params.headers || requestParams?.headers
|
|
29
|
+
? {
|
|
30
|
+
...apiHeaders,
|
|
31
|
+
...POSTheaders,
|
|
32
|
+
...params.headers,
|
|
33
|
+
...requestParams?.headers,
|
|
34
|
+
}
|
|
35
|
+
: undefined;
|
|
36
|
+
|
|
37
|
+
const response = await fetch(url, {
|
|
38
|
+
method,
|
|
39
|
+
body,
|
|
40
|
+
...requestParams,
|
|
41
|
+
headers,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
const data = await response.json();
|
|
45
|
+
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
// @TODO figure out if this works analogous to AxiosError, especially code ==? status
|
|
48
|
+
throw new FetcherError({
|
|
49
|
+
code: String(response.status),
|
|
50
|
+
response: {
|
|
51
|
+
data,
|
|
52
|
+
status: response.status,
|
|
53
|
+
statusText: response.statusText,
|
|
54
|
+
headers: Object.fromEntries(response.headers.entries()),
|
|
55
|
+
config: { url, method },
|
|
56
|
+
},
|
|
57
|
+
message: response.statusText,
|
|
58
|
+
isAxiosError: false,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return data;
|
|
63
|
+
} catch (error: any) {
|
|
64
|
+
if (error instanceof FetcherError) throw error;
|
|
65
|
+
throw new FetcherError(error);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EthersV5ProviderDeps } from './providers/ethers';
|
|
2
|
+
import { EthersV6ProviderDeps } from './providers/ethersV6';
|
|
3
|
+
export { constructFetcher as constructAxiosFetcher } from './fetchers/axios';
|
|
4
|
+
export { constructFetcher as constructFetchFetcher } from './fetchers/fetch';
|
|
5
|
+
export {
|
|
6
|
+
constructEthersV5ContractCaller as constructEthersContractCaller,
|
|
7
|
+
constructEthersV5ContractCaller,
|
|
8
|
+
EthersV5ProviderDeps,
|
|
9
|
+
} from './providers/ethers';
|
|
10
|
+
export {
|
|
11
|
+
constructContractCaller as constructEthersV6ContractCaller,
|
|
12
|
+
EthersV6ProviderDeps,
|
|
13
|
+
} from './providers/ethersV6';
|
|
14
|
+
export type EthersProviderDeps = EthersV5ProviderDeps | EthersV6ProviderDeps;
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
constructContractCaller as constructWeb3ContractCaller,
|
|
18
|
+
Web3UnpromiEvent,
|
|
19
|
+
} from './providers/web3';
|
|
20
|
+
export {
|
|
21
|
+
constructContractCaller as constructViemContractCaller,
|
|
22
|
+
MinViemClient,
|
|
23
|
+
txParamsToViemTxParams,
|
|
24
|
+
} from './providers/viem';
|
|
25
|
+
export { constructToken } from './token';
|
|
26
|
+
export { isFetcherError } from './misc';
|
|
27
|
+
export type { FetcherError, FetcherErrorInterface } from './misc';
|