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

Commit

Permalink
feat(studio): Migrate all apps to Viem toolkit (#3026)
Browse files Browse the repository at this point in the history
  • Loading branch information
immasandwich committed Nov 14, 2023
1 parent a14e7d4 commit 315fdc6
Show file tree
Hide file tree
Showing 3,604 changed files with 8,579 additions and 1,605,412 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
5 changes: 4 additions & 1 deletion src/app-toolkit/app-toolkit.interface.ts
Expand Up @@ -3,7 +3,8 @@ import { BigNumber as BigNumberJS } from 'bignumber.js';
import { ethers } from 'ethers';
import { PublicClient } from 'viem';

import { IContractFactory } from '~contract/contracts';
import { ContractViemContractFactory, IContractFactory } from '~contract/contracts';
import { ViemMulticallDataLoader } from '~multicall';
import { IMulticallWrapper } from '~multicall/multicall.interface';
import { DefaultDataProps } from '~position/display.interface';
import { AppTokenPosition, ContractPosition, NonFungibleToken } from '~position/position.interface';
Expand All @@ -20,11 +21,13 @@ export const APP_TOOLKIT = Symbol('APP_TOOLKIT');
export interface IAppToolkit {
// Network Related
get globalContracts(): IContractFactory;
get globalViemContracts(): ContractViemContractFactory;

getNetworkProvider(network: Network): StaticJsonRpcProvider;
getViemNetworkProvider(network: Network): PublicClient;

getMulticall(network: Network): IMulticallWrapper;
getViemMulticall(network: Network): ViemMulticallDataLoader;

// Base Tokens

Expand Down
16 changes: 15 additions & 1 deletion src/app-toolkit/app-toolkit.service.ts
Expand Up @@ -19,10 +19,13 @@ import { PriceSelectorService } from '~token/selectors/token-price-selector.serv
import { Network } from '~types/network.interface';

import { IAppToolkit } from './app-toolkit.interface';
import { ContractViemContractFactory } from '~contract/contracts';

@Injectable()
export class AppToolkit implements IAppToolkit {
private readonly contractFactory: ContractFactory;
private readonly viemContractFactory: ContractViemContractFactory;

constructor(
@Inject(NetworkProviderService) private readonly networkProviderService: NetworkProviderService,
@Inject(PositionService) private readonly positionService: PositionService,
Expand All @@ -35,13 +38,20 @@ export class AppToolkit implements IAppToolkit {
@Inject(CACHE_MANAGER) private readonly cacheManager: Cache,
) {
this.contractFactory = new ContractFactory((network: Network) => this.networkProviderService.getProvider(network));
this.viemContractFactory = new ContractViemContractFactory((network: Network) =>
this.networkProviderService.getViemProvider(network),
);
}
// Network Related

// Network Related
get globalContracts() {
return this.contractFactory;
}

get globalViemContracts() {
return this.viemContractFactory;
}

getNetworkProvider(network: Network) {
return this.networkProviderService.getProvider(network);
}
Expand All @@ -54,6 +64,10 @@ export class AppToolkit implements IAppToolkit {
return this.multicallService.getMulticall(network);
}

getViemMulticall(network: Network) {
return this.multicallService.getViemMulticall(network);
}

// Base Tokens

getBaseTokenPrices(network: Network) {
Expand Down
8 changes: 4 additions & 4 deletions src/apps/aave-amm/aave-amm.module.ts
@@ -1,18 +1,18 @@
import { Module } from '@nestjs/common';

import { AbstractApp } from '~app/app.dynamic-module';
import { AaveV2ContractFactory } from '~apps/aave-v2/contracts';
import { AaveV2ViemContractFactory } from '~apps/aave-v2/contracts';

import { AaveAmmContractFactory } from './contracts';
import { AaveAmmViemContractFactory } from './contracts';
import { EthereumAaveAmmPositionPresenter } from './ethereum/aave-amm.position-presenter';
import { EthereumAaveAmmStableDebtTokenFetcher } from './ethereum/aave-amm.stable-debt.token-fetcher';
import { EthereumAaveAmmSupplyTokenFetcher } from './ethereum/aave-amm.supply.token-fetcher';
import { EthereumAaveAmmVariableDebtTokenFetcher } from './ethereum/aave-amm.variable-debt.token-fetcher';

@Module({
providers: [
AaveAmmContractFactory,
AaveV2ContractFactory,
AaveAmmViemContractFactory,
AaveV2ViemContractFactory,
EthereumAaveAmmPositionPresenter,
EthereumAaveAmmStableDebtTokenFetcher,
EthereumAaveAmmSupplyTokenFetcher,
Expand Down
20 changes: 10 additions & 10 deletions src/apps/aave-amm/common/aave-amm.lending.template.token-fetcher.ts
Expand Up @@ -14,8 +14,8 @@ import {
GetUnderlyingTokensParams,
} from '~position/template/app-token.template.types';

import { AaveAmmContractFactory } from '../contracts';
import { AaveAmmAToken } from '../contracts/ethers/AaveAmmAToken';
import { AaveAmmViemContractFactory } from '../contracts';
import { AaveAmmAToken } from '../contracts/viem/AaveAmmAToken';

const LT_MASK = Number('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff');
const LT_START_BIT_POSITION = 16;
Expand All @@ -26,7 +26,7 @@ export abstract class AaveAmmLendingTemplateTokenFetcher extends AppTokenTemplat
> {
constructor(
@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit,
@Inject(AaveAmmContractFactory) protected readonly contractFactory: AaveAmmContractFactory,
@Inject(AaveAmmViemContractFactory) protected readonly contractFactory: AaveAmmViemContractFactory,
) {
super(appToolkit);
}
Expand All @@ -35,21 +35,21 @@ export abstract class AaveAmmLendingTemplateTokenFetcher extends AppTokenTemplat
abstract getTokenAddress(reserveTokenAddressesData: AaveV2ReserveTokenAddressesData): string;
abstract getApyFromReserveData(reserveApyData: AaveV2ReserveApyData): number;

getContract(address: string): AaveAmmAToken {
getContract(address: string) {
return this.contractFactory.aaveAmmAToken({ network: this.network, address });
}

async getAddresses(): Promise<string[]> {
const multicall = this.appToolkit.getMulticall(this.network);
const multicall = this.appToolkit.getViemMulticall(this.network);
const pool = multicall.wrap(
this.contractFactory.aaveAmmLendingPool({
network: this.network,
address: this.providerAddress,
}),
);

const reserveTokenAddresses = await pool.getReservesList();
const reserveTokensData = await Promise.all(reserveTokenAddresses.map(r => pool.getReserveData(r)));
const reserveTokenAddresses = await pool.read.getReservesList();
const reserveTokensData = await Promise.all(reserveTokenAddresses.map(r => pool.read.getReserveData([r])));

return reserveTokensData.map(data =>
this.getTokenAddress({
Expand All @@ -61,7 +61,7 @@ export abstract class AaveAmmLendingTemplateTokenFetcher extends AppTokenTemplat
}

async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams<AaveAmmAToken>) {
return [{ address: await contract.UNDERLYING_ASSET_ADDRESS(), network: this.network }];
return [{ address: await contract.read.UNDERLYING_ASSET_ADDRESS(), network: this.network }];
}

async getPricePerShare() {
Expand All @@ -79,7 +79,7 @@ export abstract class AaveAmmLendingTemplateTokenFetcher extends AppTokenTemplat
}),
);

const data = await pool.getReserveData(appToken.tokens[0].address);
const data = await pool.read.getReserveData([appToken.tokens[0].address]);
const configurationData = data[0].data;
if (!configurationData) return { liquidationThreshold: 0, enabledAsCollateral: false };

Expand All @@ -105,7 +105,7 @@ export abstract class AaveAmmLendingTemplateTokenFetcher extends AppTokenTemplat
address: this.providerAddress,
});

const reservesData = await multicall.wrap(pool).getReserveData(appToken.tokens[0].address);
const reservesData = await multicall.wrap(pool).read.getReserveData([appToken.tokens[0].address]);
const supplyApy = Number(reservesData[3]) / 10 ** 27;
const stableBorrowApy = Number(reservesData[4]) / 10 ** 27;
const variableBorrowApy = Number(reservesData[5]) / 10 ** 27;
Expand Down
26 changes: 0 additions & 26 deletions src/apps/aave-amm/contracts/ethers.contract-factory.ts

This file was deleted.

0 comments on commit 315fdc6

Please sign in to comment.