From a24c42cd0d27bcc672e3c313fb1797813c8660f6 Mon Sep 17 00:00:00 2001 From: Georges KABBOUCHI Date: Wed, 25 Aug 2021 22:42:41 +0300 Subject: [PATCH] wip --- composables/protocols/useAaveV2Position.ts | 2 +- composables/protocols/useCompoundPosition.ts | 2 +- composables/protocols/useLiquityPosition.ts | 2 +- composables/protocols/useMakerdaoPosition.ts | 2 +- composables/useStrategy.ts | 52 +++++++++++++++----- core/strategies/helpers/index.ts | 14 ++++-- 6 files changed, 56 insertions(+), 18 deletions(-) diff --git a/composables/protocols/useAaveV2Position.ts b/composables/protocols/useAaveV2Position.ts index 8431370..8f4efbf 100644 --- a/composables/protocols/useAaveV2Position.ts +++ b/composables/protocols/useAaveV2Position.ts @@ -26,7 +26,7 @@ const { } = useBigNumber(); const { getType } = usePosition(); -const position = ref({ +export const position = ref({ totalSupplyInEth: new BigNumber(0), totalBorrowInEth: new BigNumber(0), totalBorrowStableInEth: new BigNumber(0), diff --git a/composables/protocols/useCompoundPosition.ts b/composables/protocols/useCompoundPosition.ts index 7078957..0578618 100644 --- a/composables/protocols/useCompoundPosition.ts +++ b/composables/protocols/useCompoundPosition.ts @@ -27,7 +27,7 @@ const { } = useBigNumber(); const { getType } = usePosition(); -const position = ref({ +export const position = ref({ totalSupplyInEth: new BigNumber(0), totalBorrowInEth: new BigNumber(0), totalBorrowStableInEth: new BigNumber(0), diff --git a/composables/protocols/useLiquityPosition.ts b/composables/protocols/useLiquityPosition.ts index 87d3258..9bc529f 100644 --- a/composables/protocols/useLiquityPosition.ts +++ b/composables/protocols/useLiquityPosition.ts @@ -10,7 +10,7 @@ import abis from "~/constant/abis"; import addresses from "~/constant/addresses"; import { useDSA } from "../useDSA"; -const trove = ref({ +export const trove = ref({ collateral: "0", debt: "0", stabilityAmount: "0", diff --git a/composables/protocols/useMakerdaoPosition.ts b/composables/protocols/useMakerdaoPosition.ts index b6da639..640c61a 100644 --- a/composables/protocols/useMakerdaoPosition.ts +++ b/composables/protocols/useMakerdaoPosition.ts @@ -31,7 +31,7 @@ const isNewVault = ref(false); const vaultTypes = ref([]); const vaultType = ref(""); -const vault = computed(() => { +export const vault = computed(() => { const vlt = vaults.value.find(v => v.id === vaultId.value); if (!isNewVault.value && !!vlt) { return vlt; diff --git a/composables/useStrategy.ts b/composables/useStrategy.ts index c616116..4b38b3b 100644 --- a/composables/useStrategy.ts +++ b/composables/useStrategy.ts @@ -1,6 +1,21 @@ -import { nextTick, onMounted, ref, watch } from "@nuxtjs/composition-api"; +import { + nextTick, + onMounted, + ref, + watch, + watchEffect +} from "@nuxtjs/composition-api"; import tokens from "~/constant/tokens"; -import { buildStrategy, DefineStrategy, IStrategy } from "~/core/strategies"; +import { + buildStrategy, + DefineStrategy, + IStrategy, + StrategyProtocol +} from "~/core/strategies"; +import { position as aaveV2Position } from "./protocols/useAaveV2Position"; +import { position as compoundPosition } from "./protocols/useCompoundPosition"; +import { vault as makerPosition } from "./protocols/useMakerdaoPosition"; +import { trove as liquityPosition } from "./protocols/useLiquityPosition"; import { useBalances } from "./useBalances"; import { useDSA } from "./useDSA"; import useEventBus from "./useEventBus"; @@ -42,7 +57,7 @@ export function useStrategy(defineStrategy: DefineStrategy) { showConfirmedTransaction(tx); await fetchBalances(true); - emitEvent(`protocol::${strategy.schema.protocol}::refresh`,{}); + emitEvent(`protocol::${strategy.schema.protocol}::refresh`, {}); }, from: account.value }); @@ -50,16 +65,31 @@ export function useStrategy(defineStrategy: DefineStrategy) { close(); } catch (e) { console.error(e); - + error.value = e.message; } pending.value = false; }; - strategy.setProps({ - convertTokenAmountToBigNumber: valInt, - getTokenByKey, - }) + watchEffect(() => { + let position = null; + + if (strategy.schema.protocol == StrategyProtocol.AAVE_V2) { + position = aaveV2Position.value; + } else if (strategy.schema.protocol == StrategyProtocol.MAKERDAO) { + position = makerPosition.value; + } else if (strategy.schema.protocol == StrategyProtocol.COMPOUND) { + position = compoundPosition.value; + } else if (strategy.schema.protocol == StrategyProtocol.LIQUITY) { + position = liquityPosition.value; + } + + strategy.setProps({ + convertTokenAmountToBigNumber: valInt, + getTokenByKey, + position + }); + }); watch(web3, () => strategy.setWeb3(web3.value), { immediate: true }); watch(dsa, () => strategy.setDSA(dsa.value), { immediate: true }); @@ -72,8 +102,8 @@ export function useStrategy(defineStrategy: DefineStrategy) { balances, () => { strategy.setProps({ - dsaTokens: balances.dsa[networkName.value], - userTokens: balances.user[networkName.value] + dsaBalances: balances.dsa[networkName.value], + userBalances: balances.user[networkName.value] }); }, { immediate: true } @@ -99,6 +129,6 @@ export function useStrategy(defineStrategy: DefineStrategy) { inputs, submit, error, - pending, + pending }; } diff --git a/core/strategies/helpers/index.ts b/core/strategies/helpers/index.ts index 8e62395..c331516 100644 --- a/core/strategies/helpers/index.ts +++ b/core/strategies/helpers/index.ts @@ -6,10 +6,12 @@ export interface IStrategyContext { dsa: DSA; web3: Web3; inputs: IStrategyInput[]; - dsaTokens?: { [address: string]: IStrategyToken }; - userTokens?: { [address: string]: IStrategyToken }; + dsadsaBalances?: { [address: string]: IStrategyToken }; + userdsaBalances?: { [address: string]: IStrategyToken }; + tokens?: { [address: string]: IStrategyToken }; convertTokenAmountToBigNumber?: (value: any, decimals: any) => string; getTokenByKey?: (key: string) => IStrategyToken; + position?: any; } export interface IStrategyToken { @@ -38,6 +40,9 @@ export type StrategyInputParameterMap = { export interface IStrategyInput { type: InputType; name: string; + + variables?: object; + placeholder?: ( context: IStrategyContext & { input: IStrategyInput & StrategyInputParameterMap[InputType]; @@ -57,7 +62,10 @@ export interface IStrategyInput { } export enum StrategyProtocol { - AAVE_V2 = "aaveV2" + AAVE_V2 = "aaveV2", + COMPOUND = "compound", + MAKERDAO = "makerdao", + LIQUITY = "liquity", } export interface IStrategy { protocol: StrategyProtocol;