@dripfi/drip-sdk 1.4.2 → 1.4.3-yelay-lite-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/CHANGELOG.md +37 -0
- package/dist/PerqApi.d.ts +11 -5
- package/dist/PerqApi.js +70 -14
- package/dist/PerqSdk.d.ts +26 -8
- package/dist/PerqSdk.js +167 -50
- package/dist/types/DeployedProject.d.ts +3 -0
- package/dist/types/DetailedProjectData.d.ts +33 -0
- package/dist/types/DetailedProjectData.js +2 -0
- package/dist/types/LinkWalletPayload.d.ts +4 -0
- package/dist/types/LinkWalletPayload.js +2 -0
- package/dist/types/MyPerqData.d.ts +10 -5
- package/dist/types/PerqConfig.d.ts +6 -2
- package/dist/types/PerqConfig.js +15 -7
- package/dist/types/ReducedProjectData.d.ts +20 -0
- package/dist/types/ReducedProjectData.js +2 -0
- package/dist/types/VaultData.d.ts +31 -0
- package/dist/types/VaultData.js +2 -0
- package/dist/types/YelayLiteVault.d.ts +11 -0
- package/dist/types/YelayLiteVault.js +2 -0
- package/dist/types/index.d.ts +6 -1
- package/dist/utils/chains.d.ts +2 -0
- package/dist/utils/chains.js +5 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
@@ -72,3 +72,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
72
72
|
### Changed
|
73
73
|
|
74
74
|
- Export the `PerqConfig` from index.ts like recommended
|
75
|
+
|
76
|
+
## [1.4.3] - 2025-02-02
|
77
|
+
|
78
|
+
### Fixed
|
79
|
+
|
80
|
+
- Instantiation of the `SpoolSDK`
|
81
|
+
|
82
|
+
## [1.4.3] - 2025-02-02
|
83
|
+
|
84
|
+
### Fixed
|
85
|
+
|
86
|
+
- Calculation of users vault balance in vaults with extracted strategies by using the `getUserBalanceBreakdown` method in the `SpoolSDK`
|
87
|
+
|
88
|
+
## [1.4.6] - 2025-02-13
|
89
|
+
|
90
|
+
### Changed
|
91
|
+
|
92
|
+
- Upgraded version of `SpoolSDK` to `2.0.53` in order to fix potential issues with the generation of the redeem bag structure
|
93
|
+
|
94
|
+
## [1.4.7] - 2025-02-13
|
95
|
+
|
96
|
+
### Added
|
97
|
+
|
98
|
+
- Added method `getSwapAndDepositTokenAllowanceForCurrency` to the `PerqSdk`
|
99
|
+
|
100
|
+
## [1.4.8] - 2025-02-14
|
101
|
+
|
102
|
+
### Changed
|
103
|
+
|
104
|
+
- Updated `PerqApi` to use the new 1inch API endpoint
|
105
|
+
|
106
|
+
## [1.4.9] - 2025-02-14
|
107
|
+
|
108
|
+
### Added
|
109
|
+
|
110
|
+
- Added method `linkSuiWalletWithEthWallet` to the `PerqSdk`
|
111
|
+
- Added method `getLinkedSuiWallet` to the `PerqSdk`
|
package/dist/PerqApi.d.ts
CHANGED
@@ -1,16 +1,20 @@
|
|
1
1
|
import { BigNumber } from 'ethers';
|
2
|
-
import {
|
2
|
+
import { SwapInfo, QLFastRedeem, UserRewards, VaultStats, MyPerqData, LoyaltyCard, BeansBalance, PerqToBeansSwapInfo, BeanEntry, NonceEnrichedSignedPayload, NonceEnrichedPayload, UpgradeLoyaltyCardPayload, ReducedProjectData, DetailedProjectData, LinkWalletPayload } from './types';
|
3
|
+
import CachedVaultData from './types/VaultData';
|
3
4
|
export default class PerqApi {
|
4
5
|
route: string;
|
5
6
|
constructor(route: string);
|
6
|
-
fetchAllVaults(): Promise<
|
7
|
+
fetchAllVaults(): Promise<CachedVaultData[]>;
|
8
|
+
fetchVaultV2Details(vaultAddress: string): Promise<CachedVaultData>;
|
9
|
+
fetchVaultLiteDetails(vaultAddress: string, onChainProjectId: number): Promise<CachedVaultData>;
|
10
|
+
fetchAllProjects(): Promise<ReducedProjectData[]>;
|
11
|
+
fetchProjetctDetails(projectName: string): Promise<DetailedProjectData>;
|
7
12
|
fetchTokenPrice(tokenName: string): Promise<number>;
|
8
|
-
getExpectedSwapResult(fromTokenAddress: string, toTokenAddress: string, amount: string, decimals: number): Promise<string>;
|
13
|
+
getExpectedSwapResult(fromTokenAddress: string, toTokenAddress: string, amount: string, decimals: number, chainId: string): Promise<string>;
|
9
14
|
getUserBoostedNfts(walletAddress: string, vaultAddress: string): Promise<string[]>;
|
10
15
|
fetchVaultStats(): Promise<VaultStats>;
|
11
|
-
fetchVaultDetails(vaultAddress: string): Promise<Vault>;
|
12
16
|
fetchRewardsPerHour(walletAddress: string, vaultAddress: string): Promise<number>;
|
13
|
-
getSwapInfo(fromTokenAddress: string, toTokenAddress: string, amount: BigNumber, fromAddress: string): Promise<SwapInfo[]>;
|
17
|
+
getSwapInfo(fromTokenAddress: string, toTokenAddress: string, amount: BigNumber, fromAddress: string, chainId: number): Promise<SwapInfo[]>;
|
14
18
|
fetchUserSVTBalance(vaultAddress: string, walletAddress: string): Promise<BigNumber>;
|
15
19
|
fetchUserBalance(vaultAddress: string, walletAddress: string): Promise<Record<string, string>>;
|
16
20
|
fetchEnrichedUserWNFTForVault(vaultAddress: string, walletAddress: string): Promise<any[]>;
|
@@ -26,6 +30,8 @@ export default class PerqApi {
|
|
26
30
|
fetchMyPerqData(userAddress: string): Promise<MyPerqData[]>;
|
27
31
|
getSwapPerqForBeansInfo(): Promise<PerqToBeansSwapInfo>;
|
28
32
|
fetchBeansHistory(walletAddress: string): Promise<BeanEntry[]>;
|
33
|
+
linkSuiWalletWithEthWallet(signedPayload: NonceEnrichedSignedPayload<LinkWalletPayload>): Promise<boolean>;
|
34
|
+
getLinkedSuiWallet(walletAddress: string): Promise<string>;
|
29
35
|
getNonceEnrichedPayload<T>(payload: T): Promise<NonceEnrichedPayload<T>>;
|
30
36
|
fetchUserVaultDeposits(userAddress: string, vaultAddress: string): Promise<{
|
31
37
|
pending: number;
|
package/dist/PerqApi.js
CHANGED
@@ -18,6 +18,46 @@ class PerqApi {
|
|
18
18
|
throw Error(`${await res.text()}`);
|
19
19
|
}
|
20
20
|
}
|
21
|
+
async fetchVaultV2Details(vaultAddress) {
|
22
|
+
const res = await fetch(`${this.route}/api-be/api/vault/${vaultAddress}`);
|
23
|
+
if (res.ok) {
|
24
|
+
const data = (await res.json());
|
25
|
+
return data;
|
26
|
+
}
|
27
|
+
else {
|
28
|
+
throw Error(`${await res.text()}`);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
async fetchVaultLiteDetails(vaultAddress, onChainProjectId) {
|
32
|
+
const res = await fetch(`${this.route}/api-be/api/vault/${vaultAddress}?onChainProjectId=${onChainProjectId}`);
|
33
|
+
if (res.ok) {
|
34
|
+
const data = (await res.json());
|
35
|
+
return data;
|
36
|
+
}
|
37
|
+
else {
|
38
|
+
throw Error(`${await res.text()}`);
|
39
|
+
}
|
40
|
+
}
|
41
|
+
async fetchAllProjects() {
|
42
|
+
const res = await fetch(`${this.route}/api-be/api/projects`);
|
43
|
+
if (res.ok) {
|
44
|
+
const data = await res.json();
|
45
|
+
return data;
|
46
|
+
}
|
47
|
+
else {
|
48
|
+
throw Error(`${await res.text()}`);
|
49
|
+
}
|
50
|
+
}
|
51
|
+
async fetchProjetctDetails(projectName) {
|
52
|
+
const res = await fetch(`${this.route}/api-be/api/projects/${projectName}`);
|
53
|
+
if (res.ok) {
|
54
|
+
const data = await res.json();
|
55
|
+
return data;
|
56
|
+
}
|
57
|
+
else {
|
58
|
+
throw Error(`${await res.text()}`);
|
59
|
+
}
|
60
|
+
}
|
21
61
|
async fetchTokenPrice(tokenName) {
|
22
62
|
const res = await fetch(`${this.route}/api-be/api/tokenPrice?tokenName=${tokenName}`);
|
23
63
|
if (res.ok) {
|
@@ -28,12 +68,13 @@ class PerqApi {
|
|
28
68
|
throw Error(`${await res.text()}`);
|
29
69
|
}
|
30
70
|
}
|
31
|
-
async getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals) {
|
71
|
+
async getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals, chainId) {
|
32
72
|
const parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals);
|
33
73
|
const queryParams = new URLSearchParams({
|
34
74
|
from: fromTokenAddress,
|
35
75
|
to: toTokenAddress,
|
36
76
|
amount: parsedAmount.toString(),
|
77
|
+
chainId: chainId,
|
37
78
|
});
|
38
79
|
const res = await fetch(`${this.route}/api-be/api/1inch/swap?${queryParams}`);
|
39
80
|
if (res.ok) {
|
@@ -64,16 +105,6 @@ class PerqApi {
|
|
64
105
|
throw Error(`${await res.text()}`);
|
65
106
|
}
|
66
107
|
}
|
67
|
-
async fetchVaultDetails(vaultAddress) {
|
68
|
-
const res = await fetch(`${this.route}/api-be/api/vault/${vaultAddress}`);
|
69
|
-
if (res.ok) {
|
70
|
-
const data = (await res.json());
|
71
|
-
return data;
|
72
|
-
}
|
73
|
-
else {
|
74
|
-
throw Error(`${await res.text()}`);
|
75
|
-
}
|
76
|
-
}
|
77
108
|
async fetchRewardsPerHour(walletAddress, vaultAddress) {
|
78
109
|
const res = await fetch(`${this.route}/api-be/api/user/${walletAddress}/rewardsPerHour/${vaultAddress}`);
|
79
110
|
if (res.ok) {
|
@@ -84,18 +115,18 @@ class PerqApi {
|
|
84
115
|
throw Error(`${await res.text()}`);
|
85
116
|
}
|
86
117
|
}
|
87
|
-
async getSwapInfo(fromTokenAddress, toTokenAddress, amount, fromAddress) {
|
118
|
+
async getSwapInfo(fromTokenAddress, toTokenAddress, amount, fromAddress, chainId) {
|
88
119
|
if (fromTokenAddress === toTokenAddress && fromTokenAddress === WETH_TOKEN_ADDRESS) {
|
89
120
|
return [];
|
90
121
|
}
|
91
|
-
const url = `${this.route}/oneinch?getRequest=/swap/
|
122
|
+
const url = `${this.route}/oneinch?getRequest=/swap/v6.0/${chainId}/swap?fromTokenAddress=${fromTokenAddress}%26toTokenAddress=${toTokenAddress}%26amount=${amount.toString()}%26fromAddress=${fromAddress}%26slippage=0.1%26disableEstimate=true%26allowPartialFill=false%26includeTokensInfo=true`;
|
92
123
|
const res = await fetch(url);
|
93
124
|
if (res.ok) {
|
94
125
|
const data = (await res.json());
|
95
126
|
return [
|
96
127
|
{
|
97
128
|
swapTarget: data.tx.to,
|
98
|
-
token: data.
|
129
|
+
token: data.srcToken.address,
|
99
130
|
swapCallData: data.tx.data,
|
100
131
|
},
|
101
132
|
];
|
@@ -300,6 +331,31 @@ class PerqApi {
|
|
300
331
|
throw Error(`${await res.text()}`);
|
301
332
|
}
|
302
333
|
}
|
334
|
+
async linkSuiWalletWithEthWallet(signedPayload) {
|
335
|
+
const res = await fetch(`${this.route}/api-be/api/user/suiWallet`, {
|
336
|
+
method: 'POST',
|
337
|
+
headers: {
|
338
|
+
'Content-Type': 'application/json',
|
339
|
+
},
|
340
|
+
body: JSON.stringify(signedPayload),
|
341
|
+
});
|
342
|
+
if (res.ok) {
|
343
|
+
return true;
|
344
|
+
}
|
345
|
+
else {
|
346
|
+
throw Error(`${await res.text()}`);
|
347
|
+
}
|
348
|
+
}
|
349
|
+
async getLinkedSuiWallet(walletAddress) {
|
350
|
+
const res = await fetch(`${this.route}/api-be/api/user/suiWallet/${walletAddress}`);
|
351
|
+
if (res.ok) {
|
352
|
+
const data = await res.json();
|
353
|
+
return data.suiWalletAddr;
|
354
|
+
}
|
355
|
+
else {
|
356
|
+
throw Error(`${await res.text()}`);
|
357
|
+
}
|
358
|
+
}
|
303
359
|
async getNonceEnrichedPayload(payload) {
|
304
360
|
const res = await fetch(`${this.route}/api-be/api/nonce`, {
|
305
361
|
method: 'POST',
|
package/dist/PerqSdk.d.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
import { BigNumber, Signer } from 'ethers';
|
2
|
-
import {
|
3
|
-
import
|
1
|
+
import { BigNumber, Signer, ethers } from 'ethers';
|
2
|
+
import { UserRewards, VaultStats, UserVaultBalance, LoyaltyCard, NonceEnrichedSignedPayload, MyPerqData, BeansBalance, BeanEntry, PerqToBeansSwapInfo, VestingInfo, PerqConfig, ReducedProjectData } from './types';
|
3
|
+
import DetailedProjectData from './types/DetailedProjectData';
|
4
|
+
import VaultData from './types/VaultData';
|
4
5
|
export default class PerqSdk {
|
5
6
|
private perqApi;
|
6
7
|
private perqConfig;
|
@@ -10,29 +11,41 @@ export default class PerqSdk {
|
|
10
11
|
private perqVestingContract;
|
11
12
|
private spoolSdk?;
|
12
13
|
private signer?;
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
private yelayLiteSdk?;
|
15
|
+
constructor(perqConfig: PerqConfig, provider?: ethers.providers.JsonRpcProvider);
|
16
|
+
getAllProjects(): Promise<ReducedProjectData[]>;
|
17
|
+
getProjectDetails(projectName: string): Promise<DetailedProjectData>;
|
18
|
+
getAllVaults(): Promise<VaultData[]>;
|
19
|
+
getV2VaultDetails(vaultAddress: string): Promise<VaultData>;
|
20
|
+
getLiteVaultDetails(vaultAddress: string, onChainProjectId: number): Promise<VaultData>;
|
16
21
|
getVaultStats(): Promise<VaultStats>;
|
17
22
|
getTokenPrice(tokenName: string): Promise<number>;
|
18
23
|
updateSigner(newSigner: Signer): Promise<void>;
|
24
|
+
yelayLiteDeposit(tokenAddress: string, vaultAddress: string, onChainProjectId: number, amount: string): Promise<string>;
|
19
25
|
newDeposit(tokenAddress: string, vaultAddress: string, amount: string): Promise<string>;
|
20
26
|
deposit(tokenAddress: string, vaultAddress: string, amount: string): Promise<string>;
|
21
27
|
private doDeposit;
|
22
28
|
getTokenAllowanceForCurrency(tokenAddress: string): Promise<string>;
|
29
|
+
getSwapAndDepositTokenAllowanceForCurrency(tokenAddress: string): Promise<string>;
|
23
30
|
getTokenAllowanceForRecycler(tokenAddress: string): Promise<BigNumber>;
|
24
31
|
getTokenAllowanceForSwapAndRecycler(tokenAddress: string): Promise<BigNumber>;
|
25
32
|
getExpectedSwapResult(fromTokenAddress: string, toTokenAddress: string, amount: string, decimals: number): Promise<string>;
|
33
|
+
getExpectedYelayLiteSwapResult(fromTokenAddress: string, toTokenAddress: string, amount: string, decimals: number): Promise<string>;
|
26
34
|
getUserBoostedNfts(vaultAddress: string): Promise<string[]>;
|
27
35
|
getRewardsPerHour(vaultAddress: string): Promise<number>;
|
28
36
|
getRewards(): Promise<UserRewards>;
|
29
37
|
getMyPerqBalance(): Promise<MyPerqData[]>;
|
38
|
+
getYelayLiteUserVaultBalance(vaultAddress: string, onChainProjectId: number): Promise<UserVaultBalance>;
|
30
39
|
getUserVaultBalance(vaultAddress: string): Promise<UserVaultBalance>;
|
31
40
|
fastWithdraw(vaultAddress: string, amountToWithdraw?: string): Promise<string>;
|
32
41
|
swapAndDeposit(fromTokenAddress: string, toTokenAddress: string, fromTokenAmount: string, vaultAddress: string, ethAmount?: string): Promise<string>;
|
33
42
|
newSwapAndDeposit(fromTokenAddress: string, toTokenAddress: string, fromTokenAmount: string, vaultAddress: string, ethAmount?: string): Promise<string>;
|
34
43
|
private doSwapAndDeposit;
|
35
44
|
withdraw(vaultAddress: string, amountToWithdraw?: string): Promise<string>;
|
45
|
+
getYelayLiteSwapAndDepositAllowance(tokenAddress: string): Promise<string>;
|
46
|
+
approveYelayLiteSwapAndDeposit(tokenAddress: string, amount: string): Promise<string>;
|
47
|
+
yelayLiteSwapAndDeposit(fromTokenAddress: string, toTokenAddress: string, amount: string, vaultAddress: string, projectId: number): Promise<string>;
|
48
|
+
yelayLiteWithdraw(tokenAddress: string, vaultAddress: string, onChainProjectId: number, amount: string): Promise<string>;
|
36
49
|
claimWithdraws(vaultAddress: string): Promise<string>;
|
37
50
|
getBeansBalance(): Promise<BeansBalance>;
|
38
51
|
getBeansHistory(): Promise<BeanEntry[]>;
|
@@ -48,6 +61,8 @@ export default class PerqSdk {
|
|
48
61
|
approveTokenForDeposit(tokenAddress: string, amount: string): Promise<string>;
|
49
62
|
getPerqTokenContractAddress(): string;
|
50
63
|
getSwapPerqForBeansInfo(): Promise<PerqToBeansSwapInfo>;
|
64
|
+
getAllowance(tokenAddress: string, spender: string): Promise<string>;
|
65
|
+
approveAllowance(tokenAddress: string, amount: string, spenderAddress: string): Promise<string>;
|
51
66
|
transferErc20Token(tokenAddress: string, amount: string, receiver: string): Promise<string>;
|
52
67
|
wrapEther(amount: string, tokenAddress: string): Promise<string>;
|
53
68
|
getVestingStart(): Promise<string>;
|
@@ -58,12 +73,15 @@ export default class PerqSdk {
|
|
58
73
|
getAllVestingInfo(beneficiaryAddress: string): Promise<VestingInfo>;
|
59
74
|
claimVestedPerq(amount: string): Promise<string>;
|
60
75
|
burnVestedPerq(amount: string, price: string, deadline: string, signature: string): Promise<string>;
|
76
|
+
linkSuiWalletWithEthWallet(suiWalletAddress: string): Promise<boolean>;
|
77
|
+
getLinkedSuiWallet(): Promise<string>;
|
61
78
|
signPayload<T>(payload: T): Promise<NonceEnrichedSignedPayload<T>>;
|
62
79
|
private getEnrichedPayload;
|
63
80
|
private generateRedeemBagStruct;
|
64
81
|
private getERC20Precission;
|
65
82
|
private getTokenAllowanceForDeposit;
|
66
83
|
private getTokenAllowanceForSwapAndDeposit;
|
67
|
-
|
68
|
-
|
84
|
+
getERC20TokenAllowance(spender: string, tokenAddress: string): Promise<BigNumber>;
|
85
|
+
approveToken(tokenAddress: string, amount: string, spender: string): Promise<string>;
|
86
|
+
yelayLiteWrapAndDepositEth(vaultAddress: string, onChainProjectId: number, amount: string): Promise<any>;
|
69
87
|
}
|
package/dist/PerqSdk.js
CHANGED
@@ -9,6 +9,9 @@ const spool_v2_sdk_1 = require("@spool.fi/spool-v2-sdk");
|
|
9
9
|
const PerqApi_1 = __importDefault(require("./PerqApi"));
|
10
10
|
const contracts_1 = require("./contracts");
|
11
11
|
const WethTokenAbi_json_1 = __importDefault(require("./abi/WethTokenAbi.json"));
|
12
|
+
const sdk_1 = require("@yelay-lite/sdk");
|
13
|
+
const chains_1 = require("./utils/chains");
|
14
|
+
const WETH_DECIMAL_PRECISION = 18;
|
12
15
|
class PerqSdk {
|
13
16
|
perqApi;
|
14
17
|
perqConfig;
|
@@ -18,23 +21,35 @@ class PerqSdk {
|
|
18
21
|
perqVestingContract;
|
19
22
|
spoolSdk;
|
20
23
|
signer;
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
+
yelayLiteSdk;
|
25
|
+
constructor(perqConfig, provider) {
|
26
|
+
const newSigner = provider?.getSigner();
|
27
|
+
if (provider && newSigner) {
|
28
|
+
this.signer = newSigner;
|
29
|
+
this.yelayLiteSdk = new sdk_1.YelayLiteSdk(newSigner, perqConfig.yelayLiteSdkConfig);
|
30
|
+
this.spoolSdk = new spool_v2_sdk_1.SpoolSdk(perqConfig.spoolSdkConfig, newSigner);
|
24
31
|
}
|
25
32
|
this.perqConfig = perqConfig;
|
26
|
-
this.signer = signer;
|
27
33
|
this.perqApi = new PerqApi_1.default(perqConfig.route);
|
28
|
-
this.perqTokenContract = new contracts_1.PerqTokenContract(perqConfig.perqTokenAddress,
|
29
|
-
this.perqTokenRecyclerContract = new contracts_1.PerqTokenRecyclerContract(perqConfig.perqTokenRecyclerAddress,
|
30
|
-
this.perqSwapAndRecyclerContract = new contracts_1.PerqSwapAndRecyclerContract(perqConfig.perqSwapAndRecyclerAddress,
|
31
|
-
this.perqVestingContract = new contracts_1.PerqVestingContract(perqConfig.perqVestingAddress,
|
34
|
+
this.perqTokenContract = new contracts_1.PerqTokenContract(perqConfig.perqTokenAddress, newSigner);
|
35
|
+
this.perqTokenRecyclerContract = new contracts_1.PerqTokenRecyclerContract(perqConfig.perqTokenRecyclerAddress, newSigner);
|
36
|
+
this.perqSwapAndRecyclerContract = new contracts_1.PerqSwapAndRecyclerContract(perqConfig.perqSwapAndRecyclerAddress, newSigner);
|
37
|
+
this.perqVestingContract = new contracts_1.PerqVestingContract(perqConfig.perqVestingAddress, newSigner);
|
38
|
+
}
|
39
|
+
async getAllProjects() {
|
40
|
+
return this.perqApi.fetchAllProjects();
|
41
|
+
}
|
42
|
+
async getProjectDetails(projectName) {
|
43
|
+
return this.perqApi.fetchProjetctDetails(projectName);
|
32
44
|
}
|
33
45
|
async getAllVaults() {
|
34
46
|
return this.perqApi.fetchAllVaults();
|
35
47
|
}
|
36
|
-
async
|
37
|
-
return this.perqApi.
|
48
|
+
async getV2VaultDetails(vaultAddress) {
|
49
|
+
return this.perqApi.fetchVaultV2Details(vaultAddress);
|
50
|
+
}
|
51
|
+
async getLiteVaultDetails(vaultAddress, onChainProjectId) {
|
52
|
+
return this.perqApi.fetchVaultLiteDetails(vaultAddress, onChainProjectId);
|
38
53
|
}
|
39
54
|
async getVaultStats() {
|
40
55
|
return this.perqApi.fetchVaultStats();
|
@@ -45,11 +60,21 @@ class PerqSdk {
|
|
45
60
|
async updateSigner(newSigner) {
|
46
61
|
this.signer = newSigner;
|
47
62
|
this.spoolSdk = new spool_v2_sdk_1.SpoolSdk(this.perqConfig.spoolSdkConfig, newSigner);
|
63
|
+
this.yelayLiteSdk = new sdk_1.YelayLiteSdk(newSigner, this.perqConfig.yelayLiteSdkConfig);
|
48
64
|
this.perqTokenContract.updateSigner(newSigner);
|
49
65
|
this.perqTokenRecyclerContract.updateSigner(newSigner);
|
50
66
|
this.perqSwapAndRecyclerContract.updateSigner(newSigner);
|
51
67
|
this.perqVestingContract.updateSigner(newSigner);
|
52
68
|
}
|
69
|
+
async yelayLiteDeposit(tokenAddress, vaultAddress, onChainProjectId, amount) {
|
70
|
+
if (!this.signer) {
|
71
|
+
throw Error('No signer provided');
|
72
|
+
}
|
73
|
+
const decimals = await this.getERC20Precission(tokenAddress);
|
74
|
+
const parsedAmountToDeposit = ethers_1.ethers.utils.parseUnits(amount, decimals);
|
75
|
+
const res = await this.yelayLiteSdk.vaults.deposit(vaultAddress, onChainProjectId, BigInt(parsedAmountToDeposit.toString()));
|
76
|
+
return res.hash;
|
77
|
+
}
|
53
78
|
async newDeposit(tokenAddress, vaultAddress, amount) {
|
54
79
|
return this.doDeposit(tokenAddress, vaultAddress, amount, false);
|
55
80
|
}
|
@@ -91,6 +116,13 @@ class PerqSdk {
|
|
91
116
|
const currentTokenAllowance = await this.getTokenAllowanceForDeposit(tokenAddress);
|
92
117
|
return currentTokenAllowance.toString();
|
93
118
|
}
|
119
|
+
async getSwapAndDepositTokenAllowanceForCurrency(tokenAddress) {
|
120
|
+
if (!this.signer) {
|
121
|
+
throw Error('No signer provided');
|
122
|
+
}
|
123
|
+
const currentTokenAllowance = await this.getTokenAllowanceForSwapAndDeposit(tokenAddress);
|
124
|
+
return currentTokenAllowance.toString();
|
125
|
+
}
|
94
126
|
async getTokenAllowanceForRecycler(tokenAddress) {
|
95
127
|
if (!this.signer) {
|
96
128
|
throw Error('No signer provided');
|
@@ -106,7 +138,10 @@ class PerqSdk {
|
|
106
138
|
return allowance;
|
107
139
|
}
|
108
140
|
async getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals) {
|
109
|
-
return this.perqApi.getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals);
|
141
|
+
return this.perqApi.getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals, chains_1.ETHEREUM_CHAIN_ID.toString());
|
142
|
+
}
|
143
|
+
async getExpectedYelayLiteSwapResult(fromTokenAddress, toTokenAddress, amount, decimals) {
|
144
|
+
return this.perqApi.getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals, chains_1.BASE_CHAIN_ID.toString());
|
110
145
|
}
|
111
146
|
async getUserBoostedNfts(vaultAddress) {
|
112
147
|
const userAddress = await this.signer.getAddress();
|
@@ -126,41 +161,70 @@ class PerqSdk {
|
|
126
161
|
const myPerqBalance = this.perqApi.fetchMyPerqData(userAddress);
|
127
162
|
return myPerqBalance;
|
128
163
|
}
|
164
|
+
async getYelayLiteUserVaultBalance(vaultAddress, onChainProjectId) {
|
165
|
+
if (!this.signer) {
|
166
|
+
throw Error('No signer provided');
|
167
|
+
}
|
168
|
+
if (!this.yelayLiteSdk) {
|
169
|
+
throw Error('YelayLiteSdk not initialized');
|
170
|
+
}
|
171
|
+
try {
|
172
|
+
const [userAddress, vault] = await Promise.all([
|
173
|
+
this.signer.getAddress(),
|
174
|
+
this.getLiteVaultDetails(vaultAddress, onChainProjectId),
|
175
|
+
]);
|
176
|
+
const [balance, decimals] = await Promise.all([
|
177
|
+
this.yelayLiteSdk.vaults.balanceOf(vaultAddress, onChainProjectId, userAddress),
|
178
|
+
this.getERC20Precission(vault.depositToken.tokenAddress),
|
179
|
+
]);
|
180
|
+
return {
|
181
|
+
userBalance: ethers_1.ethers.utils.formatUnits(balance.toString(), decimals),
|
182
|
+
pendingUserBalance: '0',
|
183
|
+
pendingWithdrawalBalance: '0',
|
184
|
+
claimableBalance: '0',
|
185
|
+
hasWithdrawsToClaim: false,
|
186
|
+
};
|
187
|
+
}
|
188
|
+
catch (error) {
|
189
|
+
throw new Error(`Failed to get YelayLite user vault balance: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
190
|
+
}
|
191
|
+
}
|
129
192
|
async getUserVaultBalance(vaultAddress) {
|
130
193
|
if (!this.signer) {
|
131
194
|
throw Error('No signer provided');
|
132
195
|
}
|
133
|
-
const userAddress = await this.signer.getAddress();
|
134
|
-
|
135
|
-
|
136
|
-
this.
|
137
|
-
this.perqApi.fetchUserVaultDeposits(userAddress, vaultAddress),
|
138
|
-
this.perqApi.fetchAllUserWNFTForVault(vaultAddress, userAddress),
|
196
|
+
const [userAddress, vault] = await Promise.all([this.signer.getAddress(), this.getV2VaultDetails(vaultAddress)]);
|
197
|
+
const [decimals, userBalanceBreakdown] = await Promise.all([
|
198
|
+
this.getERC20Precission(vault.depositToken.tokenAddress),
|
199
|
+
this.spoolSdk?.getUserBalanceBreakdown({ userAddress, vaultAddress }),
|
139
200
|
]);
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
const estimatedValueOfNFT = ethers_1.BigNumber.from(ethers_1.ethers.utils.formatUnits(ethers_1.BigNumber.from(wnft.svtWithdrawn).mul(assetsPerSvtAtBlock), 36).split('.')[0]);
|
149
|
-
if (wnft.isDHWFinished) {
|
150
|
-
// Processed and claimable
|
151
|
-
claimable = claimable.add(estimatedValueOfNFT);
|
152
|
-
}
|
153
|
-
else {
|
154
|
-
// Not processed, pending withdrawal
|
155
|
-
pendingWithdraws = pendingWithdraws.add(estimatedValueOfNFT);
|
156
|
-
}
|
157
|
-
}
|
201
|
+
if (!userBalanceBreakdown) {
|
202
|
+
return {
|
203
|
+
hasWithdrawsToClaim: false,
|
204
|
+
userBalance: '0',
|
205
|
+
pendingUserBalance: '0',
|
206
|
+
pendingWithdrawalBalance: '0',
|
207
|
+
claimableBalance: '0',
|
208
|
+
};
|
158
209
|
}
|
210
|
+
let claimable = ethers_1.BigNumber.from(0);
|
211
|
+
for (const wnft of userBalanceBreakdown.claimableWNFTs) {
|
212
|
+
const currentBlockNumber = wnft.blockNumber - 1;
|
213
|
+
const assetsPerSvtAtBlock = await this.perqApi.fetchAssetPerSvtAtBlock(vaultAddress, currentBlockNumber);
|
214
|
+
const estimatedValueOfNFT = ethers_1.BigNumber.from(ethers_1.ethers.utils.formatUnits(ethers_1.BigNumber.from(wnft.svtWithdrawn).mul(assetsPerSvtAtBlock), 36).split('.')[0]);
|
215
|
+
claimable = claimable.add(estimatedValueOfNFT);
|
216
|
+
}
|
217
|
+
const currentBalance = Object.values(userBalanceBreakdown.withdrawableAssets)
|
218
|
+
.reduce((acc, curr) => acc + curr, 0)
|
219
|
+
.toString();
|
220
|
+
const pendingDepositBalance = Object.values(userBalanceBreakdown.pendingAssets)
|
221
|
+
.reduce((acc, curr) => acc + curr, 0)
|
222
|
+
.toString();
|
159
223
|
return {
|
160
224
|
hasWithdrawsToClaim: claimable.gt(0),
|
161
|
-
userBalance:
|
162
|
-
pendingUserBalance:
|
163
|
-
pendingWithdrawalBalance:
|
225
|
+
userBalance: currentBalance,
|
226
|
+
pendingUserBalance: pendingDepositBalance,
|
227
|
+
pendingWithdrawalBalance: userBalanceBreakdown.pendingWithdrawal || '0',
|
164
228
|
claimableBalance: ethers_1.ethers.utils.formatUnits(claimable, decimals) || '0',
|
165
229
|
};
|
166
230
|
}
|
@@ -172,7 +236,7 @@ class PerqSdk {
|
|
172
236
|
if (!this.signer) {
|
173
237
|
throw Error('No signer provided');
|
174
238
|
}
|
175
|
-
const vault = await this.
|
239
|
+
const vault = await this.getV2VaultDetails(vaultAddress);
|
176
240
|
const redeemBagStruct = await this.generateRedeemBagStruct(vault, userAddress, amountToWithdraw);
|
177
241
|
const currentBlockNumber = await this.signer.provider?.getBlockNumber();
|
178
242
|
if (!currentBlockNumber) {
|
@@ -202,7 +266,7 @@ class PerqSdk {
|
|
202
266
|
}
|
203
267
|
}
|
204
268
|
const fromToken = ethers_1.ethers.utils.parseUnits(amountWithDecimals.toString(), decimals);
|
205
|
-
const swapInfo = await this.perqApi.getSwapInfo(fromTokenAddress, toTokenAddress, fromToken,
|
269
|
+
const swapInfo = await this.perqApi.getSwapInfo(fromTokenAddress, toTokenAddress, fromToken, this.perqConfig.ethereumSwapperAddress, chains_1.ETHEREUM_CHAIN_ID);
|
206
270
|
const swapDepositBagStruct = {
|
207
271
|
inTokens: [fromTokenAddress],
|
208
272
|
inAmounts: [fromToken],
|
@@ -226,12 +290,43 @@ class PerqSdk {
|
|
226
290
|
if (!this.signer) {
|
227
291
|
throw Error('No signer provided');
|
228
292
|
}
|
229
|
-
const vault = await this.
|
293
|
+
const vault = await this.getV2VaultDetails(vaultAddress);
|
230
294
|
const redeemBagStruct = await this.generateRedeemBagStruct(vault, userAddress, amountToWithdraw);
|
231
295
|
const redeemTx = await this.spoolSdk.redeem(redeemBagStruct, userAddress, false);
|
232
296
|
const redeemTxReceipt = await redeemTx.wait();
|
233
297
|
return redeemTxReceipt.transactionHash;
|
234
298
|
}
|
299
|
+
async getYelayLiteSwapAndDepositAllowance(tokenAddress) {
|
300
|
+
const res = await this.yelayLiteSdk.vaults.vaultWrapperAllowance(tokenAddress);
|
301
|
+
return res.toString();
|
302
|
+
}
|
303
|
+
async approveYelayLiteSwapAndDeposit(tokenAddress, amount) {
|
304
|
+
const decimals = await this.getERC20Precission(tokenAddress);
|
305
|
+
const parsedAmountToApprove = ethers_1.ethers.utils.parseUnits(amount, decimals);
|
306
|
+
const res = await this.yelayLiteSdk.vaults.approveVaultWrapper(tokenAddress, parsedAmountToApprove.toBigInt());
|
307
|
+
return res.hash;
|
308
|
+
}
|
309
|
+
async yelayLiteSwapAndDeposit(fromTokenAddress, toTokenAddress, amount, vaultAddress, projectId) {
|
310
|
+
const decimals = await this.getERC20Precission(fromTokenAddress);
|
311
|
+
const parsedAmountToSwapAndDeposit = ethers_1.ethers.utils.parseUnits(amount, decimals);
|
312
|
+
const swapInfo = await this.perqApi.getSwapInfo(fromTokenAddress, toTokenAddress, parsedAmountToSwapAndDeposit, this.perqConfig.baseSwapperAddress, chains_1.BASE_CHAIN_ID);
|
313
|
+
const swapArgsStruct = {
|
314
|
+
tokenIn: swapInfo[0].token,
|
315
|
+
swapTarget: swapInfo[0].swapTarget,
|
316
|
+
swapCallData: swapInfo[0].swapCallData,
|
317
|
+
};
|
318
|
+
const res = await this.yelayLiteSdk.vaults.swapAndDeposit(vaultAddress.toLowerCase(), projectId, parsedAmountToSwapAndDeposit.toBigInt(), swapArgsStruct);
|
319
|
+
return res.hash;
|
320
|
+
}
|
321
|
+
async yelayLiteWithdraw(tokenAddress, vaultAddress, onChainProjectId, amount) {
|
322
|
+
if (!this.signer) {
|
323
|
+
throw Error('No signer provided');
|
324
|
+
}
|
325
|
+
const decimals = await this.getERC20Precission(tokenAddress);
|
326
|
+
const parsedAmountToWithdraw = ethers_1.ethers.utils.parseUnits(amount, decimals);
|
327
|
+
const res = await this.yelayLiteSdk.vaults.redeem(vaultAddress, onChainProjectId, BigInt(parsedAmountToWithdraw.toString()));
|
328
|
+
return res.hash;
|
329
|
+
}
|
235
330
|
async claimWithdraws(vaultAddress) {
|
236
331
|
const userAddress = await this.signer.getAddress();
|
237
332
|
if (!this.signer) {
|
@@ -279,15 +374,6 @@ class PerqSdk {
|
|
279
374
|
if (this.perqConfig.perqSwapAndRecyclerAddress === ethers_1.ethers.constants.AddressZero) {
|
280
375
|
throw Error('Recycler contract address not defined');
|
281
376
|
}
|
282
|
-
console.log('swap and recycle ERC-20 with this: ', {
|
283
|
-
beneficiary,
|
284
|
-
path,
|
285
|
-
amountInWithDecimals,
|
286
|
-
minAmountOutWithDecimals,
|
287
|
-
price,
|
288
|
-
deadline,
|
289
|
-
signature,
|
290
|
-
});
|
291
377
|
const swapAndRecycleTx = await this.perqSwapAndRecyclerContract.swapAndRecycle(beneficiary, path, amountInWithDecimals, minAmountOutWithDecimals, price, deadline, signature);
|
292
378
|
const receipt = await swapAndRecycleTx.wait();
|
293
379
|
return receipt.transactionHash;
|
@@ -336,6 +422,15 @@ class PerqSdk {
|
|
336
422
|
async getSwapPerqForBeansInfo() {
|
337
423
|
return this.perqApi.getSwapPerqForBeansInfo();
|
338
424
|
}
|
425
|
+
async getAllowance(tokenAddress, spender) {
|
426
|
+
const allowance = await this.getERC20TokenAllowance(spender, tokenAddress);
|
427
|
+
return allowance.toString();
|
428
|
+
}
|
429
|
+
async approveAllowance(tokenAddress, amount, spenderAddress) {
|
430
|
+
const decimals = await this.getERC20Precission(tokenAddress);
|
431
|
+
const amountWithDecimals = parseFloat(parseFloat(amount).toFixed(decimals));
|
432
|
+
return await this.approveToken(tokenAddress, amountWithDecimals.toString(), spenderAddress);
|
433
|
+
}
|
339
434
|
async transferErc20Token(tokenAddress, amount, receiver) {
|
340
435
|
if (!this.signer) {
|
341
436
|
throw Error('No signer provided');
|
@@ -459,6 +554,20 @@ class PerqSdk {
|
|
459
554
|
throw new Error('Failed to get total releasable amount: Unknown error');
|
460
555
|
}
|
461
556
|
}
|
557
|
+
async linkSuiWalletWithEthWallet(suiWalletAddress) {
|
558
|
+
const payload = {
|
559
|
+
suiWalletAddr: suiWalletAddress,
|
560
|
+
};
|
561
|
+
const signedPayload = await this.signPayload(payload);
|
562
|
+
return this.perqApi.linkSuiWalletWithEthWallet(signedPayload);
|
563
|
+
}
|
564
|
+
async getLinkedSuiWallet() {
|
565
|
+
if (!this.signer) {
|
566
|
+
throw new Error('No signer provided');
|
567
|
+
}
|
568
|
+
const walletAddr = await this.signer.getAddress();
|
569
|
+
return this.perqApi.getLinkedSuiWallet(walletAddr);
|
570
|
+
}
|
462
571
|
async signPayload(payload) {
|
463
572
|
if (!this.signer) {
|
464
573
|
throw new Error('No signer provided');
|
@@ -535,5 +644,13 @@ class PerqSdk {
|
|
535
644
|
const receipt = await approveTx.wait();
|
536
645
|
return receipt.transactionHash;
|
537
646
|
}
|
647
|
+
async yelayLiteWrapAndDepositEth(vaultAddress, onChainProjectId, amount) {
|
648
|
+
if (!this.signer) {
|
649
|
+
throw Error('No signer provided');
|
650
|
+
}
|
651
|
+
const parsedAmount = ethers_1.ethers.utils.parseUnits(amount, WETH_DECIMAL_PRECISION);
|
652
|
+
const res = await this.yelayLiteSdk.vaults.depositEth(vaultAddress, onChainProjectId, BigInt(parsedAmount.toString()));
|
653
|
+
return res.hash;
|
654
|
+
}
|
538
655
|
}
|
539
656
|
exports.default = PerqSdk;
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import { ProjectBacker } from './DeployedProject';
|
2
|
+
import { ReducedProjectData } from './ReducedProjectData';
|
3
|
+
import StretchGoal from './StretchGoal';
|
4
|
+
import VaultData from './VaultData';
|
5
|
+
type DetailedProjectData = ReducedProjectData & {
|
6
|
+
content: string;
|
7
|
+
telegramLink: string;
|
8
|
+
twitterLink: string;
|
9
|
+
mediumLink: string;
|
10
|
+
deckLink: string;
|
11
|
+
roadmapLink: string;
|
12
|
+
economicsLink: string;
|
13
|
+
discordLink: string;
|
14
|
+
docsLink: string;
|
15
|
+
whitepaperLink: string;
|
16
|
+
litepaperLink: string;
|
17
|
+
websiteLink: string;
|
18
|
+
networks: string[];
|
19
|
+
supplyAtLaunch: number;
|
20
|
+
fdv: number;
|
21
|
+
totalSupply: number;
|
22
|
+
projectType: string;
|
23
|
+
yelayVersion: string;
|
24
|
+
wikiLink: string;
|
25
|
+
youTubeLink: string;
|
26
|
+
tikTokLink: string;
|
27
|
+
stretchGoals: StretchGoal[];
|
28
|
+
projectRewardText: string;
|
29
|
+
backers: ProjectBacker[];
|
30
|
+
protocols: string[];
|
31
|
+
vaults: VaultData[];
|
32
|
+
};
|
33
|
+
export default DetailedProjectData;
|
@@ -1,10 +1,10 @@
|
|
1
|
-
import
|
2
|
-
|
3
|
-
|
1
|
+
import VaultData from './VaultData';
|
2
|
+
import { Asset } from './index';
|
3
|
+
type MyPerqBalance = {
|
4
4
|
pendingDeposits: number;
|
5
|
-
pendingWithdraws: number;
|
6
5
|
currentlyDeposited: number;
|
7
|
-
|
6
|
+
pendingWithdraws: number;
|
7
|
+
claimable: number;
|
8
8
|
tokenRewards: {
|
9
9
|
[token_address: string]: Asset & {
|
10
10
|
amount: number;
|
@@ -12,4 +12,9 @@ type MyPerqData = Vault & {
|
|
12
12
|
};
|
13
13
|
};
|
14
14
|
};
|
15
|
+
type MyPerqData = VaultData & MyPerqBalance & {
|
16
|
+
ethPrice: number;
|
17
|
+
btcPrice: number;
|
18
|
+
combinedTvl: number;
|
19
|
+
};
|
15
20
|
export default MyPerqData;
|
@@ -1,13 +1,17 @@
|
|
1
|
-
import { SDKConfig } from '@spool.fi/spool-v2-sdk';
|
1
|
+
import { SDKConfig as SpoolSdkConfig } from '@spool.fi/spool-v2-sdk';
|
2
|
+
import { SDKConfig as YelayLikeSdkConfig } from '@yelay-lite/sdk';
|
2
3
|
type PerqConfig = {
|
3
4
|
route: string;
|
4
|
-
spoolSdkConfig:
|
5
|
+
spoolSdkConfig: SpoolSdkConfig;
|
5
6
|
perqTokenAddress: string;
|
6
7
|
perqTokenRecyclerAddress: string;
|
7
8
|
perqSwapAndRecyclerAddress: string;
|
8
9
|
perqVestingAddress: string;
|
9
10
|
swapAndDepositContractAddress: string;
|
11
|
+
ethereumSwapperAddress: string;
|
12
|
+
baseSwapperAddress: string;
|
10
13
|
smartVaultManagerContractAddress: string;
|
14
|
+
yelayLiteSdkConfig: YelayLikeSdkConfig;
|
11
15
|
};
|
12
16
|
export default PerqConfig;
|
13
17
|
export declare const PRODUCTION: PerqConfig;
|
package/dist/types/PerqConfig.js
CHANGED
@@ -2,23 +2,31 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.DEVELOPMENT = exports.PRODUCTION = void 0;
|
4
4
|
const spool_v2_sdk_1 = require("@spool.fi/spool-v2-sdk");
|
5
|
+
const sdk_1 = require("@yelay-lite/sdk");
|
6
|
+
const chains_1 = require("../utils/chains");
|
5
7
|
exports.PRODUCTION = {
|
6
8
|
route: 'https://perq.finance',
|
7
9
|
spoolSdkConfig: (0, spool_v2_sdk_1.getMainnetConfig)('https://subgraph.satsuma-prod.com/49eb322da234/solidant/spool-v2/api'),
|
8
10
|
perqTokenAddress: '0x2a414884a549ef5716bc1a4e648d3dc03f08b2cf',
|
9
|
-
perqTokenRecyclerAddress: '
|
10
|
-
perqSwapAndRecyclerAddress: '
|
11
|
-
perqVestingAddress: '
|
11
|
+
perqTokenRecyclerAddress: '0x2fdcdb17799557dce6f26921f12b7fa1dbcd79fa',
|
12
|
+
perqSwapAndRecyclerAddress: '0x15ed53964e6a5ecbebab80a0fc68c2297b0eaa8d',
|
13
|
+
perqVestingAddress: '0x5e19c155c30bdeb83fcfe20a3b6f6eda34b746c5',
|
12
14
|
swapAndDepositContractAddress: '0xd8534197bd587f8226d12e0c864ef2cae6f82f5c',
|
15
|
+
ethereumSwapperAddress: '0x33e52c206d584550193e642c8982f2fff6339994',
|
16
|
+
baseSwapperAddress: '0xf9a42821bc7b13c47a6c934704645111ead836a9',
|
13
17
|
smartVaultManagerContractAddress: '0x23daf34e2b9af02a74dc19cb52af727b19403874',
|
18
|
+
yelayLiteSdkConfig: sdk_1.sdkConfig[chains_1.BASE_CHAIN_ID],
|
14
19
|
};
|
15
20
|
exports.DEVELOPMENT = {
|
16
21
|
route: 'https://dev.perq.finance',
|
17
22
|
spoolSdkConfig: (0, spool_v2_sdk_1.getSepoliaConfig)('https://subgraph.satsuma-prod.com/49eb322da234/solidant/spool-v2-sepolia/api'),
|
18
|
-
perqTokenAddress: '
|
19
|
-
perqTokenRecyclerAddress: '
|
20
|
-
perqSwapAndRecyclerAddress: '
|
21
|
-
perqVestingAddress: '
|
23
|
+
perqTokenAddress: '0x707b4cc05645713d8ea04fbc7192a0f2c1503d6e',
|
24
|
+
perqTokenRecyclerAddress: '0x07f2264e199d62afe07e8288ec9d36d155fc3f24',
|
25
|
+
perqSwapAndRecyclerAddress: '0xa4ed357ff233731860ec8d0446fd95756d564014',
|
26
|
+
perqVestingAddress: '0x1d3b9e32a7139718f94be32c797682fff2d1be60',
|
22
27
|
swapAndDepositContractAddress: '0x5fb08e00de169f041711206a0995410884080177',
|
28
|
+
ethereumSwapperAddress: '0xe411921ee9eedfefd7b9ae15bf232bd36949fcbbc',
|
29
|
+
baseSwapperAddress: '0xf9a42821bc7b13c47a6c934704645111ead836a9',
|
23
30
|
smartVaultManagerContractAddress: '0x2638d6c0b4ef6dee04050fa0b07ca62500435747',
|
31
|
+
yelayLiteSdkConfig: sdk_1.devSdkConfig[chains_1.BASE_CHAIN_ID],
|
24
32
|
};
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import DepositToken from './DepositToken';
|
2
|
+
import VaultType from './VaultType';
|
3
|
+
export type ReducedProjectData = {
|
4
|
+
projectName: string;
|
5
|
+
logo: string;
|
6
|
+
bannerImage: string;
|
7
|
+
rewardImage: string;
|
8
|
+
rewardTooltipName: string;
|
9
|
+
projectInfoText: string;
|
10
|
+
projectType: string;
|
11
|
+
poolType: VaultType;
|
12
|
+
liveUntil: string;
|
13
|
+
liveFrom: string;
|
14
|
+
tvlUsd: number;
|
15
|
+
tvl: number;
|
16
|
+
vAPY: number;
|
17
|
+
peakTVL: number;
|
18
|
+
isFeatured: boolean;
|
19
|
+
currencies: DepositToken[];
|
20
|
+
};
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import DepositToken from './DepositToken';
|
2
|
+
import Strategy from './Strategy';
|
3
|
+
import StretchGoal from './StretchGoal';
|
4
|
+
import VaultReward from './VaultReward';
|
5
|
+
import VaultType from './VaultType';
|
6
|
+
type VaultData = {
|
7
|
+
depositToken: DepositToken;
|
8
|
+
vaultAddress: string;
|
9
|
+
projectName: string;
|
10
|
+
projectLogo: string;
|
11
|
+
projectType: string;
|
12
|
+
liveFrom: string;
|
13
|
+
liveUntil: string;
|
14
|
+
tvlUsd: number;
|
15
|
+
avgTvl: number;
|
16
|
+
tokenPrice: number;
|
17
|
+
change24h: number;
|
18
|
+
volume24h: number;
|
19
|
+
peakTvl: number;
|
20
|
+
onChainProjectId: number;
|
21
|
+
combinedTvl: number;
|
22
|
+
isActive: boolean;
|
23
|
+
owners: string[];
|
24
|
+
coingeckoId?: string;
|
25
|
+
expectedTge?: string;
|
26
|
+
poolType: VaultType;
|
27
|
+
strategies: Strategy[];
|
28
|
+
rewards: VaultReward[];
|
29
|
+
stretchGoals: StretchGoal[];
|
30
|
+
};
|
31
|
+
export default VaultData;
|
package/dist/types/index.d.ts
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
import Asset from './Asset';
|
2
2
|
import BeanEntry from './BeanEntry';
|
3
3
|
import BeansBalance from './BeansBalance';
|
4
|
+
import DetailedProjectData from './DetailedProjectData';
|
4
5
|
import DeployedProject, { ProjectBacker } from './DeployedProject';
|
5
6
|
import DeployedVault from './DeployedVault';
|
6
7
|
import DepositToken from './DepositToken';
|
7
8
|
import ELoyaltyCardTier from './ELoyaltyCardTier';
|
9
|
+
import LinkWalletPayload from './LinkWalletPayload';
|
8
10
|
import LoyaltyCard from './LoyaltyCard';
|
9
11
|
import MyPerqData from './MyPerqData';
|
10
12
|
import NFTBoost from './NFTBoost';
|
@@ -12,6 +14,7 @@ import PerqConfig from './PerqConfig';
|
|
12
14
|
import PerqToBeansSwapInfo from './PerqToBeansSwapInfo';
|
13
15
|
import QLFastRedeem from './QLFastRedeem';
|
14
16
|
import { BasePayload, NonceEnrichedPayload, NonceEnrichedSignedPayload } from './SignedPayload';
|
17
|
+
import { ReducedProjectData } from './ReducedProjectData';
|
15
18
|
import Strategy from './Strategy';
|
16
19
|
import StretchGoal from './StretchGoal';
|
17
20
|
import SwapInfo from './SwapInfo';
|
@@ -19,9 +22,11 @@ import UpgradeLoyaltyCardPayload from './UpgradeLoyaltyCardPayload';
|
|
19
22
|
import UserRewards from './UserRewards';
|
20
23
|
import UserVaultBalance from './UserVaultBalance';
|
21
24
|
import Vault from './Vault';
|
25
|
+
import VaultData from './VaultData';
|
22
26
|
import VaultReward, { RewardType } from './VaultReward';
|
23
27
|
import VaultStats from './VaultStats';
|
24
28
|
import VaultType from './VaultType';
|
25
29
|
import VestingInfo from './VestingInfo';
|
26
30
|
import YelayVersion from './YelayVersion';
|
27
|
-
|
31
|
+
import YelayLiteVault from './YelayLiteVault';
|
32
|
+
export { Asset, BasePayload, BeanEntry, BeansBalance, DeployedProject, DeployedVault, DepositToken, DetailedProjectData, ELoyaltyCardTier, LinkWalletPayload, LoyaltyCard, MyPerqData, NFTBoost, NonceEnrichedPayload, NonceEnrichedSignedPayload, PerqConfig, PerqToBeansSwapInfo, ProjectBacker, QLFastRedeem, ReducedProjectData, RewardType, Strategy, StretchGoal, SwapInfo, UpgradeLoyaltyCardPayload, UserRewards, UserVaultBalance, Vault, VaultData, VaultReward, VaultStats, VaultType, VestingInfo, YelayVersion, YelayLiteVault, };
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@dripfi/drip-sdk",
|
3
|
-
"version": "1.4.
|
3
|
+
"version": "1.4.3-yelay-lite-1",
|
4
4
|
"description": "Drip SDK",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"types": "dist/index.d.ts",
|
@@ -13,8 +13,8 @@
|
|
13
13
|
"pretty": "prettier --write \"./**/*.{js,jsx,mjs,cjs,ts,tsx,json}\""
|
14
14
|
},
|
15
15
|
"dependencies": {
|
16
|
-
"@
|
17
|
-
"@
|
16
|
+
"@yelay-lite/sdk": "0.0.25",
|
17
|
+
"@spool.fi/spool-v2-sdk": "2.0.53",
|
18
18
|
"ethers": "^5.7.2"
|
19
19
|
},
|
20
20
|
"author": "",
|