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

fix(bancor): Rename to bancor-v3 and fix errors in BNT pool #440

Merged
merged 1 commit into from
May 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ export class EthereumAbracadabraCauldronContractPositionFetcher implements Posit
// @TODO: Migrate these over
{ appId: 'convex', groupIds: ['deposit'], network },
{ appId: 'sushiswap', groupIds: ['pool'], network },
{ appId: 'stargate', groupIds: ['pool'], network},
{ appId: 'stargate', groupIds: ['pool'], network },
],
});
}
Expand Down
Binary file added src/apps/bancor-v3/assets/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@ import { appDefinition, AppDefinition } from '~app/app.definition';
import { AppAction, AppTag, GroupType } from '~app/app.interface';
import { Network } from '~types/network.interface';

export const BANCOR_DEFINITION = appDefinition({
id: 'bancor',
name: 'bancor',
export const BANCOR_V3_DEFINITION = appDefinition({
id: 'bancor-v3',
name: 'Bancor V3',
description: 'Deposit a single token and maintain 100% upside exposure while earning fees and rewards',
url: 'https://app.bancor.network/',
groups: {
v3Pool: {
id: 'v3Pool',
pool: {
id: 'pool',
type: GroupType.TOKEN,
label: 'Pools',
},
v3Farm: {
id: 'v3Farm',
farm: {
id: 'farm',
type: GroupType.POSITION,
label: 'Farm',
},
Expand All @@ -33,11 +33,11 @@ export const BANCOR_DEFINITION = appDefinition({
primaryColor: '#fff',
});

@Register.AppDefinition(BANCOR_DEFINITION.id)
export class BancorAppDefinition extends AppDefinition {
@Register.AppDefinition(BANCOR_V3_DEFINITION.id)
export class BancorV3AppDefinition extends AppDefinition {
constructor() {
super(BANCOR_DEFINITION);
super(BANCOR_V3_DEFINITION);
}
}

export default BANCOR_DEFINITION;
export default BANCOR_V3_DEFINITION;
20 changes: 20 additions & 0 deletions src/apps/bancor-v3/bancor-v3.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Register } from '~app-toolkit/decorators';
import { AbstractApp } from '~app/app.dynamic-module';

import { BancorV3AppDefinition, BANCOR_V3_DEFINITION } from './bancor-v3.definition';
import { BancorV3ContractFactory } from './contracts';
import { EthereumBancorV3BalanceFetcher } from './ethereum/bancor-v3.balance-fetcher';
import { EthereumBancorV3ContractPositionFetcher } from './ethereum/bancor-v3.farm.contract-position-fetcher';
import { EthereumBancorV3TokenFetcher } from './ethereum/bancor-v3.pool.token-fetcher';

@Register.AppModule({
appId: BANCOR_V3_DEFINITION.id,
providers: [
BancorV3AppDefinition,
BancorV3ContractFactory,
EthereumBancorV3BalanceFetcher,
EthereumBancorV3ContractPositionFetcher,
EthereumBancorV3TokenFetcher,
],
})
export class BancorV3AppModule extends AbstractApp() {}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { StandardRewards__factory } from './ethers';
type ContractOpts = { address: string; network: Network };

@Injectable()
export class BancorContractFactory extends ContractFactory {
export class BancorV3ContractFactory extends ContractFactory {
constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {
super((network: Network) => appToolkit.getNetworkProvider(network));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,35 @@ import { presentBalanceFetcherResponse } from '~app-toolkit/helpers/presentation
import { BalanceFetcher } from '~balance/balance-fetcher.interface';
import { Network } from '~types/network.interface';

import { BANCOR_DEFINITION } from '../bancor.definition';
import { BancorContractFactory, StandardRewards } from '../contracts';
import { BANCOR_V3_DEFINITION } from '../bancor-v3.definition';
import { BancorV3ContractFactory, StandardRewards } from '../contracts';

const network = Network.ETHEREUM_MAINNET;

@Register.BalanceFetcher(BANCOR_DEFINITION.id, network)
export class EthereumBancorBalanceFetcher implements BalanceFetcher {
@Register.BalanceFetcher(BANCOR_V3_DEFINITION.id, network)
export class EthereumBancorV3BalanceFetcher implements BalanceFetcher {
constructor(
@Inject(APP_TOOLKIT) private readonly appToolkit: IAppToolkit,
@Inject(BancorContractFactory) private readonly bancorContractFactory: BancorContractFactory,
@Inject(BancorV3ContractFactory) private readonly contractFactory: BancorV3ContractFactory,
) {}

async getTokenBalances(address: string) {
return await this.appToolkit.helpers.tokenBalanceHelper.getTokenBalances({
address,
appId: BANCOR_DEFINITION.id,
groupId: BANCOR_DEFINITION.groups.v3Pool.id,
appId: BANCOR_V3_DEFINITION.id,
groupId: BANCOR_V3_DEFINITION.groups.pool.id,
network: Network.ETHEREUM_MAINNET,
});
}

async getPoolBalances(address: string) {
return this.appToolkit.helpers.masterChefContractPositionBalanceHelper.getBalances<StandardRewards>({
address,
appId: BANCOR_DEFINITION.id,
groupId: BANCOR_DEFINITION.groups.v3Farm.id,
appId: BANCOR_V3_DEFINITION.id,
groupId: BANCOR_V3_DEFINITION.groups.farm.id,
network: Network.ETHEREUM_MAINNET,
resolveChefContract: ({ contractAddress, network }) =>
this.bancorContractFactory.standardRewards({ address: contractAddress, network }),
this.contractFactory.standardRewards({ address: contractAddress, network }),
resolveStakedTokenBalance: this.appToolkit.helpers.masterChefDefaultStakedBalanceStrategy.build({
// Note: each asset can have multiple positions (currently 2)
resolveStakedBalance: ({ contract, multicall, contractPosition }) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@ import { PositionFetcher } from '~position/position-fetcher.interface';
import { ContractPosition } from '~position/position.interface';
import { Network } from '~types/network.interface';

import { BANCOR_DEFINITION } from '../bancor.definition';
import { BancorContractFactory, StandardRewards } from '../contracts';
import { BANCOR_V3_DEFINITION } from '../bancor-v3.definition';
import { BancorV3ContractFactory, StandardRewards } from '../contracts';

const appId = BANCOR_DEFINITION.id;
const groupId = BANCOR_DEFINITION.groups.v3Farm.id;
const appId = BANCOR_V3_DEFINITION.id;
const groupId = BANCOR_V3_DEFINITION.groups.farm.id;
const network = Network.ETHEREUM_MAINNET;
const address = '0xb0B958398ABB0b5DB4ce4d7598Fb868f5A00f372'.toLowerCase();

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

async getPositions() {
Expand All @@ -27,19 +27,8 @@ export class EthereumBancorV3ContractPositionFetcher implements PositionFetcher<
appId,
groupId,
network,
dependencies: [
{
appId: BANCOR_DEFINITION.id,
groupIds: [BANCOR_DEFINITION.groups.v3Farm.id],
network,
},
{
appId: BANCOR_DEFINITION.id,
groupIds: [BANCOR_DEFINITION.groups.v3Pool.id],
network,
},
],
resolveContract: ({ address, network }) => this.bancorContractFactory.standardRewards({ address, network }),
dependencies: [{ appId: BANCOR_V3_DEFINITION.id, groupIds: [BANCOR_V3_DEFINITION.groups.pool.id], network }],
resolveContract: ({ address, network }) => this.contractFactory.standardRewards({ address, network }),
resolvePoolLength: ({ multicall, contract }) =>
multicall
.wrap(contract)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ import { PositionFetcher } from '~position/position-fetcher.interface';
import { AppTokenPosition } from '~position/position.interface';
import { Network } from '~types/network.interface';

import { BANCOR_DEFINITION } from '../bancor.definition';
import { BancorContractFactory, BntPool, PoolCollection } from '../contracts';
import { BANCOR_V3_DEFINITION } from '../bancor-v3.definition';
import { BancorV3ContractFactory, BntPool, PoolCollection, PoolToken } from '../contracts';

const appId = BANCOR_DEFINITION.id;
const groupId = BANCOR_DEFINITION.groups.v3Pool.id;
const appId = BANCOR_V3_DEFINITION.id;
const groupId = BANCOR_V3_DEFINITION.groups.pool.id;
const network = Network.ETHEREUM_MAINNET;
const poolCollectionAddress = '0xec9596e0eb67228d61a12cfdb4b3608281f261b3'.toLowerCase();
const bntPoolAddress = '0x02651E355D26f3506C1E644bA393FDD9Ac95EaCa'.toLowerCase();
Expand All @@ -20,12 +20,12 @@ const bntPoolAddress = '0x02651E355D26f3506C1E644bA393FDD9Ac95EaCa'.toLowerCase(
export class EthereumBancorV3TokenFetcher implements PositionFetcher<AppTokenPosition> {
constructor(
@Inject(APP_TOOLKIT) private readonly appToolkit: IAppToolkit,
@Inject(BancorContractFactory) private readonly bancorContractFactory: BancorContractFactory,
@Inject(BancorV3ContractFactory) private readonly contractFactory: BancorV3ContractFactory,
) {}

async getPositions() {
const multicall = this.appToolkit.getMulticall(network);
const poolContract: PoolCollection = this.bancorContractFactory.poolCollection({
const poolContract: PoolCollection = this.contractFactory.poolCollection({
address: poolCollectionAddress,
network,
});
Expand All @@ -34,12 +34,12 @@ export class EthereumBancorV3TokenFetcher implements PositionFetcher<AppTokenPos
await multicall.wrap(poolContract).pools()
).map(async (poolAddress: string) => (await multicall.wrap(poolContract).poolToken(poolAddress)).toLowerCase()),
);
const tokens = await this.appToolkit.helpers.vaultTokenHelper.getTokens<PoolCollection>({
appId: BANCOR_DEFINITION.id,
groupId: BANCOR_DEFINITION.groups.v3Pool.id,
const tokens = await this.appToolkit.helpers.vaultTokenHelper.getTokens<PoolToken>({
appId: BANCOR_V3_DEFINITION.id,
groupId: BANCOR_V3_DEFINITION.groups.pool.id,
network: Network.ETHEREUM_MAINNET,
resolveVaultAddresses: () => pools,
resolveContract: ({ address, network }) => this.bancorContractFactory.poolToken({ address, network }),
resolveContract: ({ address, network }) => this.contractFactory.poolToken({ address, network }),
resolveUnderlyingTokenAddress: ({ multicall, contract }) =>
multicall
.wrap(contract)
Expand All @@ -54,32 +54,28 @@ export class EthereumBancorV3TokenFetcher implements PositionFetcher<AppTokenPos
multicall
.wrap(poolContract)
.poolTokenToUnderlying(address, (10 ** underlyingToken.decimals).toString())
.then(ratio => ratio / 10 ** underlyingToken.decimals),
.then(ratio => Number(ratio) / 10 ** underlyingToken.decimals),
),
});

const bntPoolContract = this.bancorContractFactory.bntPool({ address: bntPoolAddress, network });
const bntPoolContract = this.contractFactory.bntPool({ address: bntPoolAddress, network });
const bnToken = await this.appToolkit.helpers.vaultTokenHelper.getTokens<BntPool>({
appId: BANCOR_DEFINITION.id,
groupId: BANCOR_DEFINITION.groups.v3Pool.id,
appId: BANCOR_V3_DEFINITION.id,
groupId: BANCOR_V3_DEFINITION.groups.pool.id,
network: Network.ETHEREUM_MAINNET,
resolveVaultAddresses: () =>
multicall
.wrap(bntPoolContract)
.poolToken()
.then(a => [a.toLowerCase()]),
resolveContract: ({ address, network }) => this.bancorContractFactory.poolToken({ address, network }),
resolveUnderlyingTokenAddress: ({ multicall, contract }) =>
multicall
.wrap(contract)
.reserveToken()
.then(a => a.toLowerCase()),
resolveContract: ({ address, network }) => this.contractFactory.bntPool({ address, network }),
resolveUnderlyingTokenAddress: () => '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c', // BNT
resolveReserve: () => 0,
resolvePricePerShare: ({ multicall, underlyingToken }) =>
multicall
.wrap(bntPoolContract)
.poolTokenToUnderlying((10 ** underlyingToken.decimals).toString())
.then(ratio => ratio / 10 ** underlyingToken.decimals),
.then(ratio => Number(ratio) / 10 ** underlyingToken.decimals),
});

return [...tokens, ...bnToken];
Expand Down
20 changes: 0 additions & 20 deletions src/apps/bancor/bancor.module.ts

This file was deleted.