@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,153 @@
|
|
|
1
|
+
import { MarkOptional } from 'ts-essentials';
|
|
2
|
+
import { Domain, ZERO_ADDRESS } from '../../common/orders/buildOrderData';
|
|
3
|
+
import { Bridge, DeltaAuctionOrder } from './types';
|
|
4
|
+
import { composeDeltaOrderPermit } from './composePermit';
|
|
5
|
+
|
|
6
|
+
// Order(address owner,address beneficiary,address srcToken,address destToken,uint256 srcAmount,uint256 destAmount,uint256 deadline,uint256 nonce,bytes permit, bridge Bridge)";
|
|
7
|
+
const SWAP_ORDER_EIP_712_TYPES = {
|
|
8
|
+
Order: [
|
|
9
|
+
{ name: 'owner', type: 'address' },
|
|
10
|
+
{ name: 'beneficiary', type: 'address' },
|
|
11
|
+
{ name: 'srcToken', type: 'address' },
|
|
12
|
+
{ name: 'destToken', type: 'address' },
|
|
13
|
+
{ name: 'srcAmount', type: 'uint256' },
|
|
14
|
+
{ name: 'destAmount', type: 'uint256' },
|
|
15
|
+
{ name: 'expectedDestAmount', type: 'uint256' },
|
|
16
|
+
{ name: 'deadline', type: 'uint256' },
|
|
17
|
+
{ name: 'nonce', type: 'uint256' },
|
|
18
|
+
{ name: 'partnerAndFee', type: 'uint256' },
|
|
19
|
+
{ name: 'permit', type: 'bytes' },
|
|
20
|
+
{ name: 'bridge', type: 'Bridge' },
|
|
21
|
+
],
|
|
22
|
+
Bridge: [
|
|
23
|
+
{ name: 'maxRelayerFee', type: 'uint256' },
|
|
24
|
+
{ name: 'destinationChainId', type: 'uint256' },
|
|
25
|
+
{ name: 'outputToken', type: 'address' },
|
|
26
|
+
{ name: 'multiCallHandler', type: 'address' },
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export type SignableDeltaOrderData = {
|
|
31
|
+
types: {
|
|
32
|
+
Order: typeof SWAP_ORDER_EIP_712_TYPES.Order;
|
|
33
|
+
Bridge: typeof SWAP_ORDER_EIP_712_TYPES.Bridge;
|
|
34
|
+
};
|
|
35
|
+
domain: Domain;
|
|
36
|
+
data: DeltaAuctionOrder;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
type SignDeltaOrderInput = {
|
|
40
|
+
orderInput: DeltaAuctionOrder;
|
|
41
|
+
paraswapDeltaAddress: string;
|
|
42
|
+
chainId: number;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
function produceDeltaOrderTypedData({
|
|
46
|
+
orderInput,
|
|
47
|
+
chainId,
|
|
48
|
+
paraswapDeltaAddress,
|
|
49
|
+
}: SignDeltaOrderInput): SignableDeltaOrderData {
|
|
50
|
+
const typedData = {
|
|
51
|
+
types: {
|
|
52
|
+
Order: SWAP_ORDER_EIP_712_TYPES.Order,
|
|
53
|
+
Bridge: SWAP_ORDER_EIP_712_TYPES.Bridge,
|
|
54
|
+
},
|
|
55
|
+
domain: {
|
|
56
|
+
name: 'Portikus',
|
|
57
|
+
version: '2.0.0',
|
|
58
|
+
chainId,
|
|
59
|
+
verifyingContract: paraswapDeltaAddress,
|
|
60
|
+
},
|
|
61
|
+
data: orderInput,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
return typedData;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export type DeltaOrderDataInput = MarkOptional<
|
|
68
|
+
Omit<DeltaAuctionOrder, 'partnerAndFee'>,
|
|
69
|
+
'beneficiary' | 'deadline' | 'nonce' | 'permit'
|
|
70
|
+
>;
|
|
71
|
+
|
|
72
|
+
export type BuildDeltaOrderDataInput = DeltaOrderDataInput & {
|
|
73
|
+
partnerAddress: string;
|
|
74
|
+
paraswapDeltaAddress: string;
|
|
75
|
+
partnerFeeBps: number;
|
|
76
|
+
partnerTakesSurplus?: boolean;
|
|
77
|
+
chainId: number;
|
|
78
|
+
bridge: Bridge;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// default deadline = 1 hour from now (may be changed later)
|
|
82
|
+
export const DELTA_DEFAULT_EXPIRY = 60 * 60; // seconds
|
|
83
|
+
|
|
84
|
+
export function buildDeltaSignableOrderData({
|
|
85
|
+
owner,
|
|
86
|
+
beneficiary = owner,
|
|
87
|
+
|
|
88
|
+
srcToken,
|
|
89
|
+
destToken,
|
|
90
|
+
srcAmount,
|
|
91
|
+
destAmount,
|
|
92
|
+
expectedDestAmount,
|
|
93
|
+
|
|
94
|
+
deadline = Math.floor(Date.now() / 1000 + DELTA_DEFAULT_EXPIRY),
|
|
95
|
+
nonce = Date.now().toString(10), // random enough to not cause collisions
|
|
96
|
+
|
|
97
|
+
permit = '0x',
|
|
98
|
+
|
|
99
|
+
partnerAddress,
|
|
100
|
+
partnerFeeBps,
|
|
101
|
+
partnerTakesSurplus = false,
|
|
102
|
+
|
|
103
|
+
chainId,
|
|
104
|
+
paraswapDeltaAddress,
|
|
105
|
+
bridge,
|
|
106
|
+
}: BuildDeltaOrderDataInput): SignableDeltaOrderData {
|
|
107
|
+
const orderInput: DeltaAuctionOrder = {
|
|
108
|
+
owner,
|
|
109
|
+
beneficiary,
|
|
110
|
+
srcToken,
|
|
111
|
+
destToken,
|
|
112
|
+
srcAmount,
|
|
113
|
+
destAmount,
|
|
114
|
+
expectedDestAmount,
|
|
115
|
+
deadline,
|
|
116
|
+
nonce,
|
|
117
|
+
permit: composeDeltaOrderPermit({ permit, nonce }),
|
|
118
|
+
partnerAndFee: producePartnerAndFee({
|
|
119
|
+
partnerFeeBps,
|
|
120
|
+
partnerAddress,
|
|
121
|
+
partnerTakesSurplus,
|
|
122
|
+
}),
|
|
123
|
+
bridge,
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
return produceDeltaOrderTypedData({
|
|
127
|
+
orderInput,
|
|
128
|
+
chainId,
|
|
129
|
+
paraswapDeltaAddress,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
type ProducePartnerAndFeeInput = {
|
|
134
|
+
partnerFeeBps: number;
|
|
135
|
+
partnerAddress: string;
|
|
136
|
+
partnerTakesSurplus: boolean;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// fee and address are encoded together
|
|
140
|
+
function producePartnerAndFee({
|
|
141
|
+
partnerFeeBps,
|
|
142
|
+
partnerAddress,
|
|
143
|
+
partnerTakesSurplus,
|
|
144
|
+
}: ProducePartnerAndFeeInput): string {
|
|
145
|
+
if (partnerAddress === ZERO_ADDRESS) return '0';
|
|
146
|
+
|
|
147
|
+
const partnerAndFee =
|
|
148
|
+
(BigInt(partnerAddress) << BigInt(96)) |
|
|
149
|
+
BigInt(partnerFeeBps.toFixed(0)) |
|
|
150
|
+
(BigInt(partnerTakesSurplus) << BigInt(8));
|
|
151
|
+
|
|
152
|
+
return partnerAndFee.toString(10);
|
|
153
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { DeltaAuctionOrder } from './types';
|
|
2
|
+
|
|
3
|
+
type DeltaOrderPermitInput = Pick<DeltaAuctionOrder, 'permit' | 'nonce'>;
|
|
4
|
+
|
|
5
|
+
export function composeDeltaOrderPermit({
|
|
6
|
+
permit,
|
|
7
|
+
nonce,
|
|
8
|
+
}: DeltaOrderPermitInput): string {
|
|
9
|
+
// Can be empty Permit if allowance is available for srcToken
|
|
10
|
+
if (permit === '0x' || permit === '0x01') {
|
|
11
|
+
// 0x01 is a special permit value that signifies existing Permit2 allowance.
|
|
12
|
+
return permit;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// In the Contract, specifically for Permit2 transferFrom, we have signature consisting of
|
|
16
|
+
// bytes32(permit2nonce) + bytes64(compacted signature) = bytes96 Permit2 Transfer format
|
|
17
|
+
|
|
18
|
+
if (permit.length >= 194) {
|
|
19
|
+
// "0x".length + 96bytes*2 = 194, means permit already concatenated with nonce
|
|
20
|
+
// or it's a different type of Permit all together
|
|
21
|
+
return permit;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return encodePermit2Transfer(BigInt(nonce), permit);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function uintTo32ByteArrayBuffer(nonce: number | bigint) {
|
|
28
|
+
// Create a 32-byte ArrayBuffer
|
|
29
|
+
const buffer = new Uint8Array(32);
|
|
30
|
+
|
|
31
|
+
// Convert nonce to hex string and pad it to 64 hex characters (32 bytes)
|
|
32
|
+
let nonceHex = nonce.toString(16).padStart(64, '0');
|
|
33
|
+
|
|
34
|
+
// Convert the hex string to bytes and fill the ArrayBuffer
|
|
35
|
+
for (let i = 0; i < 32; i++) {
|
|
36
|
+
buffer[i] = parseInt(nonceHex.slice(i * 2, i * 2 + 2), 16);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return buffer;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function hexToByteArray(hexString: string) {
|
|
43
|
+
// Remove "0x" prefix if present
|
|
44
|
+
hexString = hexString.replace(/^0x/, '');
|
|
45
|
+
|
|
46
|
+
// Convert hex string to Uint8Array
|
|
47
|
+
const byteArray = new Uint8Array(hexString.length / 2);
|
|
48
|
+
for (let i = 0; i < hexString.length; i += 2) {
|
|
49
|
+
byteArray[i / 2] = parseInt(hexString.slice(i, i + 2), 16);
|
|
50
|
+
}
|
|
51
|
+
return byteArray;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function encodePermit2Transfer(nonce: number | bigint, signature: string) {
|
|
55
|
+
// Get 32-byte ArrayBuffer for nonce
|
|
56
|
+
const nonceBuffer = uintTo32ByteArrayBuffer(nonce);
|
|
57
|
+
|
|
58
|
+
// Convert signature hex string to Uint8Array (64 bytes)
|
|
59
|
+
const signatureBuffer = hexToByteArray(signature);
|
|
60
|
+
if (signatureBuffer.length !== 64) {
|
|
61
|
+
throw new Error('Signature must be exactly 64 bytes');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Concatenate nonceBuffer and signatureBuffer
|
|
65
|
+
const packedBuffer = new Uint8Array(32 + 64);
|
|
66
|
+
packedBuffer.set(nonceBuffer, 0); // Copy nonceBuffer at the start
|
|
67
|
+
packedBuffer.set(signatureBuffer, 32); // Copy signatureBuffer after nonce
|
|
68
|
+
|
|
69
|
+
// Convert to hex string for output
|
|
70
|
+
return (
|
|
71
|
+
'0x' +
|
|
72
|
+
Array.from(packedBuffer)
|
|
73
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
74
|
+
.join('')
|
|
75
|
+
);
|
|
76
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { SignableDeltaOrderData } from './buildDeltaOrderData';
|
|
2
|
+
|
|
3
|
+
export function sanitizeDeltaOrderData({
|
|
4
|
+
owner,
|
|
5
|
+
beneficiary,
|
|
6
|
+
srcToken,
|
|
7
|
+
destToken,
|
|
8
|
+
srcAmount,
|
|
9
|
+
destAmount,
|
|
10
|
+
expectedDestAmount,
|
|
11
|
+
deadline,
|
|
12
|
+
nonce,
|
|
13
|
+
permit,
|
|
14
|
+
partnerAndFee,
|
|
15
|
+
bridge,
|
|
16
|
+
}: SignableDeltaOrderData['data'] &
|
|
17
|
+
Record<string, any>): SignableDeltaOrderData['data'] {
|
|
18
|
+
return {
|
|
19
|
+
owner,
|
|
20
|
+
beneficiary,
|
|
21
|
+
srcToken,
|
|
22
|
+
destToken,
|
|
23
|
+
srcAmount,
|
|
24
|
+
destAmount,
|
|
25
|
+
expectedDestAmount,
|
|
26
|
+
deadline,
|
|
27
|
+
nonce,
|
|
28
|
+
permit,
|
|
29
|
+
partnerAndFee,
|
|
30
|
+
bridge,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
export type DeltaAuctionOrder = {
|
|
2
|
+
/** @description The address of the order owner */
|
|
3
|
+
owner: string;
|
|
4
|
+
/** @description The address of the order beneficiary */
|
|
5
|
+
beneficiary: string; // beneficiary==owner if no transferTo
|
|
6
|
+
/** @description The address of the src token */
|
|
7
|
+
srcToken: string; // lowercase
|
|
8
|
+
/** @description The address of the dest token */
|
|
9
|
+
destToken: string; // lowercase
|
|
10
|
+
/** @description The amount of src token to swap */
|
|
11
|
+
srcAmount: string; // wei
|
|
12
|
+
/** @description The minimum amount of dest token to receive */
|
|
13
|
+
destAmount: string; // wei
|
|
14
|
+
/** @description The expected amount of dest token to receive */
|
|
15
|
+
expectedDestAmount: string; // wei
|
|
16
|
+
/** @description The deadline for the order */
|
|
17
|
+
deadline: number; // seconds
|
|
18
|
+
/** @description The nonce of the order */
|
|
19
|
+
nonce: string; // can be random, can even be Date.now()
|
|
20
|
+
/** @description Optional permit signature for the src token */
|
|
21
|
+
permit: string; //can be "0x"
|
|
22
|
+
/** @description Encoded partner address, fee bps, and flags for the order. partnerAndFee = (partner << 96) | (partnerTakesSurplus << 8) | fee in bps (max fee is 2%) */
|
|
23
|
+
partnerAndFee: string;
|
|
24
|
+
/** @description The bridge input */
|
|
25
|
+
bridge: Bridge;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type Bridge = {
|
|
29
|
+
maxRelayerFee: string;
|
|
30
|
+
destinationChainId: number;
|
|
31
|
+
/** @description The address of the output token. Same as Order.destToken but on destination chain, so can still be a different address */
|
|
32
|
+
outputToken: string;
|
|
33
|
+
/** @description The address of the multiCallHandler on destination chain, used to unwrap WETH and send to Smart Contract receiver. Must be non-zero when receiver address is a SmartContract wallet and need to send Native ETH */
|
|
34
|
+
multiCallHandler: string;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
type DeltaAuctionStatus =
|
|
38
|
+
| 'NOT_STARTED'
|
|
39
|
+
| 'POSTED'
|
|
40
|
+
| 'RUNNING'
|
|
41
|
+
| 'EXECUTING'
|
|
42
|
+
| 'EXECUTED'
|
|
43
|
+
| 'FAILED'
|
|
44
|
+
| 'EXPIRED';
|
|
45
|
+
|
|
46
|
+
type DeltaAuctionTransaction = {
|
|
47
|
+
id: string;
|
|
48
|
+
hash: string;
|
|
49
|
+
orderId: string;
|
|
50
|
+
bidId: string | null;
|
|
51
|
+
blockNumber: number;
|
|
52
|
+
blockHash: string;
|
|
53
|
+
gasUsed: bigint;
|
|
54
|
+
gasPrice: bigint;
|
|
55
|
+
blobGasUsed: bigint;
|
|
56
|
+
blobGasPrice: bigint;
|
|
57
|
+
index: number;
|
|
58
|
+
status: number;
|
|
59
|
+
from: string;
|
|
60
|
+
to: string;
|
|
61
|
+
receivedAmount: string;
|
|
62
|
+
receivedAmountUSD: number;
|
|
63
|
+
spentAmount: string;
|
|
64
|
+
spentAmountUSD: number;
|
|
65
|
+
filledPercent: number; // in base points
|
|
66
|
+
protocolFee: string;
|
|
67
|
+
partnerFee: string;
|
|
68
|
+
agent: string;
|
|
69
|
+
auctionId: string;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export type DeltaAuction = {
|
|
73
|
+
id: string;
|
|
74
|
+
deltaVersion: string; // 1.0 or 2.0 currently
|
|
75
|
+
user: string;
|
|
76
|
+
signature: string;
|
|
77
|
+
status: DeltaAuctionStatus;
|
|
78
|
+
order: DeltaAuctionOrder;
|
|
79
|
+
orderHash: string | null; // not available on old Orders only
|
|
80
|
+
transactions: DeltaAuctionTransaction[];
|
|
81
|
+
chainId: number;
|
|
82
|
+
partner: string;
|
|
83
|
+
referrerAddress: string | null;
|
|
84
|
+
expiresAt: string;
|
|
85
|
+
createdAt: string;
|
|
86
|
+
updatedAt: string;
|
|
87
|
+
partiallyFillable: boolean;
|
|
88
|
+
|
|
89
|
+
excludeAgents: string[] | null;
|
|
90
|
+
includeAgents: string[] | null;
|
|
91
|
+
|
|
92
|
+
bridgeMetadata: BridgeMetadata | null;
|
|
93
|
+
bridgeStatus: BridgeStatus | null;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export type BridgeMetadata = {
|
|
97
|
+
/** @description The amount that user should expect to get */
|
|
98
|
+
outputAmount: string;
|
|
99
|
+
/** @description The cross-chain deadline. If deadline passes, the bridgeStatus would be expired */
|
|
100
|
+
fillDeadline: number;
|
|
101
|
+
/** @description The deposit id */
|
|
102
|
+
depositId: number;
|
|
103
|
+
/** @description The transaction hash on the destination chain that fulfilled the order. When bridgeStatus='filled' */
|
|
104
|
+
fillTx?: string;
|
|
105
|
+
/** @description The transaction hash on the source chain that refunded the deposit. When bridgeStatus='refunded' */
|
|
106
|
+
depositRefundTxHash?: string;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
// refunded is basically failed
|
|
110
|
+
export type BridgeStatus = 'pending' | 'filled' | 'expired' | 'refunded';
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import type { ConstructProviderFetchInput } from '../../types';
|
|
2
|
+
import type { DeltaAuction } from './helpers/types';
|
|
3
|
+
import {
|
|
4
|
+
BuildDeltaOrderDataParams,
|
|
5
|
+
BuildDeltaOrderFunctions,
|
|
6
|
+
constructBuildDeltaOrder,
|
|
7
|
+
} from './buildDeltaOrder';
|
|
8
|
+
import {
|
|
9
|
+
constructPostDeltaOrder,
|
|
10
|
+
PostDeltaOrderFunctions,
|
|
11
|
+
} from './postDeltaOrder';
|
|
12
|
+
import {
|
|
13
|
+
constructSignDeltaOrder,
|
|
14
|
+
SignDeltaOrderFunctions,
|
|
15
|
+
} from './signDeltaOrder';
|
|
16
|
+
import {
|
|
17
|
+
GetDeltaContractFunctions,
|
|
18
|
+
constructGetDeltaContract,
|
|
19
|
+
} from './getDeltaContract';
|
|
20
|
+
import {
|
|
21
|
+
constructGetDeltaPrice,
|
|
22
|
+
GetDeltaPriceFunctions,
|
|
23
|
+
} from './getDeltaPrice';
|
|
24
|
+
import {
|
|
25
|
+
constructGetDeltaOrders,
|
|
26
|
+
GetDeltaOrdersFunctions,
|
|
27
|
+
} from './getDeltaOrders';
|
|
28
|
+
import {
|
|
29
|
+
constructGetPartnerFee,
|
|
30
|
+
GetPartnerFeeFunctions,
|
|
31
|
+
} from './getPartnerFee';
|
|
32
|
+
import {
|
|
33
|
+
ApproveTokenForDeltaFunctions,
|
|
34
|
+
constructApproveTokenForDelta,
|
|
35
|
+
} from './approveForDelta';
|
|
36
|
+
import {
|
|
37
|
+
constructGetBridgeInfo,
|
|
38
|
+
GetBridgeInfoFunctions,
|
|
39
|
+
} from './getBridgeInfo';
|
|
40
|
+
import {
|
|
41
|
+
constructGetMulticallHandlers,
|
|
42
|
+
GetMulticallHandlersFunctions,
|
|
43
|
+
} from './getMulticallHandlers';
|
|
44
|
+
import {
|
|
45
|
+
constructIsTokenSupportedInDelta,
|
|
46
|
+
IsTokenSupportedInDeltaFunctions,
|
|
47
|
+
} from './isTokenSupportedInDelta';
|
|
48
|
+
import {
|
|
49
|
+
BuildCrosschainOrderBridgeFunctions,
|
|
50
|
+
constructBuildCrosschainOrderBridge,
|
|
51
|
+
} from './buildCrosschainOrderBridge';
|
|
52
|
+
|
|
53
|
+
export type SubmitDeltaOrderParams = BuildDeltaOrderDataParams & {
|
|
54
|
+
/** @description designates the Order as being able to be partially filled, as opposed to fill-or-kill */
|
|
55
|
+
partiallyFillable?: boolean;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
type SubmitDeltaOrder = (
|
|
59
|
+
orderParams: SubmitDeltaOrderParams
|
|
60
|
+
) => Promise<DeltaAuction>;
|
|
61
|
+
|
|
62
|
+
export type SubmitDeltaOrderFuncs = {
|
|
63
|
+
submitDeltaOrder: SubmitDeltaOrder;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const constructSubmitDeltaOrder = (
|
|
67
|
+
options: ConstructProviderFetchInput<any, 'signTypedDataCall'>
|
|
68
|
+
): SubmitDeltaOrderFuncs => {
|
|
69
|
+
const { buildDeltaOrder } = constructBuildDeltaOrder(options);
|
|
70
|
+
const { signDeltaOrder } = constructSignDeltaOrder(options);
|
|
71
|
+
const { postDeltaOrder } = constructPostDeltaOrder(options);
|
|
72
|
+
|
|
73
|
+
const submitDeltaOrder: SubmitDeltaOrder = async (orderParams) => {
|
|
74
|
+
const orderData = await buildDeltaOrder(orderParams);
|
|
75
|
+
const signature = await signDeltaOrder(orderData);
|
|
76
|
+
|
|
77
|
+
const response = await postDeltaOrder({
|
|
78
|
+
signature,
|
|
79
|
+
partner: orderParams.partner,
|
|
80
|
+
order: orderData.data,
|
|
81
|
+
partiallyFillable: orderParams.partiallyFillable,
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
return response;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
return { submitDeltaOrder };
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export type DeltaOrderHandlers<T> = SubmitDeltaOrderFuncs &
|
|
91
|
+
ApproveTokenForDeltaFunctions<T> &
|
|
92
|
+
BuildDeltaOrderFunctions &
|
|
93
|
+
BuildCrosschainOrderBridgeFunctions &
|
|
94
|
+
GetDeltaOrdersFunctions &
|
|
95
|
+
GetDeltaPriceFunctions &
|
|
96
|
+
GetDeltaContractFunctions &
|
|
97
|
+
GetPartnerFeeFunctions &
|
|
98
|
+
GetMulticallHandlersFunctions &
|
|
99
|
+
GetBridgeInfoFunctions &
|
|
100
|
+
IsTokenSupportedInDeltaFunctions &
|
|
101
|
+
PostDeltaOrderFunctions &
|
|
102
|
+
SignDeltaOrderFunctions;
|
|
103
|
+
|
|
104
|
+
/** @description construct SDK with every Delta Order-related method, fetching from API and Order signing */
|
|
105
|
+
export const constructAllDeltaOrdersHandlers = <TxResponse>(
|
|
106
|
+
options: ConstructProviderFetchInput<
|
|
107
|
+
TxResponse,
|
|
108
|
+
'signTypedDataCall' | 'transactCall'
|
|
109
|
+
>
|
|
110
|
+
): DeltaOrderHandlers<TxResponse> => {
|
|
111
|
+
const deltaOrdersGetters = constructGetDeltaOrders(options);
|
|
112
|
+
const deltaOrdersContractGetter = constructGetDeltaContract(options);
|
|
113
|
+
const deltaPrice = constructGetDeltaPrice(options);
|
|
114
|
+
|
|
115
|
+
const partnerFee = constructGetPartnerFee(options);
|
|
116
|
+
const bridgeInfo = constructGetBridgeInfo(options);
|
|
117
|
+
const isTokenSupportedInDelta = constructIsTokenSupportedInDelta(options);
|
|
118
|
+
const multicallHandlers = constructGetMulticallHandlers(options);
|
|
119
|
+
|
|
120
|
+
const approveTokenForDelta = constructApproveTokenForDelta(options);
|
|
121
|
+
|
|
122
|
+
const deltaOrdersSubmit = constructSubmitDeltaOrder(options);
|
|
123
|
+
|
|
124
|
+
const buildCrosschainOrderBridge =
|
|
125
|
+
constructBuildCrosschainOrderBridge(options);
|
|
126
|
+
|
|
127
|
+
const deltaOrdersBuild = constructBuildDeltaOrder(options);
|
|
128
|
+
const deltaOrdersSign = constructSignDeltaOrder(options);
|
|
129
|
+
const deltaOrdersPost = constructPostDeltaOrder(options);
|
|
130
|
+
|
|
131
|
+
return {
|
|
132
|
+
...deltaOrdersGetters,
|
|
133
|
+
...deltaOrdersContractGetter,
|
|
134
|
+
...deltaPrice,
|
|
135
|
+
...partnerFee,
|
|
136
|
+
...bridgeInfo,
|
|
137
|
+
...isTokenSupportedInDelta,
|
|
138
|
+
...multicallHandlers,
|
|
139
|
+
...approveTokenForDelta,
|
|
140
|
+
...deltaOrdersSubmit,
|
|
141
|
+
...deltaOrdersBuild,
|
|
142
|
+
...deltaOrdersSign,
|
|
143
|
+
...deltaOrdersPost,
|
|
144
|
+
...buildCrosschainOrderBridge,
|
|
145
|
+
};
|
|
146
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { API_URL } from '../../constants';
|
|
2
|
+
import { constructSearchString } from '../../helpers/misc';
|
|
3
|
+
import type {
|
|
4
|
+
Address,
|
|
5
|
+
ConstructFetchInput,
|
|
6
|
+
RequestParameters,
|
|
7
|
+
} from '../../types';
|
|
8
|
+
|
|
9
|
+
type TokenSupportedInDeltaResponse = { supported: boolean };
|
|
10
|
+
type IsTokenSupportedInDeltaQueryOptions = {
|
|
11
|
+
token: Address;
|
|
12
|
+
chainId: number;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
type IsTokenSupportedInDelta = (
|
|
16
|
+
token: Address,
|
|
17
|
+
requestParams?: RequestParameters
|
|
18
|
+
) => Promise<boolean>;
|
|
19
|
+
|
|
20
|
+
export type IsTokenSupportedInDeltaFunctions = {
|
|
21
|
+
isTokenSupportedInDelta: IsTokenSupportedInDelta;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const constructIsTokenSupportedInDelta = ({
|
|
25
|
+
apiURL = API_URL,
|
|
26
|
+
chainId,
|
|
27
|
+
fetcher,
|
|
28
|
+
}: ConstructFetchInput): IsTokenSupportedInDeltaFunctions => {
|
|
29
|
+
const bridgeInfoUrl = `${apiURL}/delta/prices/is-token-supported` as const;
|
|
30
|
+
|
|
31
|
+
const isTokenSupportedInDelta: IsTokenSupportedInDelta = async (
|
|
32
|
+
token,
|
|
33
|
+
requestParams
|
|
34
|
+
) => {
|
|
35
|
+
const search = constructSearchString<IsTokenSupportedInDeltaQueryOptions>({
|
|
36
|
+
token,
|
|
37
|
+
chainId,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const fetchURL = `${bridgeInfoUrl}/${search}` as const;
|
|
41
|
+
|
|
42
|
+
const data = await fetcher<TokenSupportedInDeltaResponse>({
|
|
43
|
+
url: fetchURL,
|
|
44
|
+
method: 'GET',
|
|
45
|
+
requestParams,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return data.supported;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
isTokenSupportedInDelta,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { API_URL } from '../../constants';
|
|
2
|
+
import type { ConstructFetchInput, RequestParameters } from '../../types';
|
|
3
|
+
import { DeltaAuctionOrder, DeltaAuction } from './helpers/types';
|
|
4
|
+
|
|
5
|
+
export type DeltaOrderToPost = {
|
|
6
|
+
/** @description Partner string */
|
|
7
|
+
partner?: string;
|
|
8
|
+
/** @description Referrer address */
|
|
9
|
+
referrerAddress?: string;
|
|
10
|
+
order: DeltaAuctionOrder;
|
|
11
|
+
/** @description Signature of the order from order.owner address. EOA signatures must be submitted in ERC-2098 Compact Representation. */
|
|
12
|
+
signature: string;
|
|
13
|
+
chainId: number;
|
|
14
|
+
/** @description designates the Order as being able to partially filled, as opposed to fill-or-kill */
|
|
15
|
+
partiallyFillable?: boolean;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type PostDeltaOrderParams = Omit<DeltaOrderToPost, 'chainId'>;
|
|
19
|
+
|
|
20
|
+
type DeltaOrderApiResponse = DeltaAuction;
|
|
21
|
+
|
|
22
|
+
type PostDeltaOrder = (
|
|
23
|
+
postData: PostDeltaOrderParams,
|
|
24
|
+
requestParams?: RequestParameters
|
|
25
|
+
) => Promise<DeltaOrderApiResponse>;
|
|
26
|
+
|
|
27
|
+
export type PostDeltaOrderFunctions = {
|
|
28
|
+
postDeltaOrder: PostDeltaOrder;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const constructPostDeltaOrder = ({
|
|
32
|
+
apiURL = API_URL,
|
|
33
|
+
chainId,
|
|
34
|
+
fetcher,
|
|
35
|
+
}: ConstructFetchInput): PostDeltaOrderFunctions => {
|
|
36
|
+
const postOrderUrl = `${apiURL}/delta/orders` as const;
|
|
37
|
+
|
|
38
|
+
const postDeltaOrder: PostDeltaOrder = (postData, requestParams) => {
|
|
39
|
+
const deltaOrderToPost: DeltaOrderToPost = { ...postData, chainId };
|
|
40
|
+
|
|
41
|
+
return fetcher<DeltaOrderApiResponse>({
|
|
42
|
+
url: postOrderUrl,
|
|
43
|
+
method: 'POST',
|
|
44
|
+
data: deltaOrderToPost,
|
|
45
|
+
requestParams,
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
return { postDeltaOrder };
|
|
50
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ConstructProviderFetchInput } from '../../types';
|
|
2
|
+
import { SignableDeltaOrderData } from './helpers/buildDeltaOrderData';
|
|
3
|
+
import { sanitizeDeltaOrderData } from './helpers/misc';
|
|
4
|
+
|
|
5
|
+
export type SignLimitOrderFunctions = {
|
|
6
|
+
signLimitOrder: (
|
|
7
|
+
signableOrderData: SignableDeltaOrderData
|
|
8
|
+
) => Promise<string>;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
type SignDeltaOrder = (
|
|
12
|
+
signableOrderData: SignableDeltaOrderData
|
|
13
|
+
) => Promise<string>;
|
|
14
|
+
|
|
15
|
+
export type SignDeltaOrderFunctions = {
|
|
16
|
+
signDeltaOrder: SignDeltaOrder;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// returns whatever `contractCaller` returns
|
|
20
|
+
// to allow for better versatility
|
|
21
|
+
export const constructSignDeltaOrder = (
|
|
22
|
+
options: Pick<
|
|
23
|
+
ConstructProviderFetchInput<any, 'signTypedDataCall'>,
|
|
24
|
+
'contractCaller'
|
|
25
|
+
>
|
|
26
|
+
): SignDeltaOrderFunctions => {
|
|
27
|
+
const signDeltaOrder: SignDeltaOrder = async (typedData) => {
|
|
28
|
+
// types allow to pass OrderData & extra_stuff, but tx will break like that
|
|
29
|
+
const typedDataOnly: SignableDeltaOrderData = {
|
|
30
|
+
...typedData,
|
|
31
|
+
data: sanitizeDeltaOrderData(typedData.data),
|
|
32
|
+
};
|
|
33
|
+
const signature = await options.contractCaller.signTypedDataCall(
|
|
34
|
+
typedDataOnly
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
return signature;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
return { signDeltaOrder };
|
|
41
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ConstructProviderFetchInput } from '../../types';
|
|
2
|
+
import { ApproveToken, approveTokenMethodFactory } from '../../helpers/approve';
|
|
3
|
+
import { constructApproveToken } from '../swap/approve';
|
|
4
|
+
import { constructGetSpender } from '../swap/spender';
|
|
5
|
+
|
|
6
|
+
export type ApproveTokenForLimitOrderFunctions<T> = {
|
|
7
|
+
/** @description approving AugustusRFQ as spender for makerAsset */
|
|
8
|
+
approveMakerTokenForLimitOrder: ApproveToken<T>;
|
|
9
|
+
/** @description approving AugustusRFQ as spender for takerAsset to call SDK.fillOrderDirectly */
|
|
10
|
+
approveTakerTokenForFillingP2POrderDirectly: ApproveToken<T>;
|
|
11
|
+
/** @description approving AugustusSwapper as spender for takerAsset for Limit Orders that will be executed through it */
|
|
12
|
+
approveTakerTokenForLimitOrder: ApproveToken<T>;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
// returns whatever `contractCaller` returns
|
|
16
|
+
// to allow for better versatility
|
|
17
|
+
export const constructApproveTokenForLimitOrder = <T>(
|
|
18
|
+
options: ConstructProviderFetchInput<T, 'transactCall'>
|
|
19
|
+
): ApproveTokenForLimitOrderFunctions<T> => {
|
|
20
|
+
// getAugustusRFQ is cached internally for the same instance of SDK
|
|
21
|
+
// so should persist across same apiUrl & network
|
|
22
|
+
const { getAugustusRFQ } = constructGetSpender(options);
|
|
23
|
+
|
|
24
|
+
const approveMakerTokenForLimitOrder: ApproveToken<T> =
|
|
25
|
+
approveTokenMethodFactory<T>(options.contractCaller, getAugustusRFQ);
|
|
26
|
+
|
|
27
|
+
// approving TokenTransaferProxy as for the swap
|
|
28
|
+
const { approveToken: approveTakerTokenForLimitOrder } =
|
|
29
|
+
constructApproveToken(options);
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
approveMakerTokenForLimitOrder,
|
|
33
|
+
approveTakerTokenForFillingP2POrderDirectly: approveMakerTokenForLimitOrder,
|
|
34
|
+
approveTakerTokenForLimitOrder,
|
|
35
|
+
};
|
|
36
|
+
};
|