From 8e73432703aa6535dbb7f874c855a20e83e297cb Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Fri, 21 May 2021 15:06:14 +0200 Subject: [PATCH] Use Alchemy as fallback provider --- package-lock.json | 14 ++++---- package.json | 2 +- public/index.css | 1 + snowpack.config.js | 3 ++ src/App.svelte | 30 ++++++++++++----- src/Error.svelte | 3 +- src/Header.svelte | 23 ++++++++++--- src/Modal.svelte | 6 ++++ src/config.ts | 75 +++++++++++++++++++++++++++--------------- src/ens/SetName.svelte | 2 +- tsconfig.json | 3 +- 11 files changed, 112 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6d318b946..02afa868e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "devDependencies": { "@snowpack/plugin-svelte": "^3.5.2", "@tsconfig/svelte": "^1.0.10", - "snowpack": "^3.0.1", + "snowpack": "^3.5.0", "svelte-check": "^1.5.2", "svelte-preprocess": "^4.7.2", "typescript": "^4.2.4" @@ -2943,9 +2943,9 @@ } }, "node_modules/snowpack": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.3.7.tgz", - "integrity": "sha512-7I5wznB6wGKq2fi6pxU3UZLEe3R0a5IChO8x+w0iYT7/oERubkbzc/SXTMXm6lVvtYMs2W1AkE+0VHP1KI0IEw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.5.0.tgz", + "integrity": "sha512-RlQbyXlILgGKYkvlYHzDydM1V2xAgQ5ZQsb/BUlkzAqNlbFSbyM2Genfw3eWTfk6o5kG0BrpdAmyGcTpN1Q+UQ==", "dev": true, "dependencies": { "cli-spinners": "^2.5.0", @@ -5632,9 +5632,9 @@ "dev": true }, "snowpack": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.3.7.tgz", - "integrity": "sha512-7I5wznB6wGKq2fi6pxU3UZLEe3R0a5IChO8x+w0iYT7/oERubkbzc/SXTMXm6lVvtYMs2W1AkE+0VHP1KI0IEw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.5.0.tgz", + "integrity": "sha512-RlQbyXlILgGKYkvlYHzDydM1V2xAgQ5ZQsb/BUlkzAqNlbFSbyM2Genfw3eWTfk6o5kG0BrpdAmyGcTpN1Q+UQ==", "dev": true, "requires": { "cli-spinners": "^2.5.0", diff --git a/package.json b/package.json index 47b695f99..10c2a44d1 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "devDependencies": { "@snowpack/plugin-svelte": "^3.5.2", "@tsconfig/svelte": "^1.0.10", - "snowpack": "^3.0.1", + "snowpack": "^3.5.0", "svelte-check": "^1.5.2", "svelte-preprocess": "^4.7.2", "typescript": "^4.2.4" diff --git a/public/index.css b/public/index.css index 1ff03dedf..683a0d8bc 100644 --- a/public/index.css +++ b/public/index.css @@ -43,6 +43,7 @@ --color-foreground-6: #d3dee8; --color-background: #0b131a; --color-glow: #5555ff22; + --color-glow-error: #ff555522; --color-subtle: #777; --font-family-sans-serif: Inter, sans-serif; diff --git a/snowpack.config.js b/snowpack.config.js index 2c8f306b9..6fc0b7ea5 100644 --- a/snowpack.config.js +++ b/snowpack.config.js @@ -1,5 +1,8 @@ /** @type {import("snowpack").SnowpackUserConfig } */ module.exports = { + env: { + RADICLE_ALCHEMY_API_KEY: process.env.RADICLE_ALCHEMY_API_KEY, + }, mount: { public: '/', src: '/dist', diff --git a/src/App.svelte b/src/App.svelte index e308826f9..28ee647fd 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -10,6 +10,8 @@ import Orgs from '@app/base/orgs/Routes.svelte'; import Resolver from '@app/base/resolver/Routes.svelte'; import Header from '@app/Header.svelte'; + import Loading from '@app/Loading.svelte'; + import Modal from '@app/Modal.svelte'; function handleKeydown(event: KeyboardEvent) { if (event.key === 'Enter') { @@ -30,10 +32,11 @@ -{#await getConfig()} - -{:then config} -
+
+ {#await getConfig()} + + + {:then config}
@@ -48,7 +51,18 @@
-
-{:catch} - -{/await} + {:catch err} +
+ + +

👻

+
Error connecting to network
+
+ + + {err} + +
+
+ {/await} +
diff --git a/src/Error.svelte b/src/Error.svelte index bc68bd2fd..c89814318 100644 --- a/src/Error.svelte +++ b/src/Error.svelte @@ -10,11 +10,12 @@ export let subtitle: string = ""; export let message: string = ""; export let floating = false; + export let subtle = false; let body = message || (error && error.message) || ""; - + {title} diff --git a/src/Header.svelte b/src/Header.svelte index 0b659f7c2..60632da9a 100644 --- a/src/Header.svelte +++ b/src/Header.svelte @@ -13,7 +13,9 @@ import type { Config } from '@app/config'; export let session: Session | null; - export let config: Config; + export let config: Config | null; + + console.log(config); let sessionButton: HTMLElement | null = null; let sessionButtonHover = false; @@ -78,6 +80,13 @@ margin: 0 2rem; border-radius: var(--border-radius); } + .network.unavailable { + color: #888; + background-color: #ffffff11; + } + .network:last-child { + margin-right: 0; + } {#if $error} @@ -98,17 +107,21 @@
- {#if config.network.name == 'ropsten'} + {#if config && config.network.name == 'ropsten'} Ropsten - {:else if config.network.name == 'rinkeby'} + {:else if config && config.network.name == 'rinkeby'} Rinkeby + {:else if config && config.network.name == 'homestead'} + + {:else} + No Network {/if} {#if address} @@ -127,7 +140,7 @@ {formatAddress(address)} {/if} - {:else} + {:else if config} {/if}
diff --git a/src/Modal.svelte b/src/Modal.svelte index 2b27e4b91..b76942ae5 100644 --- a/src/Modal.svelte +++ b/src/Modal.svelte @@ -40,6 +40,12 @@ transparent 70% ); } + .modal.modal-subtle.error { + background: radial-gradient( + var(--color-glow-error) 0%, + transparent 70% + ); + } .modal-title { font-size: 1.25rem; font-weight: bold; diff --git a/src/config.ts b/src/config.ts index 6d4d20c23..d64226c56 100644 --- a/src/config.ts +++ b/src/config.ts @@ -7,17 +7,45 @@ declare global { ethereum: any; registrarState: any; } + + interface ImportMeta { + env: { + RADICLE_ALCHEMY_API_KEY: string | null, + } + } } -export type Config = { - network: { name: string, chainId: number }, - registrar: { address: string, domain: string }, - radToken: { address: string }, - orgFactory: { address: string }, - gasLimits: { createOrg: number }, - provider: ethers.providers.JsonRpcProvider, - signer: ethers.Signer & TypedDataSigner, -}; +export class Config { + network: { name: string, chainId: number }; + registrar: { address: string, domain: string }; + radToken: { address: string }; + orgFactory: { address: string }; + gasLimits: { createOrg: number }; + provider: ethers.providers.JsonRpcProvider; + signer: ethers.Signer & TypedDataSigner | null; + + constructor( + network: { name: string, chainId: number }, + provider: ethers.providers.JsonRpcProvider + ) { + let cfg = (> config)[network.name]; + let signer = null; + + try { + signer = provider.getSigner(); + } catch (e) { + console.log(e.message); + } + + this.network = network; + this.registrar = cfg.registrar; + this.radToken = cfg.radToken; + this.orgFactory = cfg.orgFactory; + this.provider = provider; + this.signer = signer; + this.gasLimits = gasLimits; + } +} /// Gas limits for various transactions. const gasLimits = { @@ -30,26 +58,21 @@ function isMetamaskInstalled(): boolean { } export async function getConfig(): Promise { + let config: Config; + if (isMetamaskInstalled()) { const provider = new ethers.providers.Web3Provider(window.ethereum); + const network = await provider.ready; - let network = await provider.ready; - let cfg = (> config)[network.name]; - - if (cfg) { - return { - network, - registrar: cfg.registrar, - radToken: cfg.radToken, - orgFactory: cfg.orgFactory, - provider: provider, - signer: provider.getSigner(), - gasLimits: gasLimits, - }; - } else { - throw `Wrong network: ${network.name}`; - } + config = new Config(network, provider); } else { - throw "No provider available"; + const network = { name: "homestead", chainId: 1 }; + const apiKey = import.meta.env.RADICLE_ALCHEMY_API_KEY; + const provider = new ethers.providers.AlchemyProvider(network.name, apiKey); + + config = new Config(network, provider); } + console.log(config); + + return config; } diff --git a/src/ens/SetName.svelte b/src/ens/SetName.svelte index 91828b10f..74b46ef86 100644 --- a/src/ens/SetName.svelte +++ b/src/ens/SetName.svelte @@ -70,7 +70,7 @@
{#if mismatchError} - 🦉 + 👻 {:else} 🖊️ {/if} diff --git a/tsconfig.json b/tsconfig.json index d3aa4bd06..8764a990f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,8 @@ "node_modules/*" ], "compilerOptions": { - "target": "es2019", + "target": "es2020", + "module": "es2020", "types": [ "svelte" ],