Skip to content

Commit

Permalink
feat(abracadabra): Migrate to templates (Zapper-fi#1201)
Browse files Browse the repository at this point in the history
  • Loading branch information
immasandwich committed Aug 18, 2022
1 parent ce3b608 commit 5737693
Show file tree
Hide file tree
Showing 40 changed files with 516 additions and 1,387 deletions.
42 changes: 34 additions & 8 deletions src/apps/abracadabra/abracadabra.definition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,50 @@ import { Network } from '~types/network.interface';

export const ABRACADABRA_DEFINITION = appDefinition({
id: 'abracadabra',
groups: {
stakedSpell: { id: 'staked-spell', type: GroupType.TOKEN, label: 'Staked SPELL' },
mSpell: { id: 'm-spell', type: GroupType.POSITION, label: 'mSpell' },
cauldron: { id: 'cauldron', type: GroupType.POSITION, label: 'Cauldrons' },
farm: { id: 'farm', type: GroupType.POSITION, label: 'Farms' },
degenbox: { id: 'degenbox', type: GroupType.POSITION, label: 'Abracadabra Degenbox' },
},
name: 'Abracadabra',
description: `Abracadabra is a lending platform that uses interest-bearing tokens as collateral to borrow a USD pegged stable coin that can be used as any other stablecoin. Abracadabra provides the opportunity for users to unlock the capital of their yield.`,
url: 'https://abracadabra.money/',
tags: [AppTag.LENDING],
links: {
github: 'https://github.com/Abracadabra-money',
twitter: 'https://twitter.com/MIM_Spell',
discord: 'https://t.co/mi8POGJUaH',
telegram: 'https://t.me/abracadabramoney',
medium: 'https://abracadabramoney.medium.com/',
},
tags: [AppTag.LENDING],

groups: {
stakedSpell: {
id: 'staked-spell',
type: GroupType.TOKEN,
label: 'Staked SPELL',
},

mSpell: {
id: 'm-spell',
type: GroupType.POSITION,
label: 'mSPELL',
},

cauldron: {
id: 'cauldron',
type: GroupType.POSITION,
label: 'Cauldrons',
},

farm: {
id: 'farm',
type: GroupType.POSITION,
label: 'Farms',
},

degenbox: {
id: 'degenbox',
type: GroupType.POSITION,
label: 'Abracadabra Degenbox',
},
},

supportedNetworks: {
[Network.ARBITRUM_MAINNET]: [AppAction.VIEW],
[Network.AVALANCHE_MAINNET]: [AppAction.VIEW],
Expand Down
19 changes: 2 additions & 17 deletions src/apps/abracadabra/abracadabra.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,24 @@ import { OlympusAppModule } from '~apps/olympus';
import { SushiSwapBentoBoxAppModule } from '~apps/sushiswap-bentobox';

import { AbracadabraAppDefinition, ABRACADABRA_DEFINITION } from './abracadabra.definition';
import { ArbitrumAbracadabraBalanceFetcher } from './arbitrum/abracadabra.balance-fetcher';
import { ArbitrumAbracadabraCauldronContractPositionFetcher } from './arbitrum/abracadabra.cauldron.contract-position-fetcher';
import { ArbitrumAbracadabraFarmContractPositionFetcher } from './arbitrum/abracadabra.farm.contract-position-fetcher';
import { ArbitrumAbracadabraMspellContractPositionFetcher } from './arbitrum/abracadabra.m-spell.contract-position-fetcher';
import { ArbitrumAbracadabraStakedSpellTokenFetcher } from './arbitrum/abracadabra.staked-spell.token-fetcher';
import { AvalancheAbracadabraBalanceFetcher } from './avalanche/abracadabra.balance-fetcher';
import { AvalancheAbracadabraCauldronContractPositionFetcher } from './avalanche/abracadabra.cauldron.contract-position-fetcher';
import { AvalancheAbracadabraFarmContractPositionFetcher } from './avalanche/abracadabra.farm.contract-position-fetcher';
import { AvalancheAbracadabraMspellContractPositionFetcher } from './avalanche/abracadabra.m-spell.contract-position-fetcher';
import { AvalancheAbracadabraStakedSpellTokenFetcher } from './avalanche/abracadabra.staked-spell.token-fetcher';
import { BinanceSmartChainAbracadabraBalanceFetcher } from './binance-smart-chain/abracadabra.balance-fetcher';
import { BinanceSmartChainAbracadabraCauldronContractPositionFetcher } from './binance-smart-chain/abracadabra.cauldron.contract-position-fetcher';
import { AbracadabraContractFactory } from './contracts';
import { EthereumAbracadabraBalanceFetcher } from './ethereum/abracadabra.balance-fetcher';
import { EthereumAbracadabraCauldronContractPositionFetcher } from './ethereum/abracadabra.cauldron.contract-position-fetcher';
import { EthereumAbracadabraFarmContractPositionFetcher } from './ethereum/abracadabra.farm.contract-position-fetcher';
import { EthereumAbracadabraMspellContractPositionFetcher } from './ethereum/abracadabra.m-spell.contract-position-fetcher';
import { EthereumAbracadabraStakedSpellTokenFetcher } from './ethereum/abracadabra.staked-spell.token-fetcher';
import { FantomAbracadabraBalanceFetcher } from './fantom/abracadabra.balance-fetcher';
import { FantomAbracadabraCauldronContractPositionFetcher } from './fantom/abracadabra.cauldron.contract-position-fetcher';
import { FantomAbracadabraMspellContractPositionFetcher } from './fantom/abracadabra.m-spell.contract-position-fetcher';
import { FantomAbracadabraFarmContractPositionFetcher } from './fantom/abracadbra.farm.contract-position-fetcher';
import { FantomAbracadabraStakedSpellTokenFetcher } from './fantom/abracadbra.staked-spell.token-fetcher';
import { AbracadabraCauldronBalanceHelper } from './helpers/abracadabra.cauldron.balance-helper';
import { AbracadabraCauldronContractPositionHelper } from './helpers/abracadabra.cauldron.contract-position-helper';

@Register.AppModule({
appId: ABRACADABRA_DEFINITION.id,
Expand All @@ -40,32 +33,24 @@ import { AbracadabraCauldronContractPositionHelper } from './helpers/abracadabra
ArbitrumAbracadabraStakedSpellTokenFetcher,
ArbitrumAbracadabraCauldronContractPositionFetcher,
ArbitrumAbracadabraFarmContractPositionFetcher,
ArbitrumAbracadabraBalanceFetcher,
ArbitrumAbracadabraMspellContractPositionFetcher,
// Avalanche
AvalancheAbracadabraStakedSpellTokenFetcher,
AvalancheAbracadabraCauldronContractPositionFetcher,
AvalancheAbracadabraFarmContractPositionFetcher,
AvalancheAbracadabraBalanceFetcher,
AvalancheAbracadabraMspellContractPositionFetcher,
// Binance Smart Chain
BinanceSmartChainAbracadabraCauldronContractPositionFetcher,
// Ethereum
EthereumAbracadabraStakedSpellTokenFetcher,
EthereumAbracadabraCauldronContractPositionFetcher,
EthereumAbracadabraFarmContractPositionFetcher,
EthereumAbracadabraBalanceFetcher,
EthereumAbracadabraMspellContractPositionFetcher,
// Fantom
FantomAbracadabraStakedSpellTokenFetcher,
FantomAbracadabraCauldronContractPositionFetcher,
FantomAbracadabraFarmContractPositionFetcher,
FantomAbracadabraBalanceFetcher,
FantomAbracadabraMspellContractPositionFetcher,
// Binance Smart Chain
BinanceSmartChainAbracadabraCauldronContractPositionFetcher,
BinanceSmartChainAbracadabraBalanceFetcher,
// Helpers
AbracadabraCauldronBalanceHelper,
AbracadabraCauldronContractPositionHelper,
],
})
export class AbracadabraAppModule extends AbstractApp() {}
121 changes: 0 additions & 121 deletions src/apps/abracadabra/arbitrum/abracadabra.balance-fetcher.ts

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,35 +1,19 @@
import { Inject } from '@nestjs/common';

import { Register } from '~app-toolkit/decorators';
import { PositionFetcher } from '~position/position-fetcher.interface';
import { ContractPosition } from '~position/position.interface';
import { Network } from '~types/network.interface';

import { ABRACADABRA_DEFINITION } from '../abracadabra.definition';
import { AbracadabraCauldronContractPositionHelper } from '../helpers/abracadabra.cauldron.contract-position-helper';

const CAULDRONS = [
'0xc89958b03a55b5de2221acb25b58b89a000215e6', // ETH
];
import { AbracadabraCauldronContractPositionFetcher } from '../common/abracadabra.cauldron.contract-position-fetcher';

const appId = ABRACADABRA_DEFINITION.id;
const groupId = ABRACADABRA_DEFINITION.groups.cauldron.id;
const network = Network.ARBITRUM_MAINNET;

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumAbracadabraCauldronContractPositionFetcher implements PositionFetcher<ContractPosition> {
constructor(
@Inject(AbracadabraCauldronContractPositionHelper)
private readonly abracadabraCauldronContractPositionHelper: AbracadabraCauldronContractPositionHelper,
) {}

async getPositions() {
return this.abracadabraCauldronContractPositionHelper.getContractPositions({
cauldronAddresses: CAULDRONS,
network,
dependencies: [
{ appId: ABRACADABRA_DEFINITION.id, groupIds: [ABRACADABRA_DEFINITION.groups.stakedSpell.id], network },
],
});
}
export class ArbitrumAbracadabraCauldronContractPositionFetcher extends AbracadabraCauldronContractPositionFetcher {
appId = appId;
groupId = groupId;
network = network;
cauldrons = [
'0xc89958b03a55b5de2221acb25b58b89a000215e6', // ETH
];
}
Original file line number Diff line number Diff line change
@@ -1,58 +1,17 @@
import { Inject } from '@nestjs/common';

import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface';
import { Register } from '~app-toolkit/decorators';
import { RewardRateUnit } from '~app-toolkit/helpers/master-chef/master-chef.contract-position-helper';
import { CURVE_DEFINITION } from '~apps/curve';
import { PositionFetcher } from '~position/position-fetcher.interface';
import { ContractPosition } from '~position/position.interface';
import { Network } from '~types/network.interface';

import { ABRACADABRA_DEFINITION } from '../abracadabra.definition';
import { AbracadabraContractFactory, PopsicleChef } from '../contracts';
import { AbracadabraFarmContractPositionFetcher } from '../common/abracadabra.farm.contract-position-fetcher';

const appId = ABRACADABRA_DEFINITION.id;
const groupId = ABRACADABRA_DEFINITION.groups.farm.id;
const network = Network.ARBITRUM_MAINNET;

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumAbracadabraFarmContractPositionFetcher implements PositionFetcher<ContractPosition> {
constructor(
@Inject(APP_TOOLKIT) private readonly appToolkit: IAppToolkit,
@Inject(AbracadabraContractFactory) private readonly contractFactory: AbracadabraContractFactory,
) {}

async getPositions() {
return this.appToolkit.helpers.masterChefContractPositionHelper.getContractPositions<PopsicleChef>({
address: '0x839de324a1ab773f76a53900d70ac1b913d2b387',
appId,
groupId,
network,
dependencies: [
{
appId: CURVE_DEFINITION.id,
groupIds: [CURVE_DEFINITION.groups.pool.id],
network,
},
],
resolveContract: ({ address, network }) => this.contractFactory.popsicleChef({ address, network }),
resolvePoolLength: ({ multicall, contract }) => multicall.wrap(contract).poolLength(),
resolveDepositTokenAddress: ({ poolIndex, contract, multicall }) =>
multicall
.wrap(contract)
.poolInfo(poolIndex)
.then(v => v.stakingToken),
resolveRewardTokenAddresses: ({ multicall, contract }) => multicall.wrap(contract).ice(),
rewardRateUnit: RewardRateUnit.SECOND,
resolveRewardRate: this.appToolkit.helpers.masterChefDefaultRewardsPerBlockStrategy.build({
resolvePoolAllocPoints: async ({ poolIndex, contract, multicall }) =>
multicall
.wrap(contract)
.poolInfo(poolIndex)
.then(v => v.allocPoint),
resolveTotalAllocPoints: ({ multicall, contract }) => multicall.wrap(contract).totalAllocPoint(),
resolveTotalRewardRate: ({ multicall, contract }) => multicall.wrap(contract).icePerSecond(),
}),
});
}
export class ArbitrumAbracadabraFarmContractPositionFetcher extends AbracadabraFarmContractPositionFetcher {
appId = appId;
groupId = groupId;
network = network;
chefAddress = '0x839de324a1ab773f76a53900d70ac1b913d2b387';
}

0 comments on commit 5737693

Please sign in to comment.