Skip to content

Commit 8ee6b17

Browse files
feat: calculate rebalance rewards for each transaction (#68)
* feat: calculate rebalance rewards for each transaction * feat: apply simple caching for better performance
1 parent ea94e54 commit 8ee6b17

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/modules/common-params/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export type SkybridgeParams<
5252

5353
price: string;
5454
rebateRate: string;
55+
rebalanceRewards: string;
5556
};
5657

5758
export const SkybridgeTermsMessage = {

src/modules/generic-details/index.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { SkybridgeParams, SkybridgeStatus } from '../common-params';
44
import type { SkybridgeResource } from '../resources';
55
import { fromApiCoin, SkybridgeCoin } from '../coins';
66
import { SkybridgeBridge } from '../bridges';
7+
import { estimateSwapRewards } from '../generic-rewards';
78

89
type ServerReturnType<R extends SkybridgeResource, M extends SkybridgeMode> = {
910
items: Array<
@@ -41,12 +42,14 @@ type ReturnType<R extends SkybridgeResource, M extends SkybridgeMode> = Pick<
4142
| 'feeCurrency'
4243
| 'addressSending'
4344
| 'isSkypoolsSwap'
45+
| 'rebalanceRewards'
4446
> & {
4547
txDepositId: SkybridgeParams<R, M>['txDepositId'] | null;
4648
txReceivingId: SkybridgeParams<R, M>['txReceivingId'] | null;
4749
};
4850

4951
const bridgeCache = new Map<string, SkybridgeBridge>();
52+
const rebalanceRewardsCache = new Map<string, string>();
5053

5154
export const getDetails = async <R extends SkybridgeResource, M extends SkybridgeMode>({
5255
resource,
@@ -109,6 +112,22 @@ export const getDetails = async <R extends SkybridgeResource, M extends Skybridg
109112
throw new Error(`"${hash}" is not a withdrawal, it is a swap.`);
110113
}
111114

115+
const rebalanceRewards: string = await (async () => {
116+
const cache = rebalanceRewardsCache.get(hash);
117+
if (cache) return cache;
118+
119+
const swapRewardsResult = await estimateSwapRewards({
120+
context,
121+
amountDesired: result.data.amountIn,
122+
currencyDeposit: fromApiCoin({ bridge: result.bridge, coin: result.data.currencyIn as any }),
123+
currencyReceiving: fromApiCoin({ bridge: result.bridge, coin: result.data.currencyOut as any }),
124+
});
125+
126+
rebalanceRewardsCache.set(hash, swapRewardsResult.amountReceiving);
127+
return swapRewardsResult.amountReceiving;
128+
})();
129+
130+
112131
return ({
113132
addressReceiving: result.data.addressOut,
114133
addressDeposit: result.data.addressDeposit,
@@ -128,6 +147,7 @@ export const getDetails = async <R extends SkybridgeResource, M extends Skybridg
128147
coin: (result.data.feeCurrency as any) || null,
129148
}),
130149
feeTotal: result.data.fee,
150+
rebalanceRewards,
131151
isSkypoolsSwap: resource === 'swap' && result.data.skypools === true,
132152
} as unknown) as ReturnType<R, M>;
133153
};

0 commit comments

Comments
 (0)