From 4951b6733b6a937e7e20c777bfa383791faab3bc Mon Sep 17 00:00:00 2001 From: Georges KABBOUCHI Date: Sun, 22 Aug 2021 14:27:02 +0300 Subject: [PATCH 01/42] wip --- core/strategies/helpers/strategy.ts | 49 +++++++++++++++++++ core/strategies/index.ts | 5 ++ .../protocols/aave-v2/deposit-and-borrow.ts | 49 +++++++++++++++++++ core/strategies/protocols/aave-v2/index.ts | 6 +++ 4 files changed, 109 insertions(+) create mode 100644 core/strategies/helpers/strategy.ts create mode 100644 core/strategies/index.ts create mode 100644 core/strategies/protocols/aave-v2/deposit-and-borrow.ts create mode 100644 core/strategies/protocols/aave-v2/index.ts diff --git a/core/strategies/helpers/strategy.ts b/core/strategies/helpers/strategy.ts new file mode 100644 index 0000000..79cf986 --- /dev/null +++ b/core/strategies/helpers/strategy.ts @@ -0,0 +1,49 @@ +import DSA from "dsa-connect"; +import Web3 from "web3"; + +export interface IStrategyContext { + dsa: typeof DSA; + web3: Web3; + inputs: IStrategyInput[]; +} + +export interface IStrategyToken { + address: string + key: string + symbol: string + balance: string + + supply: string + borrow: string +} + +export enum StrategyInputType { + INPUT = "input", + INPUT_WITH_TOKEN = "input-with-token" +} + +export interface IStrategyInput { + type: StrategyInputType; + name: string; + placeholder: + | string + | ((context: IStrategyContext & { input: IStrategyInput }) => string); + validate?: ((context: IStrategyContext & { input: IStrategyInput }) => boolean|string); + // If type is "input-with-token", this is the token + token?: IStrategyToken; + value?: any; +} + +export interface IStrategy { + name: string; + description: string; + author?: string; + + inputs: IStrategyInput[]; + + spells: (context: IStrategyContext) => any; +} + +export function defineStrategy(strategy: IStrategy): IStrategy { + return strategy; +} diff --git a/core/strategies/index.ts b/core/strategies/index.ts new file mode 100644 index 0000000..47e70d5 --- /dev/null +++ b/core/strategies/index.ts @@ -0,0 +1,5 @@ +import AaveV2 from "./protocols/aave-v2" + +export const strategies = { + aaveV2 : AaveV2, +} \ No newline at end of file diff --git a/core/strategies/protocols/aave-v2/deposit-and-borrow.ts b/core/strategies/protocols/aave-v2/deposit-and-borrow.ts new file mode 100644 index 0000000..76582c6 --- /dev/null +++ b/core/strategies/protocols/aave-v2/deposit-and-borrow.ts @@ -0,0 +1,49 @@ +import { defineStrategy, StrategyInputType } from "../../helpers/strategy"; + +export default defineStrategy({ + name: "Deposit & Borrow", + description: "Deposit collateral & borrow asset in a single txn.", + author: "Instadapp Team", + + inputs: [ + { + type: StrategyInputType.INPUT_WITH_TOKEN, + name: "Debt", + placeholder: ({ input }) => `${input.token.symbol} to Payback`, + validate: ({ input }) => { + if (!input.token) { + return "Token is required"; + } + + if (input.token.balance < input.value) { + return "Your amount exceeds your maximum limit."; + } + + return true; + } + }, + { + type: StrategyInputType.INPUT_WITH_TOKEN, + name: "Collateral", + placeholder: ({ input }) => `${input.token.symbol} to Withdraw` + } + ], + + spells: async ({ dsa, inputs }) => { + const spells = dsa.Spells(); + + spells.add({ + connector: "aave_v2", + method: "deposit", + args: [inputs[0].token.address, inputs[0].value, 0, 0] + }); + + spells.add({ + connector: "aave_v2", + method: "borrow", + args: [inputs[1].token.address, inputs[1].value, 0, 0, 0] + }); + + return spells; + } +}); diff --git a/core/strategies/protocols/aave-v2/index.ts b/core/strategies/protocols/aave-v2/index.ts new file mode 100644 index 0000000..f6bac2d --- /dev/null +++ b/core/strategies/protocols/aave-v2/index.ts @@ -0,0 +1,6 @@ +import depositAndBorrow from "./deposit-and-borrow" + +export default [ + depositAndBorrow +] + \ No newline at end of file From 48602b9d6cd593fedced63188ce0ab8cadc4bde2 Mon Sep 17 00:00:00 2001 From: Georges KABBOUCHI Date: Sun, 22 Aug 2021 15:54:23 +0300 Subject: [PATCH 02/42] update --- .../context/strategy/SidebarStrategy.vue | 51 +++++++++++++++++ .../strategy/SidebarStrategySelection.vue | 56 +++++++++++++++++++ composables/useSidebar.ts | 5 ++ core/strategies/helpers/strategy.ts | 19 ++++++- core/strategies/index.ts | 2 +- .../protocols/aave-v2/deposit-and-borrow.ts | 4 +- package.json | 1 + yarn.lock | 5 ++ 8 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 components/sidebar/context/strategy/SidebarStrategy.vue create mode 100644 components/sidebar/context/strategy/SidebarStrategySelection.vue diff --git a/components/sidebar/context/strategy/SidebarStrategy.vue b/components/sidebar/context/strategy/SidebarStrategy.vue new file mode 100644 index 0000000..cc9ac52 --- /dev/null +++ b/components/sidebar/context/strategy/SidebarStrategy.vue @@ -0,0 +1,51 @@ + + + \ No newline at end of file diff --git a/components/sidebar/context/strategy/SidebarStrategySelection.vue b/components/sidebar/context/strategy/SidebarStrategySelection.vue new file mode 100644 index 0000000..e1218e7 --- /dev/null +++ b/components/sidebar/context/strategy/SidebarStrategySelection.vue @@ -0,0 +1,56 @@ + + + \ No newline at end of file diff --git a/composables/useSidebar.ts b/composables/useSidebar.ts index 98fd763..517e473 100644 --- a/composables/useSidebar.ts +++ b/composables/useSidebar.ts @@ -35,11 +35,16 @@ import SidebarLiquityTroveWithdraw from '~/components/sidebar/context/liquity/Si import SidebarLiquityTroveBorrow from '~/components/sidebar/context/liquity/SidebarLiquityTroveBorrow.vue' import SidebarLiquityTrovePayback from '~/components/sidebar/context/liquity/SidebarLiquityTrovePayback.vue' +import SidebarStrategySelection from '~/components/sidebar/context/strategy/SidebarStrategySelection.vue' +import SidebarStrategy from '~/components/sidebar/context/strategy/SidebarStrategy.vue' const sidebars = { "#overview" : {component: SidebarOverview, back : false, close : true }, "#deposit-overview": {component: SidebarDepositOverview, back: { hash: 'overview' } }, '#withdraw-token': { component: SidebarWithdraw, back: { hash: 'overview' } }, + '#strategies': { component: SidebarStrategySelection }, + '#strategy': { component: SidebarStrategy }, + "/aave-v2": { component: null }, "/aave-v2#supply": { component: SidebarAaveV2Supply }, "/aave-v2#borrow": { component: SidebarAaveV2Borrow }, diff --git a/core/strategies/helpers/strategy.ts b/core/strategies/helpers/strategy.ts index 79cf986..b1f94e1 100644 --- a/core/strategies/helpers/strategy.ts +++ b/core/strategies/helpers/strategy.ts @@ -1,6 +1,6 @@ import DSA from "dsa-connect"; import Web3 from "web3"; - +import slugify from "slugify" export interface IStrategyContext { dsa: typeof DSA; web3: Web3; @@ -22,6 +22,13 @@ export enum StrategyInputType { INPUT_WITH_TOKEN = "input-with-token" } +// type InputTypes = { +// [StrategyInputType.INPUT] : { +// token?: IStrategyToken; +// value?: any; +// }; +// } + export interface IStrategyInput { type: StrategyInputType; name: string; @@ -32,9 +39,12 @@ export interface IStrategyInput { // If type is "input-with-token", this is the token token?: IStrategyToken; value?: any; + + [key: string]: any; } export interface IStrategy { + id?: string; name: string; description: string; author?: string; @@ -42,8 +52,15 @@ export interface IStrategy { inputs: IStrategyInput[]; spells: (context: IStrategyContext) => any; + + submitText?: string; } export function defineStrategy(strategy: IStrategy): IStrategy { + + if(! strategy.id){ + strategy.id = slugify(strategy.name).toLowerCase(); + } + return strategy; } diff --git a/core/strategies/index.ts b/core/strategies/index.ts index 47e70d5..03f0341 100644 --- a/core/strategies/index.ts +++ b/core/strategies/index.ts @@ -1,5 +1,5 @@ import AaveV2 from "./protocols/aave-v2" -export const strategies = { +export const protocolStrategies = { aaveV2 : AaveV2, } \ No newline at end of file diff --git a/core/strategies/protocols/aave-v2/deposit-and-borrow.ts b/core/strategies/protocols/aave-v2/deposit-and-borrow.ts index 76582c6..919a6ef 100644 --- a/core/strategies/protocols/aave-v2/deposit-and-borrow.ts +++ b/core/strategies/protocols/aave-v2/deposit-and-borrow.ts @@ -16,8 +16,8 @@ export default defineStrategy({ } if (input.token.balance < input.value) { - return "Your amount exceeds your maximum limit."; - } + return "Your amount exceeds your maximum limit."; + } return true; } diff --git a/package.json b/package.json index ebbc75f..e65ae6f 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "dsa-connect": "^0.4.3", "nuxt": "^2.15.7", "qrcode": "^1.4.4", + "slugify": "^1.6.0", "v-click-outside": "^3.1.2", "v-tooltip": "^2.1.3", "vue-clipboard2": "^0.3.1", diff --git a/yarn.lock b/yarn.lock index 35f518d..01c4cd5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10410,6 +10410,11 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slugify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.0.tgz#6bdf8ed01dabfdc46425b67e3320b698832ff893" + integrity sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" From 59bc5369db3cd8e48dc85ba17503af9722646a10 Mon Sep 17 00:00:00 2001 From: Georges KABBOUCHI Date: Sun, 22 Aug 2021 16:49:31 +0300 Subject: [PATCH 03/42] wip --- .../context/strategy/SidebarStrategy.vue | 54 +++-- core/strategies/helpers/strategy.ts | 67 ++++-- core/strategies/index.ts | 4 +- pages/aave-v2.vue | 45 +++- pages/mainnet/aave-v2.vue | 216 ------------------ 5 files changed, 128 insertions(+), 258 deletions(-) delete mode 100644 pages/mainnet/aave-v2.vue diff --git a/components/sidebar/context/strategy/SidebarStrategy.vue b/components/sidebar/context/strategy/SidebarStrategy.vue index cc9ac52..f21bc7d 100644 --- a/components/sidebar/context/strategy/SidebarStrategy.vue +++ b/components/sidebar/context/strategy/SidebarStrategy.vue @@ -6,46 +6,62 @@
{{ $props }}
+
{{ selectedStrategy }}
+ +
- \ No newline at end of file diff --git a/core/strategies/helpers/strategy.ts b/core/strategies/helpers/strategy.ts index b1f94e1..b9043ba 100644 --- a/core/strategies/helpers/strategy.ts +++ b/core/strategies/helpers/strategy.ts @@ -1,6 +1,6 @@ import DSA from "dsa-connect"; import Web3 from "web3"; -import slugify from "slugify" +import slugify from "slugify"; export interface IStrategyContext { dsa: typeof DSA; web3: Web3; @@ -8,13 +8,13 @@ export interface IStrategyContext { } export interface IStrategyToken { - address: string - key: string - symbol: string - balance: string + address: string; + key: string; + symbol: string; + balance: string; - supply: string - borrow: string + supply: string; + borrow: string; } export enum StrategyInputType { @@ -35,7 +35,9 @@ export interface IStrategyInput { placeholder: | string | ((context: IStrategyContext & { input: IStrategyInput }) => string); - validate?: ((context: IStrategyContext & { input: IStrategyInput }) => boolean|string); + validate?: ( + context: IStrategyContext & { input: IStrategyInput } + ) => boolean | string; // If type is "input-with-token", this is the token token?: IStrategyToken; value?: any; @@ -56,11 +58,50 @@ export interface IStrategy { submitText?: string; } -export function defineStrategy(strategy: IStrategy): IStrategy { +export function defineStrategy(strategy: IStrategy) { + return { + ...strategy, + id: strategy.id ? strategy.id : slugify(strategy.name).toLowerCase(), + inputs: strategy.inputs.map(input => ({ + ...input, + value: null, + onInput: (val: any) => { + input.value = val; + } + })), + submit: async (context: Pick) => { + await this.validate({ + ...context, + inputs: strategy.inputs + }); - if(! strategy.id){ - strategy.id = slugify(strategy.name).toLowerCase(); - } + const spells = strategy.spells({ + ...context, + inputs: strategy.inputs + }); - return strategy; + return await context.dsa.cast({ + spells, + onReceipt: this.onReceipt + }); + }, + validate: async (context: IStrategyContext) => { + for (const input of this.inputs) { + const result = await input.validate({ + ...context, + inputs: strategy.inputs, + input + }); + + if (result !== true) { + throw new Error(result || "Error has occurred"); + } + } + }, + onReceipt: (txHash: string, txReceipt: any) => { + // do something + } + }; } + +export type DefineStrategy = ReturnType; diff --git a/core/strategies/index.ts b/core/strategies/index.ts index 03f0341..6fc2f7e 100644 --- a/core/strategies/index.ts +++ b/core/strategies/index.ts @@ -2,4 +2,6 @@ import AaveV2 from "./protocols/aave-v2" export const protocolStrategies = { aaveV2 : AaveV2, -} \ No newline at end of file +} + +export * from "./helpers/strategy" \ No newline at end of file diff --git a/pages/aave-v2.vue b/pages/aave-v2.vue index e1c64c0..3b00a21 100644 --- a/pages/aave-v2.vue +++ b/pages/aave-v2.vue @@ -10,18 +10,43 @@ -
-
+
+
- +
+ +
+

Aave v2

-

Aave v2

+ + + Strategies + + + + +
@@ -166,12 +191,14 @@ import { useStatus } from "~/composables/useStatus"; import { useBigNumber } from "~/composables/useBigNumber"; import CardAave from "~/components/protocols/CardAave.vue"; import AaveIcon from "~/assets/icons/aave.svg?inline"; +import ButtonCTAOutlined from "~/components/common/input/ButtonCTAOutlined.vue"; export default defineComponent({ components: { BackIcon, CardAave, - AaveIcon + AaveIcon, + ButtonCTAOutlined, }, setup() { const { diff --git a/pages/mainnet/aave-v2.vue b/pages/mainnet/aave-v2.vue deleted file mode 100644 index 46501dc..0000000 --- a/pages/mainnet/aave-v2.vue +++ /dev/null @@ -1,216 +0,0 @@ - - - From b5b7141661f12878842363d1df15b4341842b549 Mon Sep 17 00:00:00 2001 From: Georges KABBOUCHI Date: Sun, 22 Aug 2021 18:45:37 +0300 Subject: [PATCH 04/42] wip --- .../context/strategy/SidebarStrategy.vue | 3 +- core/strategies/helpers/strategy.ts | 81 +++++++++++++------ .../protocols/aave-v2/deposit-and-borrow.ts | 45 +++++------ 3 files changed, 81 insertions(+), 48 deletions(-) diff --git a/components/sidebar/context/strategy/SidebarStrategy.vue b/components/sidebar/context/strategy/SidebarStrategy.vue index f21bc7d..d8d474c 100644 --- a/components/sidebar/context/strategy/SidebarStrategy.vue +++ b/components/sidebar/context/strategy/SidebarStrategy.vue @@ -14,6 +14,7 @@ :key="index" :value="input.value" @input="$event => input.onInput($event.target.value)" + :placeholder="input.placeholder()" />
@@ -53,7 +54,7 @@ export default defineComponent({ strategies.find(strategy => strategy.id === props.strategy) ); - watch(() => { + watch([], () => { selectedStrategy.value = strategies.find( strategy => strategy.id === props.strategy ); diff --git a/core/strategies/helpers/strategy.ts b/core/strategies/helpers/strategy.ts index b9043ba..ec31728 100644 --- a/core/strategies/helpers/strategy.ts +++ b/core/strategies/helpers/strategy.ts @@ -1,10 +1,10 @@ -import DSA from "dsa-connect"; +import DSA, { Spell } from "dsa-connect"; import Web3 from "web3"; import slugify from "slugify"; export interface IStrategyContext { - dsa: typeof DSA; + dsa: DSA; web3: Web3; - inputs: IStrategyInput[]; + inputs: IStrategyInput[]; } export interface IStrategyToken { @@ -22,24 +22,27 @@ export enum StrategyInputType { INPUT_WITH_TOKEN = "input-with-token" } -// type InputTypes = { -// [StrategyInputType.INPUT] : { -// token?: IStrategyToken; -// value?: any; -// }; -// } +export type StrategyInputParameterMap = { + [StrategyInputType.INPUT]: {}; -export interface IStrategyInput { - type: StrategyInputType; + [StrategyInputType.INPUT_WITH_TOKEN]: { + token?: IStrategyToken; + }; +}; + +export interface IStrategyInput { + type: InputType; name: string; - placeholder: - | string - | ((context: IStrategyContext & { input: IStrategyInput }) => string); + placeholder: ( + context: IStrategyContext & { + input: IStrategyInput & StrategyInputParameterMap[InputType]; + } + ) => string; validate?: ( - context: IStrategyContext & { input: IStrategyInput } - ) => boolean | string; - // If type is "input-with-token", this is the token - token?: IStrategyToken; + context: IStrategyContext & { + input: IStrategyInput & StrategyInputParameterMap[InputType]; + } + ) => string | void; value?: any; [key: string]: any; @@ -51,41 +54,71 @@ export interface IStrategy { description: string; author?: string; - inputs: IStrategyInput[]; + inputs: IStrategyInput[]; - spells: (context: IStrategyContext) => any; + spells: (context: IStrategyContext) => Promise | Spell[]; submitText?: string; } +export function defineInput( + input: IStrategyInput +) { + return input as IStrategyInput; +} + export function defineStrategy(strategy: IStrategy) { + const context = { + web3: null, + dsa: null + }; + return { ...strategy, - id: strategy.id ? strategy.id : slugify(strategy.name).toLowerCase(), + id: strategy.id ? strategy.id : slugify(strategy.name).toLowerCase(), inputs: strategy.inputs.map(input => ({ ...input, value: null, + placeholder: () => + input.placeholder + ? input.placeholder({ + ...context, + inputs: strategy.inputs, + input: { + ...input, + token: { + // todo + } + } + }) + : null, onInput: (val: any) => { input.value = val; } })), - submit: async (context: Pick) => { + submit: async () => { await this.validate({ ...context, inputs: strategy.inputs }); - const spells = strategy.spells({ + const allSpells = await strategy.spells({ ...context, inputs: strategy.inputs }); + const spells = context.dsa.Spell(); + + for (const spell of allSpells) { + spells.add(spell); + } + return await context.dsa.cast({ spells, onReceipt: this.onReceipt }); }, - validate: async (context: IStrategyContext) => { + validate: async () => { for (const input of this.inputs) { const result = await input.validate({ ...context, diff --git a/core/strategies/protocols/aave-v2/deposit-and-borrow.ts b/core/strategies/protocols/aave-v2/deposit-and-borrow.ts index 919a6ef..a2c04e8 100644 --- a/core/strategies/protocols/aave-v2/deposit-and-borrow.ts +++ b/core/strategies/protocols/aave-v2/deposit-and-borrow.ts @@ -1,4 +1,8 @@ -import { defineStrategy, StrategyInputType } from "../../helpers/strategy"; +import { + defineStrategy, + defineInput, + StrategyInputType +} from "../../helpers/strategy"; export default defineStrategy({ name: "Deposit & Borrow", @@ -6,7 +10,7 @@ export default defineStrategy({ author: "Instadapp Team", inputs: [ - { + defineInput({ type: StrategyInputType.INPUT_WITH_TOKEN, name: "Debt", placeholder: ({ input }) => `${input.token.symbol} to Payback`, @@ -18,32 +22,27 @@ export default defineStrategy({ if (input.token.balance < input.value) { return "Your amount exceeds your maximum limit."; } - - return true; } - }, - { + }), + defineInput({ type: StrategyInputType.INPUT_WITH_TOKEN, name: "Collateral", placeholder: ({ input }) => `${input.token.symbol} to Withdraw` - } + }) ], - spells: async ({ dsa, inputs }) => { - const spells = dsa.Spells(); - - spells.add({ - connector: "aave_v2", - method: "deposit", - args: [inputs[0].token.address, inputs[0].value, 0, 0] - }); - - spells.add({ - connector: "aave_v2", - method: "borrow", - args: [inputs[1].token.address, inputs[1].value, 0, 0, 0] - }); - - return spells; + spells: async ({ inputs }) => { + return [ + { + connector: "aave_v2", + method: "deposit", + args: [inputs[0].token.address, inputs[0].value, 0, 0] + }, + { + connector: "aave_v2", + method: "borrow", + args: [inputs[1].token.address, inputs[1].value, 0, 0, 0] + } + ]; } }); From 63dfc0c4c883e4e6e52b87a3b07fe12e2ce3f0b7 Mon Sep 17 00:00:00 2001 From: Georges KABBOUCHI Date: Sun, 22 Aug 2021 20:35:46 +0300 Subject: [PATCH 05/42] wip --- .../context/strategy/SidebarStrategy.vue | 43 ++-- composables/useBalances.ts | 10 +- composables/useStrategy.ts | 60 +++++ core/strategies/helpers/index.ts | 84 +++++++ core/strategies/helpers/strategy.ts | 226 +++++++++--------- core/strategies/index.ts | 2 +- .../protocols/aave-v2/deposit-and-borrow.ts | 2 +- 7 files changed, 280 insertions(+), 147 deletions(-) create mode 100644 composables/useStrategy.ts create mode 100644 core/strategies/helpers/index.ts diff --git a/components/sidebar/context/strategy/SidebarStrategy.vue b/components/sidebar/context/strategy/SidebarStrategy.vue index d8d474c..39a4b88 100644 --- a/components/sidebar/context/strategy/SidebarStrategy.vue +++ b/components/sidebar/context/strategy/SidebarStrategy.vue @@ -5,17 +5,19 @@
-
{{ $props }}
-
{{ selectedStrategy }}
+
+ + {{ input.error }} +
- + + + {{ error }}
@@ -23,15 +25,10 @@ \ No newline at end of file diff --git a/components/TokenSelectOption.vue b/components/TokenSelectOption.vue new file mode 100644 index 0000000..98b8ae1 --- /dev/null +++ b/components/TokenSelectOption.vue @@ -0,0 +1,25 @@ + + + \ No newline at end of file diff --git a/components/common/input/InputAmount.vue b/components/common/input/InputAmount.vue index 7e2474d..75168ad 100644 --- a/components/common/input/InputAmount.vue +++ b/components/common/input/InputAmount.vue @@ -92,7 +92,7 @@ diff --git a/components/sidebar/context/SidebarWithdraw.vue b/components/sidebar/context/SidebarWithdraw.vue index 5a49155..a719103 100644 --- a/components/sidebar/context/SidebarWithdraw.vue +++ b/components/sidebar/context/SidebarWithdraw.vue @@ -79,7 +79,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import atokens from '~/constant/atokens' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' @@ -87,6 +87,7 @@ import ButtonCTA from '~/components/common/input/ButtonCTA.vue' import { useNotification } from '~/composables/useNotification' import Button from '~/components/Button.vue' import { useSidebar } from '~/composables/useSidebar' +import { useNetwork } from '~/composables/useNetwork' export default defineComponent({ components: { InputNumeric, Input, ToggleButton, ButtonCTA, Button }, @@ -95,7 +96,8 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar() - const { networkName, account, web3 } = useWeb3() + const { account, library } = useWeb3() + const { activeNetworkId } = useNetwork() const { dsa } = useDSA() const { getTokenByKey, valInt } = useToken() const { formatNumber, formatUsdMax, formatUsd } = useFormatting() @@ -109,7 +111,7 @@ export default defineComponent({ const amount = ref('') const amountParsed = computed(() => parseSafeFloat(amount.value)) - const rootTokenKey = computed(() => atokens[networkName.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth') + const rootTokenKey = computed(() => atokens[activeNetworkId.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth') const token = computed(() => getTokenByKey(rootTokenKey.value)) const symbol = computed(() => token.value?.symbol) @@ -126,7 +128,7 @@ export default defineComponent({ return { amount: { message: validateAmount(amountParsed.value, balance.value), show: hasAmountValue }, - accountAddress: { message: web3.value && !web3.value.utils.isAddress(accountAddress.value) ? 'Enter valid address!' : null, show: accountAddress.value.length > 0 }, + accountAddress: { message: library.value && !library.value.utils.isAddress(accountAddress.value) ? 'Enter valid address!' : null, show: accountAddress.value.length > 0 }, auth: { message: validateIsLoggedIn(!!account.value), show: true }, } }) diff --git a/components/sidebar/context/aaveV2/SidebarAaveV2Borrow.vue b/components/sidebar/context/aaveV2/SidebarAaveV2Borrow.vue index 6d07c7e..58e74b8 100644 --- a/components/sidebar/context/aaveV2/SidebarAaveV2Borrow.vue +++ b/components/sidebar/context/aaveV2/SidebarAaveV2Borrow.vue @@ -76,7 +76,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import atokens from '~/constant/atokens' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' @@ -84,6 +84,7 @@ import ButtonCTA from '~/components/common/input/ButtonCTA.vue' import { useNotification } from '~/composables/useNotification' import Button from '~/components/Button.vue' import { useSidebar } from '~/composables/useSidebar' +import { useNetwork } from '~/composables/useNetwork' export default defineComponent({ components: { InputNumeric, ToggleButton, ButtonCTA, Button }, @@ -92,7 +93,8 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar() - const { networkName, account } = useWeb3() + const { account } = useWeb3() + const { activeNetworkId } = useNetwork() const { dsa } = useDSA() const { getTokenByKey, valInt } = useToken() const { formatNumber, formatUsdMax, formatUsd } = useFormatting() @@ -117,7 +119,7 @@ export default defineComponent({ const amount = ref('') const amountParsed = computed(() => parseSafeFloat(amount.value)) - const rootTokenKey = computed(() => atokens[networkName.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth') + const rootTokenKey = computed(() => atokens[activeNetworkId.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth') const currentPosition = computed(() => displayPositions.value.find((position) => position.key === rootTokenKey.value) diff --git a/components/sidebar/context/aaveV2/SidebarAaveV2Payback.vue b/components/sidebar/context/aaveV2/SidebarAaveV2Payback.vue index 94b063a..2b6444a 100644 --- a/components/sidebar/context/aaveV2/SidebarAaveV2Payback.vue +++ b/components/sidebar/context/aaveV2/SidebarAaveV2Payback.vue @@ -99,7 +99,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import atokens from '~/constant/atokens' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' @@ -107,6 +107,7 @@ import ButtonCTA from '~/components/common/input/ButtonCTA.vue' import { useNotification } from '~/composables/useNotification' import Button from '~/components/Button.vue' import { useSidebar } from '~/composables/useSidebar' +import { useNetwork } from '~/composables/useNetwork' export default defineComponent({ components: { InputNumeric, ToggleButton, ButtonCTA, Button }, @@ -115,7 +116,8 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar() - const { networkName, account } = useWeb3() + const { account } = useWeb3() + const { activeNetworkId } = useNetwork() const { dsa } = useDSA() const { getTokenByKey, valInt } = useToken() const { getBalanceByKey, getBalanceRawByKey, fetchBalances } = useBalances() @@ -139,7 +141,7 @@ export default defineComponent({ const amount = ref('') const amountParsed = computed(() => parseSafeFloat(amount.value)) - const rootTokenKey = computed(() => atokens[networkName.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth') + const rootTokenKey = computed(() => atokens[activeNetworkId.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth') const currentPosition = computed(() => displayPositions.value.find((position) => position.key === rootTokenKey.value) diff --git a/components/sidebar/context/aaveV2/SidebarAaveV2Supply.vue b/components/sidebar/context/aaveV2/SidebarAaveV2Supply.vue index 5064fed..fa470e2 100644 --- a/components/sidebar/context/aaveV2/SidebarAaveV2Supply.vue +++ b/components/sidebar/context/aaveV2/SidebarAaveV2Supply.vue @@ -80,7 +80,7 @@ import { useValidation } from "~/composables/useValidation"; import { useToken } from "~/composables/useToken"; import { useParsing } from "~/composables/useParsing"; import { useMaxAmountActive } from "~/composables/useMaxAmountActive"; -import { useWeb3 } from "~/composables/useWeb3"; +import { useWeb3 } from "@kabbouchi/vue-web3"; import atokens from "~/constant/atokens"; import ToggleButton from "~/components/common/input/ToggleButton.vue"; import { useDSA } from "~/composables/useDSA"; @@ -88,6 +88,7 @@ import ButtonCTA from "~/components/common/input/ButtonCTA.vue"; import Button from "~/components/Button.vue"; import { useSidebar } from "~/composables/useSidebar"; import DSA from "dsa-connect"; +import { useNetwork } from "~/composables/useNetwork"; export default defineComponent({ components: { InputNumeric, ToggleButton, ButtonCTA, Button }, props: { @@ -95,7 +96,8 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar(); - const { networkName, account } = useWeb3(); + const { account } = useWeb3(); + const { activeNetworkId } = useNetwork() const { dsa } = useDSA(); const { getTokenByKey, valInt } = useToken(); const { getBalanceByKey, fetchBalances } = useBalances(); @@ -129,7 +131,7 @@ export default defineComponent({ const amountParsed = computed(() => parseSafeFloat(amount.value)); const rootTokenKey = computed(() => - atokens[networkName.value].rootTokens.includes(props.tokenKey) + atokens[activeNetworkId.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : "eth" ); diff --git a/components/sidebar/context/aaveV2/SidebarAaveV2Withdraw.vue b/components/sidebar/context/aaveV2/SidebarAaveV2Withdraw.vue index 678c41a..d1d6a14 100644 --- a/components/sidebar/context/aaveV2/SidebarAaveV2Withdraw.vue +++ b/components/sidebar/context/aaveV2/SidebarAaveV2Withdraw.vue @@ -81,7 +81,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import atokens from '~/constant/atokens' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' @@ -89,6 +89,7 @@ import ButtonCTA from '~/components/common/input/ButtonCTA.vue' import { useNotification } from '~/composables/useNotification' import Button from '~/components/Button.vue' import { useSidebar } from '~/composables/useSidebar' +import { useNetwork } from '~/composables/useNetwork' export default defineComponent({ components: { InputNumeric, ToggleButton, ButtonCTA, Button }, @@ -97,7 +98,8 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar() - const { networkName, account } = useWeb3() + const { account } = useWeb3() + const { activeNetworkId } = useNetwork() const { dsa } = useDSA() const { getTokenByKey, valInt } = useToken() const { formatNumber, formatUsdMax, formatUsd } = useFormatting() @@ -132,7 +134,7 @@ export default defineComponent({ const amount = ref('') const amountParsed = computed(() => parseSafeFloat(amount.value)) - const rootTokenKey = computed(() => atokens[networkName.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth') + const rootTokenKey = computed(() => atokens[activeNetworkId.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth') const token = computed(() => getTokenByKey(rootTokenKey.value)) const symbol = computed(() => token.value?.symbol) diff --git a/components/sidebar/context/compound/SidebarCompoundBorrow.vue b/components/sidebar/context/compound/SidebarCompoundBorrow.vue index 251c487..1fd9fba 100644 --- a/components/sidebar/context/compound/SidebarCompoundBorrow.vue +++ b/components/sidebar/context/compound/SidebarCompoundBorrow.vue @@ -65,7 +65,7 @@ import { useValidators } from '~/composables/useValidators' import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' @@ -76,6 +76,7 @@ import { useCompoundPosition } from '~/composables/protocols/useCompoundPosition import ctokens from '~/constant/ctokens' import tokenIdMapping from '~/constant/tokenIdMapping' import { useBalances } from '~/composables/useBalances' +import { useNetwork } from '~/composables/useNetwork' export default defineComponent({ components: { InputNumeric, ToggleButton, ButtonCTA, Button }, @@ -84,7 +85,8 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar() - const { networkName, account } = useWeb3() + const { account } = useWeb3() + const { activeNetworkId } = useNetwork() const { dsa } = useDSA() const { getTokenByKey, valInt } = useToken() const { fetchBalances } = useBalances() @@ -96,7 +98,7 @@ export default defineComponent({ const tokenId = computed(() => props.tokenId) const tokenKey = computed(() => tokenIdMapping.idToToken[tokenId.value]) - const rootTokenKey = computed(() => ctokens[networkName.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth') + const rootTokenKey = computed(() => ctokens[activeNetworkId.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth') const { stats, status: initialStatus, position, displayPositions, liquidation, liquidationPrice, liquidationMaxPrice, refreshPosition } = useCompoundPosition({ overridePosition: (position) => { diff --git a/components/sidebar/context/compound/SidebarCompoundPayback.vue b/components/sidebar/context/compound/SidebarCompoundPayback.vue index af7d811..ce3e7aa 100644 --- a/components/sidebar/context/compound/SidebarCompoundPayback.vue +++ b/components/sidebar/context/compound/SidebarCompoundPayback.vue @@ -90,7 +90,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' @@ -100,6 +100,7 @@ import { useSidebar } from '~/composables/useSidebar' import { useCompoundPosition } from '~/composables/protocols/useCompoundPosition' import ctokens from '~/constant/ctokens' import tokenIdMapping from '~/constant/tokenIdMapping' +import { useNetwork } from '~/composables/useNetwork' export default defineComponent({ components: { InputNumeric, ToggleButton, ButtonCTA, Button }, @@ -108,7 +109,8 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar() - const { networkName, account } = useWeb3() + const { account } = useWeb3() + const { activeNetworkId } = useNetwork() const { dsa } = useDSA() const { getTokenByKey, valInt } = useToken() const { getBalanceByKey, getBalanceRawByKey, fetchBalances } = useBalances() @@ -119,7 +121,7 @@ export default defineComponent({ const tokenId = computed(() => props.tokenId) const tokenKey = computed(() => tokenIdMapping.idToToken[tokenId.value]) - const rootTokenKey = computed(() => ctokens[networkName.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth') + const rootTokenKey = computed(() => ctokens[activeNetworkId.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth') const { status, position, displayPositions, liquidation, liquidationPrice, liquidationMaxPrice, refreshPosition } = useCompoundPosition({ diff --git a/components/sidebar/context/compound/SidebarCompoundSupply.vue b/components/sidebar/context/compound/SidebarCompoundSupply.vue index d62f1f8..f992b38 100644 --- a/components/sidebar/context/compound/SidebarCompoundSupply.vue +++ b/components/sidebar/context/compound/SidebarCompoundSupply.vue @@ -79,7 +79,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' @@ -88,6 +88,7 @@ import { useSidebar } from '~/composables/useSidebar' import tokenIdMapping from '~/constant/tokenIdMapping' import ctokens from '~/constant/ctokens' import { useCompoundPosition } from '~/composables/protocols/useCompoundPosition' +import { useNetwork } from '~/composables/useNetwork' export default defineComponent({ components: { InputNumeric, ToggleButton, ButtonCTA, Button }, @@ -96,7 +97,8 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar() - const { networkName, account } = useWeb3() + const { account } = useWeb3() + const { activeNetworkId } = useNetwork() const { dsa } = useDSA() const { getTokenByKey, valInt } = useToken() const { getBalanceByKey, fetchBalances } = useBalances() @@ -108,7 +110,7 @@ export default defineComponent({ const tokenId = computed(() => props.tokenId) const tokenKey = computed(() => tokenIdMapping.idToToken[tokenId.value]) - const rootTokenKey = computed(() => ctokens[networkName.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth') + const rootTokenKey = computed(() => ctokens[activeNetworkId.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth') const { status, position, displayPositions, liquidation, liquidationPrice, liquidationMaxPrice, refreshPosition } = useCompoundPosition({ overridePosition: (position) => { diff --git a/components/sidebar/context/compound/SidebarCompoundWithdraw.vue b/components/sidebar/context/compound/SidebarCompoundWithdraw.vue index c49e3d4..a1788a2 100644 --- a/components/sidebar/context/compound/SidebarCompoundWithdraw.vue +++ b/components/sidebar/context/compound/SidebarCompoundWithdraw.vue @@ -79,7 +79,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' @@ -90,6 +90,7 @@ import tokenIdMapping from '~/constant/tokenIdMapping' import ctokens from '~/constant/ctokens' import { useCompoundPosition } from '~/composables/protocols/useCompoundPosition' import { useBalances } from '~/composables/useBalances' +import { useNetwork } from '~/composables/useNetwork' export default defineComponent({ components: { InputNumeric, ToggleButton, ButtonCTA, Button }, @@ -98,7 +99,8 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar() - const { networkName, account } = useWeb3() + const { account } = useWeb3() + const { activeNetworkId } = useNetwork() const { dsa } = useDSA() const { fetchBalances } = useBalances() const { getTokenByKey, valInt } = useToken() @@ -110,7 +112,7 @@ export default defineComponent({ const tokenId = computed(() => props.tokenId) const tokenKey = computed(() => tokenIdMapping.idToToken[tokenId.value]) - const rootTokenKey = computed(() => ctokens[networkName.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth') + const rootTokenKey = computed(() => ctokens[activeNetworkId.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth') const { stats, status, position, displayPositions, liquidation, liquidationPrice, liquidationMaxPrice, refreshPosition } = useCompoundPosition({ diff --git a/components/sidebar/context/liquity/SidebarLiquityTroveBorrow.vue b/components/sidebar/context/liquity/SidebarLiquityTroveBorrow.vue index 6876d90..4f70423 100644 --- a/components/sidebar/context/liquity/SidebarLiquityTroveBorrow.vue +++ b/components/sidebar/context/liquity/SidebarLiquityTroveBorrow.vue @@ -97,7 +97,7 @@ import { useValidators } from '~/composables/useValidators' import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' diff --git a/components/sidebar/context/liquity/SidebarLiquityTroveOpenNew.vue b/components/sidebar/context/liquity/SidebarLiquityTroveOpenNew.vue index 89418ef..be5d960 100644 --- a/components/sidebar/context/liquity/SidebarLiquityTroveOpenNew.vue +++ b/components/sidebar/context/liquity/SidebarLiquityTroveOpenNew.vue @@ -107,7 +107,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import atokens from '~/constant/atokens' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' diff --git a/components/sidebar/context/liquity/SidebarLiquityTrovePayback.vue b/components/sidebar/context/liquity/SidebarLiquityTrovePayback.vue index 60687c5..f3b27d9 100644 --- a/components/sidebar/context/liquity/SidebarLiquityTrovePayback.vue +++ b/components/sidebar/context/liquity/SidebarLiquityTrovePayback.vue @@ -95,7 +95,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' @@ -108,7 +108,7 @@ export default defineComponent({ components: { InputNumeric, ToggleButton, ButtonCTA, Button }, setup() { const { close } = useSidebar() - const { networkName, account } = useWeb3() + const { account } = useWeb3() const { dsa } = useDSA() const { valInt } = useToken() const { getBalanceByKey, fetchBalances } = useBalances() diff --git a/components/sidebar/context/liquity/SidebarLiquityTroveSupply.vue b/components/sidebar/context/liquity/SidebarLiquityTroveSupply.vue index 78b4a4e..bc3d227 100644 --- a/components/sidebar/context/liquity/SidebarLiquityTroveSupply.vue +++ b/components/sidebar/context/liquity/SidebarLiquityTroveSupply.vue @@ -84,7 +84,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' diff --git a/components/sidebar/context/liquity/SidebarLiquityTroveWithdraw.vue b/components/sidebar/context/liquity/SidebarLiquityTroveWithdraw.vue index 05951aa..f42cd6a 100644 --- a/components/sidebar/context/liquity/SidebarLiquityTroveWithdraw.vue +++ b/components/sidebar/context/liquity/SidebarLiquityTroveWithdraw.vue @@ -96,7 +96,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' diff --git a/components/sidebar/context/makerdao/SidebarMakerdaoBorrow.vue b/components/sidebar/context/makerdao/SidebarMakerdaoBorrow.vue index f0aacb9..bd8a7b4 100644 --- a/components/sidebar/context/makerdao/SidebarMakerdaoBorrow.vue +++ b/components/sidebar/context/makerdao/SidebarMakerdaoBorrow.vue @@ -69,7 +69,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' @@ -87,7 +87,7 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar() - const { networkName, account } = useWeb3() + const { account } = useWeb3() const { dsa } = useDSA() const { getTokenByKey, valInt } = useToken() const { fetchBalances } = useBalances() diff --git a/components/sidebar/context/makerdao/SidebarMakerdaoPayback.vue b/components/sidebar/context/makerdao/SidebarMakerdaoPayback.vue index 39c1376..56e5290 100644 --- a/components/sidebar/context/makerdao/SidebarMakerdaoPayback.vue +++ b/components/sidebar/context/makerdao/SidebarMakerdaoPayback.vue @@ -91,7 +91,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' @@ -107,7 +107,7 @@ export default defineComponent({ }, setup(props) { const { close } = useSidebar() - const { networkName, account } = useWeb3() + const { account } = useWeb3() const { dsa } = useDSA() const { getTokenByKey, valInt } = useToken() const { getBalanceByKey, getBalanceRawByKey, fetchBalances } = useBalances() diff --git a/components/sidebar/context/makerdao/SidebarMakerdaoSupply.vue b/components/sidebar/context/makerdao/SidebarMakerdaoSupply.vue index 277eda0..fcadb0b 100644 --- a/components/sidebar/context/makerdao/SidebarMakerdaoSupply.vue +++ b/components/sidebar/context/makerdao/SidebarMakerdaoSupply.vue @@ -79,7 +79,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' diff --git a/components/sidebar/context/makerdao/SidebarMakerdaoWithdraw.vue b/components/sidebar/context/makerdao/SidebarMakerdaoWithdraw.vue index 553dde0..1d65e8b 100644 --- a/components/sidebar/context/makerdao/SidebarMakerdaoWithdraw.vue +++ b/components/sidebar/context/makerdao/SidebarMakerdaoWithdraw.vue @@ -77,7 +77,7 @@ import { useValidation } from '~/composables/useValidation' import { useToken } from '~/composables/useToken' import { useParsing } from '~/composables/useParsing' import { useMaxAmountActive } from '~/composables/useMaxAmountActive' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import ToggleButton from '~/components/common/input/ToggleButton.vue' import { useDSA } from '~/composables/useDSA' import ButtonCTA from '~/components/common/input/ButtonCTA.vue' diff --git a/composables/protocols/useAaveV2Position.ts b/composables/protocols/useAaveV2Position.ts index f893894..b8400a7 100644 --- a/composables/protocols/useAaveV2Position.ts +++ b/composables/protocols/useAaveV2Position.ts @@ -3,11 +3,11 @@ import { AbiItem } from "web3-utils"; import aaveV2ABI from "~/abis/read/aaveV2.json"; import { computed, ref, watch } from "@nuxtjs/composition-api"; import { useDSA } from "~/composables/useDSA"; -import { useWeb3 } from "~/composables/useWeb3"; +import { useWeb3 } from "@kabbouchi/vue-web3"; import BigNumber from "bignumber.js"; import atokensV2 from "~/constant/atokensV2"; import tokens from "~/constant/tokens"; -import { Network } from "~/composables/useNetwork"; +import { Network, useNetwork } from "~/composables/useNetwork"; import { useBigNumber } from "~/composables/useBigNumber"; import { usePosition } from "~/composables/usePosition"; import { useToken } from "~/composables/useToken"; @@ -65,11 +65,12 @@ export function useAaveV2Position( ) { overridePosition = overridePosition || (pos => pos); - const { web3, chainId, networkName } = useWeb3(); + const { library, chainId } = useWeb3(); + const { activeNetworkId } = useNetwork(); const { activeAccount } = useDSA(); const { getTokenByKey, allATokensV2 } = useToken(); - const { byMaxSupplyOrBorrowDesc } = useSorting() - + const { byMaxSupplyOrBorrowDesc } = useSorting(); + const resolver = computed(() => chainId.value === 1 ? "0xFb3a1D56eD56F046721B9aCa749895100754578b" @@ -77,7 +78,7 @@ export function useAaveV2Position( ); const fetchPosition = async () => { - if (!web3.value) { + if (!library.value) { return; } @@ -85,20 +86,20 @@ export function useAaveV2Position( return; } - const aaveResolverInstance = new web3.value.eth.Contract( + const aaveResolverInstance = new library.value.eth.Contract( aaveV2ABI as AbiItem[], resolver.value ); - const aaveTokensArr = atokensV2[networkName.value].allTokens.map( - a => tokens[networkName.value].getTokenByKey(a.root).address + const aaveTokensArr = atokensV2[activeNetworkId.value].allTokens.map( + a => tokens[activeNetworkId.value].getTokenByKey(a.root).address ); const aaveRawData = await aaveResolverInstance.methods .getPosition(activeAccount.value.address, aaveTokensArr) .call(); - const newPos = calculateAavePosition(aaveRawData, networkName.value); + const newPos = calculateAavePosition(aaveRawData, activeNetworkId.value); return newPos; }; @@ -107,9 +108,8 @@ export function useAaveV2Position( position.value = await fetchPosition(); }; - watch( - web3, + library, async val => { if (val) { refreshPosition(); @@ -165,7 +165,7 @@ export function useAaveV2Position( ); const rewardTokenPriceInUsd = computed(() => { - if (networkName.value === Network.Polygon) { + if (activeNetworkId.value === Network.Polygon) { return ensureValue( position.value.data.find(position => position.key === "matic") ?.priceInUsd diff --git a/composables/protocols/useCompoundPosition.ts b/composables/protocols/useCompoundPosition.ts index 7078957..f7590c0 100644 --- a/composables/protocols/useCompoundPosition.ts +++ b/composables/protocols/useCompoundPosition.ts @@ -3,10 +3,10 @@ import { AbiItem } from "web3-utils"; import compoundABI from "~/abis/read/compound.json"; import { computed, ref, watch } from "@nuxtjs/composition-api"; import { useDSA } from "~/composables/useDSA"; -import { useWeb3 } from "~/composables/useWeb3"; +import { useWeb3 } from "@kabbouchi/vue-web3"; import BigNumber from "bignumber.js"; import tokens from "~/constant/tokens"; -import { Network } from "~/composables/useNetwork"; +import { Network, useNetwork } from "~/composables/useNetwork"; import { useBigNumber } from "~/composables/useBigNumber"; import { usePosition } from "~/composables/usePosition"; import { useToken } from "~/composables/useToken"; @@ -62,14 +62,15 @@ export function useCompoundPosition( ) { overridePosition = overridePosition || (pos => pos); - const { web3, networkName } = useWeb3(); + const { library } = useWeb3(); + const { activeNetworkId } = useNetwork() const { activeAccount } = useDSA(); const { getTokenByKey } = useToken(); const { byMaxSupplyOrBorrowDesc } = useSorting() const resolver = computed(() => addresses.mainnet.resolver.compound); const fetchPosition = async () => { - if (!web3.value) { + if (!library.value) { return; } @@ -77,12 +78,12 @@ export function useCompoundPosition( return; } - const resolverInstance = new web3.value.eth.Contract( + const resolverInstance = new library.value.eth.Contract( compoundABI as AbiItem[], resolver.value ); - const tokensArr = ctokens[networkName.value].allTokens.map(a => a.address); + const tokensArr = ctokens[activeNetworkId.value].allTokens.map(a => a.address); const compoundRawData = await resolverInstance.methods .getPosition(activeAccount.value.address, tokensArr) @@ -90,7 +91,7 @@ export function useCompoundPosition( const newPos = calculateCompoundPosition( compoundRawData, - networkName.value + activeNetworkId.value ); return newPos; @@ -101,7 +102,7 @@ export function useCompoundPosition( }; watch( - web3, + library, async val => { if (val) { refreshPosition(); @@ -162,7 +163,7 @@ export function useCompoundPosition( return []; } - return ctokens[networkName.value].allTokens + return ctokens[activeNetworkId.value].allTokens .flatMap(ctoken => { const token = getTokenByKey(ctoken.root); if (!token) { diff --git a/composables/protocols/useLiquityPosition.ts b/composables/protocols/useLiquityPosition.ts index 87d3258..bdbf396 100644 --- a/composables/protocols/useLiquityPosition.ts +++ b/composables/protocols/useLiquityPosition.ts @@ -2,7 +2,7 @@ import { computed, Ref, ref, watch } from "@nuxtjs/composition-api"; import { useBalances } from "../useBalances"; import { useBigNumber } from "../useBigNumber"; import { useToken } from "../useToken"; -import { useWeb3 } from "~/composables/useWeb3"; +import { useWeb3 } from "@kabbouchi/vue-web3"; import { AbiItem } from "web3-utils"; import BigNumber from "bignumber.js"; BigNumber.config({ POW_PRECISION: 200 }); @@ -49,7 +49,7 @@ export function useLiquityPosition( collateralAmountRef: Ref = null, debtAmountRef: Ref = null ) { - const { web3 } = useWeb3(); + const { library } = useWeb3(); const { activeAccount } = useDSA(); const { isZero, times, div, max, minus, plus } = useBigNumber(); @@ -137,22 +137,22 @@ export function useLiquityPosition( ); const fetchPosition = async () => { - if (!web3.value) { + if (!library.value) { return; } - troveTypes.value = await getTroveTypes(web3.value); + troveTypes.value = await getTroveTypes(library.value); if (!activeAccount.value) { return; } - trove.value = await getTrove(activeAccount.value.address, web3.value); + trove.value = await getTrove(activeAccount.value.address, library.value); }; async function getTrovePositionHints(collateralInWei, debtInWei) { try { - const liquityInstance = new web3.value.eth.Contract( + const liquityInstance = new library.value.eth.Contract( abis.resolver.liquity as AbiItem[], addresses.mainnet.resolver.liquity ); @@ -179,7 +179,7 @@ export function useLiquityPosition( } watch( - web3, + library, async val => { if (val) { fetchPosition(); diff --git a/composables/protocols/useMakerdaoPosition.ts b/composables/protocols/useMakerdaoPosition.ts index d6c1394..4458bd3 100644 --- a/composables/protocols/useMakerdaoPosition.ts +++ b/composables/protocols/useMakerdaoPosition.ts @@ -7,7 +7,7 @@ import makerVaults from "~/constant/tokens/vaults"; import { useBigNumber } from "~/composables/useBigNumber"; import { useDSA } from "~/composables/useDSA"; import { useToken } from "~/composables/useToken"; -import { useWeb3 } from "~/composables/useWeb3"; +import { useWeb3 } from "@kabbouchi/vue-web3"; import { AbiItem } from "web3-utils"; const defaultVault = { @@ -54,7 +54,7 @@ export function useMakerdaoPosition( collateralAmountRef: Ref = null, debtAmountRef: Ref = null ) { - const { web3, chainId, networkName } = useWeb3(); + const { library } = useWeb3(); const { activeAccount } = useDSA(); const { isZero, ensureValue, times, div, max, gt } = useBigNumber(); const { getTokenByKey } = useToken(); @@ -117,23 +117,23 @@ export function useMakerdaoPosition( ); const fetchPosition = async () => { - if (!web3.value) { + if (!library.value) { return; } - vaultTypes.value = await getVaultTypes(web3.value); + vaultTypes.value = await getVaultTypes(library.value); if (!activeAccount.value) { return; } - vaults.value = await getVaults(activeAccount.value.address, web3.value); + vaults.value = await getVaults(activeAccount.value.address, library.value); if (vaults.value.length > 0 && !vaultId.value) { vaultId.value = vaults.value[0].id; } }; watch( - web3, + library, async val => { if (val) { fetchPosition(); diff --git a/composables/useBalances.ts b/composables/useBalances.ts index 6703772..7c5f635 100644 --- a/composables/useBalances.ts +++ b/composables/useBalances.ts @@ -11,8 +11,8 @@ import addresses from "~/constant/addresses"; import tokens from "~/constant/tokens"; import uniPoolTokens from "~/constant/uniPoolTokens"; import { useDSA } from "./useDSA"; -import { Network } from "./useNetwork"; -import { useWeb3 } from "./useWeb3"; +import { Network, useNetwork } from "./useNetwork"; +import { useWeb3 } from "@kabbouchi/vue-web3"; import Web3 from "web3"; import { AbiItem } from "web3-utils"; import { useToken } from "./useToken"; @@ -32,7 +32,8 @@ const prices = reactive({ export function useBalances() { const { $axios } = useContext(); const { times, plus, ensureValue } = useBigNumber(); - const { account, networkName, web3 } = useWeb3(); + const { account, library } = useWeb3(); + const { activeNetworkId } = useNetwork() const { activeAccount } = useDSA(); const { getTokenByKey } = useToken(); const { by } = useSorting(); @@ -48,12 +49,12 @@ export function useBalances() { if (!account.value) return; balances.user = { mainnet: - networkName.value === Network.Mainnet - ? await getBalances(account.value, Network.Mainnet, web3.value) + activeNetworkId.value === Network.Mainnet + ? await getBalances(account.value, Network.Mainnet, library.value) : {}, polygon: - networkName.value === Network.Polygon - ? await getBalances(account.value, Network.Polygon, web3.value) + activeNetworkId.value === Network.Polygon + ? await getBalances(account.value, Network.Polygon, library.value) : {} }; } @@ -63,19 +64,19 @@ export function useBalances() { balances.dsa = { mainnet: - networkName.value === Network.Mainnet + activeNetworkId.value === Network.Mainnet ? await getBalances( activeAccount.value.address, Network.Mainnet, - web3.value + library.value ) : {}, polygon: - networkName.value === Network.Polygon + activeNetworkId.value === Network.Polygon ? await getBalances( activeAccount.value.address, Network.Polygon, - web3.value + library.value ) : {} }; @@ -88,27 +89,27 @@ export function useBalances() { const getBalanceByAddress = (address, network = null, type = "dsa") => { return ( - balances[type]?.[network || networkName.value][address]?.balance || "0" + balances[type]?.[network || activeNetworkId.value][address]?.balance || "0" ); }; const getBalanceRawByKey = (tokenKey, network = null, type = "dsa") => { return ( - balances[type]?.[network || networkName.value][ + balances[type]?.[network || activeNetworkId.value][ getTokenByKey(tokenKey)?.address ]?.raw || "0" ); }; const netWorth = (address, type = "dsa") => { - const balance = getBalanceByAddress(address, networkName.value, type); - const price = ensureValue(prices[networkName.value][address]).toFixed(); + const balance = getBalanceByAddress(address, activeNetworkId.value, type); + const price = ensureValue(prices[activeNetworkId.value][address]).toFixed(); return times(balance, price).toFixed(); }; const balanceTotal = computed(() => - tokens[networkName.value].allTokens.reduce( + tokens[activeNetworkId.value].allTokens.reduce( (totalNetWorth, token) => plus(totalNetWorth, netWorth(token.address)).toFixed(), "0" @@ -116,16 +117,16 @@ export function useBalances() { ); const getAssets = (type = "dsa") => { - return tokens[networkName.value].allTokens + return tokens[activeNetworkId.value].allTokens .map(token => ({ ...token, - balance: getBalanceByAddress(token.address, networkName.value, type), + balance: getBalanceByAddress(token.address, activeNetworkId.value, type), netWorth: netWorth(token.address, type) })) .sort(by("-netWorth")); }; - watch(web3, () => { + watch(library, () => { fetchBalances(true); }); return { diff --git a/composables/useDSA.ts b/composables/useDSA.ts index 3bd8cd9..8c5eb09 100644 --- a/composables/useDSA.ts +++ b/composables/useDSA.ts @@ -1,10 +1,11 @@ import { computed, readonly, ref, watch } from "@nuxtjs/composition-api"; -import { useWeb3 } from "./useWeb3"; +import { useWeb3 } from "@kabbouchi/vue-web3"; import DSA from "dsa-connect"; import addresses from "~/constant/addresses"; import abis from "~/constant/abis"; import { AbiItem } from "web3-utils"; import { useNotification } from "./useNotification"; +import { useNetwork } from "./useNetwork"; const dsa = ref(); const accounts = ref([]); @@ -12,18 +13,28 @@ const activeAccount = ref(); const authorities = ref(); export function useDSA() { - const { web3, chainId, networkName, account } = useWeb3(); + const { active, library, chainId, account } = useWeb3(); + const { activeNetworkId } = useNetwork() const { showWarning } = useNotification(); - watch(web3, () => { - if (web3.value) { - dsa.value = new DSA(web3.value, chainId.value); + watch(library, () => { + if (library.value) { + dsa.value = new DSA(library.value, chainId.value); + } + }); + + + watch(active, () => { + console.log("here"); + + if (library.value) { + dsa.value = new DSA(library.value, chainId.value); } }); watch(chainId, () => { - if (web3.value) { - dsa.value = new DSA(web3.value, chainId.value); + if (library.value) { + dsa.value = new DSA(library.value, chainId.value); } }); @@ -82,9 +93,9 @@ export function useDSA() { async function fethAuthorities() { try { - const accountsResolverInstance = new web3.value.eth.Contract( + const accountsResolverInstance = new library.value.eth.Contract( abis.resolver.accounts as AbiItem[], - addresses[networkName.value].resolver.accounts + addresses[activeNetworkId.value].resolver.accounts ); const rawData = await accountsResolverInstance.methods .getAccountAuthorities(activeAccount.value.address) @@ -170,7 +181,7 @@ export function useDSA() { createAccount, creatingAccount, setAccount, - web3, + library, chainId, authorities, createAuthority, diff --git a/composables/useEagerConnect.ts b/composables/useEagerConnect.ts new file mode 100644 index 0000000..2676c00 --- /dev/null +++ b/composables/useEagerConnect.ts @@ -0,0 +1,32 @@ +import { useWeb3 } from "@kabbouchi/vue-web3"; +import { injected } from "../connectors"; +import { onMounted, ref, watch } from "@nuxtjs/composition-api"; + +export function useEagerConnect() { + const { activate, active } = useWeb3(); + + const tried = ref(false); + + onMounted(() => { + injected.isAuthorized().then((isAuthorized: boolean) => { + if (isAuthorized) { + activate(injected, undefined, true).catch(() => { + tried.value = true; + }); + } else { + tried.value = true; + } + }); + }); + + // if the connection worked, wait until we get confirmation of that to flip the flag + watch([tried, active], () => { + if (!tried.value && active.value) { + tried.value = true; + } + }); + + return { + tried + }; +} \ No newline at end of file diff --git a/composables/useLink.ts b/composables/useLink.ts index 6c20193..a9d325e 100644 --- a/composables/useLink.ts +++ b/composables/useLink.ts @@ -1,22 +1,25 @@ -import { computed } from '@nuxtjs/composition-api' -import { useWeb3 } from './useWeb3' +import { computed } from "@nuxtjs/composition-api"; +import { useNetwork } from "./useNetwork"; export function useLink() { - const { networkName } = useWeb3() + const { activeNetworkId } = useNetwork(); const addressDetailsLink = computed(() => { - if (networkName.value === 'polygon') { - return 'https://polygonscan.com/address' + if (activeNetworkId.value === "polygon") { + return "https://polygonscan.com/address"; } - return 'https://etherscan.io/address' - }) + return "https://etherscan.io/address"; + }); - return { addressDetailsLink } + return { addressDetailsLink }; } -export const getEtherscanLink = (transactionHash) => `https://etherscan.io/tx/${transactionHash}` -export const getMaticLink = (transactionHash) => `https://polygonscan.com/tx/${transactionHash}` -export const getPolygonLink = (transactionHash) => `https://polygonscan.com/tx/${transactionHash}` -export const getTenderlyLink = (simulationId) => - `https://dashboard.tenderly.co/public/InstaDApp/dsa-simulations/fork-simulation/${simulationId}?hideSidebar=true` +export const getEtherscanLink = transactionHash => + `https://etherscan.io/tx/${transactionHash}`; +export const getMaticLink = transactionHash => + `https://polygonscan.com/tx/${transactionHash}`; +export const getPolygonLink = transactionHash => + `https://polygonscan.com/tx/${transactionHash}`; +export const getTenderlyLink = simulationId => + `https://dashboard.tenderly.co/public/InstaDApp/dsa-simulations/fork-simulation/${simulationId}?hideSidebar=true`; diff --git a/composables/useNetwork.ts b/composables/useNetwork.ts index e99d356..0ff9427 100644 --- a/composables/useNetwork.ts +++ b/composables/useNetwork.ts @@ -5,7 +5,7 @@ import MainnetSVG from "~/assets/icons/mainnet.svg?inline"; import PolygonSVG from "~/assets/icons/polygon.svg?inline"; import { useModal } from "./useModal"; import { useNotification } from "./useNotification"; -import { useWeb3 } from "./useWeb3"; +import { useWeb3 } from "@kabbouchi/vue-web3"; export enum Network { Mainnet = "mainnet", @@ -24,11 +24,11 @@ export const activeNetwork = computed( export function useNetwork() { const { showWarning } = useNotification(); - const { account, networkName, refreshWeb3 } = useWeb3(); + const { account, chainId } = useWeb3(); const { showNetworksMismatchDialog } = useModal(); const networkMismatch = computed( - () => networkName.value != activeNetworkId.value + () => chainId.value != activeNetwork.value?.chainId ); const checkForNetworkMismatch = () => { @@ -117,7 +117,7 @@ export function useNetwork() { //@ts-ignore activeNetworkId.value = localStorage.getItem("network") || "mainnet"; - refreshWeb3(); + // refreshWeb3() }); return { diff --git a/composables/useSidebar.ts b/composables/useSidebar.ts index a8ee8c2..fcd3459 100644 --- a/composables/useSidebar.ts +++ b/composables/useSidebar.ts @@ -8,7 +8,7 @@ import { } from "@nuxtjs/composition-api"; import { useDSA } from "./useDSA"; -import { useWeb3 } from "./useWeb3"; +import { useWeb3 } from "@kabbouchi/vue-web3"; import SidebarAaveV2Supply from "~/components/sidebar/context/aaveV2/SidebarAaveV2Supply.vue"; import SidebarAaveV2Withdraw from '~/components/sidebar/context/aaveV2/SidebarAaveV2Withdraw.vue' import SidebarAaveV2Borrow from '~/components/sidebar/context/aaveV2/SidebarAaveV2Borrow.vue' diff --git a/composables/useTenderly.ts b/composables/useTenderly.ts index 753615f..4d54b0d 100644 --- a/composables/useTenderly.ts +++ b/composables/useTenderly.ts @@ -1,14 +1,14 @@ import { useContext, ref, onMounted, computed } from "@nuxtjs/composition-api"; import axios from "axios"; import { activeNetwork, useNetwork } from "./useNetwork"; -import { useWeb3 } from "./useWeb3"; +import { useWeb3 } from "@kabbouchi/vue-web3"; import Web3 from "web3"; import { useDSA } from "./useDSA"; const forkId = ref(null); export function useTenderly() { const { $config } = useContext(); - const { setWeb3, refreshWeb3 } = useWeb3(); + const { activate, provider } = useWeb3(); const { accounts, refreshAccounts } = useDSA(); const canSimulate = computed( () => $config.TENDERLY_FORK_PATH && $config.TENDERLY_KEY @@ -66,7 +66,7 @@ export function useTenderly() { forkId.value = null; window.localStorage.removeItem("forkId"); - await refreshWeb3(); + // await refreshWeb3(); loading.value = false; }; @@ -77,13 +77,13 @@ export function useTenderly() { } forkId.value = fork; - setWeb3( - new Web3( - new Web3.providers.HttpProvider( - `https://rpc.tenderly.co/fork/${forkId.value}` - ) - ) - ); + // setWeb3( + // new Web3( + // new Web3.providers.HttpProvider( + // `https://rpc.tenderly.co/fork/${forkId.value}` + // ) + // ) + // ); window.localStorage.setItem("forkId", forkId.value); }; diff --git a/composables/useToken.ts b/composables/useToken.ts index c53aef6..486c57f 100644 --- a/composables/useToken.ts +++ b/composables/useToken.ts @@ -2,18 +2,18 @@ import { computed } from "@nuxtjs/composition-api"; import atokensV2 from "~/constant/atokensV2"; import tokens from "~/constant/tokens"; import { useBigNumber } from "./useBigNumber"; -import { useWeb3 } from "./useWeb3"; +import { useNetwork } from "./useNetwork"; export function useToken() { - const { networkName } = useWeb3(); + const { activeNetworkId } = useNetwork(); const { toBN, times, minus, div, pow } = useBigNumber(); const getTokenByKey = key => - tokens[networkName.value].allTokens.find( + tokens[activeNetworkId.value].allTokens.find( token => String(token.key).toLowerCase() === String(key).toLowerCase() ); - const allATokensV2 = computed(() => atokensV2[networkName.value].allTokens); + const allATokensV2 = computed(() => atokensV2[activeNetworkId.value].allTokens); function valInt(val, decimals) { const num = toBN(val); diff --git a/composables/useWeb3Modal.ts b/composables/useWeb3Modal.ts new file mode 100644 index 0000000..c261374 --- /dev/null +++ b/composables/useWeb3Modal.ts @@ -0,0 +1,10 @@ +import { useModal } from "./useModal"; +import Web3Modal from "~/components/modal/web3/Web3Modal.vue"; + +export const useWeb3Modal = () => { + const { showComponent } = useModal(); + + return { + open: () => showComponent(Web3Modal) + }; +}; diff --git a/composables/useWeb3.ts b/composables/useWeb4.ts similarity index 100% rename from composables/useWeb3.ts rename to composables/useWeb4.ts diff --git a/connectors/index.ts b/connectors/index.ts new file mode 100644 index 0000000..12ec94c --- /dev/null +++ b/connectors/index.ts @@ -0,0 +1,19 @@ +import { setWeb3LibraryCallback } from "@kabbouchi/vue-web3"; +import { InjectedConnector } from "@web3-react/injected-connector"; +import { WalletConnectConnector } from "@web3-react/walletconnect-connector"; + +import Web3 from "web3"; + +setWeb3LibraryCallback(provider => new Web3(provider)); + +export const injected = new InjectedConnector({ + supportedChainIds: [1, 137] +}); + +export const walletconnect = new WalletConnectConnector({ + rpc: { + 1: `https://mainnet.infura.io/v3/${process.env.INFURA_ID}`, + 137: "https://rpc-mainnet.maticvigil.com" + }, + supportedChainIds: [1, 137] +}); diff --git a/layouts/default.vue b/layouts/default.vue index ad29987..56ef8a0 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -80,12 +80,13 @@ import { defineComponent, nextTick, onErrorCaptured, onMounted, useContext, useR import MakerDAOIcon from '~/assets/icons/makerdao.svg?inline' import CompoundIcon from '~/assets/icons/compound.svg?inline' import AaveIcon from '~/assets/icons/aave.svg?inline' -import { useWeb3 } from '~/composables/useWeb3' +import { useWeb3 } from '@kabbouchi/vue-web3' import { init as initSidebars, useSidebar } from '~/composables/useSidebar' import { useBackdrop } from '@/composables/useBackdrop' import { useNetwork } from "~/composables/useNetwork"; import { useTenderly } from "~/composables/useTenderly"; import { useModal } from "~/composables/useModal"; +import { useEagerConnect } from "~/composables/useEagerConnect"; export default defineComponent({ components: { @@ -100,6 +101,7 @@ export default defineComponent({ const { redirect } = useContext() const { showSidebarBalances } = useSidebar() const { showNetworksMismatchDialog } = useModal() + useEagerConnect() const route = useRoute() watch(isBackdropShown, () => { diff --git a/nuxt.config.js b/nuxt.config.js index 94419aa..91399ce 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -50,7 +50,7 @@ export default { // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins plugins: [ "~/plugins/v-click-outside.js", - "~/plugins/web3modal.js", + // "~/plugins/web3modal.js", { src: '~/plugins/v-tooltip', mode: 'client' }, { src: '~/plugins/v-clipboard2', mode: 'client' }, ], diff --git a/package.json b/package.json index 51d7c05..3cc7680 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,15 @@ "dependencies": { "@gnosis.pm/safe-apps-sdk": "^4.2.0", "@gnosis.pm/safe-apps-web3modal": "^2.0.0", + "@kabbouchi/vue-web3": "^0.2.16", "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/composition-api": "^0.24.7", + "@nuxtjs/composition-api": "^0.27.0", "@portis/web3": "^4.0.5", "@tailwindcss/forms": "^0.3.3", "@vueuse/core": "^5.1.4", "@walletconnect/web3-provider": "^1.4.1", + "@web3-react/injected-connector": "^6.0.7", + "@web3-react/walletconnect-connector": "^6.2.4", "bignumber.js": "^9.0.1", "core-js": "^3.15.1", "css-color-function": "^1.3.3", diff --git a/pages/1inch.vue b/pages/1inch.vue index b942015..db3502b 100644 --- a/pages/1inch.vue +++ b/pages/1inch.vue @@ -56,7 +56,7 @@ import { useBigNumber } from "~/composables/useBigNumber"; import { useNetwork } from "~/composables/useNetwork"; import { useDSA } from "~/composables/useDSA"; import { use1InchSwap } from "~/composables/swap/use1InchSwap"; -import { useWeb3 } from "~/composables/useWeb3"; +import { useWeb3 } from "@kabbouchi/vue-web3"; import { useNotification } from "~/composables/useNotification"; import { useBalances } from "~/composables/useBalances"; diff --git a/plugins/web3modal.js b/plugins/web3modal.js index 5db2d50..0bea0aa 100644 --- a/plugins/web3modal.js +++ b/plugins/web3modal.js @@ -1,5 +1,5 @@ import WalletConnectProvider from "@walletconnect/web3-provider"; -import { setProviders } from "~/composables/useWeb3" +import { setProviders } from "@kabbouchi/vue-web3" import WalletLink from 'walletlink' import Portis from '@portis/web3' import SVGcoinbase from '~/assets/coinbase.svg' diff --git a/yarn.lock b/yarn.lock index 93d0124..4e70cb8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1170,6 +1170,18 @@ dependencies: "@json-rpc-tools/types" "^1.6.1" +"@kabbouchi/vue-web3@^0.2.16": + version "0.2.16" + resolved "https://registry.yarnpkg.com/@kabbouchi/vue-web3/-/vue-web3-0.2.16.tgz#be6af2c1f83350a4fddc1004455d76cd5fe6a436" + integrity sha512-JjZhr8xXj0ugq15ZSDBB29jG+VhOdPlMB+a7szuk6IpU+bdSAK1g02vZir8KP0n5OQuLf3ITxv+bwkClbon/IA== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + tiny-invariant "^1.1.0" + vue-demi "^0.11.3" + "@koa/router@^9.0.1": version "9.4.0" resolved "https://registry.yarnpkg.com/@koa/router/-/router-9.4.0.tgz#734b64c0ae566eb5af752df71e4143edc4748e48" @@ -1592,17 +1604,17 @@ consola "^2.15.3" defu "^5.0.0" -"@nuxtjs/composition-api@^0.24.7": - version "0.24.7" - resolved "https://registry.yarnpkg.com/@nuxtjs/composition-api/-/composition-api-0.24.7.tgz#76ec3660a03cd7bdb8b85fd31e8dc6a2b7194e8f" - integrity sha512-q633RvsCi3veuGzTSkP/+a55Fn9EZS1APV2GJrdjajnBKKOMNPIXlAC8xAWGcsHE73/Cgf9DfGURQhcFvERRJA== +"@nuxtjs/composition-api@^0.27.0": + version "0.27.0" + resolved "https://registry.yarnpkg.com/@nuxtjs/composition-api/-/composition-api-0.27.0.tgz#cbe4df6a7306e4a34770fbad5b1ad79717f8fdb7" + integrity sha512-YtQ1KX+ls13zbukII8/vhKskoI1FrngDxegGVW31576qlaiEQUQGpOATF0cGrZ1W7Wgmz3rsAz1CNdSd5FFXOA== dependencies: - "@vue/composition-api" "1.0.0-rc.14" + "@vue/composition-api" "^1.1.1" defu "^5.0.0" estree-walker "^2.0.2" fs-extra "^9.1.0" magic-string "^0.25.7" - ufo "^0.7.7" + ufo "^0.7.9" upath "^2.0.1" "@nuxtjs/google-fonts@^1.3.0": @@ -2213,10 +2225,10 @@ optionalDependencies: prettier "^1.18.2" -"@vue/composition-api@1.0.0-rc.14": - version "1.0.0-rc.14" - resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.0.0-rc.14.tgz#4803fbccf3f3c770416e69095010c7bc0c4aa1c3" - integrity sha512-WKbOiy1zk8loM7ma88fOH0yacOEfMIQb0IZJEq561A+4C8GvLSqVSLT5K1iBVkzzJ07Pha8ntbeWSUQlBhRDKg== +"@vue/composition-api@^1.1.1": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.1.4.tgz#b4cd566e575350b86c22fa02632e4a356ac2e26e" + integrity sha512-f618a79X0VepQUoZofaAYzaherBuzfIIYah4gQPcwmXgN3oeuGdhO7DY2s3Rjcw7r9yTEh5sQIowbNWy6INGjg== dependencies: tslib "^2.3.0" @@ -2251,6 +2263,17 @@ window-getters "1.0.0" window-metadata "1.0.0" +"@walletconnect/browser-utils@^1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.6.5.tgz#01180682e90b95384e820191a1c6ad4a78729439" + integrity sha512-HLTysmlCkc2HN2OS6ewMG0v8E9oY2h9zNaDHe0BLN3ZxnsoMCVzkJxy7ryaXCemVdapmr6HgHFexGJoMbWaC4w== + dependencies: + "@walletconnect/safe-json" "1.0.0" + "@walletconnect/types" "^1.6.5" + "@walletconnect/window-getters" "1.0.0" + "@walletconnect/window-metadata" "1.0.0" + detect-browser "5.2.0" + "@walletconnect/client@^1.4.1": version "1.4.1" resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.4.1.tgz#c9c50df5afde23a35e23d96fe6d207c102e53850" @@ -2261,6 +2284,16 @@ "@walletconnect/types" "^1.4.1" "@walletconnect/utils" "^1.4.1" +"@walletconnect/client@^1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.6.5.tgz#6616ae926abc7c87c48a2d3693f2eb697858e685" + integrity sha512-dRq1D3NEGwM2I3CpiwFsWy1rrdMKCMSfDUu3rCCXUE4zInx+pyq7IEFjYiSjtOEZzjRlUTqYwhjnYIezQZgh4w== + dependencies: + "@walletconnect/core" "^1.6.5" + "@walletconnect/iso-crypto" "^1.6.5" + "@walletconnect/types" "^1.6.5" + "@walletconnect/utils" "^1.6.5" + "@walletconnect/core@^1.4.1": version "1.4.1" resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.4.1.tgz#68310ee7c9737a7a0a7f1308abbfc1c31212b9a6" @@ -2270,6 +2303,39 @@ "@walletconnect/types" "^1.4.1" "@walletconnect/utils" "^1.4.1" +"@walletconnect/core@^1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.6.5.tgz#acb687fc7c2d71ce2adad6a921ec1b343c4b4dd7" + integrity sha512-mmMTP8nZunjSCAy0ckafvt/JcdzcuSZPaAybqgKwx2rC9cc/3XWrdNsfiKMt8AFoQF87jGHem3905eFZYTqLXw== + dependencies: + "@walletconnect/socket-transport" "^1.6.5" + "@walletconnect/types" "^1.6.5" + "@walletconnect/utils" "^1.6.5" + +"@walletconnect/crypto@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.1.tgz#d4c1b1cd5dd1be88fe9a82dfc54cadbbb3f9d325" + integrity sha512-IgUReNrycIFxkGgq8YT9HsosCkhutakWD9Q411PR0aJfxpEa/VKJeaLRtoz6DvJpztWStwhIHnAbBoOVR72a6g== + dependencies: + "@walletconnect/encoding" "^1.0.0" + "@walletconnect/environment" "^1.0.0" + "@walletconnect/randombytes" "^1.0.1" + aes-js "^3.1.2" + hash.js "^1.1.7" + +"@walletconnect/encoding@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/encoding/-/encoding-1.0.0.tgz#e24190cb5e803526f9dfd7191fb0e4dc53c6d864" + integrity sha512-4nkJFnS0QF5JdieG/3VPD1/iEWkLSZ14EBInLZ00RWxmC6EMZrzAeHNAWIgm+xP3NK0lqz+7lEsmWGtcl5gYnQ== + dependencies: + is-typedarray "1.0.0" + typedarray-to-buffer "3.1.5" + +"@walletconnect/environment@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.0.tgz#c4545869fa9c389ec88c364e1a5f8178e8ab5034" + integrity sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ== + "@walletconnect/http-connection@^1.4.1": version "1.4.1" resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.4.1.tgz#a36d3645eea2606c876e3824b7d46549bf237833" @@ -2280,6 +2346,16 @@ eventemitter3 "4.0.7" xhr2-cookies "1.1.0" +"@walletconnect/http-connection@^1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.6.5.tgz#18529b7556bc09d7c794f4adc76ef0742cd500aa" + integrity sha512-5kr6wZ3DnqaBiwkeA9iKdawvIb3bIJNf8WA8X89YHE5KOzbkAsymjniZWs8asdl9Y9+8ZHJMPXtylyrkpT8wXA== + dependencies: + "@walletconnect/types" "^1.6.5" + "@walletconnect/utils" "^1.6.5" + eventemitter3 "4.0.7" + xhr2-cookies "1.1.0" + "@walletconnect/iso-crypto@^1.4.1": version "1.4.1" resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.4.1.tgz#0d9793c679d6c5443c49cce83f5d8dd476a65df2" @@ -2289,6 +2365,30 @@ "@walletconnect/types" "^1.4.1" "@walletconnect/utils" "^1.4.1" +"@walletconnect/iso-crypto@^1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.6.5.tgz#1c6471506283817e7e797c5e2e733f6c3d88f8dc" + integrity sha512-145VRX1+gudhHrnT2s81lLW/BEu3QgFMMRCrkxx9Tsl5JiLGcGbWkMxAl8zjGTMqnHeuQngyjvY1mO+3z27a7A== + dependencies: + "@walletconnect/crypto" "^1.0.1" + "@walletconnect/types" "^1.6.5" + "@walletconnect/utils" "^1.6.5" + +"@walletconnect/jsonrpc-types@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.0.tgz#fa75ad5e8f106a2e33287b1e6833e22ed0225055" + integrity sha512-11QXNq5H1PKZk7bP8SxgmCw3HRaDuPOVE+wObqEvmhc7OWYUZqfuaaMb+OXGRSOHL3sbC+XHfdeCxFTMXSFyng== + dependencies: + keyvaluestorage-interface "^1.0.0" + +"@walletconnect/jsonrpc-utils@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.0.tgz#1a2f668d606e8f0b6e7d8fdebae86001bd037a3f" + integrity sha512-qUHbKUK6sHeHn67qtHZoLoYk5hS6x1arTPjKDRkY93/6Fx+ZmNIpdm1owX3l6aYueyegJ7mz43FpvYHUqJ8xcw== + dependencies: + "@walletconnect/environment" "^1.0.0" + "@walletconnect/jsonrpc-types" "^1.0.0" + "@walletconnect/mobile-registry@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz#502cf8ab87330841d794819081e748ebdef7aee5" @@ -2305,6 +2405,32 @@ preact "10.4.1" qrcode "1.4.4" +"@walletconnect/qrcode-modal@^1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.6.5.tgz#58974ca8f826bd500121e85694dd342b3535cf2c" + integrity sha512-XII/Pm7zS5pRxrakURuhbWO+SfwgOuLuvOBk/hr1ATK/y7R5p19P62mCSUrvSxHXca27IX1tZJRe9D161R0WgQ== + dependencies: + "@walletconnect/browser-utils" "^1.6.5" + "@walletconnect/mobile-registry" "^1.4.0" + "@walletconnect/types" "^1.6.5" + copy-to-clipboard "^3.3.1" + preact "10.4.1" + qrcode "1.4.4" + +"@walletconnect/randombytes@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/randombytes/-/randombytes-1.0.1.tgz#87f0f02d9206704ce1c9e23f07d3b28898c48385" + integrity sha512-YJTyq69i0PtxVg7osEpKfvjTaWuAsR49QEcqGKZRKVQWMbGXBZ65fovemK/SRgtiFRv0V8PwsrlKSheqzfPNcg== + dependencies: + "@walletconnect/encoding" "^1.0.0" + "@walletconnect/environment" "^1.0.0" + randombytes "^2.1.0" + +"@walletconnect/safe-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2" + integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg== + "@walletconnect/socket-transport@^1.4.1": version "1.4.1" resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.4.1.tgz#d9b7ebb9a2843cc44cf96c880c62be78d4a1625f" @@ -2314,11 +2440,25 @@ "@walletconnect/utils" "^1.4.1" ws "7.3.0" +"@walletconnect/socket-transport@^1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.6.5.tgz#f190f2d994021287fdeaf071114a5415096b2535" + integrity sha512-FRlgBr3EIxD3du5l/tuK6jdiva85YeRG+iZmo/RPnlVw4opy74WXb5JdCK9jXLcBEoDiY9Hz4j69aqnht6gIDQ== + dependencies: + "@walletconnect/types" "^1.6.5" + "@walletconnect/utils" "^1.6.5" + ws "7.5.3" + "@walletconnect/types@^1.4.1": version "1.4.1" resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.4.1.tgz#48297238b86f846b8c694504ca45f0059a2cca88" integrity sha512-lzS9NbXjVb5N+W/UnCZAflxjLtYepUi4ev1IeFozSvr/cWxAhEe/sjixe7WEIpYklW27kfBhKccMH/KjUoRC7w== +"@walletconnect/types@^1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.6.5.tgz#31ad1415fc6e1e89e25a10ad5fed6958f56cefa8" + integrity sha512-S9DsODI35PbIDuOSkIiF8SzTstqCqX/4+kV7n18vyukEFPlpSSHwZMwJUfzo9yJ0pqsqLNZta+jvb88gJRuAaA== + "@walletconnect/utils@^1.4.1": version "1.4.1" resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.4.1.tgz#86108470c211a02609274a6c7bbd516c5182a22e" @@ -2332,6 +2472,19 @@ js-sha3 "0.8.0" query-string "6.13.5" +"@walletconnect/utils@^1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.6.5.tgz#6edd749cb52a363feda117121dc865d7cc6169f7" + integrity sha512-QB5rn/1s0PKVitAQ2/mgWbay2XfN21y3ob+5g6IhxtJRW31bbMoZw5YfO6s4ixLaZZez5LNQXstvQAclRzB7jQ== + dependencies: + "@walletconnect/browser-utils" "^1.6.5" + "@walletconnect/encoding" "^1.0.0" + "@walletconnect/jsonrpc-utils" "^1.0.0" + "@walletconnect/types" "^1.6.5" + bn.js "4.11.8" + js-sha3 "0.8.0" + query-string "6.13.5" + "@walletconnect/web3-provider@^1.4.1": version "1.4.1" resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.4.1.tgz#34f6319ab2473ab9ff0fcf1e8bc280c697fa01ff" @@ -2344,6 +2497,61 @@ "@walletconnect/utils" "^1.4.1" web3-provider-engine "16.0.1" +"@walletconnect/web3-provider@^1.5.0": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.6.5.tgz#7c4ac2f89ddda1a4069d500ed29cc4396e7fdade" + integrity sha512-SeC7+1saHxvFn2wjt/3F0sTkDemHDNDbMkdZ3jtA7vjEw91Q0CmaYIuZk2UxyVM+tC1jL1l4yci/sgaFeAcXpQ== + dependencies: + "@walletconnect/client" "^1.6.5" + "@walletconnect/http-connection" "^1.6.5" + "@walletconnect/qrcode-modal" "^1.6.5" + "@walletconnect/types" "^1.6.5" + "@walletconnect/utils" "^1.6.5" + web3-provider-engine "16.0.1" + +"@walletconnect/window-getters@1.0.0", "@walletconnect/window-getters@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.0.tgz#1053224f77e725dfd611c83931b5f6c98c32bfc8" + integrity sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA== + +"@walletconnect/window-metadata@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz#93b1cc685e6b9b202f29c26be550fde97800c4e5" + integrity sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA== + dependencies: + "@walletconnect/window-getters" "^1.0.0" + +"@web3-react/abstract-connector@^6.0.7": + version "6.0.7" + resolved "https://registry.yarnpkg.com/@web3-react/abstract-connector/-/abstract-connector-6.0.7.tgz#401b3c045f1e0fab04256311be49d5144e9badc6" + integrity sha512-RhQasA4Ox8CxUC0OENc1AJJm8UTybu/oOCM61Zjg6y0iF7Z0sqv1Ai1VdhC33hrQpA8qSBgoXN9PaP8jKmtdqg== + dependencies: + "@web3-react/types" "^6.0.7" + +"@web3-react/injected-connector@^6.0.7": + version "6.0.7" + resolved "https://registry.yarnpkg.com/@web3-react/injected-connector/-/injected-connector-6.0.7.tgz#1e0be23f51fa07fe6547fe986768a46b74c3a426" + integrity sha512-Y7aJSz6pg+MWKtvdyuqyy6LWuH+4Tqtph1LWfiyVms9II9ar/9B/de4R8wh4wjg91wmHkU+D75yP09E/Soh2RA== + dependencies: + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + tiny-warning "^1.0.3" + +"@web3-react/types@^6.0.7": + version "6.0.7" + resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-6.0.7.tgz#34a6204224467eedc6123abaf55fbb6baeb2809f" + integrity sha512-ofGmfDhxmNT1/P/MgVa8IKSkCStFiyvXe+U5tyZurKdrtTDFU+wJ/LxClPDtFerWpczNFPUSrKcuhfPX1sI6+A== + +"@web3-react/walletconnect-connector@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@web3-react/walletconnect-connector/-/walletconnect-connector-6.2.4.tgz#0a128699fc93ddac885935f4aeca32925f6285f0" + integrity sha512-IEVjCXrlcfVa6ggUBEyKtLRaLQuZGtT2lGuzOFtdbJJkN84u1++pzzeDrcsVhKAoS5wq33zyJT9baEbG1Aed8g== + dependencies: + "@walletconnect/web3-provider" "^1.5.0" + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + tiny-invariant "^1.0.6" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -3949,6 +4157,13 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +copy-to-clipboard@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" + integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== + dependencies: + toggle-selection "^1.0.6" + core-js-compat@^3.12.1, core-js-compat@^3.14.0, core-js-compat@^3.15.0: version "3.15.2" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.2.tgz#47272fbb479880de14b4e6081f71f3492f5bd3cb" @@ -11050,6 +11265,16 @@ tiny-emitter@^2.0.0: resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== +tiny-invariant@^1.0.6, tiny-invariant@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + +tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -11111,6 +11336,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -11227,11 +11457,16 @@ ua-parser-js@^0.7.28: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31" integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g== -ufo@^0.7.4, ufo@^0.7.5, ufo@^0.7.7: +ufo@^0.7.4, ufo@^0.7.5: version "0.7.7" resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.7.tgz#0062f9e5e790819b0fb23ca24d7c63a4011c036a" integrity sha512-N25aY3HBkJBnahm+2l4JRBBrX5I+JPakF/tDHYDTjd3wUR7iFLdyiPhj8mBwBz21v728BKwM9L9tgBfCntgdlw== +ufo@^0.7.9: + version "0.7.9" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.9.tgz#0268e3734b413c9ed6f3510201f42372821b875c" + integrity sha512-6t9LrLk3FhqTS+GW3IqlITtfRB5JAVr5MMNjpBECfK827W+Vh5Ilw/LhTcHWrt6b3hkeBvcbjx4Ti7QVFzmcww== + uglify-js@^3.5.1: version "3.13.10" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.10.tgz#a6bd0d28d38f592c3adb6b180ea6e07e1e540a8d" @@ -11569,6 +11804,11 @@ vue-demi@*: resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.11.2.tgz#faa06da53887c493a695b997f4fcb4784a667990" integrity sha512-J+X8Au6BhQdcej6LY4O986634hZLu55L0ewU2j8my7WIKlu8cK0dqmdUxqVHHMd/cMrKKZ9SywB/id6aLhwCtA== +vue-demi@^0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.11.3.tgz#dd7495b92b495ecfa35675bf024b1358a7add150" + integrity sha512-DpM0TTMpclRZDV6AIacgg837zrim/C9Zn+2ztXBs9hsESJN9vC83ztjTe4KC4HgJuVle8YUjPp7HTwWtwOHfmg== + vue-hot-reload-api@^2.3.0: version "2.3.4" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" @@ -12217,6 +12457,11 @@ ws@7.3.0: resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== +ws@7.5.3, ws@^7.3.1: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + ws@^3.0.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" @@ -12233,11 +12478,6 @@ ws@^5.1.1: dependencies: async-limiter "~1.0.0" -ws@^7.3.1: - version "7.5.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== - xhr-request-promise@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" From 16c066f3e01fe4c0a025201fddc24d799b3cde7a Mon Sep 17 00:00:00 2001 From: Georges KABBOUCHI Date: Wed, 1 Sep 2021 21:56:10 +0300 Subject: [PATCH 18/42] style fixes --- components/AccountDropdown.vue | 6 +++--- components/AccountSwitcher.vue | 2 +- components/Navbar.vue | 2 +- components/NetworkSwitcher.vue | 2 +- layouts/default.vue | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/components/AccountDropdown.vue b/components/AccountDropdown.vue index 2a13e9b..0327e74 100644 --- a/components/AccountDropdown.vue +++ b/components/AccountDropdown.vue @@ -1,6 +1,6 @@