@ichidao/ichi-vaults-sdk 0.1.43 → 2.0.1
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/README.md +62 -208
- package/dist/abis/types/AlgebraIntegralPool.d.ts +702 -793
- package/dist/abis/types/AlgebraPool.d.ts +693 -730
- package/dist/abis/types/ClPool.d.ts +789 -871
- package/dist/abis/types/DepositGuard.d.ts +193 -178
- package/dist/abis/types/DepositGuardWithHtsWrapping.d.ts +300 -297
- package/dist/abis/types/ERC20.d.ts +120 -147
- package/dist/abis/types/ERC20Wrapper.d.ts +147 -155
- package/dist/abis/types/IchiVault.d.ts +598 -728
- package/dist/abis/types/MultiFeeDistributer.d.ts +314 -423
- package/dist/abis/types/Multicall.d.ts +58 -73
- package/dist/abis/types/UniswapV3Pool.d.ts +654 -693
- package/dist/abis/types/common.d.ts +40 -12
- package/dist/abis/types/factories/AlgebraIntegralPool__factory.d.ts +2 -3
- package/dist/abis/types/factories/AlgebraIntegralPool__factory.js +10 -13
- package/dist/abis/types/factories/AlgebraIntegralPool__factory.js.map +1 -1
- package/dist/abis/types/factories/AlgebraPool__factory.d.ts +2 -3
- package/dist/abis/types/factories/AlgebraPool__factory.js +10 -13
- package/dist/abis/types/factories/AlgebraPool__factory.js.map +1 -1
- package/dist/abis/types/factories/ClPool__factory.d.ts +2 -3
- package/dist/abis/types/factories/ClPool__factory.js +10 -13
- package/dist/abis/types/factories/ClPool__factory.js.map +1 -1
- package/dist/abis/types/factories/DepositGuardWithHtsWrapping__factory.d.ts +2 -3
- package/dist/abis/types/factories/DepositGuardWithHtsWrapping__factory.js +10 -13
- package/dist/abis/types/factories/DepositGuardWithHtsWrapping__factory.js.map +1 -1
- package/dist/abis/types/factories/DepositGuard__factory.d.ts +2 -3
- package/dist/abis/types/factories/DepositGuard__factory.js +10 -13
- package/dist/abis/types/factories/DepositGuard__factory.js.map +1 -1
- package/dist/abis/types/factories/ERC20Wrapper__factory.d.ts +2 -3
- package/dist/abis/types/factories/ERC20Wrapper__factory.js +10 -13
- package/dist/abis/types/factories/ERC20Wrapper__factory.js.map +1 -1
- package/dist/abis/types/factories/ERC20__factory.d.ts +2 -3
- package/dist/abis/types/factories/ERC20__factory.js +10 -13
- package/dist/abis/types/factories/ERC20__factory.js.map +1 -1
- package/dist/abis/types/factories/IchiVault__factory.d.ts +2 -3
- package/dist/abis/types/factories/IchiVault__factory.js +10 -13
- package/dist/abis/types/factories/IchiVault__factory.js.map +1 -1
- package/dist/abis/types/factories/MultiFeeDistributer__factory.d.ts +2 -3
- package/dist/abis/types/factories/MultiFeeDistributer__factory.js +10 -13
- package/dist/abis/types/factories/MultiFeeDistributer__factory.js.map +1 -1
- package/dist/abis/types/factories/Multicall__factory.d.ts +2 -3
- package/dist/abis/types/factories/Multicall__factory.js +10 -13
- package/dist/abis/types/factories/Multicall__factory.js.map +1 -1
- package/dist/abis/types/factories/UniswapV3Pool__factory.d.ts +2 -3
- package/dist/abis/types/factories/UniswapV3Pool__factory.js +10 -13
- package/dist/abis/types/factories/UniswapV3Pool__factory.js.map +1 -1
- package/dist/src/__tests__/index.test.js +356 -738
- package/dist/src/__tests__/index.test.js.map +1 -1
- package/dist/src/abis/types/AlgebraIntegralPool.d.ts +702 -793
- package/dist/src/abis/types/AlgebraPool.d.ts +693 -730
- package/dist/src/abis/types/ClPool.d.ts +789 -871
- package/dist/src/abis/types/DepositGuard.d.ts +193 -178
- package/dist/src/abis/types/DepositGuardWithHtsWrapping.d.ts +300 -297
- package/dist/src/abis/types/ERC20.d.ts +120 -147
- package/dist/src/abis/types/ERC20Wrapper.d.ts +147 -155
- package/dist/src/abis/types/IchiVault.d.ts +598 -728
- package/dist/src/abis/types/MultiFeeDistributer.d.ts +314 -423
- package/dist/src/abis/types/Multicall.d.ts +58 -73
- package/dist/src/abis/types/UniswapV3Pool.d.ts +654 -693
- package/dist/src/abis/types/common.d.ts +40 -12
- package/dist/src/abis/types/factories/AlgebraIntegralPool__factory.d.ts +2 -3
- package/dist/src/abis/types/factories/AlgebraPool__factory.d.ts +2 -3
- package/dist/src/abis/types/factories/ClPool__factory.d.ts +2 -3
- package/dist/src/abis/types/factories/DepositGuardWithHtsWrapping__factory.d.ts +2 -3
- package/dist/src/abis/types/factories/DepositGuard__factory.d.ts +2 -3
- package/dist/src/abis/types/factories/ERC20Wrapper__factory.d.ts +2 -3
- package/dist/src/abis/types/factories/ERC20__factory.d.ts +2 -3
- package/dist/src/abis/types/factories/IchiVault__factory.d.ts +2 -3
- package/dist/src/abis/types/factories/MultiFeeDistributer__factory.d.ts +2 -3
- package/dist/src/abis/types/factories/Multicall__factory.d.ts +2 -3
- package/dist/src/abis/types/factories/UniswapV3Pool__factory.d.ts +2 -3
- package/dist/src/contracts/index.d.ts +1 -1
- package/dist/src/contracts/index.js +12 -12
- package/dist/src/contracts/index.js.map +1 -1
- package/dist/src/functions/_totalBalances.d.ts +2 -3
- package/dist/src/functions/_totalBalances.js +46 -117
- package/dist/src/functions/_totalBalances.js.map +1 -1
- package/dist/src/functions/_vaultEvents.js +347 -488
- package/dist/src/functions/_vaultEvents.js.map +1 -1
- package/dist/src/functions/_withdrawHelpers.d.ts +2 -3
- package/dist/src/functions/_withdrawHelpers.js +13 -62
- package/dist/src/functions/_withdrawHelpers.js.map +1 -1
- package/dist/src/functions/calculateApr.d.ts +1 -1
- package/dist/src/functions/calculateApr.js +77 -150
- package/dist/src/functions/calculateApr.js.map +1 -1
- package/dist/src/functions/calculateDtr.d.ts +1 -1
- package/dist/src/functions/calculateDtr.js +84 -169
- package/dist/src/functions/calculateDtr.js.map +1 -1
- package/dist/src/functions/calculateFees.d.ts +1 -1
- package/dist/src/functions/calculateFees.js +97 -172
- package/dist/src/functions/calculateFees.js.map +1 -1
- package/dist/src/functions/chains.js +6 -6
- package/dist/src/functions/chains.js.map +1 -1
- package/dist/src/functions/claimRewards.d.ts +3 -4
- package/dist/src/functions/claimRewards.js +29 -92
- package/dist/src/functions/claimRewards.js.map +1 -1
- package/dist/src/functions/deposit.d.ts +7 -9
- package/dist/src/functions/deposit.js +199 -364
- package/dist/src/functions/deposit.js.map +1 -1
- package/dist/src/functions/depositWithHtsWrapping.d.ts +4 -6
- package/dist/src/functions/depositWithHtsWrapping.js +109 -226
- package/dist/src/functions/depositWithHtsWrapping.js.map +1 -1
- package/dist/src/functions/getFeeAprs.d.ts +1 -1
- package/dist/src/functions/getFeeAprs.js +55 -111
- package/dist/src/functions/getFeeAprs.js.map +1 -1
- package/dist/src/functions/priceFromPool.d.ts +3 -4
- package/dist/src/functions/priceFromPool.js +99 -208
- package/dist/src/functions/priceFromPool.js.map +1 -1
- package/dist/src/functions/rewardInfo.js +79 -159
- package/dist/src/functions/rewardInfo.js.map +1 -1
- package/dist/src/functions/totalBalances.d.ts +2 -3
- package/dist/src/functions/totalBalances.js +14 -67
- package/dist/src/functions/totalBalances.js.map +1 -1
- package/dist/src/functions/userBalances.d.ts +2 -3
- package/dist/src/functions/userBalances.js +244 -368
- package/dist/src/functions/userBalances.js.map +1 -1
- package/dist/src/functions/userRewards.d.ts +1 -1
- package/dist/src/functions/userRewards.js +87 -145
- package/dist/src/functions/userRewards.js.map +1 -1
- package/dist/src/functions/vault.d.ts +1 -1
- package/dist/src/functions/vault.js +203 -383
- package/dist/src/functions/vault.js.map +1 -1
- package/dist/src/functions/vaultBasics.js +6 -7
- package/dist/src/functions/vaultBasics.js.map +1 -1
- package/dist/src/functions/vaultMetrics.d.ts +1 -1
- package/dist/src/functions/vaultMetrics.js +111 -189
- package/dist/src/functions/vaultMetrics.js.map +1 -1
- package/dist/src/functions/vaultPositions.d.ts +1 -1
- package/dist/src/functions/vaultPositions.js +69 -134
- package/dist/src/functions/vaultPositions.js.map +1 -1
- package/dist/src/functions/vaultTvl.d.ts +1 -1
- package/dist/src/functions/vaultTvl.js +80 -165
- package/dist/src/functions/vaultTvl.js.map +1 -1
- package/dist/src/functions/withdraw.d.ts +6 -8
- package/dist/src/functions/withdraw.js +165 -295
- package/dist/src/functions/withdraw.js.map +1 -1
- package/dist/src/functions/withdrawWithErc20Wrapping.d.ts +2 -4
- package/dist/src/functions/withdrawWithErc20Wrapping.js +59 -126
- package/dist/src/functions/withdrawWithErc20Wrapping.js.map +1 -1
- package/dist/src/graphql/constants.js +217 -212
- package/dist/src/graphql/constants.js.map +1 -1
- package/dist/src/graphql/functions.js +30 -102
- package/dist/src/graphql/functions.js.map +1 -1
- package/dist/src/graphql/queries.js +407 -42
- package/dist/src/graphql/queries.js.map +1 -1
- package/dist/src/index.cjs.js +2 -2
- package/dist/src/index.esm.js +2 -2
- package/dist/src/src/contracts/index.d.ts +1 -1
- package/dist/src/src/functions/_totalBalances.d.ts +2 -3
- package/dist/src/src/functions/_withdrawHelpers.d.ts +2 -3
- package/dist/src/src/functions/calculateApr.d.ts +1 -1
- package/dist/src/src/functions/calculateDtr.d.ts +1 -1
- package/dist/src/src/functions/calculateFees.d.ts +1 -1
- package/dist/src/src/functions/claimRewards.d.ts +3 -4
- package/dist/src/src/functions/deposit.d.ts +7 -9
- package/dist/src/src/functions/depositWithHtsWrapping.d.ts +4 -6
- package/dist/src/src/functions/getFeeAprs.d.ts +1 -1
- package/dist/src/src/functions/priceFromPool.d.ts +3 -4
- package/dist/src/src/functions/totalBalances.d.ts +2 -3
- package/dist/src/src/functions/userBalances.d.ts +2 -3
- package/dist/src/src/functions/userRewards.d.ts +1 -1
- package/dist/src/src/functions/vault.d.ts +1 -1
- package/dist/src/src/functions/vaultMetrics.d.ts +1 -1
- package/dist/src/src/functions/vaultPositions.d.ts +1 -1
- package/dist/src/src/functions/vaultTvl.d.ts +1 -1
- package/dist/src/src/functions/withdraw.d.ts +6 -8
- package/dist/src/src/functions/withdrawWithErc20Wrapping.d.ts +2 -4
- package/dist/src/src/types/calculateGasMargin.d.ts +1 -2
- package/dist/src/src/types/index.d.ts +12 -13
- package/dist/src/src/utils/amountWithSlippage.d.ts +1 -2
- package/dist/src/src/utils/config/addresses.d.ts +1 -1
- package/dist/src/src/utils/formatBigInt.d.ts +1 -2
- package/dist/src/src/utils/getPrice.d.ts +1 -2
- package/dist/src/src/utils/multicallUtils.d.ts +9 -10
- package/dist/src/src/utils/parseBigInt.d.ts +1 -2
- package/dist/src/types/calculateGasMargin.d.ts +1 -2
- package/dist/src/types/calculateGasMargin.js +4 -5
- package/dist/src/types/calculateGasMargin.js.map +1 -1
- package/dist/src/types/index.d.ts +12 -13
- package/dist/src/types/index.js +1 -0
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/utils/amountWithSlippage.d.ts +1 -2
- package/dist/src/utils/amountWithSlippage.js +1 -1
- package/dist/src/utils/amountWithSlippage.js.map +1 -1
- package/dist/src/utils/cache.js +2 -2
- package/dist/src/utils/cache.js.map +1 -1
- package/dist/src/utils/config/addresses.d.ts +1 -1
- package/dist/src/utils/config/addresses.js +276 -268
- package/dist/src/utils/config/addresses.js.map +1 -1
- package/dist/src/utils/formatBigInt.d.ts +1 -2
- package/dist/src/utils/formatBigInt.js +4 -5
- package/dist/src/utils/formatBigInt.js.map +1 -1
- package/dist/src/utils/getConfigByFactory.js +24 -28
- package/dist/src/utils/getConfigByFactory.js.map +1 -1
- package/dist/src/utils/getGraphUrls.js +8 -12
- package/dist/src/utils/getGraphUrls.js.map +1 -1
- package/dist/src/utils/getPrice.d.ts +1 -2
- package/dist/src/utils/getPrice.js +5 -6
- package/dist/src/utils/getPrice.js.map +1 -1
- package/dist/src/utils/isVelodrome.js +2 -3
- package/dist/src/utils/isVelodrome.js.map +1 -1
- package/dist/src/utils/multicallUtils.d.ts +9 -10
- package/dist/src/utils/multicallUtils.js +38 -93
- package/dist/src/utils/multicallUtils.js.map +1 -1
- package/dist/src/utils/parseBigInt.d.ts +1 -2
- package/dist/src/utils/parseBigInt.js +5 -7
- package/dist/src/utils/parseBigInt.js.map +1 -1
- package/dist/src/utils/positionKey.js +2 -4
- package/dist/src/utils/positionKey.js.map +1 -1
- package/package.json +5 -17
|
@@ -1,391 +1,226 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
-
function step(op) {
|
|
27
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
-
switch (op[0]) {
|
|
32
|
-
case 0: case 1: t = op; break;
|
|
33
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
-
default:
|
|
37
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
-
if (t[2]) _.ops.pop();
|
|
42
|
-
_.trys.pop(); continue;
|
|
43
|
-
}
|
|
44
|
-
op = body.call(thisArg, _);
|
|
45
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
4
|
};
|
|
52
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
6
|
exports.depositNativeToken = exports.deposit = exports.getMaxDepositAmount = exports._getMaxDepositAmount = exports.approveDepositToken = exports.isDepositTokenApproved = exports.isTokenAllowed = void 0;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
var calculateGasMargin_1 = require("../types/calculateGasMargin");
|
|
7
|
+
const ethers_1 = require("ethers");
|
|
8
|
+
const contracts_1 = require("../contracts");
|
|
9
|
+
const parseBigInt_1 = __importDefault(require("../utils/parseBigInt"));
|
|
10
|
+
const types_1 = require("../types");
|
|
11
|
+
const calculateGasMargin_1 = require("../types/calculateGasMargin");
|
|
60
12
|
// eslint-disable-next-line import/no-cycle
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
function isTokenAllowed(tokenIdx, vaultAddress, jsonProvider, dex) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return [4 /*yield*/, (0, vault_1.getIchiVaultInfo)(chainId, dex, vaultAddress, jsonProvider)];
|
|
78
|
-
case 2:
|
|
79
|
-
vault = _a.sent();
|
|
80
|
-
if (!vault)
|
|
81
|
-
throw new Error("Vault ".concat(vaultAddress, " not found on chain ").concat(chainId, " and dex ").concat(dex));
|
|
82
|
-
tokenAllowed = vault[tokenIdx === 0 ? 'allowTokenA' : 'allowTokenB'];
|
|
83
|
-
return [2 /*return*/, tokenAllowed];
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
});
|
|
13
|
+
const vault_1 = require("./vault");
|
|
14
|
+
const addresses_1 = require("../utils/config/addresses");
|
|
15
|
+
const amountWithSlippage_1 = __importDefault(require("../utils/amountWithSlippage"));
|
|
16
|
+
const vaultBasics_1 = __importDefault(require("./vaultBasics"));
|
|
17
|
+
const _totalBalances_1 = require("./_totalBalances");
|
|
18
|
+
async function isTokenAllowed(tokenIdx, vaultAddress, jsonProvider, dex) {
|
|
19
|
+
const network = await jsonProvider.getNetwork();
|
|
20
|
+
const chainId = Number(network.chainId);
|
|
21
|
+
if (!Object.values(types_1.SupportedChainId).includes(chainId)) {
|
|
22
|
+
throw new Error(`Unsupported chainId: ${chainId}`);
|
|
23
|
+
}
|
|
24
|
+
const vault = await (0, vault_1.getIchiVaultInfo)(chainId, dex, vaultAddress, jsonProvider);
|
|
25
|
+
if (!vault)
|
|
26
|
+
throw new Error(`Vault ${vaultAddress} not found on chain ${chainId} and dex ${dex}`);
|
|
27
|
+
const tokenAllowed = vault[tokenIdx === 0 ? 'allowTokenA' : 'allowTokenB'];
|
|
28
|
+
return tokenAllowed;
|
|
87
29
|
}
|
|
88
30
|
exports.isTokenAllowed = isTokenAllowed;
|
|
89
31
|
// eslint-disable-next-line no-underscore-dangle
|
|
90
|
-
function _isDepositTokenApproved(accountAddress, tokenIdx, amount, vault, chainId, jsonProvider, dex) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
tokenContract = (0, contracts_1.getERC20Contract)(token, jsonProvider);
|
|
99
|
-
depositGuardAddress = (_b = (_a = addresses_1.addressConfig[chainId][dex]) === null || _a === void 0 ? void 0 : _a.depositGuard.address) !== null && _b !== void 0 ? _b : '';
|
|
100
|
-
return [4 /*yield*/, tokenContract.allowance(accountAddress, depositGuardAddress)];
|
|
101
|
-
case 1:
|
|
102
|
-
currentAllowanceBN = _c.sent();
|
|
103
|
-
return [4 /*yield*/, tokenContract.decimals()];
|
|
104
|
-
case 2:
|
|
105
|
-
tokenDecimals = _c.sent();
|
|
106
|
-
amountBN = amount instanceof ethers_1.BigNumber ? amount : (0, parseBigInt_1.default)(amount, tokenDecimals);
|
|
107
|
-
return [2 /*return*/, currentAllowanceBN.gt(ethers_1.BigNumber.from(0)) && currentAllowanceBN.gte(amountBN)];
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
});
|
|
32
|
+
async function _isDepositTokenApproved(accountAddress, tokenIdx, amount, vault, chainId, jsonProvider, dex) {
|
|
33
|
+
const token = vault[tokenIdx === 0 ? 'tokenA' : 'tokenB'];
|
|
34
|
+
const tokenContract = (0, contracts_1.getERC20Contract)(token, jsonProvider);
|
|
35
|
+
const depositGuardAddress = addresses_1.addressConfig[chainId][dex]?.depositGuard.address ?? '';
|
|
36
|
+
const currentAllowanceBN = await tokenContract.allowance(accountAddress, depositGuardAddress);
|
|
37
|
+
const tokenDecimals = Number(await tokenContract.decimals());
|
|
38
|
+
const amountBN = typeof amount === 'bigint' ? amount : (0, parseBigInt_1.default)(amount, tokenDecimals);
|
|
39
|
+
return currentAllowanceBN > 0n && currentAllowanceBN >= amountBN;
|
|
111
40
|
}
|
|
112
|
-
function isDepositTokenApproved(accountAddress, tokenIdx, amount, vaultAddress, jsonProvider, dex) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return __generator(this, function (_b) {
|
|
116
|
-
switch (_b.label) {
|
|
117
|
-
case 0: return [4 /*yield*/, (0, vault_1.validateVaultData)(vaultAddress, jsonProvider, dex)];
|
|
118
|
-
case 1:
|
|
119
|
-
_a = _b.sent(), vault = _a.vault, chainId = _a.chainId;
|
|
120
|
-
return [2 /*return*/, _isDepositTokenApproved(accountAddress, tokenIdx, amount, vault, chainId, jsonProvider, dex)];
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
});
|
|
41
|
+
async function isDepositTokenApproved(accountAddress, tokenIdx, amount, vaultAddress, jsonProvider, dex) {
|
|
42
|
+
const { vault, chainId } = await (0, vault_1.validateVaultData)(vaultAddress, jsonProvider, dex);
|
|
43
|
+
return _isDepositTokenApproved(accountAddress, tokenIdx, amount, vault, chainId, jsonProvider, dex);
|
|
124
44
|
}
|
|
125
45
|
exports.isDepositTokenApproved = isDepositTokenApproved;
|
|
126
|
-
function approveDepositToken(accountAddress, tokenIdx, vaultAddress,
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
: (0, parseBigInt_1.default)(amount, +tokenDecimals || 18)
|
|
145
|
-
: constants_1.MaxUint256;
|
|
146
|
-
depositGuardAddress = (_b = (_a = addresses_1.addressConfig[chainId][dex]) === null || _a === void 0 ? void 0 : _a.depositGuard.address) !== null && _b !== void 0 ? _b : '';
|
|
147
|
-
if (!((_c = overrides === null || overrides === void 0 ? void 0 : overrides.gasLimit) !== null && _c !== void 0)) return [3 /*break*/, 3];
|
|
148
|
-
_e = _c;
|
|
149
|
-
return [3 /*break*/, 5];
|
|
150
|
-
case 3:
|
|
151
|
-
_f = calculateGasMargin_1.calculateGasMargin;
|
|
152
|
-
return [4 /*yield*/, tokenContract.estimateGas.approve(depositGuardAddress, amountBN)];
|
|
153
|
-
case 4:
|
|
154
|
-
_e = _f.apply(void 0, [_g.sent()]);
|
|
155
|
-
_g.label = 5;
|
|
156
|
-
case 5:
|
|
157
|
-
gasLimit = _e;
|
|
158
|
-
return [2 /*return*/, tokenContract.approve(depositGuardAddress, amountBN, { gasLimit: gasLimit })];
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
});
|
|
46
|
+
async function approveDepositToken(accountAddress, tokenIdx, vaultAddress, signer, dex, amount, overrides) {
|
|
47
|
+
if (!signer.provider) {
|
|
48
|
+
throw new Error('Signer must be connected to a provider');
|
|
49
|
+
}
|
|
50
|
+
const jsonProvider = signer.provider;
|
|
51
|
+
const { chainId, vault } = await (0, vault_1.validateVaultData)(vaultAddress, jsonProvider, dex);
|
|
52
|
+
const token = vault[tokenIdx === 0 ? 'tokenA' : 'tokenB'];
|
|
53
|
+
const tokenContract = (0, contracts_1.getERC20Contract)(token, signer);
|
|
54
|
+
const tokenDecimals = Number(await tokenContract.decimals());
|
|
55
|
+
// eslint-disable-next-line no-nested-ternary
|
|
56
|
+
const amountBN = amount
|
|
57
|
+
? typeof amount === 'bigint'
|
|
58
|
+
? amount
|
|
59
|
+
: (0, parseBigInt_1.default)(amount, tokenDecimals || 18)
|
|
60
|
+
: ethers_1.MaxUint256;
|
|
61
|
+
const depositGuardAddress = addresses_1.addressConfig[chainId][dex]?.depositGuard.address ?? '';
|
|
62
|
+
const gasLimit = overrides?.gasLimit ?? (0, calculateGasMargin_1.calculateGasMargin)(await tokenContract.approve.estimateGas(depositGuardAddress, amountBN));
|
|
63
|
+
return tokenContract.approve(depositGuardAddress, amountBN, { gasLimit });
|
|
162
64
|
}
|
|
163
65
|
exports.approveDepositToken = approveDepositToken;
|
|
164
66
|
// eslint-disable-next-line no-underscore-dangle
|
|
165
|
-
function _getMaxDepositAmount(tokenIdx, vaultAddress, jsonProvider) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
vaultContract = (0, contracts_1.getIchiVaultContract)(vaultAddress, jsonProvider);
|
|
170
|
-
maxDepositAmount = tokenIdx === 0 ? vaultContract.deposit0Max() : vaultContract.deposit1Max();
|
|
171
|
-
return [2 /*return*/, maxDepositAmount];
|
|
172
|
-
});
|
|
173
|
-
});
|
|
67
|
+
async function _getMaxDepositAmount(tokenIdx, vaultAddress, jsonProvider) {
|
|
68
|
+
const vaultContract = (0, contracts_1.getIchiVaultContract)(vaultAddress, jsonProvider);
|
|
69
|
+
const maxDepositAmount = tokenIdx === 0 ? vaultContract.deposit0Max() : vaultContract.deposit1Max();
|
|
70
|
+
return maxDepositAmount;
|
|
174
71
|
}
|
|
175
72
|
exports._getMaxDepositAmount = _getMaxDepositAmount;
|
|
176
|
-
function getMaxDepositAmount(tokenIdx, vaultAddress, jsonProvider, dex) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
switch (_a.label) {
|
|
181
|
-
case 0: return [4 /*yield*/, (0, vault_1.validateVaultData)(vaultAddress, jsonProvider, dex)];
|
|
182
|
-
case 1:
|
|
183
|
-
_a.sent();
|
|
184
|
-
maxDepositAmount = _getMaxDepositAmount(tokenIdx, vaultAddress, jsonProvider);
|
|
185
|
-
return [2 /*return*/, maxDepositAmount];
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
});
|
|
73
|
+
async function getMaxDepositAmount(tokenIdx, vaultAddress, jsonProvider, dex) {
|
|
74
|
+
await (0, vault_1.validateVaultData)(vaultAddress, jsonProvider, dex);
|
|
75
|
+
const maxDepositAmount = _getMaxDepositAmount(tokenIdx, vaultAddress, jsonProvider);
|
|
76
|
+
return maxDepositAmount;
|
|
189
77
|
}
|
|
190
78
|
exports.getMaxDepositAmount = getMaxDepositAmount;
|
|
191
|
-
function deposit(accountAddress, amount0, amount1, vaultAddress,
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
243
|
-
return [4 /*yield*/, _getMaxDepositAmount(0, vaultAddress, jsonProvider)];
|
|
244
|
-
case 6:
|
|
245
|
-
maxDeposit0 = _g.sent();
|
|
246
|
-
return [4 /*yield*/, _getMaxDepositAmount(1, vaultAddress, jsonProvider)];
|
|
247
|
-
case 7:
|
|
248
|
-
maxDeposit1 = _g.sent();
|
|
249
|
-
if (amount0BN.gt(maxDeposit0) || amount0BN.gt(maxDeposit1)) {
|
|
250
|
-
throw new Error("Deposit amount exceeds max deposit amount: vault ".concat(vaultAddress, ", chain ").concat(chainId));
|
|
251
|
-
}
|
|
252
|
-
depositGuardAddress = (_b = (_a = addresses_1.addressConfig[chainId][dex]) === null || _a === void 0 ? void 0 : _a.depositGuard.address) !== null && _b !== void 0 ? _b : '';
|
|
253
|
-
depositGuardContract = (0, contracts_1.getDepositGuardContract)(depositGuardAddress, signer);
|
|
254
|
-
maxGasLimit = (0, calculateGasMargin_1.getGasLimit)(chainId);
|
|
255
|
-
return [4 /*yield*/, depositGuardContract.callStatic.forwardDepositToICHIVault(vaultAddress, vaultDeployerAddress, depositToken, depositAmount, ethers_1.BigNumber.from(0), accountAddress, {
|
|
256
|
-
gasLimit: maxGasLimit,
|
|
257
|
-
})];
|
|
258
|
-
case 8:
|
|
259
|
-
lpAmount = _g.sent();
|
|
260
|
-
// reduce the estimated LP amount by an acceptable slippage %, for example 1%
|
|
261
|
-
if (percentSlippage < 0.01)
|
|
262
|
-
throw new Error('Slippage parameter is less than 0.01%.');
|
|
263
|
-
if (percentSlippage > 100)
|
|
264
|
-
throw new Error('Slippage parameter is more than 100%.');
|
|
265
|
-
lpAmount = lpAmount.mul(Math.floor((100 - percentSlippage) * 1000)).div(100000);
|
|
266
|
-
if (!((_c = overrides === null || overrides === void 0 ? void 0 : overrides.gasLimit) !== null && _c !== void 0)) return [3 /*break*/, 9];
|
|
267
|
-
_e = _c;
|
|
268
|
-
return [3 /*break*/, 11];
|
|
269
|
-
case 9:
|
|
270
|
-
_f = calculateGasMargin_1.calculateGasMargin;
|
|
271
|
-
return [4 /*yield*/, depositGuardContract.estimateGas.forwardDepositToICHIVault(vaultAddress, vaultDeployerAddress, depositToken, depositAmount, lpAmount, accountAddress)];
|
|
272
|
-
case 10:
|
|
273
|
-
_e = _f.apply(void 0, [_g.sent()]);
|
|
274
|
-
_g.label = 11;
|
|
275
|
-
case 11:
|
|
276
|
-
gasLimit = _e;
|
|
277
|
-
return [4 /*yield*/, depositGuardContract.forwardDepositToICHIVault(vaultAddress, vaultDeployerAddress, depositToken, depositAmount, lpAmount, accountAddress, __assign(__assign({}, overrides), { gasLimit: gasLimit }))];
|
|
278
|
-
case 12:
|
|
279
|
-
tx = _g.sent();
|
|
280
|
-
return [2 /*return*/, tx];
|
|
281
|
-
}
|
|
282
|
-
});
|
|
79
|
+
async function deposit(accountAddress, amount0, amount1, vaultAddress, signer, dex, percentSlippage = 1, overrides) {
|
|
80
|
+
if (!signer.provider) {
|
|
81
|
+
throw new Error('Signer must be connected to a provider');
|
|
82
|
+
}
|
|
83
|
+
const jsonProvider = signer.provider;
|
|
84
|
+
const { chainId, vault } = await (0, vault_1.validateVaultData)(vaultAddress, jsonProvider, dex);
|
|
85
|
+
const vaultDeployerAddress = (0, vaultBasics_1.default)(vaultAddress, chainId, dex);
|
|
86
|
+
const token0 = vault.tokenA;
|
|
87
|
+
const token1 = vault.tokenB;
|
|
88
|
+
const isToken0Allowed = vault.allowTokenA;
|
|
89
|
+
const isToken1Allowed = vault.allowTokenB;
|
|
90
|
+
const token0Decimals = await (0, _totalBalances_1.getTokenDecimals)(token0, jsonProvider, chainId);
|
|
91
|
+
const token1Decimals = await (0, _totalBalances_1.getTokenDecimals)(token1, jsonProvider, chainId);
|
|
92
|
+
const amount0BN = typeof amount0 === 'bigint' ? amount0 : (0, parseBigInt_1.default)(amount0, token0Decimals);
|
|
93
|
+
const amount1BN = typeof amount1 === 'bigint' ? amount1 : (0, parseBigInt_1.default)(amount1, token1Decimals);
|
|
94
|
+
if (!isToken0Allowed && amount0BN > 0n) {
|
|
95
|
+
throw new Error(`Deposit of token0 is not allowed: ${chainId}, ${vaultAddress}`);
|
|
96
|
+
}
|
|
97
|
+
if (!isToken1Allowed && amount1BN > 0n) {
|
|
98
|
+
throw new Error(`Deposit of token1 is not allowed: chain ${chainId}, vault ${vaultAddress}`);
|
|
99
|
+
}
|
|
100
|
+
let depositAmount = amount0BN;
|
|
101
|
+
let depositToken = token0;
|
|
102
|
+
let tokenIndex = 0;
|
|
103
|
+
if (amount1BN > 0n) {
|
|
104
|
+
depositAmount = amount1BN;
|
|
105
|
+
depositToken = token1;
|
|
106
|
+
tokenIndex = 1;
|
|
107
|
+
}
|
|
108
|
+
const amountBN = isToken0Allowed ? amount0BN : amount1BN;
|
|
109
|
+
const isApproved = await _isDepositTokenApproved(accountAddress, tokenIndex, amountBN, vault, chainId, jsonProvider, dex);
|
|
110
|
+
if (!isApproved) {
|
|
111
|
+
throw new Error(`Deposit is not approved for token: ${depositToken}, chain ${chainId}, vault ${vaultAddress}`);
|
|
112
|
+
}
|
|
113
|
+
const tokenContract = (0, contracts_1.getERC20Contract)(depositToken, jsonProvider);
|
|
114
|
+
const userTokenBalance = await tokenContract.balanceOf(accountAddress);
|
|
115
|
+
if (userTokenBalance < depositAmount) {
|
|
116
|
+
throw new Error(`Deposit amount exceeds user token amount for token: ${depositToken}, chain ${chainId}`);
|
|
117
|
+
}
|
|
118
|
+
const maxDeposit0 = await _getMaxDepositAmount(0, vaultAddress, jsonProvider);
|
|
119
|
+
const maxDeposit1 = await _getMaxDepositAmount(1, vaultAddress, jsonProvider);
|
|
120
|
+
if (amount0BN > maxDeposit0 || amount0BN > maxDeposit1) {
|
|
121
|
+
throw new Error(`Deposit amount exceeds max deposit amount: vault ${vaultAddress}, chain ${chainId}`);
|
|
122
|
+
}
|
|
123
|
+
// obtain Deposit Guard contract
|
|
124
|
+
const depositGuardAddress = addresses_1.addressConfig[chainId][dex]?.depositGuard.address ?? '';
|
|
125
|
+
const depositGuardContract = (0, contracts_1.getDepositGuardContract)(depositGuardAddress, signer);
|
|
126
|
+
const maxGasLimit = (0, calculateGasMargin_1.getGasLimit)(chainId);
|
|
127
|
+
// the first call: get estimated LP amount
|
|
128
|
+
let lpAmount = await depositGuardContract.forwardDepositToICHIVault.staticCall(vaultAddress, vaultDeployerAddress, depositToken, depositAmount, 0n, accountAddress, {
|
|
129
|
+
gasLimit: maxGasLimit,
|
|
283
130
|
});
|
|
131
|
+
// reduce the estimated LP amount by an acceptable slippage %, for example 1%
|
|
132
|
+
if (percentSlippage < 0.01)
|
|
133
|
+
throw new Error('Slippage parameter is less than 0.01%.');
|
|
134
|
+
if (percentSlippage > 100)
|
|
135
|
+
throw new Error('Slippage parameter is more than 100%.');
|
|
136
|
+
lpAmount = (0, amountWithSlippage_1.default)(lpAmount, percentSlippage);
|
|
137
|
+
const gasLimit = overrides?.gasLimit ??
|
|
138
|
+
(0, calculateGasMargin_1.calculateGasMargin)(await depositGuardContract.forwardDepositToICHIVault.estimateGas(vaultAddress, vaultDeployerAddress, depositToken, depositAmount, lpAmount, accountAddress));
|
|
139
|
+
// the second call: actual deposit transaction
|
|
140
|
+
const tx = await depositGuardContract.forwardDepositToICHIVault(vaultAddress, vaultDeployerAddress, depositToken, depositAmount, lpAmount, accountAddress, {
|
|
141
|
+
...overrides,
|
|
142
|
+
gasLimit,
|
|
143
|
+
});
|
|
144
|
+
return tx;
|
|
284
145
|
}
|
|
285
146
|
exports.deposit = deposit;
|
|
286
|
-
function depositNativeToken(accountAddress, amount0, amount1, vaultAddress,
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
case 8:
|
|
362
|
-
lpAmount = _h.sent();
|
|
363
|
-
// reduce the estimated LP amount by an acceptable slippage %, for example 1%
|
|
364
|
-
if (percentSlippage < 0.01)
|
|
365
|
-
throw new Error('Slippage parameter is less than 0.01%.');
|
|
366
|
-
if (percentSlippage > 100)
|
|
367
|
-
throw new Error('Slippage parameter is more than 100%.');
|
|
368
|
-
lpAmount = (0, amountWithSlippage_1.default)(lpAmount, percentSlippage);
|
|
369
|
-
if (!((_c = overrides === null || overrides === void 0 ? void 0 : overrides.gasLimit) !== null && _c !== void 0)) return [3 /*break*/, 9];
|
|
370
|
-
_f = _c;
|
|
371
|
-
return [3 /*break*/, 11];
|
|
372
|
-
case 9:
|
|
373
|
-
_g = calculateGasMargin_1.calculateGasMargin;
|
|
374
|
-
return [4 /*yield*/, depositGuardContract.estimateGas.forwardNativeDepositToICHIVault(vaultAddress, vaultDeployerAddress, lpAmount, accountAddress, {
|
|
375
|
-
value: depositAmount,
|
|
376
|
-
})];
|
|
377
|
-
case 10:
|
|
378
|
-
_f = _g.apply(void 0, [_h.sent()]);
|
|
379
|
-
_h.label = 11;
|
|
380
|
-
case 11:
|
|
381
|
-
gasLimit = _f;
|
|
382
|
-
return [4 /*yield*/, depositGuardContract.forwardNativeDepositToICHIVault(vaultAddress, vaultDeployerAddress, lpAmount, accountAddress, __assign(__assign({ value: depositAmount }, overrides), { gasLimit: gasLimit }))];
|
|
383
|
-
case 12:
|
|
384
|
-
tx = _h.sent();
|
|
385
|
-
return [2 /*return*/, tx];
|
|
386
|
-
}
|
|
387
|
-
});
|
|
147
|
+
async function depositNativeToken(accountAddress, amount0, amount1, vaultAddress, signer, dex, percentSlippage = 1, overrides) {
|
|
148
|
+
if (!signer.provider) {
|
|
149
|
+
throw new Error('Signer must be connected to a provider');
|
|
150
|
+
}
|
|
151
|
+
const jsonProvider = signer.provider;
|
|
152
|
+
const { chainId, vault } = await (0, vault_1.validateVaultData)(vaultAddress, jsonProvider, dex);
|
|
153
|
+
if (chainId === types_1.SupportedChainId.celo) {
|
|
154
|
+
throw new Error(`This function is not supported on chain ${chainId}`);
|
|
155
|
+
}
|
|
156
|
+
if (addresses_1.addressConfig[chainId][dex]?.depositGuard.version !== 2) {
|
|
157
|
+
throw new Error(`Unsupported function for vault ${vaultAddress} on chain ${chainId} and dex ${dex}`);
|
|
158
|
+
}
|
|
159
|
+
const vaultDeployerAddress = (0, vaultBasics_1.default)(vaultAddress, chainId, dex);
|
|
160
|
+
const token0 = vault.tokenA;
|
|
161
|
+
const token1 = vault.tokenB;
|
|
162
|
+
const isToken0Allowed = vault.allowTokenA;
|
|
163
|
+
const isToken1Allowed = vault.allowTokenB;
|
|
164
|
+
const token0Contract = (0, contracts_1.getERC20Contract)(token0, signer);
|
|
165
|
+
const token1Contract = (0, contracts_1.getERC20Contract)(token1, signer);
|
|
166
|
+
const token0Decimals = Number(await token0Contract.decimals());
|
|
167
|
+
const token1Decimals = Number(await token1Contract.decimals());
|
|
168
|
+
const amount0BN = typeof amount0 === 'bigint' ? amount0 : (0, parseBigInt_1.default)(amount0, token0Decimals);
|
|
169
|
+
const amount1BN = typeof amount1 === 'bigint' ? amount1 : (0, parseBigInt_1.default)(amount1, token1Decimals);
|
|
170
|
+
if (!isToken0Allowed && amount0BN > 0n) {
|
|
171
|
+
throw new Error(`Deposit of token0 is not allowed: ${chainId}, ${vaultAddress}`);
|
|
172
|
+
}
|
|
173
|
+
if (!isToken1Allowed && amount1BN > 0n) {
|
|
174
|
+
throw new Error(`Deposit of token1 is not allowed: ${chainId}, ${vaultAddress}`);
|
|
175
|
+
}
|
|
176
|
+
let depositAmount = amount0BN;
|
|
177
|
+
let depositToken = token0;
|
|
178
|
+
if (amount1BN > 0n) {
|
|
179
|
+
depositAmount = amount1BN;
|
|
180
|
+
depositToken = token1;
|
|
181
|
+
}
|
|
182
|
+
// obtain Deposit Guard contract
|
|
183
|
+
const depositGuardAddress = addresses_1.addressConfig[chainId][dex]?.depositGuard.address;
|
|
184
|
+
if (!depositGuardAddress) {
|
|
185
|
+
throw new Error(`Deposit Guard not found for vault ${vaultAddress} on chain ${chainId} and dex ${dex}`);
|
|
186
|
+
}
|
|
187
|
+
const depositGuardContract = (0, contracts_1.getDepositGuardContract)(depositGuardAddress, signer);
|
|
188
|
+
const wrappedNative = chainId === types_1.SupportedChainId.hedera
|
|
189
|
+
? '0x0000000000000000000000000000000000163b5a'
|
|
190
|
+
: await depositGuardContract.WRAPPED_NATIVE();
|
|
191
|
+
if (wrappedNative.toLowerCase() !== depositToken.toLowerCase()) {
|
|
192
|
+
throw new Error('Deposit token is not wrapped native token');
|
|
193
|
+
}
|
|
194
|
+
const userNativeTokenBalance = await jsonProvider.getBalance(accountAddress);
|
|
195
|
+
if (userNativeTokenBalance < depositAmount) {
|
|
196
|
+
throw new Error(`Deposit amount exceeds user native token amount on chain ${chainId}`);
|
|
197
|
+
}
|
|
198
|
+
const maxGasLimit = (0, calculateGasMargin_1.getGasLimit)(chainId);
|
|
199
|
+
if (chainId === types_1.SupportedChainId.hedera) {
|
|
200
|
+
depositAmount = depositAmount * BigInt(1e10);
|
|
201
|
+
}
|
|
202
|
+
// the first call: get estimated LP amount
|
|
203
|
+
let lpAmount = await depositGuardContract.forwardNativeDepositToICHIVault.staticCall(vaultAddress, vaultDeployerAddress, 0n, accountAddress, {
|
|
204
|
+
value: depositAmount,
|
|
205
|
+
gasLimit: maxGasLimit,
|
|
206
|
+
});
|
|
207
|
+
// reduce the estimated LP amount by an acceptable slippage %, for example 1%
|
|
208
|
+
if (percentSlippage < 0.01)
|
|
209
|
+
throw new Error('Slippage parameter is less than 0.01%.');
|
|
210
|
+
if (percentSlippage > 100)
|
|
211
|
+
throw new Error('Slippage parameter is more than 100%.');
|
|
212
|
+
lpAmount = (0, amountWithSlippage_1.default)(lpAmount, percentSlippage);
|
|
213
|
+
const gasLimit = overrides?.gasLimit ??
|
|
214
|
+
(0, calculateGasMargin_1.calculateGasMargin)(await depositGuardContract.forwardNativeDepositToICHIVault.estimateGas(vaultAddress, vaultDeployerAddress, lpAmount, accountAddress, {
|
|
215
|
+
value: depositAmount,
|
|
216
|
+
}));
|
|
217
|
+
// the second call: actual deposit transaction
|
|
218
|
+
const tx = await depositGuardContract.forwardNativeDepositToICHIVault(vaultAddress, vaultDeployerAddress, lpAmount, accountAddress, {
|
|
219
|
+
value: depositAmount,
|
|
220
|
+
...overrides,
|
|
221
|
+
gasLimit,
|
|
388
222
|
});
|
|
223
|
+
return tx;
|
|
389
224
|
}
|
|
390
225
|
exports.depositNativeToken = depositNativeToken;
|
|
391
226
|
//# sourceMappingURL=deposit.js.map
|