@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,121 @@
|
|
|
1
|
+
import { getRandomInt } from '../../../helpers/misc';
|
|
2
|
+
import type { Address, APIVersion } from '../../../types';
|
|
3
|
+
import {
|
|
4
|
+
Domain,
|
|
5
|
+
name,
|
|
6
|
+
version,
|
|
7
|
+
ZERO_ADDRESS,
|
|
8
|
+
} from '../../common/orders/buildOrderData';
|
|
9
|
+
|
|
10
|
+
const Order = [
|
|
11
|
+
{ name: 'nonceAndMeta', type: 'uint256' },
|
|
12
|
+
{ name: 'expiry', type: 'uint128' },
|
|
13
|
+
{ name: 'makerAsset', type: 'address' },
|
|
14
|
+
{ name: 'takerAsset', type: 'address' },
|
|
15
|
+
{ name: 'maker', type: 'address' },
|
|
16
|
+
{ name: 'taker', type: 'address' },
|
|
17
|
+
{ name: 'makerAmount', type: 'uint256' },
|
|
18
|
+
{ name: 'takerAmount', type: 'uint256' },
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
export interface BuildOrderDataInput {
|
|
22
|
+
chainId: number;
|
|
23
|
+
verifyingContract: Address;
|
|
24
|
+
nonce?: number;
|
|
25
|
+
expiry: number;
|
|
26
|
+
makerAsset: Address;
|
|
27
|
+
takerAsset: Address;
|
|
28
|
+
makerAmount: string;
|
|
29
|
+
takerAmount: string;
|
|
30
|
+
maker: Address;
|
|
31
|
+
// OrderData.taker must be Augustus (or other Executor) for p2p limitOrders to involve swap through Augustus
|
|
32
|
+
/** @description actual user taker which will go into nonceAndMeta */
|
|
33
|
+
taker?: Address;
|
|
34
|
+
/** @description contract executor (Augustus or similar) that is allowed to execute the order, gois in Order.taker */
|
|
35
|
+
contractTaker?: Address;
|
|
36
|
+
|
|
37
|
+
AugustusAddress: Address;
|
|
38
|
+
AppVersion: APIVersion;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type SignableOrderData = {
|
|
42
|
+
types: { Order: typeof Order };
|
|
43
|
+
domain: Domain;
|
|
44
|
+
data: OrderData;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export type OrderData = {
|
|
48
|
+
nonceAndMeta: string;
|
|
49
|
+
expiry: number;
|
|
50
|
+
makerAsset: string;
|
|
51
|
+
takerAsset: string;
|
|
52
|
+
maker: string;
|
|
53
|
+
taker: string;
|
|
54
|
+
makerAmount: string;
|
|
55
|
+
takerAmount: string;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export function buildOrderData({
|
|
59
|
+
chainId,
|
|
60
|
+
verifyingContract,
|
|
61
|
+
nonce = getRandomInt(),
|
|
62
|
+
expiry,
|
|
63
|
+
makerAsset,
|
|
64
|
+
takerAsset,
|
|
65
|
+
makerAmount,
|
|
66
|
+
takerAmount,
|
|
67
|
+
maker,
|
|
68
|
+
AugustusAddress,
|
|
69
|
+
// if taker is specified -- p2p order for that taker only to fill through Augustus (v5) or directly (v6)-- taker = Augustus | _taker, takerInNonce = _taker
|
|
70
|
+
// if taker is not specified -- limitOrder for anyone to fill through Augustus or not -- taker = Zero, takerInNonce = Zero
|
|
71
|
+
taker: takerInNonce = ZERO_ADDRESS,
|
|
72
|
+
// if given, overrides the above choices made based on `taker`
|
|
73
|
+
contractTaker,
|
|
74
|
+
// for v6 only support taker=_taker for OTC orders
|
|
75
|
+
AppVersion,
|
|
76
|
+
}: BuildOrderDataInput): SignableOrderData {
|
|
77
|
+
// first 160 bits is taker address (for p2p orders),
|
|
78
|
+
// or 0 for limitOrders, so that anyone can be the taker of the Order
|
|
79
|
+
const nonceAndMeta = (
|
|
80
|
+
BigInt(takerInNonce) +
|
|
81
|
+
(BigInt(nonce) << BigInt(160))
|
|
82
|
+
).toString(10);
|
|
83
|
+
|
|
84
|
+
let taker: string;
|
|
85
|
+
// contractTaker overrides always
|
|
86
|
+
if (contractTaker) {
|
|
87
|
+
taker = contractTaker;
|
|
88
|
+
} else if (takerInNonce === ZERO_ADDRESS) {
|
|
89
|
+
// no takerInNonce -> not p2p order -> allow anyone to fill (not only Augustus)
|
|
90
|
+
taker = ZERO_ADDRESS;
|
|
91
|
+
} else {
|
|
92
|
+
// otherwise for p2p order ->
|
|
93
|
+
if (AppVersion.startsWith('6.')) {
|
|
94
|
+
//support 6.1+ versions
|
|
95
|
+
|
|
96
|
+
// limit taker to EOA for v6 version (no Arbitrary Token Swaps + OTC Fill, or OTC Fill through AugustusSwapper)
|
|
97
|
+
taker = takerInNonce;
|
|
98
|
+
} else {
|
|
99
|
+
// on v5
|
|
100
|
+
// -> fill through Augustus only
|
|
101
|
+
taker = AugustusAddress;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const order: OrderData = {
|
|
106
|
+
nonceAndMeta,
|
|
107
|
+
expiry,
|
|
108
|
+
makerAsset,
|
|
109
|
+
takerAsset,
|
|
110
|
+
maker,
|
|
111
|
+
taker,
|
|
112
|
+
makerAmount,
|
|
113
|
+
takerAmount,
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
types: { Order },
|
|
118
|
+
domain: { name, version, chainId, verifyingContract },
|
|
119
|
+
data: order,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BaseFetchUrl,
|
|
3
|
+
baseFetchUrlGetterFactory,
|
|
4
|
+
BaseFetchUrlInputConstructor,
|
|
5
|
+
MinFetchUrl,
|
|
6
|
+
OrderFillableBalanceFetchUrl,
|
|
7
|
+
} from '../../common/orders/misc';
|
|
8
|
+
import type { OrderData } from './buildOrderData';
|
|
9
|
+
|
|
10
|
+
export function sanitizeOrderData({
|
|
11
|
+
nonceAndMeta,
|
|
12
|
+
expiry,
|
|
13
|
+
makerAsset,
|
|
14
|
+
takerAsset,
|
|
15
|
+
maker,
|
|
16
|
+
taker,
|
|
17
|
+
makerAmount,
|
|
18
|
+
takerAmount,
|
|
19
|
+
}: OrderData & Record<string, any>): OrderData {
|
|
20
|
+
return {
|
|
21
|
+
nonceAndMeta,
|
|
22
|
+
expiry,
|
|
23
|
+
makerAsset,
|
|
24
|
+
takerAsset,
|
|
25
|
+
maker,
|
|
26
|
+
taker,
|
|
27
|
+
makerAmount,
|
|
28
|
+
takerAmount,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/*
|
|
33
|
+
GET
|
|
34
|
+
/ft/orders/:chainId/maker/:walletAddress
|
|
35
|
+
/ft/orders/:chainId/taker/:walletAddress
|
|
36
|
+
/ft/p2p/:chainId/maker/:walletAddress
|
|
37
|
+
/ft/p2p/:chainId/taker/:walletAddress
|
|
38
|
+
*/
|
|
39
|
+
export type GetOrdersURLs = `${BaseFetchUrl<'ft'>}/${
|
|
40
|
+
| 'taker'
|
|
41
|
+
| 'maker'}/${string}`;
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
GET
|
|
45
|
+
/ft/fillablebalance/:chainId/:walletAddress/:makerAsset?
|
|
46
|
+
*/
|
|
47
|
+
export type GetRequiredAllowanceURL =
|
|
48
|
+
`${OrderFillableBalanceFetchUrl<'ft'>}/${string}${`/${string}` | ''}`;
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
GET
|
|
52
|
+
/ft/order/:orderHash (get you p2p or orders)
|
|
53
|
+
*/
|
|
54
|
+
export type GetOrderURL = `${MinFetchUrl<'ft'>}/${string}`;
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
POST create order
|
|
58
|
+
/ft/orders/:chainId/
|
|
59
|
+
/ft/p2p/:chainId/
|
|
60
|
+
*/
|
|
61
|
+
export type PostOrderURLs = BaseFetchUrl<'ft'>;
|
|
62
|
+
|
|
63
|
+
export const constructBaseFetchUrlGetter: BaseFetchUrlInputConstructor<'ft'> =
|
|
64
|
+
baseFetchUrlGetterFactory('ft');
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { OrderData } from './buildOrderData';
|
|
2
|
+
|
|
3
|
+
export type LimitOrderType = 'LIMIT' | 'P2P';
|
|
4
|
+
|
|
5
|
+
export type LimitOrder = LimitOrderFromApi;
|
|
6
|
+
|
|
7
|
+
export type LimitOrderToSend = OrderData & {
|
|
8
|
+
permitMakerAsset?: string;
|
|
9
|
+
signature: string;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type LimitOrdersApiResponse = {
|
|
13
|
+
limit: number;
|
|
14
|
+
offset: number;
|
|
15
|
+
total: number;
|
|
16
|
+
hasMore: boolean;
|
|
17
|
+
orders: LimitOrderFromApi[];
|
|
18
|
+
};
|
|
19
|
+
export type LimitOrderApiResponse = {
|
|
20
|
+
order: LimitOrderFromApi;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// display states such as EXPIRED and PARTIALLY_FILLLED derived on client side
|
|
24
|
+
// returned by API but can be calculated too, EXPIRED == order.expiry < Date.now()/1000
|
|
25
|
+
// PARTIALLY_FILLED == order.fillableBalance < order.makerAmount && order.fillableBalance !== '0'
|
|
26
|
+
// SUSPENDED status was introduced for Limit orders to indicate that orders where makers lacked sufficient funds
|
|
27
|
+
// to fulfill them would no longer be tracked. This status is similar to CANCELLED, but it reduces any ambiguity that might
|
|
28
|
+
// arise when debugging or when users view their CANCELLED orders.
|
|
29
|
+
export type LimitOrderState =
|
|
30
|
+
| 'DRAFT'
|
|
31
|
+
| 'PENDING'
|
|
32
|
+
| 'FULFILLED'
|
|
33
|
+
| 'CANCELLED'
|
|
34
|
+
| 'SUSPENDED'
|
|
35
|
+
| 'EXPIRED';
|
|
36
|
+
|
|
37
|
+
export type LimitOrderEvent = '';
|
|
38
|
+
|
|
39
|
+
export type LimitOrderTransaction = {
|
|
40
|
+
hash: string;
|
|
41
|
+
event_type: 'OrderFilled' | 'OrderCancelled';
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export type LimitOrderFromApi = {
|
|
45
|
+
chainId: number;
|
|
46
|
+
nonceAndMeta: string; // uiint
|
|
47
|
+
expiry: number; // timestamp
|
|
48
|
+
maker: string; // address
|
|
49
|
+
taker: string; // address
|
|
50
|
+
makerAsset: string; // address
|
|
51
|
+
takerAsset: string; // address
|
|
52
|
+
makerAmount: string; // wei
|
|
53
|
+
takerAmount: string; // wei
|
|
54
|
+
makerBalance: string; // min(fillableBalance, allowance(maker), balance(maker)]
|
|
55
|
+
signature: string; // supplied by FE
|
|
56
|
+
permitMakerAsset: null | string; // address
|
|
57
|
+
orderHash: string; // hex string
|
|
58
|
+
createdAt: number; // timestamp
|
|
59
|
+
updatedAt: number; // timestamp
|
|
60
|
+
state: LimitOrderState;
|
|
61
|
+
/** @description transaction with the last event pertaining to the order: OrderFilled or OrderCancelled */
|
|
62
|
+
transactionHash: null | string;
|
|
63
|
+
// not yet returned
|
|
64
|
+
// transactions: LimitOrderTransaction[];
|
|
65
|
+
type: LimitOrderType;
|
|
66
|
+
takerFromMeta: string; // the intended receiver, eg receiving address of p2p order where `taker` would be augustus
|
|
67
|
+
fillableBalance: string; // amount that remains to be filled
|
|
68
|
+
reservedBalance: string; // amount that is currently reserved in this order
|
|
69
|
+
swappableBalance: string; // actual amount that can be filled at this time
|
|
70
|
+
};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ConstructProviderFetchInput,
|
|
3
|
+
RequestParameters,
|
|
4
|
+
} from '../../types';
|
|
5
|
+
import type { LimitOrderToSend, LimitOrderFromApi } from './helpers/types';
|
|
6
|
+
import {
|
|
7
|
+
BuildLimitOrderFunctions,
|
|
8
|
+
BuildLimitOrderInput,
|
|
9
|
+
constructBuildLimitOrder,
|
|
10
|
+
} from './buildOrder';
|
|
11
|
+
import {
|
|
12
|
+
CancelLimitOrderFunctions,
|
|
13
|
+
constructCancelLimitOrder,
|
|
14
|
+
} from './cancelOrder';
|
|
15
|
+
import { constructGetLimitOrders, GetLimitOrdersFunctions } from './getOrders';
|
|
16
|
+
import { constructPostLimitOrder, PostLimitOrderFunctions } from './postOrder';
|
|
17
|
+
import { constructSignLimitOrder, SignLimitOrderFunctions } from './signOrder';
|
|
18
|
+
import {
|
|
19
|
+
constructApproveTokenForLimitOrder,
|
|
20
|
+
ApproveTokenForLimitOrderFunctions,
|
|
21
|
+
} from './approveForOrder';
|
|
22
|
+
import {
|
|
23
|
+
GetLimitOrdersContractFunctions,
|
|
24
|
+
constructGetLimitOrdersContract,
|
|
25
|
+
} from './getOrdersContract';
|
|
26
|
+
import {
|
|
27
|
+
BuildLimitOrdersTxFunctions,
|
|
28
|
+
constructBuildLimitOrderTx,
|
|
29
|
+
} from './transaction';
|
|
30
|
+
import type { Address } from '@paraswap/core';
|
|
31
|
+
import {
|
|
32
|
+
FillOrderDirectlyFunctions,
|
|
33
|
+
constructFillOrderDirectly,
|
|
34
|
+
} from './fillOrderDirectly';
|
|
35
|
+
|
|
36
|
+
type SubmitLimitOrder = (
|
|
37
|
+
buildLimitOrderParams: BuildLimitOrderInput,
|
|
38
|
+
extra?: { permitMakerAsset?: string },
|
|
39
|
+
requestParams?: RequestParameters
|
|
40
|
+
) => Promise<LimitOrderFromApi>;
|
|
41
|
+
|
|
42
|
+
type SubmitP2POrder = (
|
|
43
|
+
buildLimitOrderParams: BuildLimitOrderInput & { taker: Address },
|
|
44
|
+
extra?: { permitMakerAsset?: string },
|
|
45
|
+
requestParams?: RequestParameters
|
|
46
|
+
) => Promise<LimitOrderFromApi>;
|
|
47
|
+
|
|
48
|
+
export type SubmitLimitOrderFuncs = {
|
|
49
|
+
submitLimitOrder: SubmitLimitOrder;
|
|
50
|
+
submitP2POrder: SubmitP2POrder;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const constructSubmitLimitOrder = (
|
|
54
|
+
options: ConstructProviderFetchInput<any, 'signTypedDataCall'>
|
|
55
|
+
): SubmitLimitOrderFuncs => {
|
|
56
|
+
const { buildLimitOrder } = constructBuildLimitOrder(options);
|
|
57
|
+
const { signLimitOrder } = constructSignLimitOrder(options);
|
|
58
|
+
const { postLimitOrder, postP2POrder } = constructPostLimitOrder(options);
|
|
59
|
+
|
|
60
|
+
const prepareLimitOrder = async (
|
|
61
|
+
buildLimitOrderParams: BuildLimitOrderInput,
|
|
62
|
+
extra?: { permitMakerAsset?: string }
|
|
63
|
+
): Promise<LimitOrderToSend> => {
|
|
64
|
+
const orderData = await buildLimitOrder(buildLimitOrderParams);
|
|
65
|
+
const signature = await signLimitOrder(orderData);
|
|
66
|
+
|
|
67
|
+
const orderWithSignature: LimitOrderToSend = {
|
|
68
|
+
...orderData.data,
|
|
69
|
+
...extra,
|
|
70
|
+
signature,
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
return orderWithSignature;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const submitLimitOrder: SubmitLimitOrder = async (
|
|
77
|
+
buildLimitOrderParams,
|
|
78
|
+
extra = {},
|
|
79
|
+
requestParams
|
|
80
|
+
) => {
|
|
81
|
+
const orderWithSignature: LimitOrderToSend = await prepareLimitOrder(
|
|
82
|
+
buildLimitOrderParams,
|
|
83
|
+
extra
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const newOrder = await postLimitOrder(orderWithSignature, requestParams);
|
|
87
|
+
|
|
88
|
+
return newOrder;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const submitP2POrder: SubmitP2POrder = async (
|
|
92
|
+
buildLimitOrderParams,
|
|
93
|
+
extra = {},
|
|
94
|
+
requestParams
|
|
95
|
+
) => {
|
|
96
|
+
const orderWithSignature: LimitOrderToSend = await prepareLimitOrder(
|
|
97
|
+
buildLimitOrderParams,
|
|
98
|
+
extra
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
const newOrder = await postP2POrder(orderWithSignature, requestParams);
|
|
102
|
+
|
|
103
|
+
return newOrder;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
return { submitLimitOrder, submitP2POrder };
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export type LimitOrderHandlers<T> = SubmitLimitOrderFuncs &
|
|
110
|
+
BuildLimitOrderFunctions &
|
|
111
|
+
SignLimitOrderFunctions &
|
|
112
|
+
PostLimitOrderFunctions &
|
|
113
|
+
GetLimitOrdersFunctions &
|
|
114
|
+
GetLimitOrdersContractFunctions &
|
|
115
|
+
BuildLimitOrdersTxFunctions &
|
|
116
|
+
CancelLimitOrderFunctions<T> &
|
|
117
|
+
ApproveTokenForLimitOrderFunctions<T> &
|
|
118
|
+
FillOrderDirectlyFunctions<T>;
|
|
119
|
+
|
|
120
|
+
/** @description construct SDK with every LimitOrders-related method, fetching from API and contract calls */
|
|
121
|
+
export const constructAllLimitOrdersHandlers = <TxResponse>(
|
|
122
|
+
options: ConstructProviderFetchInput<
|
|
123
|
+
TxResponse,
|
|
124
|
+
'signTypedDataCall' | 'transactCall' | 'staticCall'
|
|
125
|
+
>
|
|
126
|
+
): LimitOrderHandlers<TxResponse> => {
|
|
127
|
+
const limitOrdersGetters = constructGetLimitOrders(options);
|
|
128
|
+
const limitOrdersContractGetter = constructGetLimitOrdersContract(options);
|
|
129
|
+
|
|
130
|
+
const limitOrdersSubmit = constructSubmitLimitOrder(options);
|
|
131
|
+
const limitOrdersBuild = constructBuildLimitOrder(options);
|
|
132
|
+
const limitOrdersSign = constructSignLimitOrder(options);
|
|
133
|
+
const limitOrdersPost = constructPostLimitOrder(options);
|
|
134
|
+
|
|
135
|
+
const limitOrdersCancel = constructCancelLimitOrder(options);
|
|
136
|
+
const limitOrdersApproveToken = constructApproveTokenForLimitOrder(options);
|
|
137
|
+
|
|
138
|
+
const limitOrdersFillOrderDirectly = constructFillOrderDirectly(options);
|
|
139
|
+
|
|
140
|
+
const limitOrdersBuildTx = constructBuildLimitOrderTx(options);
|
|
141
|
+
|
|
142
|
+
return {
|
|
143
|
+
...limitOrdersGetters,
|
|
144
|
+
...limitOrdersContractGetter,
|
|
145
|
+
...limitOrdersSubmit,
|
|
146
|
+
...limitOrdersBuild,
|
|
147
|
+
...limitOrdersSign,
|
|
148
|
+
...limitOrdersPost,
|
|
149
|
+
...limitOrdersCancel,
|
|
150
|
+
...limitOrdersApproveToken,
|
|
151
|
+
...limitOrdersFillOrderDirectly,
|
|
152
|
+
...limitOrdersBuildTx,
|
|
153
|
+
};
|
|
154
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { API_URL } from '../../constants';
|
|
2
|
+
import type { ConstructFetchInput, RequestParameters } from '../../types';
|
|
3
|
+
import { constructBaseFetchUrlGetter, PostOrderURLs } from './helpers/misc';
|
|
4
|
+
import type {
|
|
5
|
+
LimitOrderApiResponse,
|
|
6
|
+
LimitOrderToSend,
|
|
7
|
+
LimitOrderFromApi,
|
|
8
|
+
LimitOrderType,
|
|
9
|
+
} from './helpers/types';
|
|
10
|
+
|
|
11
|
+
type PostLimitOrder = (
|
|
12
|
+
limitOrderWithSignatureAndPermit: LimitOrderToSend,
|
|
13
|
+
requestParams?: RequestParameters
|
|
14
|
+
) => Promise<LimitOrderFromApi>;
|
|
15
|
+
|
|
16
|
+
export type PostLimitOrderFunctions = {
|
|
17
|
+
postLimitOrder: PostLimitOrder;
|
|
18
|
+
postP2POrder: PostLimitOrder;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const constructPostLimitOrder = ({
|
|
22
|
+
apiURL = API_URL,
|
|
23
|
+
chainId,
|
|
24
|
+
fetcher,
|
|
25
|
+
}: ConstructFetchInput): PostLimitOrderFunctions => {
|
|
26
|
+
const getBaseFetchURLByOrderType = constructBaseFetchUrlGetter({
|
|
27
|
+
apiURL,
|
|
28
|
+
chainId,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const postTypedOrder = async (
|
|
32
|
+
limitOrderWithSignatureAndPermit: LimitOrderToSend,
|
|
33
|
+
type: LimitOrderType,
|
|
34
|
+
requestParams?: RequestParameters
|
|
35
|
+
): Promise<LimitOrderFromApi> => {
|
|
36
|
+
const fetchURL = getBaseFetchURLByOrderType(type);
|
|
37
|
+
|
|
38
|
+
const { order: newOrder } = await fetcher<
|
|
39
|
+
LimitOrderApiResponse,
|
|
40
|
+
PostOrderURLs
|
|
41
|
+
>({
|
|
42
|
+
url: fetchURL,
|
|
43
|
+
method: 'POST',
|
|
44
|
+
data: limitOrderWithSignatureAndPermit,
|
|
45
|
+
requestParams,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return newOrder;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const postLimitOrder: PostLimitOrder = (
|
|
52
|
+
limitOrderWithSignatureAndPermit,
|
|
53
|
+
requestParams
|
|
54
|
+
) => {
|
|
55
|
+
return postTypedOrder(
|
|
56
|
+
limitOrderWithSignatureAndPermit,
|
|
57
|
+
'LIMIT',
|
|
58
|
+
requestParams
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const postP2POrder: PostLimitOrder = (
|
|
63
|
+
limitOrderWithSignatureAndPermit,
|
|
64
|
+
requestParams
|
|
65
|
+
) => {
|
|
66
|
+
return postTypedOrder(
|
|
67
|
+
limitOrderWithSignatureAndPermit,
|
|
68
|
+
'P2P',
|
|
69
|
+
requestParams
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
return { postLimitOrder, postP2POrder };
|
|
74
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ConstructProviderFetchInput } from '../../types';
|
|
2
|
+
import type { SignableOrderData } from './buildOrder';
|
|
3
|
+
import { sanitizeOrderData } from './helpers/misc';
|
|
4
|
+
|
|
5
|
+
export type SignLimitOrderFunctions = {
|
|
6
|
+
signLimitOrder: (signableOrderData: SignableOrderData) => Promise<string>;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
// returns whatever `contractCaller` returns
|
|
10
|
+
// to allow for better versatility
|
|
11
|
+
export const constructSignLimitOrder = (
|
|
12
|
+
options: Pick<
|
|
13
|
+
ConstructProviderFetchInput<any, 'signTypedDataCall'>,
|
|
14
|
+
'contractCaller'
|
|
15
|
+
>
|
|
16
|
+
): SignLimitOrderFunctions => {
|
|
17
|
+
const signLimitOrder: SignLimitOrderFunctions['signLimitOrder'] = (
|
|
18
|
+
typedData
|
|
19
|
+
) => {
|
|
20
|
+
// types allow to pass OrderData & extra_stuff, but tx will break like that
|
|
21
|
+
const typedDataOnly: SignableOrderData = {
|
|
22
|
+
...typedData,
|
|
23
|
+
data: sanitizeOrderData(typedData.data),
|
|
24
|
+
};
|
|
25
|
+
return options.contractCaller.signTypedDataCall(typedDataOnly);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
return { signLimitOrder };
|
|
29
|
+
};
|