@dzapio/sdk 2.0.6 → 2.0.7
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/dist/examples/chain-utils.d.ts +1 -0
- package/dist/examples/chain-utils.js +20 -0
- package/dist/examples/permit-utils.d.ts +1 -0
- package/dist/examples/permit-utils.js +90 -0
- package/dist/examples/token-utils.d.ts +1 -0
- package/dist/examples/token-utils.js +41 -0
- package/dist/examples/trade-operations.d.ts +1 -0
- package/dist/examples/trade-operations.js +89 -0
- package/dist/examples/zap-operations.d.ts +1 -0
- package/dist/examples/zap-operations.js +69 -0
- package/dist/src/api/index.d.ts +27 -0
- package/dist/src/api/index.js +146 -0
- package/dist/src/artifacts/ERC20Permit.d.ts +374 -0
- package/dist/src/artifacts/ERC20Permit.js +469 -0
- package/dist/src/artifacts/Permit2.d.ts +700 -0
- package/dist/src/artifacts/Permit2.js +904 -0
- package/dist/src/artifacts/Permit2Proxy.d.ts +416 -0
- package/dist/src/artifacts/Permit2Proxy.js +206 -0
- package/dist/src/artifacts/default/DZapCoreAbi.d.ts +2 -0
- package/dist/src/artifacts/default/DZapCoreAbi.js +3079 -0
- package/dist/src/artifacts/default/DZapCoreV2Abi.d.ts +2 -0
- package/dist/src/artifacts/default/DZapCoreV2Abi.js +3719 -0
- package/dist/src/artifacts/default/DZapDcaAbi.d.ts +2 -0
- package/dist/src/artifacts/default/DZapDcaAbi.js +1829 -0
- package/dist/src/artifacts/default/Permit2Abi.d.ts +700 -0
- package/dist/src/artifacts/default/Permit2Abi.js +904 -0
- package/dist/src/artifacts/default/erc20Abi.d.ts +165 -0
- package/dist/src/artifacts/default/erc20Abi.js +220 -0
- package/dist/src/artifacts/default/index.d.ts +6 -0
- package/dist/src/artifacts/default/index.js +13 -0
- package/dist/src/artifacts/index.d.ts +2 -0
- package/dist/src/artifacts/index.js +9 -0
- package/dist/src/artifacts/staging/DZapCoreSwapAbi.d.ts +2 -0
- package/dist/src/artifacts/staging/DZapCoreSwapAbi.js +3079 -0
- package/dist/src/artifacts/staging/index.d.ts +2 -0
- package/dist/src/artifacts/staging/index.js +5 -0
- package/dist/src/axios/baseClient.d.ts +2 -0
- package/dist/src/axios/baseClient.js +7 -0
- package/dist/src/axios/index.d.ts +8 -0
- package/dist/src/axios/index.js +34 -0
- package/dist/src/chains/definitions/arthera.d.ts +35 -0
- package/dist/src/chains/definitions/arthera.js +28 -0
- package/dist/src/chains/definitions/fiveIre.d.ts +35 -0
- package/dist/src/chains/definitions/fiveIre.js +28 -0
- package/dist/src/chains/definitions/hyperEvm.d.ts +35 -0
- package/dist/src/chains/definitions/hyperEvm.js +26 -0
- package/dist/src/chains/definitions/hyperliquid.d.ts +35 -0
- package/dist/src/chains/definitions/hyperliquid.js +26 -0
- package/dist/src/chains/definitions/stable.d.ts +36 -0
- package/dist/src/chains/definitions/stable.js +31 -0
- package/dist/src/chains/index.d.ts +179 -0
- package/dist/src/chains/index.js +24 -0
- package/dist/src/config/index.d.ts +36 -0
- package/dist/src/config/index.js +59 -0
- package/dist/src/constants/address.d.ts +13 -0
- package/dist/src/constants/address.js +29 -0
- package/dist/src/constants/approval.d.ts +7 -0
- package/dist/src/constants/approval.js +17 -0
- package/dist/src/constants/axios.d.ts +2 -0
- package/dist/src/constants/axios.js +5 -0
- package/dist/src/constants/chains.d.ts +31 -0
- package/dist/src/constants/chains.js +34 -0
- package/dist/src/constants/contract.d.ts +6 -0
- package/dist/src/constants/contract.js +18 -0
- package/dist/src/constants/erc20.d.ts +25 -0
- package/dist/src/constants/erc20.js +28 -0
- package/dist/src/constants/httpMethods.d.ts +2 -0
- package/dist/src/constants/httpMethods.js +5 -0
- package/dist/src/constants/index.d.ts +48 -0
- package/dist/src/constants/index.js +53 -0
- package/dist/src/constants/permit.d.ts +29 -0
- package/dist/src/constants/permit.js +33 -0
- package/dist/src/constants/permit2.d.ts +2 -0
- package/dist/src/constants/permit2.js +5 -0
- package/dist/src/constants/rpc.d.ts +2 -0
- package/dist/src/constants/rpc.js +5 -0
- package/dist/src/constants/urlConstants.d.ts +15 -0
- package/dist/src/constants/urlConstants.js +18 -0
- package/dist/src/dZapClient/index.d.ts +1015 -0
- package/dist/src/dZapClient/index.js +255 -0
- package/dist/src/enums/index.d.ts +46 -0
- package/dist/src/enums/index.js +57 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.js +48 -0
- package/dist/src/service/cache/cacheProvider.d.ts +10 -0
- package/dist/src/service/cache/cacheProvider.js +72 -0
- package/dist/src/service/cache/constant.d.ts +2 -0
- package/dist/src/service/cache/constant.js +6 -0
- package/dist/src/service/price/index.d.ts +16 -0
- package/dist/src/service/price/index.js +80 -0
- package/dist/src/service/price/provider/coingecko/config.d.ts +6 -0
- package/dist/src/service/price/provider/coingecko/config.js +9 -0
- package/dist/src/service/price/provider/coingecko/index.d.ts +9 -0
- package/dist/src/service/price/provider/coingecko/index.js +66 -0
- package/dist/src/service/price/provider/defiLlama/config.d.ts +3 -0
- package/dist/src/service/price/provider/defiLlama/config.js +6 -0
- package/dist/src/service/price/provider/defiLlama/index.d.ts +9 -0
- package/dist/src/service/price/provider/defiLlama/index.js +60 -0
- package/dist/src/service/price/provider/defiLlama/types.d.ts +11 -0
- package/dist/src/service/price/provider/defiLlama/types.js +2 -0
- package/dist/src/service/price/provider/dzap/index.d.ts +6 -0
- package/dist/src/service/price/provider/dzap/index.js +22 -0
- package/dist/src/service/price/types/IPriceProvider.d.ts +14 -0
- package/dist/src/service/price/types/IPriceProvider.js +8 -0
- package/dist/src/transactionHandlers/generic.d.ts +24 -0
- package/dist/src/transactionHandlers/generic.js +48 -0
- package/dist/src/transactionHandlers/permit.d.ts +61 -0
- package/dist/src/transactionHandlers/permit.js +177 -0
- package/dist/src/transactionHandlers/trade.d.ts +24 -0
- package/dist/src/transactionHandlers/trade.js +263 -0
- package/dist/src/transactionHandlers/zap.d.ts +37 -0
- package/dist/src/transactionHandlers/zap.js +135 -0
- package/dist/src/types/axiosClient.d.ts +6 -0
- package/dist/src/types/axiosClient.js +2 -0
- package/dist/src/types/btc.d.ts +45 -0
- package/dist/src/types/btc.js +2 -0
- package/dist/src/types/chains.d.ts +3 -0
- package/dist/src/types/chains.js +2 -0
- package/dist/src/types/contract.d.ts +14 -0
- package/dist/src/types/contract.js +2 -0
- package/dist/src/types/eip-2612.d.ts +24 -0
- package/dist/src/types/eip-2612.js +58 -0
- package/dist/src/types/index.d.ts +489 -0
- package/dist/src/types/index.js +8 -0
- package/dist/src/types/permit.d.ts +191 -0
- package/dist/src/types/permit.js +54 -0
- package/dist/src/types/wallet.d.ts +2 -0
- package/dist/src/types/wallet.js +2 -0
- package/dist/src/types/zap/build.d.ts +44 -0
- package/dist/src/types/zap/build.js +2 -0
- package/dist/src/types/zap/index.d.ts +34 -0
- package/dist/src/types/zap/index.js +23 -0
- package/dist/src/types/zap/path.d.ts +33 -0
- package/dist/src/types/zap/path.js +2 -0
- package/dist/src/types/zap/pool.d.ts +39 -0
- package/dist/src/types/zap/pool.js +2 -0
- package/dist/src/types/zap/position.d.ts +27 -0
- package/dist/src/types/zap/position.js +2 -0
- package/dist/src/types/zap/quote.d.ts +7 -0
- package/dist/src/types/zap/quote.js +2 -0
- package/dist/src/types/zap/status.d.ts +28 -0
- package/dist/src/types/zap/status.js +2 -0
- package/dist/src/types/zap/step.d.ts +23 -0
- package/dist/src/types/zap/step.js +2 -0
- package/dist/src/utils/amount.d.ts +82 -0
- package/dist/src/utils/amount.js +71 -0
- package/dist/src/utils/axios.d.ts +13 -0
- package/dist/src/utils/axios.js +42 -0
- package/dist/src/utils/date.d.ts +1 -0
- package/dist/src/utils/date.js +8 -0
- package/dist/src/utils/decoder/swap/abis.d.ts +643 -0
- package/dist/src/utils/decoder/swap/abis.js +831 -0
- package/dist/src/utils/decoder/swap/inputDataDecoder.d.ts +14 -0
- package/dist/src/utils/decoder/swap/inputDataDecoder.js +124 -0
- package/dist/src/utils/eip-2612/eip2612Permit.d.ts +23 -0
- package/dist/src/utils/eip-2612/eip2612Permit.js +121 -0
- package/dist/src/utils/eip-5792/batchApproveTokens.d.ts +21 -0
- package/dist/src/utils/eip-5792/batchApproveTokens.js +49 -0
- package/dist/src/utils/eip-5792/index.d.ts +3 -0
- package/dist/src/utils/eip-5792/index.js +9 -0
- package/dist/src/utils/eip-5792/isBatchTxnSupportedByWallet.d.ts +6 -0
- package/dist/src/utils/eip-5792/isBatchTxnSupportedByWallet.js +22 -0
- package/dist/src/utils/eip-5792/sendBatchCalls.d.ts +10 -0
- package/dist/src/utils/eip-5792/sendBatchCalls.js +25 -0
- package/dist/src/utils/eip-5792/waitForBatchTransactionReceipt.d.ts +4 -0
- package/dist/src/utils/eip-5792/waitForBatchTransactionReceipt.js +26 -0
- package/dist/src/utils/encodeApproveCall.d.ts +6 -0
- package/dist/src/utils/encodeApproveCall.js +13 -0
- package/dist/src/utils/erc20.d.ts +65 -0
- package/dist/src/utils/erc20.js +153 -0
- package/dist/src/utils/errors.d.ts +17 -0
- package/dist/src/utils/errors.js +78 -0
- package/dist/src/utils/index.d.ts +4566 -0
- package/dist/src/utils/index.js +196 -0
- package/dist/src/utils/multicall.d.ts +14 -0
- package/dist/src/utils/multicall.js +25 -0
- package/dist/src/utils/permit2/domain.d.ts +2 -0
- package/dist/src/utils/permit2/domain.js +11 -0
- package/dist/src/utils/permit2/index.d.ts +4 -0
- package/dist/src/utils/permit2/index.js +97 -0
- package/dist/src/utils/permit2/nonce.d.ts +15 -0
- package/dist/src/utils/permit2/nonce.js +61 -0
- package/dist/src/utils/permit2/permitData.d.ts +23 -0
- package/dist/src/utils/permit2/permitData.js +85 -0
- package/dist/src/utils/permit2/values.d.ts +54 -0
- package/dist/src/utils/permit2/values.js +88 -0
- package/dist/src/utils/permit2/witnessData.d.ts +4 -0
- package/dist/src/utils/permit2/witnessData.js +48 -0
- package/dist/src/utils/signIntent/custom.d.ts +11 -0
- package/dist/src/utils/signIntent/custom.js +31 -0
- package/dist/src/utils/signIntent/gasless.d.ts +12 -0
- package/dist/src/utils/signIntent/gasless.js +101 -0
- package/dist/src/utils/signTypedData.d.ts +11 -0
- package/dist/src/utils/signTypedData.js +21 -0
- package/dist/src/utils/tokens.d.ts +8 -0
- package/dist/src/utils/tokens.js +73 -0
- package/dist/src/utils/updateQuotes.d.ts +3 -0
- package/dist/src/utils/updateQuotes.js +69 -0
- package/dist/src/zap/constants/index.d.ts +2 -0
- package/dist/src/zap/constants/index.js +18 -0
- package/dist/src/zap/constants/path.d.ts +8 -0
- package/dist/src/zap/constants/path.js +11 -0
- package/dist/src/zap/constants/step.d.ts +3 -0
- package/dist/src/zap/constants/step.js +6 -0
- package/dist/src/zap/constants/urls.d.ts +13 -0
- package/dist/src/zap/constants/urls.js +16 -0
- package/dist/test/build.test.d.ts +1 -0
- package/dist/test/build.test.js +65 -0
- package/dist/test/permit/permit2Nonce.test.d.ts +2 -0
- package/dist/test/permit/permit2Nonce.test.js +96 -0
- package/dist/test/quotes.test.d.ts +1 -0
- package/dist/test/quotes.test.js +59 -0
- package/dist/test/status.test.d.ts +1 -0
- package/dist/test/status.test.js +37 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPermitBatchTransferFromValues = exports.getPermitTransferFromValues = exports.getPermitSingleValues = void 0;
|
|
4
|
+
exports.getPermit2Values = getPermit2Values;
|
|
5
|
+
const erc20_1 = require("../../constants/erc20");
|
|
6
|
+
const permit_1 = require("../../constants/permit");
|
|
7
|
+
const Permit2_1 = require("../../artifacts/Permit2");
|
|
8
|
+
const index_1 = require("../index");
|
|
9
|
+
const nonce_1 = require("./nonce");
|
|
10
|
+
const getPermitSingleValues = async ({ spender, deadline, chainId, rpcUrls, account, expiration, token, permit2Address, }) => {
|
|
11
|
+
const publicClient = (0, index_1.getPublicClient)({ chainId, rpcUrls });
|
|
12
|
+
const nonceResult = await publicClient.readContract({
|
|
13
|
+
address: permit2Address,
|
|
14
|
+
abi: Permit2_1.abi,
|
|
15
|
+
functionName: erc20_1.erc20PermitFunctions.allowance,
|
|
16
|
+
args: [account, token.address, spender],
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
permit2Values: {
|
|
20
|
+
details: {
|
|
21
|
+
token: token.address,
|
|
22
|
+
amount: BigInt(token.amount),
|
|
23
|
+
expiration,
|
|
24
|
+
nonce: nonceResult[2],
|
|
25
|
+
},
|
|
26
|
+
spender,
|
|
27
|
+
sigDeadline: deadline,
|
|
28
|
+
},
|
|
29
|
+
nonce: BigInt(nonceResult[2]),
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
exports.getPermitSingleValues = getPermitSingleValues;
|
|
33
|
+
const getPermitTransferFromValues = async ({ spender, deadline, chainId, rpcUrls, account, token, permit2Address, firstTokenNonce, }) => {
|
|
34
|
+
let nonce;
|
|
35
|
+
if (token.index === 0) {
|
|
36
|
+
nonce = await (0, nonce_1.getNextPermit2Nonce)(permit2Address, account, chainId, rpcUrls);
|
|
37
|
+
}
|
|
38
|
+
else if (firstTokenNonce === null) {
|
|
39
|
+
throw new Error(`Unable to find nonce for token:${token.address} for PermitTransferFrom`);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
nonce = BigInt(firstTokenNonce) + BigInt(token.index);
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
permit2Values: {
|
|
46
|
+
permitted: {
|
|
47
|
+
token: token.address,
|
|
48
|
+
amount: BigInt(token.amount),
|
|
49
|
+
},
|
|
50
|
+
spender,
|
|
51
|
+
nonce,
|
|
52
|
+
deadline,
|
|
53
|
+
},
|
|
54
|
+
nonce,
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
exports.getPermitTransferFromValues = getPermitTransferFromValues;
|
|
58
|
+
const getPermitBatchTransferFromValues = async ({ spender, deadline, chainId, rpcUrls, account, permit2Address, tokens, }) => {
|
|
59
|
+
const nonce = await (0, nonce_1.getNextPermit2Nonce)(permit2Address, account, chainId, rpcUrls);
|
|
60
|
+
return {
|
|
61
|
+
permit2Values: {
|
|
62
|
+
permitted: tokens.map((token) => ({
|
|
63
|
+
token: token.address,
|
|
64
|
+
amount: BigInt(token.amount),
|
|
65
|
+
})),
|
|
66
|
+
spender,
|
|
67
|
+
nonce,
|
|
68
|
+
deadline,
|
|
69
|
+
},
|
|
70
|
+
nonce,
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
exports.getPermitBatchTransferFromValues = getPermitBatchTransferFromValues;
|
|
74
|
+
async function getPermit2Values(params) {
|
|
75
|
+
switch (params.primaryType) {
|
|
76
|
+
case permit_1.permit2PrimaryType.PermitSingle:
|
|
77
|
+
if (params.expiration === undefined || params.expiration === null) {
|
|
78
|
+
throw new Error('Expiration is required for PermitSingle');
|
|
79
|
+
}
|
|
80
|
+
return (0, exports.getPermitSingleValues)(Object.assign(Object.assign({}, params), { token: params.tokens[0], expiration: params.expiration }));
|
|
81
|
+
case permit_1.permit2PrimaryType.PermitWitnessTransferFrom:
|
|
82
|
+
return (0, exports.getPermitTransferFromValues)(Object.assign(Object.assign({}, params), { token: params.tokens[0] }));
|
|
83
|
+
case permit_1.permit2PrimaryType.PermitBatchWitnessTransferFrom:
|
|
84
|
+
return (0, exports.getPermitBatchTransferFromValues)(params);
|
|
85
|
+
default:
|
|
86
|
+
throw new Error(`Invalid permit type: ${params.primaryType}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPermit2WitnessData = void 0;
|
|
4
|
+
const constants_1 = require("../../constants");
|
|
5
|
+
const permit_1 = require("../../types/permit");
|
|
6
|
+
const getPermit2WitnessData = (params) => {
|
|
7
|
+
const { gasless, account, spender } = params;
|
|
8
|
+
let witnessData;
|
|
9
|
+
if (gasless && params.swapDataHash) {
|
|
10
|
+
if (params.txType === constants_1.GaslessTxType.swap) {
|
|
11
|
+
witnessData = {
|
|
12
|
+
witness: {
|
|
13
|
+
txId: params.txId,
|
|
14
|
+
user: account,
|
|
15
|
+
executorFeesHash: params.executorFeesHash,
|
|
16
|
+
swapDataHash: params.swapDataHash,
|
|
17
|
+
},
|
|
18
|
+
witnessTypeName: permit_1.swapGaslessWitnessType.typeName,
|
|
19
|
+
witnessType: permit_1.swapGaslessWitnessType.type,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
witnessData = {
|
|
24
|
+
witness: {
|
|
25
|
+
txId: params.txId,
|
|
26
|
+
user: account,
|
|
27
|
+
executorFeesHash: params.executorFeesHash,
|
|
28
|
+
swapDataHash: params.swapDataHash,
|
|
29
|
+
adapterDataHash: params.adapterDataHash,
|
|
30
|
+
},
|
|
31
|
+
witnessTypeName: permit_1.bridgeGaslessWitnessType.typeName,
|
|
32
|
+
witnessType: permit_1.bridgeGaslessWitnessType.type,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
witnessData = {
|
|
38
|
+
witness: {
|
|
39
|
+
owner: account,
|
|
40
|
+
recipient: spender,
|
|
41
|
+
},
|
|
42
|
+
witnessTypeName: permit_1.defaultWitnessType.typeName,
|
|
43
|
+
witnessType: permit_1.defaultWitnessType.type,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return { witnessData };
|
|
47
|
+
};
|
|
48
|
+
exports.getPermit2WitnessData = getPermit2WitnessData;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { StatusCodes, TxnStatus } from '../../enums';
|
|
2
|
+
import { HexString } from '../../types';
|
|
3
|
+
import { CustomTypedDataParams } from '../../types/permit';
|
|
4
|
+
export declare const signCustomTypedData: (params: CustomTypedDataParams) => Promise<{
|
|
5
|
+
status: TxnStatus;
|
|
6
|
+
code: StatusCodes;
|
|
7
|
+
data?: {
|
|
8
|
+
signature: HexString;
|
|
9
|
+
message: Record<string, any>;
|
|
10
|
+
};
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signCustomTypedData = void 0;
|
|
4
|
+
const enums_1 = require("../../enums");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
const signTypedData_1 = require("../signTypedData");
|
|
7
|
+
const signCustomTypedData = async (params) => {
|
|
8
|
+
try {
|
|
9
|
+
const { account, signer, message, domain, primaryType, types } = params;
|
|
10
|
+
const signature = await (0, signTypedData_1.signTypedData)({
|
|
11
|
+
signer,
|
|
12
|
+
account,
|
|
13
|
+
domain,
|
|
14
|
+
message,
|
|
15
|
+
primaryType,
|
|
16
|
+
types,
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
status: enums_1.TxnStatus.success,
|
|
20
|
+
code: enums_1.StatusCodes.Success,
|
|
21
|
+
data: {
|
|
22
|
+
signature,
|
|
23
|
+
message,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return (0, errors_1.handleViemTransactionError)({ error });
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports.signCustomTypedData = signCustomTypedData;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { StatusCodes, TxnStatus } from '../../enums';
|
|
2
|
+
import { HexString } from '../../types';
|
|
3
|
+
import { Gasless2612PermitParams } from '../../types/permit';
|
|
4
|
+
export declare const signGaslessDzapUserIntent: (params: Gasless2612PermitParams) => Promise<{
|
|
5
|
+
status: TxnStatus;
|
|
6
|
+
code: StatusCodes;
|
|
7
|
+
data?: {
|
|
8
|
+
signature: HexString;
|
|
9
|
+
nonce: bigint;
|
|
10
|
+
deadline: bigint;
|
|
11
|
+
};
|
|
12
|
+
}>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signGaslessDzapUserIntent = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const constants_1 = require("../../constants");
|
|
6
|
+
const permit_1 = require("../../constants/permit");
|
|
7
|
+
const permit2_1 = require("../../constants/permit2");
|
|
8
|
+
const enums_1 = require("../../enums");
|
|
9
|
+
const eip_2612_1 = require("../../types/eip-2612");
|
|
10
|
+
const date_1 = require("../date");
|
|
11
|
+
const errors_1 = require("../errors");
|
|
12
|
+
const index_1 = require("../index");
|
|
13
|
+
const signTypedData_1 = require("../signTypedData");
|
|
14
|
+
const getSignTypedData = (params) => {
|
|
15
|
+
const { account, deadline, nonce, swapDataHash } = params;
|
|
16
|
+
if (params.txType === constants_1.GaslessTxType.swap) {
|
|
17
|
+
return {
|
|
18
|
+
message: {
|
|
19
|
+
txId: params.txId,
|
|
20
|
+
user: account,
|
|
21
|
+
executorFeesHash: params.executorFeesHash,
|
|
22
|
+
swapDataHash: params.swapDataHash,
|
|
23
|
+
nonce,
|
|
24
|
+
deadline,
|
|
25
|
+
},
|
|
26
|
+
types: eip_2612_1.DzapUserIntentSwapTypes,
|
|
27
|
+
primaryType: permit_1.dZapIntentPrimaryType.SignedGasLessSwapData,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
else if (swapDataHash) {
|
|
31
|
+
return {
|
|
32
|
+
message: {
|
|
33
|
+
txId: params.txId,
|
|
34
|
+
user: account,
|
|
35
|
+
nonce,
|
|
36
|
+
deadline,
|
|
37
|
+
executorFeesHash: params.executorFeesHash,
|
|
38
|
+
swapDataHash: params.swapDataHash,
|
|
39
|
+
adapterDataHash: params.adapterDataHash,
|
|
40
|
+
},
|
|
41
|
+
types: eip_2612_1.DzapUserIntentSwapBridgeTypes,
|
|
42
|
+
primaryType: permit_1.dZapIntentPrimaryType.SignedGasLessSwapBridgeData,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return {
|
|
47
|
+
message: {
|
|
48
|
+
txId: params.txId,
|
|
49
|
+
user: account,
|
|
50
|
+
nonce,
|
|
51
|
+
deadline,
|
|
52
|
+
executorFeesHash: params.executorFeesHash,
|
|
53
|
+
adapterDataHash: params.adapterDataHash,
|
|
54
|
+
},
|
|
55
|
+
types: eip_2612_1.DzapUserIntentBridgeTypes,
|
|
56
|
+
primaryType: permit_1.dZapIntentPrimaryType.SignedGasLessBridgeData,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const signGaslessDzapUserIntent = async (params) => {
|
|
61
|
+
try {
|
|
62
|
+
const { chainId, spender, account, signer, rpcUrls } = params;
|
|
63
|
+
const deadline = params.deadline || (0, date_1.generateDeadline)(permit2_1.SignatureExpiryInSecs);
|
|
64
|
+
const contract = (0, viem_1.getContract)({
|
|
65
|
+
abi: (0, index_1.getDZapAbi)('trade', params.contractVersion),
|
|
66
|
+
address: spender,
|
|
67
|
+
client: (0, index_1.getPublicClient)({ chainId, rpcUrls }),
|
|
68
|
+
});
|
|
69
|
+
const nonce = (await contract.read.getNonce([account]));
|
|
70
|
+
const domain = {
|
|
71
|
+
name: permit_1.eip2612GaslessDomain.name,
|
|
72
|
+
version: permit_1.eip2612GaslessDomain.version,
|
|
73
|
+
chainId,
|
|
74
|
+
verifyingContract: spender,
|
|
75
|
+
salt: permit_1.eip2612GaslessDomain.salt,
|
|
76
|
+
};
|
|
77
|
+
const { message, types, primaryType } = getSignTypedData(Object.assign(Object.assign({}, params), { deadline,
|
|
78
|
+
nonce }));
|
|
79
|
+
const signature = await (0, signTypedData_1.signTypedData)({
|
|
80
|
+
signer,
|
|
81
|
+
domain,
|
|
82
|
+
message,
|
|
83
|
+
types,
|
|
84
|
+
account,
|
|
85
|
+
primaryType,
|
|
86
|
+
});
|
|
87
|
+
return {
|
|
88
|
+
status: enums_1.TxnStatus.success,
|
|
89
|
+
code: enums_1.StatusCodes.Success,
|
|
90
|
+
data: {
|
|
91
|
+
signature,
|
|
92
|
+
nonce,
|
|
93
|
+
deadline,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
return (0, errors_1.handleViemTransactionError)({ error });
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
exports.signGaslessDzapUserIntent = signGaslessDzapUserIntent;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Signer, TypedDataField } from 'ethers';
|
|
2
|
+
import { TypedDataDomain, WalletClient } from 'viem';
|
|
3
|
+
import { HexString } from '../types';
|
|
4
|
+
export declare const signTypedData: ({ signer, domain, message, types, account, primaryType, }: {
|
|
5
|
+
signer: WalletClient | Signer;
|
|
6
|
+
domain: TypedDataDomain;
|
|
7
|
+
types: Record<string, Array<TypedDataField>>;
|
|
8
|
+
message: Record<string, any>;
|
|
9
|
+
account: string;
|
|
10
|
+
primaryType: string;
|
|
11
|
+
}) => Promise<HexString>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signTypedData = void 0;
|
|
4
|
+
const index_1 = require("./index");
|
|
5
|
+
const signTypedData = async ({ signer, domain, message, types, account, primaryType, }) => {
|
|
6
|
+
let signature;
|
|
7
|
+
if ((0, index_1.isTypeSigner)(signer)) {
|
|
8
|
+
signature = (await signer._signTypedData(domain, types, message));
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
signature = await signer.signTypedData({
|
|
12
|
+
account: account,
|
|
13
|
+
domain,
|
|
14
|
+
message,
|
|
15
|
+
primaryType,
|
|
16
|
+
types,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return signature;
|
|
20
|
+
};
|
|
21
|
+
exports.signTypedData = signTypedData;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PriceService } from '../service/price';
|
|
2
|
+
import { ChainData, HexString, TokenInfo, TokenResponse } from '../types';
|
|
3
|
+
export declare const isNativeCurrency: (address: string, chainConfig: ChainData) => boolean;
|
|
4
|
+
export declare const sortByBalanceInUsd: (tokenEntries: [string, TokenInfo][]) => TokenResponse;
|
|
5
|
+
export declare const updateTokenListPrices: (tokens: TokenResponse, chainId: number, chainConfig: ChainData, priceService: PriceService) => Promise<TokenResponse>;
|
|
6
|
+
export declare function isNonEVMChain(chainId: number, chainConfig: ChainData): boolean;
|
|
7
|
+
export declare const getChecksumAddress: (address: string) => HexString;
|
|
8
|
+
export declare const formatToken: <T extends HexString | string = string>(token: T, nativeTokenAddress?: T) => T;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatToken = exports.getChecksumAddress = exports.updateTokenListPrices = exports.sortByBalanceInUsd = exports.isNativeCurrency = void 0;
|
|
4
|
+
exports.isNonEVMChain = isNonEVMChain;
|
|
5
|
+
const viem_1 = require("viem");
|
|
6
|
+
const address_1 = require("../constants/address");
|
|
7
|
+
const IPriceProvider_1 = require("../service/price/types/IPriceProvider");
|
|
8
|
+
const isNativeCurrency = (address, chainConfig) => {
|
|
9
|
+
if (!chainConfig)
|
|
10
|
+
return false;
|
|
11
|
+
return Object.values(chainConfig).some((chain) => chain.isEnabled && chain.nativeToken.contract === address);
|
|
12
|
+
};
|
|
13
|
+
exports.isNativeCurrency = isNativeCurrency;
|
|
14
|
+
const sortByBalanceInUsd = (tokenEntries) => {
|
|
15
|
+
const { withBalanceInUsd, withoutBalanceInUsd } = tokenEntries.reduce((acc, [key, token]) => {
|
|
16
|
+
if (token.balanceInUsd !== null) {
|
|
17
|
+
acc.withBalanceInUsd.push([key, token]);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
acc.withoutBalanceInUsd.push([key, token]);
|
|
21
|
+
}
|
|
22
|
+
return acc;
|
|
23
|
+
}, { withBalanceInUsd: [], withoutBalanceInUsd: [] });
|
|
24
|
+
withBalanceInUsd.sort((a, b) => b[1].balanceInUsd - a[1].balanceInUsd);
|
|
25
|
+
return Object.fromEntries([...withBalanceInUsd, ...withoutBalanceInUsd]);
|
|
26
|
+
};
|
|
27
|
+
exports.sortByBalanceInUsd = sortByBalanceInUsd;
|
|
28
|
+
const updateTokenListPrices = async (tokens, chainId, chainConfig, priceService) => {
|
|
29
|
+
try {
|
|
30
|
+
const tokensWithoutPrice = Object.values(tokens)
|
|
31
|
+
.filter(({ price, balance }) => (!price || price === '0') && balance !== '0')
|
|
32
|
+
.map(({ contract }) => contract);
|
|
33
|
+
if (tokensWithoutPrice.length === 0)
|
|
34
|
+
return tokens;
|
|
35
|
+
const fetchedPrices = await priceService.getPrices({
|
|
36
|
+
chainId,
|
|
37
|
+
tokenAddresses: tokensWithoutPrice,
|
|
38
|
+
chainConfig,
|
|
39
|
+
notAllowSources: [IPriceProvider_1.priceProviders.dZap],
|
|
40
|
+
});
|
|
41
|
+
tokensWithoutPrice.forEach((token) => {
|
|
42
|
+
tokens[token].price = fetchedPrices[token] || tokens[token].price;
|
|
43
|
+
tokens[token].balanceInUsd = fetchedPrices[token]
|
|
44
|
+
? parseFloat(fetchedPrices[token]) * parseFloat((0, viem_1.formatUnits)(BigInt(tokens[token].balance), tokens[token].decimals))
|
|
45
|
+
: null;
|
|
46
|
+
});
|
|
47
|
+
return (0, exports.sortByBalanceInUsd)(Object.entries(tokens));
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error('Error fetching token prices:', error);
|
|
51
|
+
return tokens;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
exports.updateTokenListPrices = updateTokenListPrices;
|
|
55
|
+
function isNonEVMChain(chainId, chainConfig) {
|
|
56
|
+
var _a;
|
|
57
|
+
return ((_a = chainConfig[chainId]) === null || _a === void 0 ? void 0 : _a.chainType) !== 'evm';
|
|
58
|
+
}
|
|
59
|
+
const isNativeAddress = (contract) => address_1.nativeTokens.includes(contract);
|
|
60
|
+
const getChecksumAddress = (address) => (0, viem_1.getAddress)(address);
|
|
61
|
+
exports.getChecksumAddress = getChecksumAddress;
|
|
62
|
+
const formatToken = (token, nativeTokenAddress = viem_1.zeroAddress) => {
|
|
63
|
+
if (!(0, viem_1.isAddress)(token)) {
|
|
64
|
+
return token;
|
|
65
|
+
}
|
|
66
|
+
else if (isNativeAddress(token)) {
|
|
67
|
+
return nativeTokenAddress;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return (0, exports.getChecksumAddress)(token);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
exports.formatToken = formatToken;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { PriceService } from '../service/price';
|
|
2
|
+
import { ChainData, TradeQuotesRequest, TradeQuotesResponse } from '../types';
|
|
3
|
+
export declare const updateQuotes: (quotes: TradeQuotesResponse, request: TradeQuotesRequest, priceService: PriceService, chainConfig: ChainData) => Promise<TradeQuotesResponse>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateQuotes = void 0;
|
|
4
|
+
const decimal_js_1 = require("decimal.js");
|
|
5
|
+
const IPriceProvider_1 = require("../service/price/types/IPriceProvider");
|
|
6
|
+
const amount_1 = require("./amount");
|
|
7
|
+
const updateQuotes = async (quotes, request, priceService, chainConfig) => {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
const tokensWithoutPrice = {};
|
|
10
|
+
Object.values(quotes).forEach((quote) => {
|
|
11
|
+
if (quote.tokensWithoutPrice) {
|
|
12
|
+
Object.entries(quote.tokensWithoutPrice).forEach(([chainIdStr, tokens]) => {
|
|
13
|
+
const chainId = Number(chainIdStr);
|
|
14
|
+
if (!tokensWithoutPrice[chainId]) {
|
|
15
|
+
tokensWithoutPrice[chainId] = new Set();
|
|
16
|
+
}
|
|
17
|
+
tokens.forEach((token) => tokensWithoutPrice[chainId].add(token));
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
if (Object.keys(tokensWithoutPrice).length === 0) {
|
|
22
|
+
return quotes;
|
|
23
|
+
}
|
|
24
|
+
const tokensPrice = Object.fromEntries(await Promise.all(Object.entries(tokensWithoutPrice).map(async ([chainIdStr, tokens]) => {
|
|
25
|
+
const chainId = Number(chainIdStr);
|
|
26
|
+
const tokenAddresses = Array.from(tokens);
|
|
27
|
+
const prices = await priceService.getPrices({ chainId, tokenAddresses, chainConfig, notAllowSources: [IPriceProvider_1.priceProviders.dZap] });
|
|
28
|
+
return [chainId, prices];
|
|
29
|
+
})));
|
|
30
|
+
for (const quote of Object.values(quotes)) {
|
|
31
|
+
if (!quote.quoteRates || !Object.keys(quote.quoteRates).length) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
let isSorted = true;
|
|
35
|
+
for (const data of Object.values(quote.quoteRates)) {
|
|
36
|
+
const srcDecimals = data.srcToken.decimals;
|
|
37
|
+
const destDecimals = data.destToken.decimals;
|
|
38
|
+
const toChain = data.destToken.chainId;
|
|
39
|
+
if (!Number(data.srcAmountUSD)) {
|
|
40
|
+
isSorted = false;
|
|
41
|
+
const srcTokenPricePerUnit = ((_a = tokensPrice[request.fromChain]) === null || _a === void 0 ? void 0 : _a[data.srcToken.address]) || '0';
|
|
42
|
+
data.srcAmountUSD = (0, amount_1.calculateAmountUSD)(data.srcAmount, srcDecimals, srcTokenPricePerUnit);
|
|
43
|
+
}
|
|
44
|
+
if (!Number(data.destAmountUSD)) {
|
|
45
|
+
isSorted = false;
|
|
46
|
+
const destTokenPricePerUnit = ((_b = tokensPrice[toChain]) === null || _b === void 0 ? void 0 : _b[data.destToken.address]) || '0';
|
|
47
|
+
data.destAmountUSD = (0, amount_1.calculateAmountUSD)(data.destAmount, destDecimals, destTokenPricePerUnit);
|
|
48
|
+
}
|
|
49
|
+
if (Number(data.srcAmountUSD) && Number(data.destAmountUSD)) {
|
|
50
|
+
const priceImpact = new decimal_js_1.default(data.destAmountUSD).minus(data.srcAmountUSD).div(data.srcAmountUSD).mul(100);
|
|
51
|
+
data.priceImpactPercent = priceImpact.toFixed(2);
|
|
52
|
+
}
|
|
53
|
+
const { isUpdated, fee } = (0, amount_1.updateFee)(data.fee, tokensPrice);
|
|
54
|
+
isSorted = isSorted && !isUpdated;
|
|
55
|
+
data.fee = fee;
|
|
56
|
+
data.path = (0, amount_1.updatePath)(data, tokensPrice);
|
|
57
|
+
}
|
|
58
|
+
if (Object.keys(quote.tokensWithoutPrice).length !== 0 && isSorted === false) {
|
|
59
|
+
quote.quoteRates = Object.fromEntries(Object.entries(quote.quoteRates).sort(([, a], [, b]) => {
|
|
60
|
+
const aNetAmount = (0, amount_1.calculateNetAmountUsd)(a);
|
|
61
|
+
const bNetAmount = (0, amount_1.calculateNetAmountUsd)(b);
|
|
62
|
+
return Number(bNetAmount) - Number(aNetAmount);
|
|
63
|
+
}));
|
|
64
|
+
quote.recommendedSource = Object.keys(quote.quoteRates)[0];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return quotes;
|
|
68
|
+
};
|
|
69
|
+
exports.updateQuotes = updateQuotes;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./path"), exports);
|
|
18
|
+
__exportStar(require("./step"), exports);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.zapPathAction = void 0;
|
|
4
|
+
exports.zapPathAction = {
|
|
5
|
+
swap: 'swap',
|
|
6
|
+
bridge: 'bridge',
|
|
7
|
+
deposit: 'deposit',
|
|
8
|
+
withdraw: 'withdraw',
|
|
9
|
+
stake: 'stake',
|
|
10
|
+
unstake: 'unstake',
|
|
11
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ZAP_ENDPOINTS = void 0;
|
|
4
|
+
exports.ZAP_ENDPOINTS = {
|
|
5
|
+
status: '/status',
|
|
6
|
+
config: {
|
|
7
|
+
chains: '/config/chains',
|
|
8
|
+
providers: '/config/providers',
|
|
9
|
+
},
|
|
10
|
+
pools: '/pools',
|
|
11
|
+
poolDetails: '/pool/details',
|
|
12
|
+
positions: '/user/positions',
|
|
13
|
+
buildTx: '/buildTx',
|
|
14
|
+
quote: '/quote',
|
|
15
|
+
broadcast: '/broadcast',
|
|
16
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const dZapClient_1 = require("../src/dZapClient");
|
|
4
|
+
describe('DZapClient - buildTxn', () => {
|
|
5
|
+
let client;
|
|
6
|
+
beforeAll(() => {
|
|
7
|
+
client = dZapClient_1.default.getInstance();
|
|
8
|
+
});
|
|
9
|
+
it('should build a cross-chain transaction', async () => {
|
|
10
|
+
const request = {
|
|
11
|
+
fromChain: 42161,
|
|
12
|
+
data: [
|
|
13
|
+
{
|
|
14
|
+
amount: '374980',
|
|
15
|
+
srcToken: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
|
|
16
|
+
destDecimals: 18,
|
|
17
|
+
srcDecimals: 6,
|
|
18
|
+
protocol: 'relayLink',
|
|
19
|
+
destToken: '0x4200000000000000000000000000000000000006',
|
|
20
|
+
slippage: 1,
|
|
21
|
+
recipient: '0x99BCEBf44433E901597D9fCb16E799a4847519f6',
|
|
22
|
+
toChain: 8453,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
gasless: false,
|
|
26
|
+
refundee: '0x99BCEBf44433E901597D9fCb16E799a4847519f6',
|
|
27
|
+
sender: '0x99BCEBf44433E901597D9fCb16E799a4847519f6',
|
|
28
|
+
publicKey: '0x99BCEBf44433E901597D9fCb16E799a4847519f6',
|
|
29
|
+
};
|
|
30
|
+
const result = await client.buildTradeTxn(request);
|
|
31
|
+
expect(result).toBeDefined();
|
|
32
|
+
expect(result.data).toBeDefined();
|
|
33
|
+
expect(result.to).toBeDefined();
|
|
34
|
+
expect(result.from).toBeDefined();
|
|
35
|
+
expect(result.chainId).toBeDefined();
|
|
36
|
+
});
|
|
37
|
+
it('should build a same-chain transaction', async () => {
|
|
38
|
+
const request = {
|
|
39
|
+
fromChain: 42161,
|
|
40
|
+
data: [
|
|
41
|
+
{
|
|
42
|
+
amount: '374980',
|
|
43
|
+
srcToken: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
|
|
44
|
+
destDecimals: 18,
|
|
45
|
+
srcDecimals: 6,
|
|
46
|
+
protocol: 'sushiswap',
|
|
47
|
+
destToken: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
|
|
48
|
+
slippage: 1,
|
|
49
|
+
recipient: '0x99BCEBf44433E901597D9fCb16E799a4847519f6',
|
|
50
|
+
toChain: 42161,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
gasless: false,
|
|
54
|
+
refundee: '0x99BCEBf44433E901597D9fCb16E799a4847519f6',
|
|
55
|
+
sender: '0x99BCEBf44433E901597D9fCb16E799a4847519f6',
|
|
56
|
+
publicKey: '0x99BCEBf44433E901597D9fCb16E799a4847519f6',
|
|
57
|
+
};
|
|
58
|
+
const result = await client.buildTradeTxn(request);
|
|
59
|
+
expect(result).toBeDefined();
|
|
60
|
+
expect(result.data).toBeDefined();
|
|
61
|
+
expect(result.to).toBeDefined();
|
|
62
|
+
expect(result.from).toBeDefined();
|
|
63
|
+
expect(result.chainId).toBeDefined();
|
|
64
|
+
});
|
|
65
|
+
});
|