@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,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOtherAbis = exports.handleDecodeTxnData = exports.getDZapAbi = exports.isDZapNativeToken = exports.isTypeSigner = exports.estimateGasMultiplier = exports.getTrxId = exports.generateUUID = exports.isOneToMany = exports.calcTotalSrcTokenAmount = exports.writeContract = exports.readContract = exports.getPublicClient = void 0;
|
|
4
|
+
exports.getTokensPairKey = getTokensPairKey;
|
|
5
|
+
const viem_1 = require("viem");
|
|
6
|
+
const ABI = require("../artifacts");
|
|
7
|
+
const ethers_1 = require("ethers");
|
|
8
|
+
const chains_1 = require("../chains");
|
|
9
|
+
const constants_1 = require("../constants");
|
|
10
|
+
const rpc_1 = require("../constants/rpc");
|
|
11
|
+
const enums_1 = require("../enums");
|
|
12
|
+
const inputDataDecoder_1 = require("./decoder/swap/inputDataDecoder");
|
|
13
|
+
const tokens_1 = require("./tokens");
|
|
14
|
+
const publicClientRpcConfig = { batch: { wait: rpc_1.RPC_BATCHING_WAIT_TIME }, retryDelay: rpc_1.RPC_RETRY_DELAY };
|
|
15
|
+
const getPublicClient = ({ rpcUrls, chainId }) => {
|
|
16
|
+
const rpcs = rpcUrls && Array.isArray(rpcUrls) && rpcUrls.length > 0;
|
|
17
|
+
return (0, viem_1.createPublicClient)({
|
|
18
|
+
chain: chains_1.viemChainsById[chainId],
|
|
19
|
+
transport: (0, viem_1.fallback)(rpcs ? rpcUrls.map((rpc) => (0, viem_1.http)(rpc, publicClientRpcConfig)) : [(0, viem_1.http)()]),
|
|
20
|
+
batch: {
|
|
21
|
+
multicall: {
|
|
22
|
+
wait: rpc_1.RPC_BATCHING_WAIT_TIME,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
exports.getPublicClient = getPublicClient;
|
|
28
|
+
function getTokensPairKey({ srcToken, destToken, srcChainId, destChainId, srcChainNativeAddress = viem_1.zeroAddress, destChainNativeAddress = viem_1.zeroAddress, }) {
|
|
29
|
+
const srcFormattedAddress = (0, tokens_1.formatToken)(srcToken, srcChainNativeAddress);
|
|
30
|
+
const destFormattedAddress = (0, tokens_1.formatToken)(destToken, destChainNativeAddress);
|
|
31
|
+
return `${srcChainId}_${srcFormattedAddress}-${destChainId}_${destFormattedAddress}`;
|
|
32
|
+
}
|
|
33
|
+
const readContract = async ({ chainId, contractAddress, abi, functionName, rpcUrls, args = [], }) => {
|
|
34
|
+
try {
|
|
35
|
+
const result = await (0, exports.getPublicClient)({ chainId, rpcUrls }).readContract({
|
|
36
|
+
address: contractAddress,
|
|
37
|
+
abi,
|
|
38
|
+
functionName,
|
|
39
|
+
args,
|
|
40
|
+
});
|
|
41
|
+
return { data: result, status: enums_1.TxnStatus.success, code: enums_1.StatusCodes.Success };
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
console.log({ e });
|
|
45
|
+
return { status: enums_1.TxnStatus.error, code: e.code || enums_1.StatusCodes.Error };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
exports.readContract = readContract;
|
|
49
|
+
const writeContract = async ({ chainId, contractAddress, abi, functionName, args = [], value = '0', rpcUrls = [''], signer, }) => {
|
|
50
|
+
const publicClient = (0, exports.getPublicClient)({ chainId, rpcUrls });
|
|
51
|
+
try {
|
|
52
|
+
const { request } = await publicClient.simulateContract({
|
|
53
|
+
address: contractAddress,
|
|
54
|
+
abi,
|
|
55
|
+
functionName,
|
|
56
|
+
args,
|
|
57
|
+
account: signer.account,
|
|
58
|
+
value: BigInt(value),
|
|
59
|
+
});
|
|
60
|
+
const hash = await signer.writeContract(request);
|
|
61
|
+
return { txnHash: hash, status: enums_1.TxnStatus.success, code: enums_1.StatusCodes.Success };
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
console.log({ e });
|
|
65
|
+
if ((e === null || e === void 0 ? void 0 : e.code) === enums_1.StatusCodes.UserRejectedRequest) {
|
|
66
|
+
return { status: enums_1.TxnStatus.rejected, code: e === null || e === void 0 ? void 0 : e.code, txnHash: '' };
|
|
67
|
+
}
|
|
68
|
+
return { status: enums_1.TxnStatus.error, code: e === null || e === void 0 ? void 0 : e.code, txnHash: '' };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
exports.writeContract = writeContract;
|
|
72
|
+
const calcTotalSrcTokenAmount = (data) => {
|
|
73
|
+
return data.reduce((acc, obj) => {
|
|
74
|
+
return acc + BigInt(obj.amount);
|
|
75
|
+
}, BigInt(0));
|
|
76
|
+
};
|
|
77
|
+
exports.calcTotalSrcTokenAmount = calcTotalSrcTokenAmount;
|
|
78
|
+
const isOneToMany = (firstTokenAddress, secondTokenAddress) => firstTokenAddress === secondTokenAddress;
|
|
79
|
+
exports.isOneToMany = isOneToMany;
|
|
80
|
+
const generateUUID = () => {
|
|
81
|
+
let d = new Date().getTime();
|
|
82
|
+
let d2 = (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0;
|
|
83
|
+
const uuid = 'xxxxxxxx-xxxx-4xxx-yxxxx-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxx-xxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
84
|
+
let r = Math.random() * 16;
|
|
85
|
+
if (d > 0) {
|
|
86
|
+
r = (d + r) % 16 | 0;
|
|
87
|
+
d = Math.floor(d / 16);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
r = (d2 + r) % 16 | 0;
|
|
91
|
+
d2 = Math.floor(d2 / 16);
|
|
92
|
+
}
|
|
93
|
+
return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
|
|
94
|
+
});
|
|
95
|
+
const uuidInBytes = (0, viem_1.stringToHex)(uuid, { size: 32 });
|
|
96
|
+
return uuidInBytes;
|
|
97
|
+
};
|
|
98
|
+
exports.generateUUID = generateUUID;
|
|
99
|
+
const getTrxId = (account) => {
|
|
100
|
+
const uuid = `${account.slice(0, 6)}...${account.slice(36, 42)}-${Date.now()}`;
|
|
101
|
+
console.log(uuid);
|
|
102
|
+
const uuidInBytes = (0, viem_1.stringToHex)(uuid, { size: 32 });
|
|
103
|
+
return uuidInBytes;
|
|
104
|
+
};
|
|
105
|
+
exports.getTrxId = getTrxId;
|
|
106
|
+
exports.estimateGasMultiplier = BigInt(15) / BigInt(10);
|
|
107
|
+
const isTypeSigner = (variable) => {
|
|
108
|
+
return variable instanceof ethers_1.Signer;
|
|
109
|
+
};
|
|
110
|
+
exports.isTypeSigner = isTypeSigner;
|
|
111
|
+
const isDZapNativeToken = (srcToken) => srcToken === constants_1.dZapNativeTokenFormat;
|
|
112
|
+
exports.isDZapNativeToken = isDZapNativeToken;
|
|
113
|
+
const getDZapAbi = (service, version) => {
|
|
114
|
+
switch (service) {
|
|
115
|
+
case constants_1.Services.trade:
|
|
116
|
+
switch (version) {
|
|
117
|
+
case enums_1.ContractVersion.v1:
|
|
118
|
+
return ABI[constants_1.DZapAbis.dZapCoreAbi];
|
|
119
|
+
case enums_1.ContractVersion.v2:
|
|
120
|
+
return ABI[constants_1.DZapAbis.dZapCoreV2Abi];
|
|
121
|
+
default:
|
|
122
|
+
throw new Error('Invalid Version for Trade');
|
|
123
|
+
}
|
|
124
|
+
case constants_1.Services.dca:
|
|
125
|
+
return ABI[constants_1.DZapAbis.dZapDcaAbi];
|
|
126
|
+
case constants_1.Services.zap:
|
|
127
|
+
default:
|
|
128
|
+
throw new Error('Invalid Service');
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
exports.getDZapAbi = getDZapAbi;
|
|
132
|
+
const handleDecodeTxnData = (transaction, receipt, service, chain) => {
|
|
133
|
+
var _a, _b, _c, _d, _e;
|
|
134
|
+
let events = [];
|
|
135
|
+
const dZapAbi = (0, exports.getDZapAbi)(service, (chain === null || chain === void 0 ? void 0 : chain.version) || enums_1.ContractVersion.v1);
|
|
136
|
+
try {
|
|
137
|
+
events = (0, viem_1.parseEventLogs)({
|
|
138
|
+
abi: dZapAbi,
|
|
139
|
+
logs: receipt.logs,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
events = [];
|
|
144
|
+
}
|
|
145
|
+
events = events === null || events === void 0 ? void 0 : events.filter((item) => item !== null);
|
|
146
|
+
const txLogArgs = (_a = events[0]) === null || _a === void 0 ? void 0 : _a.args;
|
|
147
|
+
const swapFailPairs = [];
|
|
148
|
+
let swapInfo = [];
|
|
149
|
+
if (Array.isArray(txLogArgs === null || txLogArgs === void 0 ? void 0 : txLogArgs.swapInfo)) {
|
|
150
|
+
swapInfo = txLogArgs.swapInfo.map((info) => {
|
|
151
|
+
var _a, _b, _c, _d;
|
|
152
|
+
if (BigInt(info.returnToAmount) === BigInt(0) || BigInt(info.fromAmount) === BigInt(0)) {
|
|
153
|
+
swapFailPairs.push(getTokensPairKey({
|
|
154
|
+
srcToken: info.fromToken,
|
|
155
|
+
destToken: info.toToken,
|
|
156
|
+
srcChainId: chain.chainId,
|
|
157
|
+
destChainId: chain.chainId,
|
|
158
|
+
srcChainNativeAddress: (_a = chain === null || chain === void 0 ? void 0 : chain.nativeToken) === null || _a === void 0 ? void 0 : _a.contract,
|
|
159
|
+
destChainNativeAddress: (_b = chain === null || chain === void 0 ? void 0 : chain.nativeToken) === null || _b === void 0 ? void 0 : _b.contract,
|
|
160
|
+
}));
|
|
161
|
+
}
|
|
162
|
+
return Object.assign(Object.assign({}, info), { fromToken: (0, tokens_1.formatToken)(info.fromToken, (_c = chain === null || chain === void 0 ? void 0 : chain.nativeToken) === null || _c === void 0 ? void 0 : _c.contract), toToken: (0, tokens_1.formatToken)(info.toToken, (_d = chain === null || chain === void 0 ? void 0 : chain.nativeToken) === null || _d === void 0 ? void 0 : _d.contract) });
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else if (typeof (txLogArgs === null || txLogArgs === void 0 ? void 0 : txLogArgs.swapInfo) === 'object' && Object.keys(txLogArgs === null || txLogArgs === void 0 ? void 0 : txLogArgs.swapInfo).length > 0) {
|
|
166
|
+
const { fromAmount, returnToAmount, fromToken, toToken } = txLogArgs.swapInfo;
|
|
167
|
+
if (BigInt(returnToAmount) === BigInt(0) || BigInt(fromAmount) === BigInt(0)) {
|
|
168
|
+
swapFailPairs.push(getTokensPairKey({
|
|
169
|
+
srcToken: fromToken,
|
|
170
|
+
destToken: toToken,
|
|
171
|
+
srcChainId: chain.chainId,
|
|
172
|
+
destChainId: chain.chainId,
|
|
173
|
+
srcChainNativeAddress: (_b = chain === null || chain === void 0 ? void 0 : chain.nativeToken) === null || _b === void 0 ? void 0 : _b.contract,
|
|
174
|
+
destChainNativeAddress: (_c = chain === null || chain === void 0 ? void 0 : chain.nativeToken) === null || _c === void 0 ? void 0 : _c.contract,
|
|
175
|
+
}));
|
|
176
|
+
}
|
|
177
|
+
swapInfo = Object.assign(Object.assign({}, txLogArgs.swapInfo), { fromToken: (0, tokens_1.formatToken)(txLogArgs.swapInfo.fromToken, (_d = chain === null || chain === void 0 ? void 0 : chain.nativeToken) === null || _d === void 0 ? void 0 : _d.contract), toToken: (0, tokens_1.formatToken)(txLogArgs.swapInfo.toToken, (_e = chain === null || chain === void 0 ? void 0 : chain.nativeToken) === null || _e === void 0 ? void 0 : _e.contract) });
|
|
178
|
+
}
|
|
179
|
+
const updatedSwapInfo = new inputDataDecoder_1.SwapInputDataDecoder().updateSwapInfo({
|
|
180
|
+
data: transaction.input,
|
|
181
|
+
eventSwapInfo: swapInfo,
|
|
182
|
+
}) || swapInfo;
|
|
183
|
+
return { swapInfo: updatedSwapInfo, swapFailPairs };
|
|
184
|
+
};
|
|
185
|
+
exports.handleDecodeTxnData = handleDecodeTxnData;
|
|
186
|
+
const getOtherAbis = (name) => {
|
|
187
|
+
switch (name) {
|
|
188
|
+
case constants_1.OtherAbis.permit2:
|
|
189
|
+
return ABI.permit2Abi;
|
|
190
|
+
case constants_1.OtherAbis.erc20:
|
|
191
|
+
return ABI.erc20Abi;
|
|
192
|
+
default:
|
|
193
|
+
throw new Error('Invalid Abi');
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
exports.getOtherAbis = getOtherAbis;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MulticallParameters } from 'viem';
|
|
2
|
+
import { StatusCodes, TxnStatus } from '../enums';
|
|
3
|
+
import { HexString } from '../types';
|
|
4
|
+
export declare const multicall: ({ chainId, contracts, rpcUrls, multicallAddress, allowFailure, }: {
|
|
5
|
+
chainId: number;
|
|
6
|
+
contracts: MulticallParameters["contracts"];
|
|
7
|
+
rpcUrls?: string[];
|
|
8
|
+
multicallAddress?: HexString;
|
|
9
|
+
allowFailure?: boolean;
|
|
10
|
+
}) => Promise<{
|
|
11
|
+
status: TxnStatus;
|
|
12
|
+
code: StatusCodes;
|
|
13
|
+
data: unknown[];
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.multicall = void 0;
|
|
4
|
+
const enums_1 = require("../enums");
|
|
5
|
+
const index_1 = require("./index");
|
|
6
|
+
const multicall = async ({ chainId, contracts, rpcUrls, multicallAddress, allowFailure = false, }) => {
|
|
7
|
+
try {
|
|
8
|
+
const publicClient = (0, index_1.getPublicClient)({ chainId, rpcUrls });
|
|
9
|
+
const results = await publicClient.multicall(Object.assign(Object.assign({ contracts }, (multicallAddress && { multicallAddress })), { allowFailure }));
|
|
10
|
+
return {
|
|
11
|
+
status: enums_1.TxnStatus.success,
|
|
12
|
+
code: enums_1.StatusCodes.Success,
|
|
13
|
+
data: results,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console.error('Multicall failed:', error);
|
|
18
|
+
return {
|
|
19
|
+
status: enums_1.TxnStatus.error,
|
|
20
|
+
code: error.code || enums_1.StatusCodes.Error,
|
|
21
|
+
data: [],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
exports.multicall = multicall;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.permit2Domain = permit2Domain;
|
|
4
|
+
const PERMIT2_DOMAIN_NAME = 'Permit2';
|
|
5
|
+
function permit2Domain(permit2Address, chainId) {
|
|
6
|
+
return {
|
|
7
|
+
name: PERMIT2_DOMAIN_NAME,
|
|
8
|
+
chainId,
|
|
9
|
+
verifyingContract: permit2Address,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { HexString } from '../../types';
|
|
2
|
+
import { BasePermitResponse, Permit2Params } from '../../types/permit';
|
|
3
|
+
export declare function getPermit2Address(chainId: number): HexString;
|
|
4
|
+
export declare const getPermit2Signature: (params: Permit2Params) => Promise<BasePermitResponse>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPermit2Signature = void 0;
|
|
4
|
+
exports.getPermit2Address = getPermit2Address;
|
|
5
|
+
const contract_1 = require("../../constants/contract");
|
|
6
|
+
const permit_1 = require("../../constants/permit");
|
|
7
|
+
const permit2_1 = require("../../constants/permit2");
|
|
8
|
+
const enums_1 = require("../../enums");
|
|
9
|
+
const viem_1 = require("viem");
|
|
10
|
+
const permit_2 = require("../../types/permit");
|
|
11
|
+
const date_1 = require("../date");
|
|
12
|
+
const signTypedData_1 = require("../signTypedData");
|
|
13
|
+
const permitData_1 = require("./permitData");
|
|
14
|
+
const values_1 = require("./values");
|
|
15
|
+
const witnessData_1 = require("./witnessData");
|
|
16
|
+
const constants_1 = require("../../constants");
|
|
17
|
+
function getPermit2Address(chainId) {
|
|
18
|
+
var _a;
|
|
19
|
+
return (_a = contract_1.exclusivePermit2Addresses[chainId]) !== null && _a !== void 0 ? _a : contract_1.DEFAULT_PERMIT2_ADDRESS;
|
|
20
|
+
}
|
|
21
|
+
const getPermit2Signature = async (params) => {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
try {
|
|
24
|
+
const { chainId, account, tokens, spender, rpcUrls, deadline: sigDeadline, signer, permitType, firstTokenNonce, contractVersion, service, } = params;
|
|
25
|
+
const deadline = sigDeadline !== null && sigDeadline !== void 0 ? sigDeadline : (0, date_1.generateDeadline)(permit2_1.SignatureExpiryInSecs);
|
|
26
|
+
const expiration = (_a = params.expiration) !== null && _a !== void 0 ? _a : viem_1.maxUint48;
|
|
27
|
+
const permit2Address = getPermit2Address(chainId);
|
|
28
|
+
const updatedTokens = tokens.map((token) => {
|
|
29
|
+
return Object.assign(Object.assign({}, token), { amount: BigInt(token.amount || viem_1.maxUint256).toString() });
|
|
30
|
+
});
|
|
31
|
+
const { witnessData } = (0, witnessData_1.getPermit2WitnessData)(params);
|
|
32
|
+
const { permit2Values, nonce } = await (0, values_1.getPermit2Values)({
|
|
33
|
+
primaryType: permitType,
|
|
34
|
+
spender,
|
|
35
|
+
account,
|
|
36
|
+
deadline,
|
|
37
|
+
chainId,
|
|
38
|
+
permit2Address,
|
|
39
|
+
rpcUrls,
|
|
40
|
+
tokens: updatedTokens,
|
|
41
|
+
expiration,
|
|
42
|
+
firstTokenNonce: firstTokenNonce !== null && firstTokenNonce !== void 0 ? firstTokenNonce : null,
|
|
43
|
+
service,
|
|
44
|
+
contractVersion,
|
|
45
|
+
});
|
|
46
|
+
const signTypedPermit2Data = (0, permitData_1.getPermit2Data)(permit2Values, permit2Address, chainId, witnessData);
|
|
47
|
+
const signature = await (0, signTypedData_1.signTypedData)({
|
|
48
|
+
signer,
|
|
49
|
+
domain: signTypedPermit2Data.domain,
|
|
50
|
+
message: signTypedPermit2Data.message,
|
|
51
|
+
types: signTypedPermit2Data.types,
|
|
52
|
+
account,
|
|
53
|
+
primaryType: permitType,
|
|
54
|
+
});
|
|
55
|
+
let dZapDataForTransfer;
|
|
56
|
+
if (permitType === permit_1.permit2PrimaryType.PermitBatchWitnessTransferFrom) {
|
|
57
|
+
dZapDataForTransfer = (0, viem_1.encodeAbiParameters)(permit_2.BatchPermitAbiParams, [
|
|
58
|
+
{
|
|
59
|
+
permitted: updatedTokens.map((token) => ({ token: token.address, amount: BigInt(token.amount) })),
|
|
60
|
+
nonce,
|
|
61
|
+
deadline,
|
|
62
|
+
},
|
|
63
|
+
signature,
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
else if (permitType === permit_1.permit2PrimaryType.PermitWitnessTransferFrom) {
|
|
67
|
+
dZapDataForTransfer = (0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)('uint256, uint256, bytes'), [nonce, deadline, signature]);
|
|
68
|
+
}
|
|
69
|
+
else if (contractVersion === enums_1.ContractVersion.v1 && service !== constants_1.Services.zap) {
|
|
70
|
+
dZapDataForTransfer = (0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)('uint160 allowanceAmount, uint48 nonce, uint48 expiration, uint256 sigDeadline, bytes signature'), [BigInt(tokens[0].amount), Number(nonce.toString()), Number(expiration.toString()), BigInt(deadline.toString()), signature]);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
dZapDataForTransfer = (0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)('uint48 nonce, uint48 expiration, uint256 sigDeadline, bytes signature'), [
|
|
74
|
+
Number(nonce.toString()),
|
|
75
|
+
Number(expiration.toString()),
|
|
76
|
+
BigInt(deadline.toString()),
|
|
77
|
+
signature,
|
|
78
|
+
]);
|
|
79
|
+
}
|
|
80
|
+
const dzapPermitMode = service !== constants_1.Services.zap && contractVersion === enums_1.ContractVersion.v1 ? enums_1.DZapV1PermitMode.PERMIT2_APPROVE : permit_1.PermitToDZapPermitMode[permitType];
|
|
81
|
+
const permitData = (0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)('uint8, bytes'), [dzapPermitMode, dZapDataForTransfer]);
|
|
82
|
+
return {
|
|
83
|
+
status: enums_1.TxnStatus.success,
|
|
84
|
+
code: enums_1.StatusCodes.Success,
|
|
85
|
+
permitData,
|
|
86
|
+
nonce,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.log('Error generating permit2 witness transfer signature:', error);
|
|
91
|
+
if (((_b = error === null || error === void 0 ? void 0 : error.cause) === null || _b === void 0 ? void 0 : _b.code) === enums_1.StatusCodes.UserRejectedRequest || (error === null || error === void 0 ? void 0 : error.code) === enums_1.StatusCodes.UserRejectedRequest) {
|
|
92
|
+
return { status: enums_1.TxnStatus.rejected, code: enums_1.StatusCodes.UserRejectedRequest };
|
|
93
|
+
}
|
|
94
|
+
return { status: enums_1.TxnStatus.error, code: enums_1.StatusCodes.Error };
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
exports.getPermit2Signature = getPermit2Signature;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { HexString } from '../../types';
|
|
2
|
+
import { Address, PublicClient } from 'viem';
|
|
3
|
+
export declare class NonceManager {
|
|
4
|
+
private static readonly POSITION_BITS;
|
|
5
|
+
private static readonly MAX_POSITION;
|
|
6
|
+
private static readonly POSITION_MASK;
|
|
7
|
+
private static readonly MAX_WORD_ITERATIONS;
|
|
8
|
+
private readonly permit2Contract;
|
|
9
|
+
constructor(publicClient: PublicClient, permit2Address: HexString);
|
|
10
|
+
nextNonce(owner: Address): Promise<bigint>;
|
|
11
|
+
private nonceFromWordAndPos;
|
|
12
|
+
getNonceBitmap(owner: Address, word: bigint): Promise<bigint>;
|
|
13
|
+
isNonceUsed(owner: Address, nonce: bigint): Promise<boolean>;
|
|
14
|
+
}
|
|
15
|
+
export declare const getNextPermit2Nonce: (permitAddress: HexString, account: HexString, chainId: number, rpcUrls?: string[]) => Promise<bigint>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNextPermit2Nonce = exports.NonceManager = void 0;
|
|
4
|
+
const artifacts_1 = require("../../artifacts");
|
|
5
|
+
const viem_1 = require("viem");
|
|
6
|
+
const __1 = require("..");
|
|
7
|
+
class NonceManager {
|
|
8
|
+
constructor(publicClient, permit2Address) {
|
|
9
|
+
this.permit2Contract = (0, viem_1.getContract)({
|
|
10
|
+
address: permit2Address,
|
|
11
|
+
abi: artifacts_1.permit2Abi,
|
|
12
|
+
client: publicClient,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async nextNonce(owner) {
|
|
16
|
+
let word = BigInt(0);
|
|
17
|
+
let pos = 0;
|
|
18
|
+
for (let iteration = 0; iteration < NonceManager.MAX_WORD_ITERATIONS; iteration++) {
|
|
19
|
+
const bitmap = await this.permit2Contract.read.nonceBitmap([owner, word]);
|
|
20
|
+
if (bitmap === viem_1.maxUint256) {
|
|
21
|
+
++word;
|
|
22
|
+
pos = 0;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
let workingBitmap = bitmap;
|
|
26
|
+
if (pos !== 0) {
|
|
27
|
+
workingBitmap = workingBitmap >> BigInt(pos);
|
|
28
|
+
}
|
|
29
|
+
while (pos < NonceManager.MAX_POSITION && (workingBitmap & BigInt(1)) === BigInt(1)) {
|
|
30
|
+
workingBitmap = workingBitmap >> BigInt(1);
|
|
31
|
+
++pos;
|
|
32
|
+
}
|
|
33
|
+
return this.nonceFromWordAndPos(word, pos);
|
|
34
|
+
}
|
|
35
|
+
throw new Error('Max iterations reached');
|
|
36
|
+
}
|
|
37
|
+
nonceFromWordAndPos(word, pos) {
|
|
38
|
+
const nonce = word << NonceManager.POSITION_BITS;
|
|
39
|
+
return nonce | BigInt(pos);
|
|
40
|
+
}
|
|
41
|
+
async getNonceBitmap(owner, word) {
|
|
42
|
+
return this.permit2Contract.read.nonceBitmap([owner, word]);
|
|
43
|
+
}
|
|
44
|
+
async isNonceUsed(owner, nonce) {
|
|
45
|
+
const word = nonce >> NonceManager.POSITION_BITS;
|
|
46
|
+
const pos = Number(nonce & NonceManager.POSITION_MASK);
|
|
47
|
+
const bitmap = await this.getNonceBitmap(owner, word);
|
|
48
|
+
return ((bitmap >> BigInt(pos)) & BigInt(1)) === BigInt(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.NonceManager = NonceManager;
|
|
52
|
+
NonceManager.POSITION_BITS = BigInt(8);
|
|
53
|
+
NonceManager.MAX_POSITION = 256;
|
|
54
|
+
NonceManager.POSITION_MASK = BigInt(0xff);
|
|
55
|
+
NonceManager.MAX_WORD_ITERATIONS = 1000;
|
|
56
|
+
const getNextPermit2Nonce = async (permitAddress, account, chainId, rpcUrls) => {
|
|
57
|
+
const publicClient = (0, __1.getPublicClient)({ chainId, rpcUrls });
|
|
58
|
+
const nonceManager = new NonceManager(publicClient, permitAddress);
|
|
59
|
+
return nonceManager.nextNonce(account);
|
|
60
|
+
};
|
|
61
|
+
exports.getNextPermit2Nonce = getNextPermit2Nonce;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TypedDataField } from 'ethers';
|
|
2
|
+
import { PermitBatchTransferFromValues, PermitSingleValues, PermitTransferFromValues, WitnessData } from '../../types/permit';
|
|
3
|
+
import type { Address, TypedDataDomain } from 'viem';
|
|
4
|
+
type PermitSingleData = {
|
|
5
|
+
domain: TypedDataDomain;
|
|
6
|
+
types: Record<string, Array<TypedDataField>>;
|
|
7
|
+
message: PermitSingleValues;
|
|
8
|
+
};
|
|
9
|
+
type PermitTransferFromData = {
|
|
10
|
+
domain: TypedDataDomain;
|
|
11
|
+
types: Record<string, Array<TypedDataField>>;
|
|
12
|
+
message: PermitTransferFromValues;
|
|
13
|
+
};
|
|
14
|
+
type PermitBatchTransferFromData = {
|
|
15
|
+
domain: TypedDataDomain;
|
|
16
|
+
types: Record<string, Array<TypedDataField>>;
|
|
17
|
+
message: PermitBatchTransferFromValues;
|
|
18
|
+
};
|
|
19
|
+
export declare function getPermitSingleData(permit: PermitSingleValues, permit2Address: Address, chainId: number): PermitSingleData;
|
|
20
|
+
export declare function getPermitTransferData(permit: PermitTransferFromValues, permit2Address: Address, chainId: number, witness: WitnessData): PermitTransferFromData;
|
|
21
|
+
export declare function getPermitBatchTransferData(permit: PermitBatchTransferFromValues, permit2Address: Address, chainId: number, witness: WitnessData): PermitBatchTransferFromData;
|
|
22
|
+
export declare function getPermit2Data(permit: PermitTransferFromValues | PermitBatchTransferFromValues | PermitSingleValues, permit2Address: Address, chainId: number, witness?: WitnessData): PermitTransferFromData | PermitBatchTransferFromData | PermitSingleData;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPermitSingleData = getPermitSingleData;
|
|
4
|
+
exports.getPermitTransferData = getPermitTransferData;
|
|
5
|
+
exports.getPermitBatchTransferData = getPermitBatchTransferData;
|
|
6
|
+
exports.getPermit2Data = getPermit2Data;
|
|
7
|
+
const domain_1 = require("./domain");
|
|
8
|
+
function isPermitSingle(permit) {
|
|
9
|
+
return 'details' in permit && permit.details !== undefined;
|
|
10
|
+
}
|
|
11
|
+
function isPermitTransferFrom(permit) {
|
|
12
|
+
return 'permitted' in permit && !Array.isArray(permit.permitted);
|
|
13
|
+
}
|
|
14
|
+
function getPermitSingleData(permit, permit2Address, chainId) {
|
|
15
|
+
const domain = (0, domain_1.permit2Domain)(permit2Address, chainId);
|
|
16
|
+
const types = {
|
|
17
|
+
PermitSingle: [
|
|
18
|
+
{ name: 'details', type: 'PermitDetails' },
|
|
19
|
+
{ name: 'spender', type: 'address' },
|
|
20
|
+
{ name: 'sigDeadline', type: 'uint256' },
|
|
21
|
+
],
|
|
22
|
+
PermitDetails: [
|
|
23
|
+
{ name: 'token', type: 'address' },
|
|
24
|
+
{ name: 'amount', type: 'uint160' },
|
|
25
|
+
{ name: 'expiration', type: 'uint48' },
|
|
26
|
+
{ name: 'nonce', type: 'uint48' },
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
const message = permit;
|
|
30
|
+
return {
|
|
31
|
+
domain,
|
|
32
|
+
types,
|
|
33
|
+
message,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function getPermitTransferData(permit, permit2Address, chainId, witness) {
|
|
37
|
+
const domain = (0, domain_1.permit2Domain)(permit2Address, chainId);
|
|
38
|
+
const types = Object.assign(Object.assign({}, witness.witnessType), { TokenPermissions: [
|
|
39
|
+
{ name: 'token', type: 'address' },
|
|
40
|
+
{ name: 'amount', type: 'uint256' },
|
|
41
|
+
], PermitWitnessTransferFrom: [
|
|
42
|
+
{ name: 'permitted', type: 'TokenPermissions' },
|
|
43
|
+
{ name: 'spender', type: 'address' },
|
|
44
|
+
{ name: 'nonce', type: 'uint256' },
|
|
45
|
+
{ name: 'deadline', type: 'uint256' },
|
|
46
|
+
{ name: 'witness', type: witness.witnessTypeName },
|
|
47
|
+
] });
|
|
48
|
+
const message = Object.assign(permit, { witness: witness.witness });
|
|
49
|
+
return {
|
|
50
|
+
domain,
|
|
51
|
+
types,
|
|
52
|
+
message,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function getPermitBatchTransferData(permit, permit2Address, chainId, witness) {
|
|
56
|
+
const domain = (0, domain_1.permit2Domain)(permit2Address, chainId);
|
|
57
|
+
const types = Object.assign(Object.assign({}, witness.witnessType), { TokenPermissions: [
|
|
58
|
+
{ name: 'token', type: 'address' },
|
|
59
|
+
{ name: 'amount', type: 'uint256' },
|
|
60
|
+
], PermitBatchWitnessTransferFrom: [
|
|
61
|
+
{ name: 'permitted', type: 'TokenPermissions[]' },
|
|
62
|
+
{ name: 'spender', type: 'address' },
|
|
63
|
+
{ name: 'nonce', type: 'uint256' },
|
|
64
|
+
{ name: 'deadline', type: 'uint256' },
|
|
65
|
+
{ name: 'witness', type: witness.witnessTypeName },
|
|
66
|
+
] });
|
|
67
|
+
const message = Object.assign(Object.assign({}, permit), { witness: witness.witness });
|
|
68
|
+
return {
|
|
69
|
+
domain,
|
|
70
|
+
types,
|
|
71
|
+
message,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function getPermit2Data(permit, permit2Address, chainId, witness) {
|
|
75
|
+
if (isPermitSingle(permit)) {
|
|
76
|
+
return getPermitSingleData(permit, permit2Address, chainId);
|
|
77
|
+
}
|
|
78
|
+
if (!witness) {
|
|
79
|
+
throw new Error('Witness is required for PermitTransferFrom');
|
|
80
|
+
}
|
|
81
|
+
if (isPermitTransferFrom(permit)) {
|
|
82
|
+
return getPermitTransferData(permit, permit2Address, chainId, witness);
|
|
83
|
+
}
|
|
84
|
+
return getPermitBatchTransferData(permit, permit2Address, chainId, witness);
|
|
85
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { BasePermitParams, Permit2PrimaryType, PermitBatchTransferFromValues, PermitSingleValues, PermitTransferFromValues, TokenWithIndex } from '../../types/permit';
|
|
2
|
+
import type { Address } from 'viem';
|
|
3
|
+
import { HexString } from '../../types';
|
|
4
|
+
type Permit2ValuesParams = {
|
|
5
|
+
deadline: bigint;
|
|
6
|
+
permit2Address: HexString;
|
|
7
|
+
tokens: TokenWithIndex[];
|
|
8
|
+
expiration?: bigint;
|
|
9
|
+
firstTokenNonce: bigint | null;
|
|
10
|
+
primaryType: Permit2PrimaryType;
|
|
11
|
+
} & Omit<BasePermitParams, 'deadline' | 'signer'>;
|
|
12
|
+
export declare const getPermitSingleValues: ({ spender, deadline, chainId, rpcUrls, account, expiration, token, permit2Address, }: {
|
|
13
|
+
spender: Address;
|
|
14
|
+
deadline: bigint;
|
|
15
|
+
chainId: number;
|
|
16
|
+
account: HexString;
|
|
17
|
+
expiration: bigint;
|
|
18
|
+
token: TokenWithIndex;
|
|
19
|
+
permit2Address: HexString;
|
|
20
|
+
rpcUrls?: string[];
|
|
21
|
+
}) => Promise<{
|
|
22
|
+
permit2Values: PermitSingleValues;
|
|
23
|
+
nonce: bigint;
|
|
24
|
+
}>;
|
|
25
|
+
export declare const getPermitTransferFromValues: ({ spender, deadline, chainId, rpcUrls, account, token, permit2Address, firstTokenNonce, }: {
|
|
26
|
+
spender: Address;
|
|
27
|
+
deadline: bigint;
|
|
28
|
+
chainId: number;
|
|
29
|
+
account: HexString;
|
|
30
|
+
token: TokenWithIndex;
|
|
31
|
+
permit2Address: HexString;
|
|
32
|
+
firstTokenNonce: bigint | null;
|
|
33
|
+
rpcUrls?: string[];
|
|
34
|
+
}) => Promise<{
|
|
35
|
+
permit2Values: PermitTransferFromValues;
|
|
36
|
+
nonce: bigint;
|
|
37
|
+
}>;
|
|
38
|
+
export declare const getPermitBatchTransferFromValues: ({ spender, deadline, chainId, rpcUrls, account, permit2Address, tokens, }: {
|
|
39
|
+
spender: Address;
|
|
40
|
+
deadline: bigint;
|
|
41
|
+
chainId: number;
|
|
42
|
+
account: HexString;
|
|
43
|
+
permit2Address: HexString;
|
|
44
|
+
tokens: TokenWithIndex[];
|
|
45
|
+
rpcUrls?: string[];
|
|
46
|
+
}) => Promise<{
|
|
47
|
+
permit2Values: PermitBatchTransferFromValues;
|
|
48
|
+
nonce: bigint;
|
|
49
|
+
}>;
|
|
50
|
+
export declare function getPermit2Values(params: Permit2ValuesParams): Promise<{
|
|
51
|
+
permit2Values: PermitTransferFromValues | PermitBatchTransferFromValues | PermitSingleValues;
|
|
52
|
+
nonce: bigint;
|
|
53
|
+
}>;
|
|
54
|
+
export {};
|