Skip to content
This repository has been archived by the owner on Jul 21, 2021. It is now read-only.

Commit

Permalink
Add BoostedSavingsVault data
Browse files Browse the repository at this point in the history
- Consume BoostedSavingsVault data from the subgraph for the current user
- Add this data to `SavingsContractState`
  • Loading branch information
JamesLefrere committed Dec 23, 2020
1 parent 34fdf0c commit 279f829
Show file tree
Hide file tree
Showing 6 changed files with 1,228 additions and 267 deletions.
5 changes: 5 additions & 0 deletions src/context/DataProvider/DataProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ const useRawData = (): [MassetsQueryResult['data'], Tokens] => {
return useMemo(() => [subscription.data, tokens], [
blockNumber,
subscription.loading,
tokens,
]);
};

Expand Down Expand Up @@ -78,6 +79,10 @@ export const DataProvider: FC = ({ children }) => {
[data],
);

if (process.env.NODE_ENV === 'development') {
(window as { dataState?: DataState }).dataState = dataState;
}

return (
<dataStateCtx.Provider value={dataState}>{children}</dataStateCtx.Provider>
);
Expand Down
71 changes: 65 additions & 6 deletions src/context/DataProvider/transformRawData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,21 @@ import { MassetName, SubscribedToken } from '../../types';
import { MassetsQueryResult, TokenAllFragment } from '../../graphql/protocol';
import {
BassetStatus,
BoostedSavingsVaultState,
DataState,
MassetState,
SavingsContractState,
} from './types';
import { Tokens } from '../TokensProvider';

type SavingsContractV1QueryResult = NonNullable<
MassetsQueryResult['data']
>['massets'][number]['savingsContractsV1'][number];

type SavingsContractV2QueryResult = NonNullable<
MassetsQueryResult['data']
>['massets'][number]['savingsContractsV2'][number];

const transformBassets = (
bassets: NonNullable<
MassetsQueryResult['data']
Expand Down Expand Up @@ -61,9 +70,7 @@ const transformBassets = (
};

const transformSavingsContractV1 = (
savingsContract: NonNullable<
MassetsQueryResult['data']
>['massets'][number]['savingsContractsV1'][number],
savingsContract: SavingsContractV1QueryResult,
tokens: Tokens,
massetAddress: string,
current: boolean,
Expand Down Expand Up @@ -106,10 +113,58 @@ const transformSavingsContractV1 = (
};
};

const transformBoostedSavingsVault = ({
id: address,
totalSupply,
accounts,
rewardPerTokenStored,
rewardRate,
stakingContract,
totalStakingRewards,
}: NonNullable<
SavingsContractV2QueryResult['boostedSavingsVaults'][number]
>): BoostedSavingsVaultState => {
let account: BoostedSavingsVaultState['account'];

if (accounts?.[0]) {
const [
{
rewardCount,
rewardEntries,
rewardPerTokenPaid,
rewards,
lastAction,
lastClaim,
},
] = accounts;
account = {
rewardCount,
rewardPerTokenPaid: bigNumberify(rewardPerTokenPaid),
rewards: bigNumberify(rewards),
rewardEntries: rewardEntries.map(({ rate, finish, index, start }) => ({
rate: bigNumberify(rate),
finish,
index,
start,
})),
lastAction,
lastClaim,
};
}

return {
address,
account,
rewardRate: bigNumberify(rewardRate),
rewardPerTokenStored: bigNumberify(rewardPerTokenStored),
stakingContract,
totalSupply: new BigDecimal(totalSupply),
totalStakingRewards: BigDecimal.parse(totalStakingRewards),
};
};

const transformSavingsContractV2 = (
savingsContract: NonNullable<
MassetsQueryResult['data']
>['massets'][number]['savingsContractsV2'][number],
savingsContract: SavingsContractV2QueryResult,
tokens: Tokens,
massetAddress: string,
current: boolean,
Expand All @@ -121,6 +176,7 @@ const transformSavingsContractV2 = (
latestExchangeRate,
totalSavings,
version,
boostedSavingsVaults,
} = savingsContract;

return {
Expand All @@ -139,6 +195,9 @@ const transformSavingsContractV2 = (
token: tokens[id],
totalSavings: BigDecimal.fromMetric(totalSavings),
version: version as 2,
boostedSavingsVault: boostedSavingsVaults[0]
? transformBoostedSavingsVault(boostedSavingsVaults[0])
: undefined,
};
};

Expand Down
25 changes: 25 additions & 0 deletions src/context/DataProvider/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,30 @@ export interface MassetState {
};
}

export interface BoostedSavingsVaultAccountState {
lastAction: number;
lastClaim: number;
rewardCount: number;
rewardPerTokenPaid: BigNumber;
rewards: BigNumber;
rewardEntries: {
finish: number;
start: number;
index: number;
rate: BigNumber;
}[];
}

export interface BoostedSavingsVaultState {
address: string;
rewardPerTokenStored: BigNumber;
rewardRate: BigNumber;
stakingContract: string;
totalStakingRewards: BigDecimal;
totalSupply: BigDecimal;
account?: BoostedSavingsVaultAccountState;
}

export type SavingsContractState = {
active: boolean;
current: boolean;
Expand All @@ -73,6 +97,7 @@ export type SavingsContractState = {
| {
version: 2;
token?: SubscribedToken;
boostedSavingsVault?: BoostedSavingsVaultState;
}
);

Expand Down

0 comments on commit 279f829

Please sign in to comment.