From 51256c7619d5575469fb208c32e1bee46201c080 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 3 Jul 2023 12:35:33 +0200 Subject: [PATCH 1/3] fix(amm): read farming reward curencies from farmingRewards pallet --- src/parachain/amm.ts | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/parachain/amm.ts b/src/parachain/amm.ts index ded6308fe..ecb7f3a57 100644 --- a/src/parachain/amm.ts +++ b/src/parachain/amm.ts @@ -594,22 +594,38 @@ export class DefaultAMMAPI implements AMMAPI { return { extrinsic: swapExtrinsic, event: this.api.events.dexStable.CurrencyExchange }; } + private async _getFarmingRewardCurrencyIds( + lpTokenCurrencyId: InterbtcPrimitivesCurrencyId + ): Promise> { + const rewardCurrencies: Array = []; + + const rewardCurrenciesRaw = await this.api.query.farmingRewards.rewardCurrencies(lpTokenCurrencyId); + rewardCurrenciesRaw.forEach((rewardCurrencyId: InterbtcPrimitivesCurrencyId) => + rewardCurrencies.push(rewardCurrencyId) + ); + + return rewardCurrencies; + } + private async _getClaimableFarmingRewardsByPool( accountId: AccountId, - lpToken: LpCurrency, - pool: LiquidityPool + lpToken: LpCurrency ): Promise>> { const lpTokenCurrencyId = newCurrencyId(this.api, lpToken); - const rewardCurrencyIds = pool.rewardAmountsYearly.map(({ currency: rewardCurrency }) => - newCurrencyId(this.api, rewardCurrency) - ); + + const rewardCurrencyIds = await this._getFarmingRewardCurrencyIds(lpTokenCurrencyId); + const farmingRewards = await Promise.all( rewardCurrencyIds.map((rewardCurrencyId) => this.api.rpc.reward.computeFarmingReward(accountId, lpTokenCurrencyId, rewardCurrencyId) ) ); - const rewardAmounts = pool.rewardAmountsYearly.map(({ currency: rewardCurrency }, index) => - newMonetaryAmount(farmingRewards[index].amount.toString(), rewardCurrency) + + const rewardAmounts = Promise.all( + rewardCurrencyIds.map(async (currencyId, index) => { + const currency = await currencyIdToMonetaryCurrency(this.api, currencyId); + return newMonetaryAmount(farmingRewards[index].amount.toString(), currency); + }) ); return rewardAmounts; @@ -627,7 +643,7 @@ export class DefaultAMMAPI implements AMMAPI { // Return empty array for pools without liquidity. return []; } - return this._getClaimableFarmingRewardsByPool(accountId, currency, pool); + return this._getClaimableFarmingRewardsByPool(accountId, currency); }) ); From 1f54ddd77d696a4e47ebe339af08396780791c76 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 3 Jul 2023 12:54:50 +0200 Subject: [PATCH 2/3] chore: bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 59c35163e..3fcfaeade 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@interlay/interbtc-api", - "version": "2.3.4", + "version": "2.3.5", "description": "JavaScript library to interact with interBTC", "main": "build/src/index.js", "typings": "build/src/index.d.ts", From 3d8fe9da1fb43ac7f6e2c98066f4b184d5cb694e Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 3 Jul 2023 13:08:32 +0200 Subject: [PATCH 3/3] refactor: simplify decoding --- src/parachain/amm.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/parachain/amm.ts b/src/parachain/amm.ts index ecb7f3a57..2bad12081 100644 --- a/src/parachain/amm.ts +++ b/src/parachain/amm.ts @@ -597,12 +597,9 @@ export class DefaultAMMAPI implements AMMAPI { private async _getFarmingRewardCurrencyIds( lpTokenCurrencyId: InterbtcPrimitivesCurrencyId ): Promise> { - const rewardCurrencies: Array = []; - const rewardCurrenciesRaw = await this.api.query.farmingRewards.rewardCurrencies(lpTokenCurrencyId); - rewardCurrenciesRaw.forEach((rewardCurrencyId: InterbtcPrimitivesCurrencyId) => - rewardCurrencies.push(rewardCurrencyId) - ); + + const rewardCurrencies = Array.from(rewardCurrenciesRaw.values()); return rewardCurrencies; }