diff --git a/src/BlockTimer.svelte b/src/BlockTimer.svelte new file mode 100644 index 000000000..ccf159519 --- /dev/null +++ b/src/BlockTimer.svelte @@ -0,0 +1,34 @@ + + + + +
+
+
diff --git a/src/base/registrations/Submit.svelte b/src/base/registrations/Submit.svelte index 35b1889d8..09bceef41 100644 --- a/src/base/registrations/Submit.svelte +++ b/src/base/registrations/Submit.svelte @@ -8,6 +8,7 @@ import Loading from '@app/Loading.svelte'; import Modal from '@app/Modal.svelte'; import Err from '@app/Error.svelte'; + import BlockTimer from "@app/BlockTimer.svelte"; import { registerName, State, state } from './registrar'; @@ -27,13 +28,19 @@ } catch (e) { console.error("Error", e); - state.set(State.Failed); + state.set({ connection: State.Failed }); error = e; } }); - + {#if error} - {#if $state === State.Registered} + {#if $state.connection === State.Registered}
🎉
{/if} {subdomain}.{config.registrar.domain}
- {#if $state === State.Connecting} + {#if $state.connection === State.Connecting} Connecting... - {:else if $state === State.Committing} + {:else if $state.connection === State.Committing} Committing... - {:else if $state === State.WaitingToRegister} + {:else if $state.connection === State.WaitingToRegister && $state.commitmentBlock} Waiting for commitment time... - {:else if $state === State.Registering} + {:else if $state.connection === State.Registering} Registering name... {/if} - - {#if $state === State.Registered} + + {#if $state.connection === State.Registered} The name has been successfully registered to - {registrationOwner}. + {registrationOwner} + {:else if $state.connection === State.WaitingToRegister && $state.commitmentBlock} + {:else} {/if} - {#if $state === State.Registered} + {#if $state.connection === State.Registered} diff --git a/src/base/registrations/registrar.ts b/src/base/registrations/registrar.ts index 2678370d4..a42affb78 100644 --- a/src/base/registrations/registrar.ts +++ b/src/base/registrations/registrar.ts @@ -30,12 +30,21 @@ export enum State { Registered, } -export const state = writable(State.Connecting); +export type Connection = + { connection: State.Failed } + | { connection: State.Connecting } + | { connection: State.Committing } + | { connection: State.WaitingToRegister; commitmentBlock: number; minAge: number } + | { connection: State.Registering } + | { connection: State.Registered }; + + +export const state = writable({ connection: State.Connecting }); window.registrarState = state; -state.subscribe((s: State) => { - console.log("regiter.state", s); +state.subscribe((s: Connection) => { + console.log("register.state", s); }); export async function getRegistration(name: string, config: Config): Promise { @@ -121,7 +130,7 @@ async function commitAndRegister(name: string, owner: string, config: Config): P async function commit(commitment: string, fee: BigNumber, minAge: number, config: Config): Promise { assert(config.signer); - state.set(State.Committing); + state.set({ connection: State.Committing }); const owner = config.signer; const ownerAddr = await owner.getAddress(); @@ -144,8 +153,12 @@ async function commit(commitment: string, fee: BigNumber, minAge: number, config await tx.wait(1); session.state.updateBalance(fee.mul(-1)); - - state.set(State.WaitingToRegister); + const receipt = await config.provider.getTransactionReceipt(tx.hash); + state.set({ + connection: State.WaitingToRegister, + commitmentBlock: receipt.blockNumber, + minAge + }); await tx.wait(minAge + 1); } @@ -190,7 +203,7 @@ async function permitSignature( async function register(name: string, owner: string, salt: Uint8Array, config: Config) { assert(config.signer); - state.set(State.Registering); + state.set({ connection: State.Registering }); const tx = await registrar(config).connect(config.signer).register( name, owner, ethers.BigNumber.from(salt), { gasLimit: 150000 } @@ -199,7 +212,7 @@ async function register(name: string, owner: string, salt: Uint8Array, config: C await tx.wait(); window.localStorage.clear(); - state.set(State.Registered); + state.set({ connection: State.Registered }); } function makeCommitment(name: string, owner: string, salt: Uint8Array): string {