@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,231 @@
|
|
|
1
|
+
import type { ConstructFetchInput, OptimalRate } from '../../types';
|
|
2
|
+
|
|
3
|
+
import { assert } from 'ts-essentials';
|
|
4
|
+
import {
|
|
5
|
+
API_URL,
|
|
6
|
+
SwapSide,
|
|
7
|
+
ContractMethod,
|
|
8
|
+
DEFAULT_VERSION,
|
|
9
|
+
} from '../../constants';
|
|
10
|
+
import {
|
|
11
|
+
BuildLimitOrderTxInput,
|
|
12
|
+
BuildOptions,
|
|
13
|
+
BuildSwapAndLimitOrderTxInput,
|
|
14
|
+
TransactionParams,
|
|
15
|
+
constructBuildTx,
|
|
16
|
+
} from '../swap/transaction';
|
|
17
|
+
import { constructGetRate, GetRateInput, RateOptions } from '../swap/rates';
|
|
18
|
+
import type { OrderData } from './buildOrder';
|
|
19
|
+
import { isFilledArray } from '../../helpers/misc';
|
|
20
|
+
import type { RequestParameters } from '../../types';
|
|
21
|
+
|
|
22
|
+
type MinBuildSwapAndLimitOrderTxInput = Omit<
|
|
23
|
+
// these are derived from `orders`
|
|
24
|
+
BuildSwapAndLimitOrderTxInput,
|
|
25
|
+
'srcToken' | 'srcAmount' | 'destToken' | 'destDecimals'
|
|
26
|
+
>;
|
|
27
|
+
|
|
28
|
+
type BuildSwapAndLimitOrdersTx = (
|
|
29
|
+
params: MinBuildSwapAndLimitOrderTxInput,
|
|
30
|
+
options?: BuildOptions,
|
|
31
|
+
requestParams?: RequestParameters
|
|
32
|
+
) => Promise<TransactionParams>;
|
|
33
|
+
|
|
34
|
+
type MinBuildLimitOrderTxInput = Omit<
|
|
35
|
+
BuildLimitOrderTxInput,
|
|
36
|
+
// these are derived from `orders`
|
|
37
|
+
'srcToken' | 'srcAmount' | 'destToken' | 'slippage'
|
|
38
|
+
// `slippage` doesn't participate as we derive `srcAmount` already
|
|
39
|
+
>;
|
|
40
|
+
|
|
41
|
+
type BuildLimitOrdersTx = (
|
|
42
|
+
params: MinBuildLimitOrderTxInput,
|
|
43
|
+
options?: BuildOptions,
|
|
44
|
+
requestParams?: RequestParameters
|
|
45
|
+
) => Promise<TransactionParams>;
|
|
46
|
+
|
|
47
|
+
export type BuildLimitOrdersTxFunctions = {
|
|
48
|
+
getLimitOrdersRate: GetLimitOrdersRate;
|
|
49
|
+
buildLimitOrderTx: BuildLimitOrdersTx;
|
|
50
|
+
buildSwapAndLimitOrderTx: BuildSwapAndLimitOrdersTx;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
type GetLimitOrdersRate = (
|
|
54
|
+
// `amount`, if given, must equal the total of the orders' `takerAmounts`
|
|
55
|
+
options: Omit<GetRateInput, 'amount' | 'side'> & { amount?: string },
|
|
56
|
+
orders: CheckableOrderData[],
|
|
57
|
+
requestParams?: RequestParameters
|
|
58
|
+
) => Promise<OptimalRate>;
|
|
59
|
+
|
|
60
|
+
export const constructBuildLimitOrderTx = ({
|
|
61
|
+
apiURL = API_URL,
|
|
62
|
+
version = DEFAULT_VERSION,
|
|
63
|
+
chainId,
|
|
64
|
+
fetcher,
|
|
65
|
+
}: ConstructFetchInput): BuildLimitOrdersTxFunctions => {
|
|
66
|
+
const { buildTx: buildSwapTx } = constructBuildTx({
|
|
67
|
+
apiURL,
|
|
68
|
+
chainId,
|
|
69
|
+
fetcher,
|
|
70
|
+
version,
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
const { getRate: getSwapAndLimitOrderRate } = constructGetRate({
|
|
74
|
+
apiURL,
|
|
75
|
+
version,
|
|
76
|
+
chainId,
|
|
77
|
+
fetcher,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// returns priceRoute that would allow to swap from srcToken to destToken(=order.takerAsset) followed by filling limit orders
|
|
81
|
+
const getLimitOrdersRate: GetLimitOrdersRate = async (
|
|
82
|
+
{ srcToken, destToken, amount, options: _options = {}, ...rest },
|
|
83
|
+
orders,
|
|
84
|
+
requestParams
|
|
85
|
+
) => {
|
|
86
|
+
assert(orders.length > 0, 'must pass at least 1 order');
|
|
87
|
+
|
|
88
|
+
const { totalTakerAmount, takerAsset } = checkAndParseOrders(orders);
|
|
89
|
+
assert(
|
|
90
|
+
takerAsset.toLowerCase() === destToken.toLowerCase(),
|
|
91
|
+
'All orders must have the same takerAsset as destToken'
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const takerAmountString = totalTakerAmount.toString(10);
|
|
95
|
+
|
|
96
|
+
if (amount) {
|
|
97
|
+
assert(
|
|
98
|
+
amount === takerAmountString,
|
|
99
|
+
"`amount` must equal the total of the orders' `takerAmounts`"
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// The pricing must use includeContractMethods=simpleBuy and side=BUY
|
|
104
|
+
const options: RateOptions = {
|
|
105
|
+
..._options,
|
|
106
|
+
includeContractMethods: [ContractMethod.simpleBuy],
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const side = SwapSide.BUY;
|
|
110
|
+
|
|
111
|
+
const rateInput: GetRateInput = {
|
|
112
|
+
...rest,
|
|
113
|
+
srcToken,
|
|
114
|
+
destToken,
|
|
115
|
+
amount: takerAmountString,
|
|
116
|
+
side,
|
|
117
|
+
options,
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// priceRoute
|
|
121
|
+
const optimalRate = await getSwapAndLimitOrderRate(
|
|
122
|
+
rateInput,
|
|
123
|
+
requestParams
|
|
124
|
+
);
|
|
125
|
+
return optimalRate;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// derive srcToken, destToken and srcAmount from orders[]
|
|
129
|
+
const buildLimitOrderTx: BuildLimitOrdersTx = (
|
|
130
|
+
params,
|
|
131
|
+
options,
|
|
132
|
+
requestParams
|
|
133
|
+
) => {
|
|
134
|
+
const { makerAsset, takerAsset, totalTakerAmount } = checkAndParseOrders(
|
|
135
|
+
params.orders
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
const fillParams: BuildLimitOrderTxInput = {
|
|
139
|
+
...params,
|
|
140
|
+
// taker supplies takerAsset
|
|
141
|
+
srcToken: takerAsset,
|
|
142
|
+
// no `slippage` in `params`
|
|
143
|
+
srcAmount: totalTakerAmount.toString(10),
|
|
144
|
+
// taker gets makerAsset in the end
|
|
145
|
+
destToken: makerAsset,
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
return buildSwapTx(fillParams, options, requestParams);
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const buildSwapAndLimitOrderTx: BuildSwapAndLimitOrdersTx = (
|
|
152
|
+
params,
|
|
153
|
+
options,
|
|
154
|
+
requestParams
|
|
155
|
+
) => {
|
|
156
|
+
const { makerAsset } = checkAndParseOrders(params.orders);
|
|
157
|
+
|
|
158
|
+
const fillParams: BuildSwapAndLimitOrderTxInput = {
|
|
159
|
+
...params,
|
|
160
|
+
// taker supplies srcToken
|
|
161
|
+
srcToken: params.priceRoute.srcToken,
|
|
162
|
+
// which is swapped for makerAsset, that would go towards filling the orders
|
|
163
|
+
destToken: makerAsset,
|
|
164
|
+
destDecimals: params.priceRoute.destDecimals,
|
|
165
|
+
// one or the other
|
|
166
|
+
...(params.slippage
|
|
167
|
+
? { slippage: params.slippage }
|
|
168
|
+
: // may sneak in as part of `params`
|
|
169
|
+
{ srcAmount: params.priceRoute.srcAmount, slippage: undefined }),
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
return buildSwapTx(fillParams, options, requestParams);
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
getLimitOrdersRate,
|
|
177
|
+
buildLimitOrderTx,
|
|
178
|
+
buildSwapAndLimitOrderTx,
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
type CheckAndParseOrdersResult = Omit<CheckableOrderData, 'takerAmount'> & {
|
|
183
|
+
totalTakerAmount: bigint;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
type CheckableOrderData = Pick<
|
|
187
|
+
OrderData,
|
|
188
|
+
'takerAsset' | 'makerAsset' | 'takerAmount' | 'maker'
|
|
189
|
+
> & { taker?: OrderData['taker'] };
|
|
190
|
+
|
|
191
|
+
function checkAndParseOrders(
|
|
192
|
+
orders: CheckableOrderData[]
|
|
193
|
+
): CheckAndParseOrdersResult {
|
|
194
|
+
assert(isFilledArray(orders), 'must pass at least 1 order');
|
|
195
|
+
|
|
196
|
+
const { takerAssetsSet, makerAssetsSet, totalTakerAmount } = orders.reduce<
|
|
197
|
+
Record<'takerAssetsSet' | 'makerAssetsSet', Set<string>> & {
|
|
198
|
+
totalTakerAmount: bigint;
|
|
199
|
+
}
|
|
200
|
+
>(
|
|
201
|
+
(accum, order) => {
|
|
202
|
+
accum.takerAssetsSet.add(order.takerAsset.toLowerCase());
|
|
203
|
+
accum.makerAssetsSet.add(order.makerAsset.toLowerCase());
|
|
204
|
+
|
|
205
|
+
accum.totalTakerAmount =
|
|
206
|
+
accum.totalTakerAmount + BigInt(order.takerAmount);
|
|
207
|
+
return accum;
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
takerAssetsSet: new Set(),
|
|
211
|
+
makerAssetsSet: new Set(),
|
|
212
|
+
totalTakerAmount: BigInt(0),
|
|
213
|
+
}
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
assert(
|
|
217
|
+
takerAssetsSet.size === 1,
|
|
218
|
+
'All orders must have the same takerAsset as destToken'
|
|
219
|
+
);
|
|
220
|
+
assert(makerAssetsSet.size === 1, 'All orders must have the same makerAsset');
|
|
221
|
+
|
|
222
|
+
const [{ maker, taker, makerAsset, takerAsset }] = orders;
|
|
223
|
+
|
|
224
|
+
return {
|
|
225
|
+
totalTakerAmount,
|
|
226
|
+
maker,
|
|
227
|
+
taker,
|
|
228
|
+
makerAsset,
|
|
229
|
+
takerAsset,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { ApproveToken } from '../../helpers/approve';
|
|
2
|
+
import type { ExtractAbiMethodNames } from '../../helpers/misc';
|
|
3
|
+
import type {
|
|
4
|
+
Address,
|
|
5
|
+
ConstructProviderFetchInput,
|
|
6
|
+
RequestParameters,
|
|
7
|
+
TxSendOverrides,
|
|
8
|
+
} from '../../types';
|
|
9
|
+
import { constructApproveToken } from '../swap/approve';
|
|
10
|
+
import { constructGetNFTOrdersContract } from './getOrdersContract';
|
|
11
|
+
|
|
12
|
+
type ApproveNFT<T> = (
|
|
13
|
+
tokenAddress: Address,
|
|
14
|
+
overrides?: TxSendOverrides,
|
|
15
|
+
requestParams?: RequestParameters
|
|
16
|
+
) => Promise<T>;
|
|
17
|
+
|
|
18
|
+
export type ApproveTokenForNFTOrderFunctions<T> = {
|
|
19
|
+
/** @description approving AugustusSwapper as spender for takerAsset (ERC20) for Limit Orders that will be executed through it */
|
|
20
|
+
approveERC20ForNFTOrder: ApproveToken<T>;
|
|
21
|
+
/** @description approving AugustusRFQ as spender for makerAsset (NFT) */
|
|
22
|
+
approveNFTForNFTOrder: ApproveNFT<T>;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const MinNFTAbi = [
|
|
26
|
+
{
|
|
27
|
+
constant: false,
|
|
28
|
+
inputs: [
|
|
29
|
+
{
|
|
30
|
+
name: '_operator',
|
|
31
|
+
type: 'address',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: '_approved',
|
|
35
|
+
type: 'bool',
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
name: 'setApprovalForAll',
|
|
39
|
+
outputs: [],
|
|
40
|
+
payable: false,
|
|
41
|
+
stateMutability: 'nonpayable',
|
|
42
|
+
type: 'function',
|
|
43
|
+
},
|
|
44
|
+
] as const;
|
|
45
|
+
|
|
46
|
+
type ApprovalMethods = ExtractAbiMethodNames<typeof MinNFTAbi>;
|
|
47
|
+
|
|
48
|
+
// returns whatever `contractCaller` returns
|
|
49
|
+
// to allow for better versatility
|
|
50
|
+
export const constructApproveTokenForNFTOrder = <T>(
|
|
51
|
+
options: ConstructProviderFetchInput<T, 'transactCall'>
|
|
52
|
+
): ApproveTokenForNFTOrderFunctions<T> => {
|
|
53
|
+
// approving TokenTransaferProxy as for the swap
|
|
54
|
+
const { approveToken: approveERC20ForNFTOrder } =
|
|
55
|
+
constructApproveToken(options);
|
|
56
|
+
|
|
57
|
+
const { getNFTOrdersContract } = constructGetNFTOrdersContract(options);
|
|
58
|
+
|
|
59
|
+
const approveNFTForNFTOrder: ApproveNFT<T> = async (
|
|
60
|
+
tokenAddress,
|
|
61
|
+
overrides = {},
|
|
62
|
+
requestParams
|
|
63
|
+
) => {
|
|
64
|
+
// @TODO add approvetakerAssetForNFTOrder to use AugustusSwapper as spender if we ever have SELL NFT swaps
|
|
65
|
+
const AugustusRFQ = await getNFTOrdersContract(requestParams);
|
|
66
|
+
|
|
67
|
+
const res = await options.contractCaller.transactCall<ApprovalMethods>({
|
|
68
|
+
address: tokenAddress,
|
|
69
|
+
abi: MinNFTAbi,
|
|
70
|
+
contractMethod: 'setApprovalForAll',
|
|
71
|
+
args: [AugustusRFQ, true],
|
|
72
|
+
overrides,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
return res;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
return { approveERC20ForNFTOrder, approveNFTForNFTOrder };
|
|
79
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ConstructFetchInput, RequestParameters } from '../../types';
|
|
2
|
+
import { constructGetSpender } from '../swap/spender';
|
|
3
|
+
import {
|
|
4
|
+
buildOrderData,
|
|
5
|
+
BuildNFTOrderDataInput,
|
|
6
|
+
SignableNFTOrderData,
|
|
7
|
+
} from './helpers/buildOrderData';
|
|
8
|
+
export * from './helpers/buildOrderData';
|
|
9
|
+
|
|
10
|
+
export type BuildNFTOrderInput = Omit<
|
|
11
|
+
BuildNFTOrderDataInput,
|
|
12
|
+
'chainId' | 'verifyingContract' | 'AugustusAddress'
|
|
13
|
+
>;
|
|
14
|
+
|
|
15
|
+
type BuildNFTOrder = (
|
|
16
|
+
buildNFTOrderParams: BuildNFTOrderInput,
|
|
17
|
+
requestParams?: RequestParameters
|
|
18
|
+
) => Promise<SignableNFTOrderData>;
|
|
19
|
+
|
|
20
|
+
export type BuildNFTOrderFunctions = {
|
|
21
|
+
/** @description Build Orders that will be excuted through AugustusSwapper */
|
|
22
|
+
buildNFTOrder: BuildNFTOrder;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const constructBuildNFTOrder = (
|
|
26
|
+
options: ConstructFetchInput
|
|
27
|
+
): BuildNFTOrderFunctions => {
|
|
28
|
+
const { chainId } = options;
|
|
29
|
+
|
|
30
|
+
// getContracts is cached internally for the same instance of SDK
|
|
31
|
+
// so should persist across same apiUrl & network
|
|
32
|
+
const { getContracts } = constructGetSpender(options);
|
|
33
|
+
|
|
34
|
+
const buildNFTOrder: BuildNFTOrder = async (
|
|
35
|
+
buildNFTOrderParams,
|
|
36
|
+
requestParams
|
|
37
|
+
) => {
|
|
38
|
+
const { AugustusSwapper: AugustusAddress, AugustusRFQ: verifyingContract } =
|
|
39
|
+
await getContracts(requestParams);
|
|
40
|
+
|
|
41
|
+
return buildOrderData({
|
|
42
|
+
...buildNFTOrderParams,
|
|
43
|
+
chainId,
|
|
44
|
+
verifyingContract,
|
|
45
|
+
AugustusAddress,
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
buildNFTOrder,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ConstructProviderFetchInput } from '../../types';
|
|
2
|
+
import {
|
|
3
|
+
CancelOrder,
|
|
4
|
+
CancelOrderBulk,
|
|
5
|
+
constructCancelLimitOrder,
|
|
6
|
+
} from '../limitOrders/cancelOrder';
|
|
7
|
+
|
|
8
|
+
export type CancelNFTOrderFunctions<T> = {
|
|
9
|
+
cancelNFTOrder: CancelOrder<T>;
|
|
10
|
+
cancelNFTOrderBulk: CancelOrderBulk<T>;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// should work the same as for LimitOrders
|
|
14
|
+
export const constructCancelNFTOrder = <T>(
|
|
15
|
+
options: ConstructProviderFetchInput<T, 'transactCall'>
|
|
16
|
+
): CancelNFTOrderFunctions<T> => {
|
|
17
|
+
const { cancelLimitOrder, cancelLimitOrderBulk } =
|
|
18
|
+
constructCancelLimitOrder(options);
|
|
19
|
+
return {
|
|
20
|
+
cancelNFTOrder: cancelLimitOrder,
|
|
21
|
+
cancelNFTOrderBulk: cancelLimitOrderBulk,
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { API_URL } from '../../constants';
|
|
2
|
+
import type {
|
|
3
|
+
Address,
|
|
4
|
+
ConstructFetchInput,
|
|
5
|
+
RequestParameters,
|
|
6
|
+
} from '../../types';
|
|
7
|
+
import {
|
|
8
|
+
constructBaseFetchUrlGetter,
|
|
9
|
+
GetOrdersURLs,
|
|
10
|
+
GetOrderURL,
|
|
11
|
+
} from './helpers/misc';
|
|
12
|
+
import type {
|
|
13
|
+
NFTOrderFromAPI,
|
|
14
|
+
NFTOrdersApiResponse,
|
|
15
|
+
NFTOrderType,
|
|
16
|
+
} from './helpers/types';
|
|
17
|
+
|
|
18
|
+
// get orders by `maker` or `taker`
|
|
19
|
+
export type NFTOrdersUserParams =
|
|
20
|
+
| { maker: Address; type: NFTOrderType }
|
|
21
|
+
| { taker: Address; type: NFTOrderType };
|
|
22
|
+
type GetNFTOrderByHash = (
|
|
23
|
+
orderHash: string,
|
|
24
|
+
requestParams?: RequestParameters
|
|
25
|
+
) => Promise<NFTOrderFromAPI>;
|
|
26
|
+
type GetNFTOrders = (
|
|
27
|
+
userParams: NFTOrdersUserParams,
|
|
28
|
+
requestParams?: RequestParameters
|
|
29
|
+
) => Promise<NFTOrdersApiResponse>;
|
|
30
|
+
|
|
31
|
+
export type GetNFTOrdersFunctions = {
|
|
32
|
+
getNFTOrders: GetNFTOrders;
|
|
33
|
+
getNFTOrderByHash: GetNFTOrderByHash;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export const constructGetNFTOrders = ({
|
|
37
|
+
apiURL = API_URL,
|
|
38
|
+
chainId,
|
|
39
|
+
fetcher,
|
|
40
|
+
}: ConstructFetchInput): GetNFTOrdersFunctions => {
|
|
41
|
+
const getBaseFetchURLByOrderType = constructBaseFetchUrlGetter({
|
|
42
|
+
apiURL,
|
|
43
|
+
chainId,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
const getNFTOrders: GetNFTOrders = async (userParams, requestParams) => {
|
|
47
|
+
const baseFetchURL = getBaseFetchURLByOrderType(userParams.type);
|
|
48
|
+
const userURL =
|
|
49
|
+
'maker' in userParams
|
|
50
|
+
? (`maker/${userParams.maker}` as const)
|
|
51
|
+
: (`taker/${userParams.taker}` as const);
|
|
52
|
+
const fetchURL = `${baseFetchURL}/${userURL}` as const;
|
|
53
|
+
|
|
54
|
+
const response = await fetcher<NFTOrdersApiResponse, GetOrdersURLs>({
|
|
55
|
+
url: fetchURL,
|
|
56
|
+
method: 'GET',
|
|
57
|
+
requestParams,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// without any extra calls, return what API returns
|
|
61
|
+
return response;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const getNFTOrderByHash: GetNFTOrderByHash = async (
|
|
65
|
+
orderHash,
|
|
66
|
+
requestParams
|
|
67
|
+
) => {
|
|
68
|
+
const baseFetchURL = getBaseFetchURLByOrderType();
|
|
69
|
+
const fetchURL = `${baseFetchURL}/${orderHash}` as const;
|
|
70
|
+
|
|
71
|
+
const order = await fetcher<NFTOrderFromAPI, GetOrderURL>({
|
|
72
|
+
url: fetchURL,
|
|
73
|
+
method: 'GET',
|
|
74
|
+
requestParams,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
return order;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
return {
|
|
81
|
+
getNFTOrders,
|
|
82
|
+
getNFTOrderByHash,
|
|
83
|
+
};
|
|
84
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ConstructFetchInput } from '../../types';
|
|
2
|
+
import { constructGetSpender, GetSpender } from '../swap/spender';
|
|
3
|
+
|
|
4
|
+
export type GetNFTOrdersContractFunctions = {
|
|
5
|
+
getNFTOrdersContract: GetSpender;
|
|
6
|
+
getTokenTransferProxy: GetSpender;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
// should work the same as LimitOrders
|
|
10
|
+
export const constructGetNFTOrdersContract = (
|
|
11
|
+
options: ConstructFetchInput
|
|
12
|
+
): GetNFTOrdersContractFunctions => {
|
|
13
|
+
// analogous to getSpender() but for Limit Orders Contract = AugustusRFQ
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
getSpender: getTokenTransferProxy,
|
|
17
|
+
getAugustusRFQ: getNFTOrdersContract,
|
|
18
|
+
} = constructGetSpender(options);
|
|
19
|
+
|
|
20
|
+
return {
|
|
21
|
+
getNFTOrdersContract,
|
|
22
|
+
getTokenTransferProxy,
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import type { Address } from '../../../types';
|
|
2
|
+
import type { AssetTypeVariant } from './types';
|
|
3
|
+
import {
|
|
4
|
+
Domain,
|
|
5
|
+
name,
|
|
6
|
+
version,
|
|
7
|
+
ZERO_ADDRESS,
|
|
8
|
+
} from '../../common/orders/buildOrderData';
|
|
9
|
+
import { getRandomInt } from '../../../helpers/misc';
|
|
10
|
+
|
|
11
|
+
const OrderNFT = [
|
|
12
|
+
{ name: 'nonceAndMeta', type: 'uint256' },
|
|
13
|
+
{ name: 'expiry', type: 'uint128' },
|
|
14
|
+
{ name: 'makerAsset', type: 'uint256' },
|
|
15
|
+
{ name: 'makerAssetId', type: 'uint256' },
|
|
16
|
+
{ name: 'takerAsset', type: 'uint256' },
|
|
17
|
+
{ name: 'takerAssetId', type: 'uint256' },
|
|
18
|
+
{ name: 'maker', type: 'address' },
|
|
19
|
+
{ name: 'taker', type: 'address' },
|
|
20
|
+
{ name: 'makerAmount', type: 'uint256' },
|
|
21
|
+
{ name: 'takerAmount', type: 'uint256' },
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export interface BuildNFTOrderDataInput {
|
|
25
|
+
chainId: number;
|
|
26
|
+
verifyingContract: Address;
|
|
27
|
+
nonce?: number;
|
|
28
|
+
expiry: number;
|
|
29
|
+
makerAsset: Address;
|
|
30
|
+
takerAsset: Address;
|
|
31
|
+
makerAmount: string;
|
|
32
|
+
takerAmount: string;
|
|
33
|
+
/** @description NFT Token id, will default to 0 (ERC20), provide for NFT */
|
|
34
|
+
makerAssetId: string; // required when BUYing NFT
|
|
35
|
+
/** @description NFT Token id, will default to 0 (ERC20), provide for NFT */
|
|
36
|
+
takerAssetId?: string;
|
|
37
|
+
/** @description Token type: ERC20 = 0, ERC1155 = 1, ERC721 = 2 */
|
|
38
|
+
makerAssetType: AssetTypeVariant;
|
|
39
|
+
/** @description Token type: ERC20 = 0, ERC1155 = 1, ERC721 = 2 */
|
|
40
|
+
takerAssetType: AssetTypeVariant;
|
|
41
|
+
maker: Address;
|
|
42
|
+
// OrderData.taker must be Augustus for p2p limitOrders to involve swap through Augustus
|
|
43
|
+
// this is the actual user taker which will go into nonceAndMeta
|
|
44
|
+
taker?: Address;
|
|
45
|
+
AugustusAddress: Address;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type SignableNFTOrderData = {
|
|
49
|
+
types: { OrderNFT: typeof OrderNFT };
|
|
50
|
+
domain: Domain;
|
|
51
|
+
data: NFTOrderData;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export type BigIntAsString = string;
|
|
55
|
+
|
|
56
|
+
export type NFTOrderData = {
|
|
57
|
+
expiry: number;
|
|
58
|
+
// '1' when trading 1 NFT token
|
|
59
|
+
makerAmount: BigIntAsString;
|
|
60
|
+
makerAsset: BigIntAsString;
|
|
61
|
+
// '0' indicates ERC20
|
|
62
|
+
makerAssetId: BigIntAsString;
|
|
63
|
+
// '1' when trading 1 NFT token
|
|
64
|
+
takerAmount: BigIntAsString;
|
|
65
|
+
takerAsset: BigIntAsString;
|
|
66
|
+
// '0' indicates ERC20
|
|
67
|
+
takerAssetId: BigIntAsString;
|
|
68
|
+
nonceAndMeta: BigIntAsString;
|
|
69
|
+
maker: Address;
|
|
70
|
+
taker: Address;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export function buildOrderData({
|
|
74
|
+
chainId,
|
|
75
|
+
verifyingContract,
|
|
76
|
+
nonce = getRandomInt(),
|
|
77
|
+
expiry,
|
|
78
|
+
makerAsset: _makerAssetAddress,
|
|
79
|
+
takerAsset: _takerAssetAddress,
|
|
80
|
+
makerAmount,
|
|
81
|
+
takerAmount,
|
|
82
|
+
makerAssetId,
|
|
83
|
+
takerAssetId = '0',
|
|
84
|
+
makerAssetType,
|
|
85
|
+
takerAssetType,
|
|
86
|
+
maker,
|
|
87
|
+
AugustusAddress,
|
|
88
|
+
// if taker is specified -- p2p order for that taker only to fill through Augustus -- taker = Augustus, takerInNonce = _taker
|
|
89
|
+
// if taker is not specified -- limitOrder for anyone to fill through Augustus -- taker = Augustus, takerInNonce = Zero
|
|
90
|
+
taker: takerInNonce = ZERO_ADDRESS, //@TODO allow Orders outside of AugustusRFQ
|
|
91
|
+
}: BuildNFTOrderDataInput): SignableNFTOrderData {
|
|
92
|
+
// first 160 bits is taker address (for p2p orders),
|
|
93
|
+
// or 0 for limitOrders, so that anyone can be the taker of the Order
|
|
94
|
+
const nonceAndMeta = (
|
|
95
|
+
BigInt(takerInNonce) +
|
|
96
|
+
(BigInt(nonce) << BigInt(160))
|
|
97
|
+
).toString(10);
|
|
98
|
+
|
|
99
|
+
const makerAsset = assetAddressToUint(_makerAssetAddress, makerAssetType);
|
|
100
|
+
|
|
101
|
+
const takerAsset = assetAddressToUint(_takerAssetAddress, takerAssetType);
|
|
102
|
+
|
|
103
|
+
const orderNFT: NFTOrderData = {
|
|
104
|
+
nonceAndMeta,
|
|
105
|
+
expiry,
|
|
106
|
+
makerAsset,
|
|
107
|
+
takerAsset,
|
|
108
|
+
maker,
|
|
109
|
+
taker: AugustusAddress,
|
|
110
|
+
makerAmount,
|
|
111
|
+
takerAmount,
|
|
112
|
+
makerAssetId,
|
|
113
|
+
takerAssetId,
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
types: { OrderNFT },
|
|
118
|
+
domain: { name, version, chainId, verifyingContract },
|
|
119
|
+
data: orderNFT,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// create a packed number that contains assetAddress and AssetType
|
|
124
|
+
export function assetAddressToUint(
|
|
125
|
+
assetAddress: Address,
|
|
126
|
+
assetType: AssetTypeVariant
|
|
127
|
+
): BigIntAsString {
|
|
128
|
+
return (BigInt(assetAddress) + (BigInt(assetType) << BigInt(160))).toString(
|
|
129
|
+
10
|
|
130
|
+
);
|
|
131
|
+
}
|