Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

Commit

Permalink
fix(aura): Fix Aura Lp Staking on Base (#3079)
Browse files Browse the repository at this point in the history
* fix(aura): Fix Aura Lp Staking on Base

* fix(rpc): Update Arbitrum RPC url
  • Loading branch information
wpoulin committed Nov 23, 2023
1 parent 12ef5cb commit 39eff8e
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 18 deletions.
3 changes: 3 additions & 0 deletions src/apps/aura/base/aura.lp-farm.contract-position-fetcher.ts
Expand Up @@ -8,6 +8,9 @@ import { AuraFarmContractPositionFetcher } from '../common/aura.farm.contract-po
export class BaseAuraLpFarmContractPositionFetcher extends AuraFarmContractPositionFetcher {
groupLabel = 'Liquidity Pool Staking';

balancerTokenAddress = '0x4158734d47fc9692176b5085e0f52ee0da5d47f1';
auraTokenAddress = '0x1509706a6c66ca549ff0cb464de88231ddbe213b';

boosterMultiplierAddress = '0x98ef32edd24e2c92525e59afc4475c1242a30184';

async getFarmAddresses() {
Expand Down
38 changes: 21 additions & 17 deletions src/apps/aura/common/aura.farm.contract-position-fetcher.ts
Expand Up @@ -13,6 +13,7 @@ import {
SingleStakingFarmDataProps,
SingleStakingFarmDynamicTemplateContractPositionFetcher,
} from '~position/template/single-staking.dynamic.template.contract-position-fetcher';
import { Network } from '~types';

import { AuraViemContractFactory } from '../contracts';
import { AuraBaseRewardPool } from '../contracts/viem';
Expand Down Expand Up @@ -72,6 +73,10 @@ export const claimedBalToMintedAura = (claimedBalAmount: string, currentAuraSupp
export abstract class AuraFarmContractPositionFetcher extends SingleStakingFarmDynamicTemplateContractPositionFetcher<AuraBaseRewardPool> {
abstract boosterMultiplierAddress: string;

abstract balancerTokenAddress: string;
abstract auraTokenAddress: string;
isBoosterLite = this.network !== Network.ETHEREUM_MAINNET;

constructor(
@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit,
@Inject(AuraViemContractFactory) protected readonly contractFactory: AuraViemContractFactory,
Expand All @@ -88,13 +93,6 @@ export abstract class AuraFarmContractPositionFetcher extends SingleStakingFarmD
}

async getRewardTokenAddresses({ contract, multicall }: GetTokenDefinitionsParams<AuraBaseRewardPool>) {
// BAL rewarded, AURA minted
const primaryRewardTokenAddresses = [
'0xba100000625a3754423978a60c9317c58a424e3d', // BAL
'0xc0c293ce456ff0ed870add98a0828dd4d2903dbf', // AURA
];

// Extra rewards
const extraRewardTokenAddresses = await Promise.all(
range(0, Number(await contract.read.extraRewardsLength())).map(async v => {
const vbpAddress = await contract.read.extraRewards([BigInt(v)]);
Expand All @@ -119,22 +117,23 @@ export abstract class AuraFarmContractPositionFetcher extends SingleStakingFarmD
}

// We will combine AURA extra rewards with the amount minted
if (rewardTokenAddress === primaryRewardTokenAddresses[1]) return null;
if (rewardTokenAddress === this.auraTokenAddress) return null;

return rewardTokenAddress;
}),
);

return [...primaryRewardTokenAddresses, ...compact(extraRewardTokenAddresses)];
return [this.balancerTokenAddress, this.auraTokenAddress, ...compact(extraRewardTokenAddresses)];
}

async getRewardRates({
contract,
multicall,
contractPosition,
}: GetDataPropsParams<AuraBaseRewardPool, SingleStakingFarmDataProps>): Promise<BigNumberish | BigNumberish[]> {
const auraToken = contractPosition.tokens.find(v => v.symbol === 'AURA')!;
const auraTokenContract = this.appToolkit.globalViemContracts.erc20(auraToken);
const auraTokenContract = this.appToolkit.globalViemContracts.erc20({
address: this.auraTokenAddress,
network: this.network,
});
const auraSupplyRaw = await multicall.wrap(auraTokenContract).read.totalSupply();

const balRewardRate = await multicall.wrap(contract).read.rewardRate();
Expand Down Expand Up @@ -176,12 +175,17 @@ export abstract class AuraFarmContractPositionFetcher extends SingleStakingFarmD
network: this.network,
});

const [rewardMultiplierDenominator, rewardMultipleRaw] = await Promise.all([
multicall.wrap(boosterMultiplierContract).read.REWARD_MULTIPLIER_DENOMINATOR(),
multicall.wrap(boosterMultiplierContract).read.getRewardMultipliers([contractPosition.address]),
]);
let auraBalanceRaw: BigNumber;

let auraBalanceRaw = auraBalanceMintedRaw.mul(rewardMultipleRaw).div(rewardMultiplierDenominator);
if (!this.isBoosterLite) {
const [rewardMultiplierDenominator, rewardMultipleRaw] = await Promise.all([
multicall.wrap(boosterMultiplierContract).read.REWARD_MULTIPLIER_DENOMINATOR(),
multicall.wrap(boosterMultiplierContract).read.getRewardMultipliers([contractPosition.address]),
]);
auraBalanceRaw = auraBalanceMintedRaw.mul(rewardMultipleRaw).div(rewardMultiplierDenominator);
} else {
auraBalanceRaw = auraBalanceMintedRaw;
}

const numExtraRewards = await multicall.wrap(contract).read.extraRewardsLength();
const extraRewardBalances = await Promise.all(
Expand Down
Expand Up @@ -9,6 +9,9 @@ import { AuraBaseRewardPool } from '../contracts/viem';
export class EthereumAuraAuraBalStakingContractPositionFetcher extends AuraFarmContractPositionFetcher {
groupLabel = 'auraBAL Classic';

balancerTokenAddress = '0xba100000625a3754423978a60c9317c58a424e3d';
auraTokenAddress = '0xc0c293ce456ff0ed870add98a0828dd4d2903dbf';

AURA_BAL_STAKING_V1 = '0x5e5ea2048475854a5702f5b8468a51ba1296efcc';
AURA_BAL_STAKING_V2 = '0x00a7ba8ae7bca0b10a32ea1f8e2a1da980c6cad2';
boosterMultiplierAddress = '0xa57b8d98dae62b26ec3bcc4a365338157060b234';
Expand Down
Expand Up @@ -8,6 +8,9 @@ import { AuraFarmContractPositionFetcher } from '../common/aura.farm.contract-po
export class EthereumAuraLpFarmContractPositionFetcher extends AuraFarmContractPositionFetcher {
groupLabel = 'Liquidity Pool Staking';

balancerTokenAddress = '0xba100000625a3754423978a60c9317c58a424e3d';
auraTokenAddress = '0xc0c293ce456ff0ed870add98a0828dd4d2903dbf';

BOOSTER_V1_ADDRESS = '0x7818a1da7bd1e64c199029e86ba244a9798eee10';
boosterMultiplierAddress = '0xa57b8d98dae62b26ec3bcc4a365338157060b234';

Expand Down
2 changes: 1 addition & 1 deletion src/network-provider/network-provider.registry.ts
@@ -1,7 +1,7 @@
import { Network } from '~types/network.interface';

export const DEFAULT_REGISTRY: Record<Exclude<Network, Network.BITCOIN_MAINNET>, string> = {
[Network.ARBITRUM_MAINNET]: 'https://arb-mainnet-public.unifra.io',
[Network.ARBITRUM_MAINNET]: 'https://arbitrum.llamarpc.com',
[Network.AVALANCHE_MAINNET]: 'https://avalanche.public-rpc.com',
[Network.BINANCE_SMART_CHAIN_MAINNET]: 'https://bsc-dataseed.binance.org/',
[Network.CELO_MAINNET]: 'https://forno.celo.org',
Expand Down

0 comments on commit 39eff8e

Please sign in to comment.