@strkfarm/sdk 1.1.53 → 1.1.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.browser.global.js +34 -13
- package/dist/index.browser.mjs +34 -13
- package/dist/index.d.ts +18 -14
- package/dist/index.js +34 -13
- package/dist/index.mjs +34 -13
- package/package.json +1 -1
- package/src/modules/harvests.ts +4 -0
- package/src/strategies/base-strategy.ts +5 -0
- package/src/strategies/ekubo-cl-vault.tsx +11 -12
- package/src/strategies/universal-strategy.tsx +10 -3
- package/src/strategies/vesu-rebalance.tsx +11 -4
|
@@ -55712,6 +55712,9 @@ ${JSON.stringify(data, null, 2)}`;
|
|
|
55712
55712
|
async getVaultPositions() {
|
|
55713
55713
|
throw new Error("Not implemented");
|
|
55714
55714
|
}
|
|
55715
|
+
async getPendingRewards() {
|
|
55716
|
+
return [];
|
|
55717
|
+
}
|
|
55715
55718
|
};
|
|
55716
55719
|
|
|
55717
55720
|
// src/node/headless.browser.ts
|
|
@@ -55795,6 +55798,10 @@ ${JSON.stringify(data, null, 2)}`;
|
|
|
55795
55798
|
const claimed_amount = Web3Number.fromWei(_claimed_amount.toString(), 18);
|
|
55796
55799
|
logger2.verbose(`${_VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
|
|
55797
55800
|
const data = _data.data["defiSpring"];
|
|
55801
|
+
if (!data) {
|
|
55802
|
+
logger2.verbose(`${_VesuHarvests.name}: no defiSpring data found`);
|
|
55803
|
+
return [];
|
|
55804
|
+
}
|
|
55798
55805
|
const actualReward = Web3Number.fromWei(data.amount, 18).minus(claimed_amount);
|
|
55799
55806
|
logger2.verbose(`${_VesuHarvests.name}: actualReward: ${actualReward.toString()}`);
|
|
55800
55807
|
return [{
|
|
@@ -61810,10 +61817,16 @@ ${JSON.stringify(data, null, 2)}`;
|
|
|
61810
61817
|
});
|
|
61811
61818
|
return [baseFlow];
|
|
61812
61819
|
}
|
|
61820
|
+
async getPendingRewards() {
|
|
61821
|
+
const vesuHarvests = new VesuHarvests(this.config);
|
|
61822
|
+
return await vesuHarvests.getUnHarvestedRewards(this.address);
|
|
61823
|
+
}
|
|
61813
61824
|
async harvest(acc) {
|
|
61814
|
-
const
|
|
61815
|
-
|
|
61816
|
-
|
|
61825
|
+
const pendingRewards = await this.getPendingRewards();
|
|
61826
|
+
if (pendingRewards.length == 0) {
|
|
61827
|
+
throw new Error(`No pending rewards found`);
|
|
61828
|
+
}
|
|
61829
|
+
const harvest = pendingRewards[0];
|
|
61817
61830
|
const avnu = new AvnuWrapper();
|
|
61818
61831
|
let swapInfo = {
|
|
61819
61832
|
token_from_address: harvest.token.address,
|
|
@@ -80565,13 +80578,15 @@ spurious results.`);
|
|
|
80565
80578
|
amount1
|
|
80566
80579
|
};
|
|
80567
80580
|
}
|
|
80568
|
-
async
|
|
80581
|
+
async getPendingRewards() {
|
|
80569
80582
|
const ekuboHarvests = new EkuboHarvests(this.config);
|
|
80570
|
-
|
|
80571
|
-
|
|
80572
|
-
|
|
80573
|
-
|
|
80574
|
-
|
|
80583
|
+
return await ekuboHarvests.getUnHarvestedRewards(this.address);
|
|
80584
|
+
}
|
|
80585
|
+
async harvest(acc, maxIterations = 20, priceRatioPrecision = 4, minRewardAmount = new Web3Number(0, 18)) {
|
|
80586
|
+
const _pendingRewards = await this.getPendingRewards();
|
|
80587
|
+
const pendingRewards = _pendingRewards.filter((claim) => claim.actualReward.greaterThanOrEqualTo(minRewardAmount));
|
|
80588
|
+
if (pendingRewards.length == 0) {
|
|
80589
|
+
logger2.verbose(`${_EkuboCLVault.name}: harvest => no pending rewards found`);
|
|
80575
80590
|
return [];
|
|
80576
80591
|
}
|
|
80577
80592
|
const poolKey = await this.getPoolKey();
|
|
@@ -80579,10 +80594,10 @@ spurious results.`);
|
|
|
80579
80594
|
const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
|
|
80580
80595
|
const bounds = await this.getCurrentBounds();
|
|
80581
80596
|
logger2.verbose(
|
|
80582
|
-
`${_EkuboCLVault.name}: harvest => unClaimedRewards: ${
|
|
80597
|
+
`${_EkuboCLVault.name}: harvest => unClaimedRewards: ${pendingRewards.length}`
|
|
80583
80598
|
);
|
|
80584
80599
|
const calls = [];
|
|
80585
|
-
const chosenClaim =
|
|
80600
|
+
const chosenClaim = pendingRewards[0];
|
|
80586
80601
|
logger2.info(`${_EkuboCLVault.name}: harvest => doing one at a time`);
|
|
80587
80602
|
logger2.info(`${_EkuboCLVault.name}: harvest => chosenClaim -> Claim ID: ${chosenClaim.claim.id}, Amount: ${chosenClaim.claim.amount.toString()}, actualAmount: ${chosenClaim.actualReward.toString()}, addr: ${chosenClaim.claim.claimee.toString()}`);
|
|
80588
80603
|
for (let claim of [chosenClaim]) {
|
|
@@ -94156,9 +94171,15 @@ spurious results.`);
|
|
|
94156
94171
|
const manageCall = this.getManageCall(["approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */, "bring_liquidity" /* BRING_LIQUIDITY */], [manageCall1, manageCall2]);
|
|
94157
94172
|
return manageCall;
|
|
94158
94173
|
}
|
|
94159
|
-
async
|
|
94174
|
+
async getPendingRewards() {
|
|
94160
94175
|
const vesuHarvest = new VesuHarvests(this.config);
|
|
94161
|
-
|
|
94176
|
+
return await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
|
|
94177
|
+
}
|
|
94178
|
+
async getHarvestCall() {
|
|
94179
|
+
const harvestInfo = await this.getPendingRewards();
|
|
94180
|
+
if (harvestInfo.length == 0) {
|
|
94181
|
+
throw new Error(`No pending rewards found`);
|
|
94182
|
+
}
|
|
94162
94183
|
if (harvestInfo.length != 1) {
|
|
94163
94184
|
throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
|
|
94164
94185
|
}
|
package/dist/index.browser.mjs
CHANGED
|
@@ -4110,6 +4110,9 @@ var BaseStrategy = class extends CacheClass {
|
|
|
4110
4110
|
async getVaultPositions() {
|
|
4111
4111
|
throw new Error("Not implemented");
|
|
4112
4112
|
}
|
|
4113
|
+
async getPendingRewards() {
|
|
4114
|
+
return [];
|
|
4115
|
+
}
|
|
4113
4116
|
};
|
|
4114
4117
|
|
|
4115
4118
|
// src/node/headless.browser.ts
|
|
@@ -4195,6 +4198,10 @@ var VesuHarvests = class _VesuHarvests extends Harvests {
|
|
|
4195
4198
|
const claimed_amount = Web3Number.fromWei(_claimed_amount.toString(), 18);
|
|
4196
4199
|
logger.verbose(`${_VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
|
|
4197
4200
|
const data = _data.data["defiSpring"];
|
|
4201
|
+
if (!data) {
|
|
4202
|
+
logger.verbose(`${_VesuHarvests.name}: no defiSpring data found`);
|
|
4203
|
+
return [];
|
|
4204
|
+
}
|
|
4198
4205
|
const actualReward = Web3Number.fromWei(data.amount, 18).minus(claimed_amount);
|
|
4199
4206
|
logger.verbose(`${_VesuHarvests.name}: actualReward: ${actualReward.toString()}`);
|
|
4200
4207
|
return [{
|
|
@@ -10210,10 +10217,16 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
|
|
|
10210
10217
|
});
|
|
10211
10218
|
return [baseFlow];
|
|
10212
10219
|
}
|
|
10220
|
+
async getPendingRewards() {
|
|
10221
|
+
const vesuHarvests = new VesuHarvests(this.config);
|
|
10222
|
+
return await vesuHarvests.getUnHarvestedRewards(this.address);
|
|
10223
|
+
}
|
|
10213
10224
|
async harvest(acc) {
|
|
10214
|
-
const
|
|
10215
|
-
|
|
10216
|
-
|
|
10225
|
+
const pendingRewards = await this.getPendingRewards();
|
|
10226
|
+
if (pendingRewards.length == 0) {
|
|
10227
|
+
throw new Error(`No pending rewards found`);
|
|
10228
|
+
}
|
|
10229
|
+
const harvest = pendingRewards[0];
|
|
10217
10230
|
const avnu = new AvnuWrapper();
|
|
10218
10231
|
let swapInfo = {
|
|
10219
10232
|
token_from_address: harvest.token.address,
|
|
@@ -16642,13 +16655,15 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
16642
16655
|
amount1
|
|
16643
16656
|
};
|
|
16644
16657
|
}
|
|
16645
|
-
async
|
|
16658
|
+
async getPendingRewards() {
|
|
16646
16659
|
const ekuboHarvests = new EkuboHarvests(this.config);
|
|
16647
|
-
|
|
16648
|
-
|
|
16649
|
-
|
|
16650
|
-
|
|
16651
|
-
|
|
16660
|
+
return await ekuboHarvests.getUnHarvestedRewards(this.address);
|
|
16661
|
+
}
|
|
16662
|
+
async harvest(acc, maxIterations = 20, priceRatioPrecision = 4, minRewardAmount = new Web3Number(0, 18)) {
|
|
16663
|
+
const _pendingRewards = await this.getPendingRewards();
|
|
16664
|
+
const pendingRewards = _pendingRewards.filter((claim) => claim.actualReward.greaterThanOrEqualTo(minRewardAmount));
|
|
16665
|
+
if (pendingRewards.length == 0) {
|
|
16666
|
+
logger.verbose(`${_EkuboCLVault.name}: harvest => no pending rewards found`);
|
|
16652
16667
|
return [];
|
|
16653
16668
|
}
|
|
16654
16669
|
const poolKey = await this.getPoolKey();
|
|
@@ -16656,10 +16671,10 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
16656
16671
|
const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
|
|
16657
16672
|
const bounds = await this.getCurrentBounds();
|
|
16658
16673
|
logger.verbose(
|
|
16659
|
-
`${_EkuboCLVault.name}: harvest => unClaimedRewards: ${
|
|
16674
|
+
`${_EkuboCLVault.name}: harvest => unClaimedRewards: ${pendingRewards.length}`
|
|
16660
16675
|
);
|
|
16661
16676
|
const calls = [];
|
|
16662
|
-
const chosenClaim =
|
|
16677
|
+
const chosenClaim = pendingRewards[0];
|
|
16663
16678
|
logger.info(`${_EkuboCLVault.name}: harvest => doing one at a time`);
|
|
16664
16679
|
logger.info(`${_EkuboCLVault.name}: harvest => chosenClaim -> Claim ID: ${chosenClaim.claim.id}, Amount: ${chosenClaim.claim.amount.toString()}, actualAmount: ${chosenClaim.actualReward.toString()}, addr: ${chosenClaim.claim.claimee.toString()}`);
|
|
16665
16680
|
for (let claim of [chosenClaim]) {
|
|
@@ -30246,9 +30261,15 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
|
|
|
30246
30261
|
const manageCall = this.getManageCall(["approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */, "bring_liquidity" /* BRING_LIQUIDITY */], [manageCall1, manageCall2]);
|
|
30247
30262
|
return manageCall;
|
|
30248
30263
|
}
|
|
30249
|
-
async
|
|
30264
|
+
async getPendingRewards() {
|
|
30250
30265
|
const vesuHarvest = new VesuHarvests(this.config);
|
|
30251
|
-
|
|
30266
|
+
return await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
|
|
30267
|
+
}
|
|
30268
|
+
async getHarvestCall() {
|
|
30269
|
+
const harvestInfo = await this.getPendingRewards();
|
|
30270
|
+
if (harvestInfo.length == 0) {
|
|
30271
|
+
throw new Error(`No pending rewards found`);
|
|
30272
|
+
}
|
|
30252
30273
|
if (harvestInfo.length != 1) {
|
|
30253
30274
|
throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
|
|
30254
30275
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -375,6 +375,20 @@ declare class AutoCompounderSTRK {
|
|
|
375
375
|
}>;
|
|
376
376
|
}
|
|
377
377
|
|
|
378
|
+
interface HarvestInfo {
|
|
379
|
+
rewardsContract: ContractAddr;
|
|
380
|
+
token: ContractAddr;
|
|
381
|
+
startDate: Date;
|
|
382
|
+
endDate: Date;
|
|
383
|
+
claim: {
|
|
384
|
+
id: number;
|
|
385
|
+
amount: Web3Number;
|
|
386
|
+
claimee: ContractAddr;
|
|
387
|
+
};
|
|
388
|
+
actualReward: Web3Number;
|
|
389
|
+
proof: string[];
|
|
390
|
+
}
|
|
391
|
+
|
|
378
392
|
interface CacheData$1 {
|
|
379
393
|
timestamp: number;
|
|
380
394
|
ttl: number;
|
|
@@ -417,6 +431,7 @@ declare class BaseStrategy<TVLInfo, ActionInfo> extends CacheClass {
|
|
|
417
431
|
depositCall(amountInfo: ActionInfo, receiver: ContractAddr): Promise<Call[]>;
|
|
418
432
|
withdrawCall(amountInfo: ActionInfo, receiver: ContractAddr, owner: ContractAddr): Promise<Call[]>;
|
|
419
433
|
getVaultPositions(): Promise<VaultPosition[]>;
|
|
434
|
+
getPendingRewards(): Promise<HarvestInfo[]>;
|
|
420
435
|
}
|
|
421
436
|
|
|
422
437
|
interface PoolProps {
|
|
@@ -615,6 +630,7 @@ declare class VesuRebalance extends BaseStrategy<SingleTokenInfo, SingleActionAm
|
|
|
615
630
|
*/
|
|
616
631
|
getRebalanceCall(pools: Awaited<ReturnType<typeof this.getRebalancedPositions>>["changes"], isOverWeightAdjustment: boolean): Promise<starknet.Call | null>;
|
|
617
632
|
getInvestmentFlows(pools: PoolInfoFull[]): Promise<IInvestmentFlow[]>;
|
|
633
|
+
getPendingRewards(): Promise<HarvestInfo[]>;
|
|
618
634
|
harvest(acc: Account): Promise<starknet.Call[]>;
|
|
619
635
|
/**
|
|
620
636
|
* Calculates the fees deducted in different vTokens based on the current and previous state.
|
|
@@ -631,20 +647,6 @@ declare class VesuRebalance extends BaseStrategy<SingleTokenInfo, SingleActionAm
|
|
|
631
647
|
*/
|
|
632
648
|
declare const VesuRebalanceStrategies: IStrategyMetadata<VesuRebalanceSettings>[];
|
|
633
649
|
|
|
634
|
-
interface HarvestInfo {
|
|
635
|
-
rewardsContract: ContractAddr;
|
|
636
|
-
token: ContractAddr;
|
|
637
|
-
startDate: Date;
|
|
638
|
-
endDate: Date;
|
|
639
|
-
claim: {
|
|
640
|
-
id: number;
|
|
641
|
-
amount: Web3Number;
|
|
642
|
-
claimee: ContractAddr;
|
|
643
|
-
};
|
|
644
|
-
actualReward: Web3Number;
|
|
645
|
-
proof: string[];
|
|
646
|
-
}
|
|
647
|
-
|
|
648
650
|
interface EkuboPoolKey {
|
|
649
651
|
token0: ContractAddr;
|
|
650
652
|
token1: ContractAddr;
|
|
@@ -833,6 +835,7 @@ declare class EkuboCLVault extends BaseStrategy<DualTokenInfo, DualActionAmount>
|
|
|
833
835
|
amount0: Web3Number;
|
|
834
836
|
amount1: Web3Number;
|
|
835
837
|
}>;
|
|
838
|
+
getPendingRewards(): Promise<HarvestInfo[]>;
|
|
836
839
|
harvest(acc: Account, maxIterations?: number, priceRatioPrecision?: number, minRewardAmount?: Web3Number): Promise<Call[]>;
|
|
837
840
|
/**
|
|
838
841
|
* @description This funciton requires atleast one of the pool tokens to be reward token
|
|
@@ -1378,6 +1381,7 @@ declare class UniversalStrategy<S extends UniversalStrategySettings> extends Bas
|
|
|
1378
1381
|
getBringLiquidityCall(params: {
|
|
1379
1382
|
amount: Web3Number;
|
|
1380
1383
|
}): Promise<Call>;
|
|
1384
|
+
getPendingRewards(): Promise<HarvestInfo[]>;
|
|
1381
1385
|
getHarvestCall(): Promise<{
|
|
1382
1386
|
call: Call;
|
|
1383
1387
|
reward: Web3Number;
|
package/dist/index.js
CHANGED
|
@@ -4114,6 +4114,9 @@ var BaseStrategy = class extends CacheClass {
|
|
|
4114
4114
|
async getVaultPositions() {
|
|
4115
4115
|
throw new Error("Not implemented");
|
|
4116
4116
|
}
|
|
4117
|
+
async getPendingRewards() {
|
|
4118
|
+
return [];
|
|
4119
|
+
}
|
|
4117
4120
|
};
|
|
4118
4121
|
|
|
4119
4122
|
// src/node/headless.browser.ts
|
|
@@ -4199,6 +4202,10 @@ var VesuHarvests = class _VesuHarvests extends Harvests {
|
|
|
4199
4202
|
const claimed_amount = Web3Number.fromWei(_claimed_amount.toString(), 18);
|
|
4200
4203
|
logger.verbose(`${_VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
|
|
4201
4204
|
const data = _data.data["defiSpring"];
|
|
4205
|
+
if (!data) {
|
|
4206
|
+
logger.verbose(`${_VesuHarvests.name}: no defiSpring data found`);
|
|
4207
|
+
return [];
|
|
4208
|
+
}
|
|
4202
4209
|
const actualReward = Web3Number.fromWei(data.amount, 18).minus(claimed_amount);
|
|
4203
4210
|
logger.verbose(`${_VesuHarvests.name}: actualReward: ${actualReward.toString()}`);
|
|
4204
4211
|
return [{
|
|
@@ -10214,10 +10221,16 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
|
|
|
10214
10221
|
});
|
|
10215
10222
|
return [baseFlow];
|
|
10216
10223
|
}
|
|
10224
|
+
async getPendingRewards() {
|
|
10225
|
+
const vesuHarvests = new VesuHarvests(this.config);
|
|
10226
|
+
return await vesuHarvests.getUnHarvestedRewards(this.address);
|
|
10227
|
+
}
|
|
10217
10228
|
async harvest(acc) {
|
|
10218
|
-
const
|
|
10219
|
-
|
|
10220
|
-
|
|
10229
|
+
const pendingRewards = await this.getPendingRewards();
|
|
10230
|
+
if (pendingRewards.length == 0) {
|
|
10231
|
+
throw new Error(`No pending rewards found`);
|
|
10232
|
+
}
|
|
10233
|
+
const harvest = pendingRewards[0];
|
|
10221
10234
|
const avnu = new AvnuWrapper();
|
|
10222
10235
|
let swapInfo = {
|
|
10223
10236
|
token_from_address: harvest.token.address,
|
|
@@ -16642,13 +16655,15 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
16642
16655
|
amount1
|
|
16643
16656
|
};
|
|
16644
16657
|
}
|
|
16645
|
-
async
|
|
16658
|
+
async getPendingRewards() {
|
|
16646
16659
|
const ekuboHarvests = new EkuboHarvests(this.config);
|
|
16647
|
-
|
|
16648
|
-
|
|
16649
|
-
|
|
16650
|
-
|
|
16651
|
-
|
|
16660
|
+
return await ekuboHarvests.getUnHarvestedRewards(this.address);
|
|
16661
|
+
}
|
|
16662
|
+
async harvest(acc, maxIterations = 20, priceRatioPrecision = 4, minRewardAmount = new Web3Number(0, 18)) {
|
|
16663
|
+
const _pendingRewards = await this.getPendingRewards();
|
|
16664
|
+
const pendingRewards = _pendingRewards.filter((claim) => claim.actualReward.greaterThanOrEqualTo(minRewardAmount));
|
|
16665
|
+
if (pendingRewards.length == 0) {
|
|
16666
|
+
logger.verbose(`${_EkuboCLVault.name}: harvest => no pending rewards found`);
|
|
16652
16667
|
return [];
|
|
16653
16668
|
}
|
|
16654
16669
|
const poolKey = await this.getPoolKey();
|
|
@@ -16656,10 +16671,10 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
16656
16671
|
const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
|
|
16657
16672
|
const bounds = await this.getCurrentBounds();
|
|
16658
16673
|
logger.verbose(
|
|
16659
|
-
`${_EkuboCLVault.name}: harvest => unClaimedRewards: ${
|
|
16674
|
+
`${_EkuboCLVault.name}: harvest => unClaimedRewards: ${pendingRewards.length}`
|
|
16660
16675
|
);
|
|
16661
16676
|
const calls = [];
|
|
16662
|
-
const chosenClaim =
|
|
16677
|
+
const chosenClaim = pendingRewards[0];
|
|
16663
16678
|
logger.info(`${_EkuboCLVault.name}: harvest => doing one at a time`);
|
|
16664
16679
|
logger.info(`${_EkuboCLVault.name}: harvest => chosenClaim -> Claim ID: ${chosenClaim.claim.id}, Amount: ${chosenClaim.claim.amount.toString()}, actualAmount: ${chosenClaim.actualReward.toString()}, addr: ${chosenClaim.claim.claimee.toString()}`);
|
|
16665
16680
|
for (let claim of [chosenClaim]) {
|
|
@@ -30246,9 +30261,15 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
|
|
|
30246
30261
|
const manageCall = this.getManageCall(["approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */, "bring_liquidity" /* BRING_LIQUIDITY */], [manageCall1, manageCall2]);
|
|
30247
30262
|
return manageCall;
|
|
30248
30263
|
}
|
|
30249
|
-
async
|
|
30264
|
+
async getPendingRewards() {
|
|
30250
30265
|
const vesuHarvest = new VesuHarvests(this.config);
|
|
30251
|
-
|
|
30266
|
+
return await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
|
|
30267
|
+
}
|
|
30268
|
+
async getHarvestCall() {
|
|
30269
|
+
const harvestInfo = await this.getPendingRewards();
|
|
30270
|
+
if (harvestInfo.length == 0) {
|
|
30271
|
+
throw new Error(`No pending rewards found`);
|
|
30272
|
+
}
|
|
30252
30273
|
if (harvestInfo.length != 1) {
|
|
30253
30274
|
throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
|
|
30254
30275
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -4008,6 +4008,9 @@ var BaseStrategy = class extends CacheClass {
|
|
|
4008
4008
|
async getVaultPositions() {
|
|
4009
4009
|
throw new Error("Not implemented");
|
|
4010
4010
|
}
|
|
4011
|
+
async getPendingRewards() {
|
|
4012
|
+
return [];
|
|
4013
|
+
}
|
|
4011
4014
|
};
|
|
4012
4015
|
|
|
4013
4016
|
// src/node/headless.browser.ts
|
|
@@ -4093,6 +4096,10 @@ var VesuHarvests = class _VesuHarvests extends Harvests {
|
|
|
4093
4096
|
const claimed_amount = Web3Number.fromWei(_claimed_amount.toString(), 18);
|
|
4094
4097
|
logger.verbose(`${_VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
|
|
4095
4098
|
const data = _data.data["defiSpring"];
|
|
4099
|
+
if (!data) {
|
|
4100
|
+
logger.verbose(`${_VesuHarvests.name}: no defiSpring data found`);
|
|
4101
|
+
return [];
|
|
4102
|
+
}
|
|
4096
4103
|
const actualReward = Web3Number.fromWei(data.amount, 18).minus(claimed_amount);
|
|
4097
4104
|
logger.verbose(`${_VesuHarvests.name}: actualReward: ${actualReward.toString()}`);
|
|
4098
4105
|
return [{
|
|
@@ -10108,10 +10115,16 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
|
|
|
10108
10115
|
});
|
|
10109
10116
|
return [baseFlow];
|
|
10110
10117
|
}
|
|
10118
|
+
async getPendingRewards() {
|
|
10119
|
+
const vesuHarvests = new VesuHarvests(this.config);
|
|
10120
|
+
return await vesuHarvests.getUnHarvestedRewards(this.address);
|
|
10121
|
+
}
|
|
10111
10122
|
async harvest(acc) {
|
|
10112
|
-
const
|
|
10113
|
-
|
|
10114
|
-
|
|
10123
|
+
const pendingRewards = await this.getPendingRewards();
|
|
10124
|
+
if (pendingRewards.length == 0) {
|
|
10125
|
+
throw new Error(`No pending rewards found`);
|
|
10126
|
+
}
|
|
10127
|
+
const harvest = pendingRewards[0];
|
|
10115
10128
|
const avnu = new AvnuWrapper();
|
|
10116
10129
|
let swapInfo = {
|
|
10117
10130
|
token_from_address: harvest.token.address,
|
|
@@ -16540,13 +16553,15 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
16540
16553
|
amount1
|
|
16541
16554
|
};
|
|
16542
16555
|
}
|
|
16543
|
-
async
|
|
16556
|
+
async getPendingRewards() {
|
|
16544
16557
|
const ekuboHarvests = new EkuboHarvests(this.config);
|
|
16545
|
-
|
|
16546
|
-
|
|
16547
|
-
|
|
16548
|
-
|
|
16549
|
-
|
|
16558
|
+
return await ekuboHarvests.getUnHarvestedRewards(this.address);
|
|
16559
|
+
}
|
|
16560
|
+
async harvest(acc, maxIterations = 20, priceRatioPrecision = 4, minRewardAmount = new Web3Number(0, 18)) {
|
|
16561
|
+
const _pendingRewards = await this.getPendingRewards();
|
|
16562
|
+
const pendingRewards = _pendingRewards.filter((claim) => claim.actualReward.greaterThanOrEqualTo(minRewardAmount));
|
|
16563
|
+
if (pendingRewards.length == 0) {
|
|
16564
|
+
logger.verbose(`${_EkuboCLVault.name}: harvest => no pending rewards found`);
|
|
16550
16565
|
return [];
|
|
16551
16566
|
}
|
|
16552
16567
|
const poolKey = await this.getPoolKey();
|
|
@@ -16554,10 +16569,10 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
16554
16569
|
const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
|
|
16555
16570
|
const bounds = await this.getCurrentBounds();
|
|
16556
16571
|
logger.verbose(
|
|
16557
|
-
`${_EkuboCLVault.name}: harvest => unClaimedRewards: ${
|
|
16572
|
+
`${_EkuboCLVault.name}: harvest => unClaimedRewards: ${pendingRewards.length}`
|
|
16558
16573
|
);
|
|
16559
16574
|
const calls = [];
|
|
16560
|
-
const chosenClaim =
|
|
16575
|
+
const chosenClaim = pendingRewards[0];
|
|
16561
16576
|
logger.info(`${_EkuboCLVault.name}: harvest => doing one at a time`);
|
|
16562
16577
|
logger.info(`${_EkuboCLVault.name}: harvest => chosenClaim -> Claim ID: ${chosenClaim.claim.id}, Amount: ${chosenClaim.claim.amount.toString()}, actualAmount: ${chosenClaim.actualReward.toString()}, addr: ${chosenClaim.claim.claimee.toString()}`);
|
|
16563
16578
|
for (let claim of [chosenClaim]) {
|
|
@@ -30144,9 +30159,15 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
|
|
|
30144
30159
|
const manageCall = this.getManageCall(["approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */, "bring_liquidity" /* BRING_LIQUIDITY */], [manageCall1, manageCall2]);
|
|
30145
30160
|
return manageCall;
|
|
30146
30161
|
}
|
|
30147
|
-
async
|
|
30162
|
+
async getPendingRewards() {
|
|
30148
30163
|
const vesuHarvest = new VesuHarvests(this.config);
|
|
30149
|
-
|
|
30164
|
+
return await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
|
|
30165
|
+
}
|
|
30166
|
+
async getHarvestCall() {
|
|
30167
|
+
const harvestInfo = await this.getPendingRewards();
|
|
30168
|
+
if (harvestInfo.length == 0) {
|
|
30169
|
+
throw new Error(`No pending rewards found`);
|
|
30170
|
+
}
|
|
30150
30171
|
if (harvestInfo.length != 1) {
|
|
30151
30172
|
throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
|
|
30152
30173
|
}
|
package/package.json
CHANGED
package/src/modules/harvests.ts
CHANGED
|
@@ -108,6 +108,10 @@ export class VesuHarvests extends Harvests {
|
|
|
108
108
|
logger.verbose(`${VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
|
|
109
109
|
|
|
110
110
|
const data = _data.data['defiSpring'];
|
|
111
|
+
if (!data) {
|
|
112
|
+
logger.verbose(`${VesuHarvests.name}: no defiSpring data found`);
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
111
115
|
|
|
112
116
|
// get the actual reward
|
|
113
117
|
const actualReward = Web3Number.fromWei(data.amount, 18).minus(claimed_amount);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ContractAddr, Web3Number } from "@/dataTypes";
|
|
2
2
|
import { IConfig, TokenInfo, VaultPosition } from "@/interfaces";
|
|
3
|
+
import { HarvestInfo } from "@/modules/harvests";
|
|
3
4
|
import { CacheClass } from "@/utils/cacheClass";
|
|
4
5
|
import { Call } from "starknet";
|
|
5
6
|
|
|
@@ -55,4 +56,8 @@ export class BaseStrategy<TVLInfo, ActionInfo> extends CacheClass {
|
|
|
55
56
|
async getVaultPositions(): Promise<VaultPosition[]> {
|
|
56
57
|
throw new Error("Not implemented");
|
|
57
58
|
}
|
|
59
|
+
|
|
60
|
+
async getPendingRewards(): Promise<HarvestInfo[]> {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
58
63
|
}
|
|
@@ -1597,32 +1597,31 @@ export class EkuboCLVault extends BaseStrategy<
|
|
|
1597
1597
|
};
|
|
1598
1598
|
}
|
|
1599
1599
|
|
|
1600
|
-
async
|
|
1600
|
+
async getPendingRewards(): Promise<HarvestInfo[]> {
|
|
1601
1601
|
const ekuboHarvests = new EkuboHarvests(this.config);
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
if (
|
|
1609
|
-
logger.verbose(`${EkuboCLVault.name}: harvest => no
|
|
1602
|
+
return await ekuboHarvests.getUnHarvestedRewards(this.address);
|
|
1603
|
+
}
|
|
1604
|
+
|
|
1605
|
+
async harvest(acc: Account, maxIterations = 20, priceRatioPrecision = 4, minRewardAmount: Web3Number = new Web3Number(0, 18)): Promise<Call[]> {
|
|
1606
|
+
const _pendingRewards = await this.getPendingRewards();
|
|
1607
|
+
const pendingRewards = _pendingRewards.filter(claim => claim.actualReward.greaterThanOrEqualTo(minRewardAmount));
|
|
1608
|
+
if (pendingRewards.length == 0) {
|
|
1609
|
+
logger.verbose(`${EkuboCLVault.name}: harvest => no pending rewards found`);
|
|
1610
1610
|
return [];
|
|
1611
1611
|
}
|
|
1612
|
-
|
|
1613
1612
|
// get necessary info for the harvest
|
|
1614
1613
|
const poolKey = await this.getPoolKey();
|
|
1615
1614
|
const token0Info = await Global.getTokenInfoFromAddr(poolKey.token0);
|
|
1616
1615
|
const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
|
|
1617
1616
|
const bounds = await this.getCurrentBounds();
|
|
1618
1617
|
logger.verbose(
|
|
1619
|
-
`${EkuboCLVault.name}: harvest => unClaimedRewards: ${
|
|
1618
|
+
`${EkuboCLVault.name}: harvest => unClaimedRewards: ${pendingRewards.length}`
|
|
1620
1619
|
);
|
|
1621
1620
|
|
|
1622
1621
|
// execute the harvest
|
|
1623
1622
|
const calls: Call[] = [];
|
|
1624
1623
|
// do one at a time.
|
|
1625
|
-
const chosenClaim =
|
|
1624
|
+
const chosenClaim = pendingRewards[0];
|
|
1626
1625
|
logger.info(`${EkuboCLVault.name}: harvest => doing one at a time`);
|
|
1627
1626
|
logger.info(`${EkuboCLVault.name}: harvest => chosenClaim -> Claim ID: ${chosenClaim.claim.id}, Amount: ${chosenClaim.claim.amount.toString()}, actualAmount: ${chosenClaim.actualReward.toString()}, addr: ${chosenClaim.claim.claimee.toString()}`);
|
|
1628
1627
|
for (let claim of [chosenClaim]) {
|
|
@@ -11,7 +11,7 @@ import { ApproveCallParams, AvnuSwapCallParams, BaseAdapter, CommonAdapter, Flas
|
|
|
11
11
|
import { Global } from "@/global";
|
|
12
12
|
import { AvnuWrapper, ERC20 } from "@/modules";
|
|
13
13
|
import { AVNU_MIDDLEWARE, VESU_SINGLETON } from "./universal-adapters/adapter-utils";
|
|
14
|
-
import { VesuHarvests } from "@/modules/harvests";
|
|
14
|
+
import { HarvestInfo, VesuHarvests } from "@/modules/harvests";
|
|
15
15
|
|
|
16
16
|
export interface UniversalManageCall {
|
|
17
17
|
proofs: string[];
|
|
@@ -729,9 +729,16 @@ export class UniversalStrategy<
|
|
|
729
729
|
return manageCall;
|
|
730
730
|
}
|
|
731
731
|
|
|
732
|
-
async
|
|
732
|
+
async getPendingRewards(): Promise<HarvestInfo[]> {
|
|
733
733
|
const vesuHarvest = new VesuHarvests(this.config);
|
|
734
|
-
|
|
734
|
+
return await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
async getHarvestCall() {
|
|
738
|
+
const harvestInfo = await this.getPendingRewards();
|
|
739
|
+
if (harvestInfo.length == 0) {
|
|
740
|
+
throw new Error(`No pending rewards found`);
|
|
741
|
+
}
|
|
735
742
|
if (harvestInfo.length != 1) {
|
|
736
743
|
throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
|
|
737
744
|
}
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
SingleTokenInfo
|
|
26
26
|
} from "./base-strategy";
|
|
27
27
|
import { getAPIUsingHeadlessBrowser } from "@/node/headless";
|
|
28
|
-
import { VesuHarvests } from "@/modules/harvests";
|
|
28
|
+
import { HarvestInfo, VesuHarvests } from "@/modules/harvests";
|
|
29
29
|
import VesuPoolIDs from "@/data/vesu_pools.json";
|
|
30
30
|
import { COMMON_CONTRACTS, ENDPOINTS } from "./constants";
|
|
31
31
|
|
|
@@ -763,10 +763,17 @@ export class VesuRebalance extends BaseStrategy<
|
|
|
763
763
|
return [baseFlow];
|
|
764
764
|
}
|
|
765
765
|
|
|
766
|
+
async getPendingRewards(): Promise<HarvestInfo[]> {
|
|
767
|
+
const vesuHarvests = new VesuHarvests(this.config);
|
|
768
|
+
return await vesuHarvests.getUnHarvestedRewards(this.address);
|
|
769
|
+
}
|
|
770
|
+
|
|
766
771
|
async harvest(acc: Account) {
|
|
767
|
-
const
|
|
768
|
-
|
|
769
|
-
|
|
772
|
+
const pendingRewards = await this.getPendingRewards();
|
|
773
|
+
if (pendingRewards.length == 0) {
|
|
774
|
+
throw new Error(`No pending rewards found`);
|
|
775
|
+
}
|
|
776
|
+
const harvest = pendingRewards[0];
|
|
770
777
|
const avnu = new AvnuWrapper();
|
|
771
778
|
let swapInfo: SwapInfo = {
|
|
772
779
|
token_from_address: harvest.token.address,
|