@dripfi/drip-sdk 1.4.12 → 1.4.14
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 +14 -13
- package/dist/PerqApi.js +1 -1
- package/dist/PerqSdk.d.ts +0 -2
- package/dist/PerqSdk.js +0 -3
- package/dist/subpackages/LitePackage.d.ts +2 -1
- package/dist/subpackages/LitePackage.js +2 -3
- package/dist/types/ChainId.d.ts +2 -1
- package/dist/types/ChainId.js +2 -1
- package/dist/types/PerqConfig.d.ts +1 -1
- package/dist/types/PerqConfig.js +1 -1
- package/package.json +2 -2
- package/dist/subpackages/V2Package.d.ts +0 -24
- package/dist/subpackages/V2Package.js +0 -207
package/README.md
CHANGED
@@ -65,17 +65,17 @@ Core methods available directly on the SDK instance:
|
|
65
65
|
|
66
66
|
Access Lite vault methods through `sdk.lite`:
|
67
67
|
|
68
|
-
| Method
|
69
|
-
|
|
70
|
-
| `getAllVaults(): Promise<VaultData[]>`
|
71
|
-
| `getVaultDetails(vaultAddress: string, onChainProjectId: number): Promise<VaultData>`
|
72
|
-
| `deposit(tokenAddress: string, vaultAddress: string, onChainProjectId: number, amount: string): Promise<string>`
|
73
|
-
| `withdraw(tokenAddress: string, vaultAddress: string, onChainProjectId: number, amount: string): Promise<string>`
|
74
|
-
| `swapAndDeposit(fromTokenAddress: string, toTokenAddress: string, amount: string, vaultAddress: string, onChainProjectId: number): Promise<string>`
|
75
|
-
| `wrapAndDepositEth(vaultAddress: string, onChainProjectId: number, amount: string): Promise<string>`
|
76
|
-
| `getSwapAndDepositAllowance(tokenAddress: string): Promise<string>`
|
77
|
-
| `approveSwapAndDeposit(tokenAddress: string, amount: string): Promise<string>`
|
78
|
-
| `getExpectedSwapResult(fromTokenAddress: string,toTokenAddress: string,amount: string,decimals: number): Promise<string>`
|
68
|
+
| Method | Description |
|
69
|
+
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
|
70
|
+
| `getAllVaults(): Promise<VaultData[]>` | Fetches all Lite vaults. |
|
71
|
+
| `getVaultDetails(vaultAddress: string, onChainProjectId: number): Promise<VaultData>` | Fetches Lite vault details. |
|
72
|
+
| `deposit(tokenAddress: string, vaultAddress: string, onChainProjectId: number, amount: string): Promise<string>` | Deposits into Lite vault. |
|
73
|
+
| `withdraw(tokenAddress: string, vaultAddress: string, onChainProjectId: number, amount: string): Promise<string>` | Withdraws from Lite vault. |
|
74
|
+
| `swapAndDeposit(fromTokenAddress: string, toTokenAddress: string, amount: string, vaultAddress: string, onChainProjectId: number): Promise<string>` | Swaps and deposits into Lite vault. |
|
75
|
+
| `wrapAndDepositEth(vaultAddress: string, onChainProjectId: number, amount: string): Promise<string>` | Wraps ETH and deposits. |
|
76
|
+
| `getSwapAndDepositAllowance(tokenAddress: string): Promise<string>` | Fetches the allowance for swap and deposit operations. |
|
77
|
+
| `approveSwapAndDeposit(tokenAddress: string, amount: string): Promise<string>` | Approves a token for swap and deposit operations. |
|
78
|
+
| `getExpectedSwapResult(fromTokenAddress: string,toTokenAddress: string,amount: string,decimals: number, chainId: PerqSupportedChainId): Promise<string>` | Calculates the expected result of a swap operation on a specific chain. |
|
79
79
|
|
80
80
|
## Loyalty Cards
|
81
81
|
|
@@ -431,7 +431,6 @@ type NonceEnrichedSignedPayload<T> = {
|
|
431
431
|
|
432
432
|
type PerqConfig = {
|
433
433
|
route: string;
|
434
|
-
spoolSdkConfig: SDKConfig;
|
435
434
|
yelayLiteSdkConfig: sdkConfig;
|
436
435
|
perqTokenAddress: string;
|
437
436
|
perqTokenRecyclerAddress: string;
|
@@ -632,12 +631,14 @@ const BASE_CHAIN_ID = 8453;
|
|
632
631
|
const ETHEREUM_CHAIN_ID = 1;
|
633
632
|
const ETHEREUM_SEPOLIA_CHAIN_ID = 11155111;
|
634
633
|
const ARBITRUM_CHAIN_ID = 42161;
|
634
|
+
const SONIC_CHAIN_ID = 146;
|
635
635
|
|
636
636
|
type ChainId =
|
637
637
|
| typeof BASE_CHAIN_ID
|
638
638
|
| typeof ETHEREUM_CHAIN_ID
|
639
639
|
| typeof ETHEREUM_SEPOLIA_CHAIN_ID
|
640
|
-
| typeof ARBITRUM_CHAIN_ID
|
640
|
+
| typeof ARBITRUM_CHAIN_ID
|
641
|
+
| typeof SONIC_CHAIN_ID;
|
641
642
|
|
642
643
|
type Earnings = {
|
643
644
|
[vaultAddress: string]: {
|
package/dist/PerqApi.js
CHANGED
@@ -315,7 +315,7 @@ class PerqApi {
|
|
315
315
|
const res = await fetch(`${this.perqSdk.perqConfig.route}/api-be/api/user/podWallets/${walletAddress}`);
|
316
316
|
if (res.ok) {
|
317
317
|
const data = await res.json();
|
318
|
-
return data
|
318
|
+
return data;
|
319
319
|
}
|
320
320
|
else {
|
321
321
|
throw Error(`${await res.text()}`);
|
package/dist/PerqSdk.d.ts
CHANGED
@@ -4,7 +4,6 @@ import PerqApi from './PerqApi';
|
|
4
4
|
import { PerqSwapAndRecyclerContract, PerqTokenRecyclerContract, PerqVestingContract } from './contracts';
|
5
5
|
import VestingPackage from './subpackages/VestingPackage';
|
6
6
|
import LitePackage from './subpackages/LitePackage';
|
7
|
-
import V2Package from './subpackages/V2Package';
|
8
7
|
import RecyclerPackage from './subpackages/RecyclerPackage';
|
9
8
|
import LoyaltyCardsPackage from './subpackages/LoyaltyCardsPackage';
|
10
9
|
import { YelayLiteSdk } from '@yelay-lite/sdk';
|
@@ -18,7 +17,6 @@ export default class PerqSdk {
|
|
18
17
|
perqApi: PerqApi;
|
19
18
|
signer?: Signer;
|
20
19
|
lite: LitePackage;
|
21
|
-
v2: V2Package;
|
22
20
|
vesting: VestingPackage;
|
23
21
|
recycler: RecyclerPackage;
|
24
22
|
loyaltyCards: LoyaltyCardsPackage;
|
package/dist/PerqSdk.js
CHANGED
@@ -7,7 +7,6 @@ const PerqApi_1 = __importDefault(require("./PerqApi"));
|
|
7
7
|
const contracts_1 = require("./contracts");
|
8
8
|
const VestingPackage_1 = __importDefault(require("./subpackages/VestingPackage"));
|
9
9
|
const LitePackage_1 = __importDefault(require("./subpackages/LitePackage"));
|
10
|
-
const V2Package_1 = __importDefault(require("./subpackages/V2Package"));
|
11
10
|
const RecyclerPackage_1 = __importDefault(require("./subpackages/RecyclerPackage"));
|
12
11
|
const LoyaltyCardsPackage_1 = __importDefault(require("./subpackages/LoyaltyCardsPackage"));
|
13
12
|
const sdk_1 = require("@yelay-lite/sdk");
|
@@ -20,7 +19,6 @@ class PerqSdk {
|
|
20
19
|
perqApi;
|
21
20
|
signer;
|
22
21
|
lite;
|
23
|
-
v2;
|
24
22
|
vesting;
|
25
23
|
recycler;
|
26
24
|
loyaltyCards;
|
@@ -44,7 +42,6 @@ class PerqSdk {
|
|
44
42
|
}
|
45
43
|
this.vesting = new VestingPackage_1.default(this);
|
46
44
|
this.lite = new LitePackage_1.default(this);
|
47
|
-
this.v2 = new V2Package_1.default(this);
|
48
45
|
this.recycler = new RecyclerPackage_1.default(this);
|
49
46
|
this.loyaltyCards = new LoyaltyCardsPackage_1.default(this);
|
50
47
|
this.tokenUtils = new TokenUtilsPackage_1.default(this);
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import PerqSdk from '../PerqSdk';
|
2
2
|
import MigrationOption from '../types/MigrationOption';
|
3
|
+
import { PerqSupportedChainId } from '../types/PerqConfig';
|
3
4
|
export default class LitePackage {
|
4
5
|
perqSdk: PerqSdk;
|
5
6
|
constructor(perqSdk: PerqSdk);
|
@@ -10,7 +11,7 @@ export default class LitePackage {
|
|
10
11
|
swapAndDeposit(fromTokenAddress: string, toTokenAddress: string, amount: string, vaultAddress: string, onChainProjectId: number): Promise<string>;
|
11
12
|
withdraw(tokenAddress: string, vaultAddress: string, onChainProjectId: number, amount: string): Promise<string>;
|
12
13
|
wrapAndDepositEth(vaultAddress: string, onChainProjectId: number, amount: string): Promise<any>;
|
13
|
-
getExpectedSwapResult(fromTokenAddress: string, toTokenAddress: string, amount: string, decimals: number): Promise<string>;
|
14
|
+
getExpectedSwapResult(fromTokenAddress: string, toTokenAddress: string, amount: string, decimals: number, chainId: PerqSupportedChainId): Promise<string>;
|
14
15
|
getMigrationOptions(vaultAddress: string, onChainProjectId: number): Promise<MigrationOption[]>;
|
15
16
|
migrateDepositToOtherProject(tokenAddress: string, vaultAddress: string, fromProjectId: number, toProjectId: number, amount: string): Promise<string>;
|
16
17
|
}
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
const ethers_1 = require("ethers");
|
7
7
|
const ERC20TokenContract_1 = __importDefault(require("../contracts/ERC20TokenContract"));
|
8
|
-
const ChainId_1 = require("../types/ChainId");
|
9
8
|
const WETH_DECIMAL_PRECISION = 18;
|
10
9
|
class LitePackage {
|
11
10
|
perqSdk;
|
@@ -82,8 +81,8 @@ class LitePackage {
|
|
82
81
|
const res = await this.perqSdk.yelayLiteSdk.vaults.depositEth(vaultAddress, onChainProjectId, BigInt(parsedAmount.toString()));
|
83
82
|
return res.hash;
|
84
83
|
}
|
85
|
-
async getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals) {
|
86
|
-
return this.perqSdk.perqApi.getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals,
|
84
|
+
async getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals, chainId) {
|
85
|
+
return this.perqSdk.perqApi.getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals, chainId.toString());
|
87
86
|
}
|
88
87
|
async getMigrationOptions(vaultAddress, onChainProjectId) {
|
89
88
|
return this.perqSdk.perqApi.fetchMigrationOptions(vaultAddress, onChainProjectId);
|
package/dist/types/ChainId.d.ts
CHANGED
@@ -2,4 +2,5 @@ export declare const BASE_CHAIN_ID = 8453;
|
|
2
2
|
export declare const ETHEREUM_CHAIN_ID = 1;
|
3
3
|
export declare const ETHEREUM_SEPOLIA_CHAIN_ID = 11155111;
|
4
4
|
export declare const ARBITRUM_CHAIN_ID = 42161;
|
5
|
-
export
|
5
|
+
export declare const SONIC_CHAIN_ID = 146;
|
6
|
+
export type ChainId = typeof BASE_CHAIN_ID | typeof ETHEREUM_CHAIN_ID | typeof ETHEREUM_SEPOLIA_CHAIN_ID | typeof ARBITRUM_CHAIN_ID | typeof SONIC_CHAIN_ID;
|
package/dist/types/ChainId.js
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.ARBITRUM_CHAIN_ID = exports.ETHEREUM_SEPOLIA_CHAIN_ID = exports.ETHEREUM_CHAIN_ID = exports.BASE_CHAIN_ID = void 0;
|
3
|
+
exports.SONIC_CHAIN_ID = exports.ARBITRUM_CHAIN_ID = exports.ETHEREUM_SEPOLIA_CHAIN_ID = exports.ETHEREUM_CHAIN_ID = exports.BASE_CHAIN_ID = void 0;
|
4
4
|
exports.BASE_CHAIN_ID = 8453;
|
5
5
|
exports.ETHEREUM_CHAIN_ID = 1;
|
6
6
|
exports.ETHEREUM_SEPOLIA_CHAIN_ID = 11155111;
|
7
7
|
exports.ARBITRUM_CHAIN_ID = 42161;
|
8
|
+
exports.SONIC_CHAIN_ID = 146;
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { SDKConfig as SpoolSdkConfig } from '@spool.fi/spool-v2-sdk';
|
2
|
-
export declare const PERQ_SUPPORTED_CHAIN_IDS: readonly [1, 8453];
|
2
|
+
export declare const PERQ_SUPPORTED_CHAIN_IDS: readonly [1, 8453, 146];
|
3
3
|
export type PerqSupportedChainId = (typeof PERQ_SUPPORTED_CHAIN_IDS)[number];
|
4
4
|
type PerqConfig = {
|
5
5
|
route: string;
|
package/dist/types/PerqConfig.js
CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DEVELOPMENT = exports.PRODUCTION = exports.PERQ_SUPPORTED_CHAIN_IDS = void 0;
|
4
4
|
const spool_v2_sdk_1 = require("@spool.fi/spool-v2-sdk");
|
5
5
|
const ChainId_1 = require("./ChainId");
|
6
|
-
exports.PERQ_SUPPORTED_CHAIN_IDS = [ChainId_1.ETHEREUM_CHAIN_ID, ChainId_1.BASE_CHAIN_ID];
|
6
|
+
exports.PERQ_SUPPORTED_CHAIN_IDS = [ChainId_1.ETHEREUM_CHAIN_ID, ChainId_1.BASE_CHAIN_ID, ChainId_1.SONIC_CHAIN_ID];
|
7
7
|
exports.PRODUCTION = {
|
8
8
|
route: 'https://perq.finance',
|
9
9
|
spoolSdkConfig: (0, spool_v2_sdk_1.getMainnetConfig)('https://subgraph.satsuma-prod.com/49eb322da234/solidant/spool-v2/api'),
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@dripfi/drip-sdk",
|
3
|
-
"version": "1.4.
|
3
|
+
"version": "1.4.14",
|
4
4
|
"description": "Drip SDK",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"types": "dist/index.d.ts",
|
@@ -13,7 +13,7 @@
|
|
13
13
|
"pretty": "prettier --write \"./**/*.{js,jsx,mjs,cjs,ts,tsx,json}\""
|
14
14
|
},
|
15
15
|
"dependencies": {
|
16
|
-
"@yelay-lite/sdk": "1.0.
|
16
|
+
"@yelay-lite/sdk": "1.0.7",
|
17
17
|
"@spool.fi/spool-v2-sdk": "2.0.53",
|
18
18
|
"ethers": "^5.7.2"
|
19
19
|
},
|
@@ -1,24 +0,0 @@
|
|
1
|
-
import { UserVaultBalance, VaultData } from '../types';
|
2
|
-
import PerqSdk from '../PerqSdk';
|
3
|
-
export default class V2Package {
|
4
|
-
perqSdk: PerqSdk;
|
5
|
-
constructor(perqSdk: PerqSdk);
|
6
|
-
getPoolDetails(vaultAddress: string): Promise<VaultData>;
|
7
|
-
newDeposit(tokenAddress: string, vaultAddress: string, amount: string): Promise<string>;
|
8
|
-
deposit(tokenAddress: string, vaultAddress: string, amount: string): Promise<string>;
|
9
|
-
private doDeposit;
|
10
|
-
getSwapAndDepositTokenAllowanceForCurrency(tokenAddress: string): Promise<string>;
|
11
|
-
getExpectedSwapResult(fromTokenAddress: string, toTokenAddress: string, amount: string, decimals: number): Promise<string>;
|
12
|
-
getUserPoolBalance(vaultAddress: string): Promise<UserVaultBalance>;
|
13
|
-
fastWithdraw(vaultAddress: string, amountToWithdraw?: string): Promise<string>;
|
14
|
-
swapAndDeposit(fromTokenAddress: string, toTokenAddress: string, fromTokenAmount: string, vaultAddress: string, ethAmount?: string): Promise<string>;
|
15
|
-
newSwapAndDeposit(fromTokenAddress: string, toTokenAddress: string, fromTokenAmount: string, vaultAddress: string, ethAmount?: string): Promise<string>;
|
16
|
-
private doSwapAndDeposit;
|
17
|
-
withdraw(vaultAddress: string, amountToWithdraw?: string): Promise<string>;
|
18
|
-
claimWithdraws(vaultAddress: string): Promise<string>;
|
19
|
-
approveTokenForSwapAndDeposit(tokenAddress: string, amount: string): Promise<string>;
|
20
|
-
approveTokenForDeposit(tokenAddress: string, amount: string): Promise<string>;
|
21
|
-
private generateRedeemBagStruct;
|
22
|
-
private getTokenAllowanceForDeposit;
|
23
|
-
getTokenAllowanceForCurrency(tokenAddress: string): Promise<string>;
|
24
|
-
}
|
@@ -1,207 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
const ethers_1 = require("ethers");
|
7
|
-
const ERC20TokenContract_1 = __importDefault(require("../contracts/ERC20TokenContract"));
|
8
|
-
const ChainId_1 = require("../types/ChainId");
|
9
|
-
class V2Package {
|
10
|
-
perqSdk;
|
11
|
-
constructor(perqSdk) {
|
12
|
-
this.perqSdk = perqSdk;
|
13
|
-
}
|
14
|
-
async getPoolDetails(vaultAddress) {
|
15
|
-
return this.perqSdk.perqApi.fetchPoolV2Details(vaultAddress);
|
16
|
-
}
|
17
|
-
async newDeposit(tokenAddress, vaultAddress, amount) {
|
18
|
-
return this.doDeposit(tokenAddress, vaultAddress, amount, false);
|
19
|
-
}
|
20
|
-
async deposit(tokenAddress, vaultAddress, amount) {
|
21
|
-
return this.doDeposit(tokenAddress, vaultAddress, amount, true);
|
22
|
-
}
|
23
|
-
async doDeposit(tokenAddress, vaultAddress, amount, checkAllowance) {
|
24
|
-
if (!this.perqSdk.signer) {
|
25
|
-
throw Error('No signer provided');
|
26
|
-
}
|
27
|
-
const tokenContract = new ERC20TokenContract_1.default(tokenAddress, this.perqSdk.signer);
|
28
|
-
const decimals = await tokenContract.getPrecission();
|
29
|
-
const amountWithDecimals = parseFloat(parseFloat(amount).toFixed(decimals));
|
30
|
-
if (checkAllowance) {
|
31
|
-
const allowance = await tokenContract.getAllowance(await this.perqSdk.signer.getAddress(), this.perqSdk.perqConfig.smartVaultManagerContractAddress);
|
32
|
-
const currentTokenAllowance = parseFloat(ethers_1.ethers.utils.formatUnits(allowance, decimals));
|
33
|
-
if (amountWithDecimals > currentTokenAllowance) {
|
34
|
-
await this.approveTokenForDeposit(tokenAddress, amountWithDecimals.toString());
|
35
|
-
}
|
36
|
-
}
|
37
|
-
const amountToDeposit = ethers_1.ethers.utils.parseUnits(amountWithDecimals.toString(), decimals);
|
38
|
-
const signerAddress = await this.perqSdk.signer.getAddress();
|
39
|
-
if (!signerAddress) {
|
40
|
-
throw Error('Error fetching address');
|
41
|
-
}
|
42
|
-
const depositBagStruct = {
|
43
|
-
smartVault: vaultAddress.toLowerCase(),
|
44
|
-
assets: [amountToDeposit],
|
45
|
-
receiver: signerAddress,
|
46
|
-
referral: ethers_1.ethers.constants.AddressZero,
|
47
|
-
doFlush: false,
|
48
|
-
};
|
49
|
-
const depositTx = await this.perqSdk.spoolSdk.deposit(depositBagStruct);
|
50
|
-
const txReceipt = await depositTx.wait();
|
51
|
-
return txReceipt.transactionHash;
|
52
|
-
}
|
53
|
-
async getSwapAndDepositTokenAllowanceForCurrency(tokenAddress) {
|
54
|
-
if (!this.perqSdk.signer) {
|
55
|
-
throw Error('No signer provided');
|
56
|
-
}
|
57
|
-
const tokenContract = new ERC20TokenContract_1.default(tokenAddress, this.perqSdk.signer);
|
58
|
-
const allowance = await tokenContract.getAllowance(await this.perqSdk.signer.getAddress(), this.perqSdk.perqConfig.swapAndDepositContractAddress);
|
59
|
-
return allowance.toString();
|
60
|
-
}
|
61
|
-
async getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals) {
|
62
|
-
return this.perqSdk.perqApi.getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals, ChainId_1.ETHEREUM_CHAIN_ID.toString());
|
63
|
-
}
|
64
|
-
async getUserPoolBalance(vaultAddress) {
|
65
|
-
if (!this.perqSdk.signer) {
|
66
|
-
throw Error('No signer provided');
|
67
|
-
}
|
68
|
-
const userAddress = await this.perqSdk.signer.getAddress();
|
69
|
-
return await this.perqSdk.perqApi.fetchV2PoolUserBalance(userAddress.toLowerCase(), vaultAddress.toLowerCase());
|
70
|
-
}
|
71
|
-
async fastWithdraw(vaultAddress, amountToWithdraw) {
|
72
|
-
if (!this.perqSdk.signer) {
|
73
|
-
throw Error('No signer provided');
|
74
|
-
}
|
75
|
-
const userAddress = await this.perqSdk.signer.getAddress();
|
76
|
-
const vault = await this.getPoolDetails(vaultAddress);
|
77
|
-
const redeemBagStruct = await this.generateRedeemBagStruct(vault, userAddress, amountToWithdraw);
|
78
|
-
const currentBlockNumber = await this.perqSdk.signer.provider?.getBlockNumber();
|
79
|
-
if (!currentBlockNumber) {
|
80
|
-
throw Error('Error fetching block number');
|
81
|
-
}
|
82
|
-
const redeemTx = await this.perqSdk.spoolSdk?.redeemFast(redeemBagStruct, userAddress, currentBlockNumber);
|
83
|
-
const txReceipt = await redeemTx.wait();
|
84
|
-
return txReceipt.transactionHash;
|
85
|
-
}
|
86
|
-
async swapAndDeposit(fromTokenAddress, toTokenAddress, fromTokenAmount, vaultAddress, ethAmount) {
|
87
|
-
return this.doSwapAndDeposit(fromTokenAddress, toTokenAddress, fromTokenAmount, vaultAddress, true, ethAmount);
|
88
|
-
}
|
89
|
-
async newSwapAndDeposit(fromTokenAddress, toTokenAddress, fromTokenAmount, vaultAddress, ethAmount) {
|
90
|
-
return this.doSwapAndDeposit(fromTokenAddress, toTokenAddress, fromTokenAmount, vaultAddress, false, ethAmount);
|
91
|
-
}
|
92
|
-
async doSwapAndDeposit(fromTokenAddress, toTokenAddress, fromTokenAmount, vaultAddress, checkAllowance, ethAmount) {
|
93
|
-
if (!this.perqSdk.signer) {
|
94
|
-
throw Error('No signer provided');
|
95
|
-
}
|
96
|
-
const userAddress = await this.perqSdk.signer.getAddress();
|
97
|
-
const tokenContract = new ERC20TokenContract_1.default(fromTokenAddress, this.perqSdk.signer);
|
98
|
-
const decimals = await tokenContract.getPrecission();
|
99
|
-
const amountWithDecimals = parseFloat(parseFloat(fromTokenAmount).toFixed(decimals));
|
100
|
-
if (amountWithDecimals > 0 && checkAllowance) {
|
101
|
-
const allowance = await tokenContract.getAllowance(await this.perqSdk.signer.getAddress(), this.perqSdk.perqConfig.swapAndDepositContractAddress);
|
102
|
-
const currentTokenAllowance = parseFloat(ethers_1.ethers.utils.formatUnits(allowance, decimals));
|
103
|
-
if (amountWithDecimals > currentTokenAllowance) {
|
104
|
-
await this.approveTokenForSwapAndDeposit(fromTokenAddress, amountWithDecimals.toString());
|
105
|
-
}
|
106
|
-
}
|
107
|
-
const fromToken = ethers_1.ethers.utils.parseUnits(amountWithDecimals.toString(), decimals);
|
108
|
-
const swapInfo = await this.perqSdk.perqApi.getSwapInfo(fromTokenAddress, toTokenAddress, fromToken, this.perqSdk.perqConfig.ethereumSwapperAddress, ChainId_1.ETHEREUM_CHAIN_ID);
|
109
|
-
const swapDepositBagStruct = {
|
110
|
-
inTokens: [fromTokenAddress],
|
111
|
-
inAmounts: [fromToken],
|
112
|
-
smartVault: vaultAddress.toLowerCase(),
|
113
|
-
swapInfo,
|
114
|
-
receiver: userAddress,
|
115
|
-
referral: ethers_1.ethers.constants.AddressZero,
|
116
|
-
doFlush: false,
|
117
|
-
};
|
118
|
-
const swapAndDepositRequest = ethAmount
|
119
|
-
? await this.perqSdk.spoolSdk.swapAndDeposit(swapDepositBagStruct, {
|
120
|
-
value: ethers_1.ethers.utils.parseEther(ethAmount),
|
121
|
-
})
|
122
|
-
: await this.perqSdk.spoolSdk.swapAndDeposit(swapDepositBagStruct);
|
123
|
-
const txReceipt = await swapAndDepositRequest.wait();
|
124
|
-
return txReceipt?.transactionHash;
|
125
|
-
}
|
126
|
-
async withdraw(vaultAddress, amountToWithdraw) {
|
127
|
-
if (!this.perqSdk.signer) {
|
128
|
-
throw Error('No signer provided');
|
129
|
-
}
|
130
|
-
const userAddress = await this.perqSdk.signer.getAddress();
|
131
|
-
const vault = await this.getPoolDetails(vaultAddress);
|
132
|
-
const redeemBagStruct = await this.generateRedeemBagStruct(vault, userAddress, amountToWithdraw);
|
133
|
-
const redeemTx = await this.perqSdk.spoolSdk.redeem(redeemBagStruct, userAddress, false);
|
134
|
-
const redeemTxReceipt = await redeemTx.wait();
|
135
|
-
return redeemTxReceipt.transactionHash;
|
136
|
-
}
|
137
|
-
async claimWithdraws(vaultAddress) {
|
138
|
-
if (!this.perqSdk.signer) {
|
139
|
-
throw Error('No signer provided');
|
140
|
-
}
|
141
|
-
const userAddress = await this.perqSdk.signer.getAddress();
|
142
|
-
const wnfts = await this.perqSdk.perqApi.fetchEnrichedUserWNFTForPool(vaultAddress, userAddress);
|
143
|
-
//! Shares come as Strings instead of BigNumber from our Backend
|
144
|
-
const nftIds = wnfts
|
145
|
-
.filter((item) => !item.isBurned && ethers_1.BigNumber.from(item.shares).gt(ethers_1.BigNumber.from('0')) && item.isDHWFinished)
|
146
|
-
.map((item) => item.nftId.toString());
|
147
|
-
const nftAmounts = wnfts
|
148
|
-
.filter((item) => !item.isBurned && ethers_1.BigNumber.from(item.shares).gt(ethers_1.BigNumber.from('0')) && item.isDHWFinished)
|
149
|
-
.map((item) => item.shares.toString());
|
150
|
-
const claimWithdrawTx = await this.perqSdk.spoolSdk.claimWithdrawal(vaultAddress.toLowerCase(), nftIds, nftAmounts, userAddress);
|
151
|
-
const txReceipt = await claimWithdrawTx.wait();
|
152
|
-
return txReceipt.transactionHash;
|
153
|
-
}
|
154
|
-
async approveTokenForSwapAndDeposit(tokenAddress, amount) {
|
155
|
-
if (!this.perqSdk.signer) {
|
156
|
-
throw Error('No signer provided');
|
157
|
-
}
|
158
|
-
const tokenContract = new ERC20TokenContract_1.default(tokenAddress, this.perqSdk.signer);
|
159
|
-
const decimals = await tokenContract.getPrecission();
|
160
|
-
const parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals);
|
161
|
-
return await tokenContract.approveToken(this.perqSdk.perqConfig.swapAndDepositContractAddress, parsedAmount);
|
162
|
-
}
|
163
|
-
async approveTokenForDeposit(tokenAddress, amount) {
|
164
|
-
if (!this.perqSdk.signer) {
|
165
|
-
throw Error('No signer provided');
|
166
|
-
}
|
167
|
-
const tokenContract = new ERC20TokenContract_1.default(tokenAddress, this.perqSdk.signer);
|
168
|
-
const decimals = await tokenContract.getPrecission();
|
169
|
-
const parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals);
|
170
|
-
return await tokenContract.approveToken(this.perqSdk.perqConfig.smartVaultManagerContractAddress, parsedAmount);
|
171
|
-
}
|
172
|
-
async generateRedeemBagStruct(vault, signerAddress, amountToWithdraw) {
|
173
|
-
if (!this.perqSdk.spoolSdk) {
|
174
|
-
throw Error('No spool sdk provided');
|
175
|
-
}
|
176
|
-
const isFullWithdraw = !amountToWithdraw;
|
177
|
-
if (isFullWithdraw) {
|
178
|
-
return this.perqSdk.spoolSdk.views.userInfo.getMaxRedeemBag({
|
179
|
-
userAddress: signerAddress.toLowerCase(),
|
180
|
-
vaultAddress: vault.vaultAddress.toLowerCase(),
|
181
|
-
});
|
182
|
-
}
|
183
|
-
else {
|
184
|
-
return this.perqSdk.spoolSdk.views.userInfo.getMinimumBurnRedeemBag({
|
185
|
-
userAddress: signerAddress.toLowerCase(),
|
186
|
-
vaultAddress: vault.vaultAddress.toLowerCase(),
|
187
|
-
assetsToWithdraw: [Number(amountToWithdraw)],
|
188
|
-
});
|
189
|
-
}
|
190
|
-
}
|
191
|
-
async getTokenAllowanceForDeposit(tokenAddress) {
|
192
|
-
if (!this.perqSdk.signer) {
|
193
|
-
throw Error('No signer provided');
|
194
|
-
}
|
195
|
-
const tokenContract = new ERC20TokenContract_1.default(tokenAddress, this.perqSdk.signer);
|
196
|
-
const allowance = await tokenContract.getAllowance(await this.perqSdk.signer.getAddress(), this.perqSdk.perqConfig.smartVaultManagerContractAddress);
|
197
|
-
return allowance;
|
198
|
-
}
|
199
|
-
async getTokenAllowanceForCurrency(tokenAddress) {
|
200
|
-
if (!this.perqSdk.signer) {
|
201
|
-
throw Error('No signer provided');
|
202
|
-
}
|
203
|
-
const currentTokenAllowance = await this.getTokenAllowanceForDeposit(tokenAddress);
|
204
|
-
return currentTokenAllowance.toString();
|
205
|
-
}
|
206
|
-
}
|
207
|
-
exports.default = V2Package;
|