Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Change Faucet.ts to lib.ts and route
Sebastian Martinez committed 4 years ago
commit 9fb939e9c4e67526b8bb69772d3bae424365c16c
parent f22d513f7938db81811b867374e2ba0e8a42f5a2
6 files changed +147 -147
deleted src/base/faucet/Faucet.ts
@@ -1,56 +0,0 @@
-
import * as ethers from 'ethers';
-

-
import type { Config } from '@app/config';
-
import { assert } from '@app/error';
-
import type { TransactionResponse } from '@ethersproject/providers';
-
import { parseUnits } from '@ethersproject/units';
-

-
export async function withdraw(amount: number, config: Config): Promise<TransactionResponse> {
-
  assert(config.signer);
-

-
  const faucet = new ethers.Contract(
-
    config.radToken.faucet,
-
    config.abi.faucet,
-
    config.signer
-
  );
-

-
  return faucet.withdraw(config.radToken.address, ethers.utils.parseUnits(amount.toString()));
-
}
-

-
export async function getMaxWithdrawAmount(config: Config): Promise<ethers.BigNumber> {
-
  assert(config.signer);
-

-
  const faucet = new ethers.Contract(
-
    config.radToken.faucet,
-
    config.abi.faucet,
-
    config.signer
-
  );
-

-
  return faucet.maxWithdrawAmount();
-
}
-

-
export async function calculateTimeLock(amount: ethers.BigNumber, config: Config): Promise<ethers.BigNumber> {
-
  assert(config.signer);
-

-
  const faucet = new ethers.Contract(
-
    config.radToken.faucet,
-
    config.abi.faucet,
-
    config.signer
-
  );
-

-
  return faucet.calculateTimeLock(parseUnits(amount.toString()));
-
}
-

-
export async function lastWithdrawalByUser(config: Config): Promise<ethers.BigNumber> {
-
  assert(config.signer);
-

-
  const address = config.signer.getAddress();
-

-
  const faucet = new ethers.Contract(
-
    config.radToken.faucet,
-
    config.abi.faucet,
-
    config.signer
-
  );
-

-
  return faucet.lastWithdrawalByUser(address);
-
}
modified src/base/faucet/Index.svelte
@@ -5,7 +5,7 @@
  import type { ethers } from "ethers";
  import { onMount } from "svelte";
  import { navigate } from "svelte-routing";
-
  import { getMaxWithdrawAmount, lastWithdrawalByUser, calculateTimeLock } from "./Faucet";
+
  import { getMaxWithdrawAmount, lastWithdrawalByUser, calculateTimeLock } from "./lib";

  export let config: Config;

@@ -16,7 +16,7 @@

  async function withdraw() {
    const [state, message] = await isAbleToWithdraw(amountBN);
-
    if (state === true) navigate("/faucet/submit", { state: { amount } });
+
    if (state === true) navigate("/faucet/withdraw", { state: { amount } });
    else error = message;
  }

modified src/base/faucet/Routes.svelte
@@ -2,7 +2,7 @@
  import { Route } from "svelte-routing";
  import Index from "@app/base/faucet/Index.svelte";
  import type { Config } from "@app/config";
-
  import Submit from "./Submit.svelte";
+
  import Withdraw from "./Withdraw.svelte";

  export let config: Config;
</script>
@@ -11,6 +11,6 @@
  <Index {config} />
</Route>

-
<Route path="faucet/submit">
-
  <Submit {config} />
+
<Route path="faucet/withdraw">
+
  <Withdraw {config} />
</Route>
deleted src/base/faucet/Submit.svelte
@@ -1,86 +0,0 @@
-
<script lang="ts">
-
  import { onMount } from "svelte";
-
  import { navigate } from "svelte-routing";
-
  import type { Config } from "@app/config";
-
  import Loading from "@app/Loading.svelte";
-
  import Modal from "@app/Modal.svelte";
-
  import Err from "@app/Error.svelte";
-
  import { Status, State } from "@app/utils";
-
  import { withdraw } from "./Faucet";
-
  import { session } from '@app/session';
-

-
  export let config: Config;
-

-
  let error: Error;
-
  let state: State = {
-
    status: Status.Failed,
-
    error: "Error withdrawing, something happened.",
-
  };
-
  $: requester = ($session && $session.address);
-

-
  const back = () => navigate(`/faucet`);
-

-
  onMount(async () => {
-
    try {
-
      state.status = Status.Signing;
-
      const tx = await withdraw(window.history.state.amount, config);
-
      state.status = Status.Pending;
-
      await tx.wait();
-
      state.status = Status.Success;
-
    } catch (e) {
-
      console.error(e);
-
      error = e;
-
      state = { status: Status.Failed, error: e.message };
-
    }
-
  });
-
</script>
-

-
<style>
-
  .loader {
-
    display: flex;
-
    flex-direction: column;
-
    align-items: center;
-
  }
-
</style>
-

-
{#if error}
-
  <Err
-
    title="Transaction failed"
-
    message={error.message}
-
    on:close={() => navigate("/faucet")}
-
  />
-
{:else}
-
  <Modal>
-
    <span slot="title">
-
      {#if state.status === Status.Success}
-
        <div>🎉</div>
-
      {:else}
-
        <div>🌐</div>
-
      {/if}
-
      Withdrawal
-
    </span>
-

-
    <span slot="subtitle">
-
      {#if state.status === Status.Signing}
-
        Signing transaction. Please confirm in your wallet.
-
      {:else if state.status === Status.Pending}
-
        Awaiting transaction.
-
      {/if}
-
    </span>
-

-
    <span slot="body" class="loader">
-
      {#if state.status === Status.Success}
-
        The amount of {window.history.state.amount.toString()} RAD tokens has been successfully transfered to
-
        <span class="highlight">{requester}</span>
-
      {:else}
-
        <Loading small center />
-
      {/if}
-
    </span>
-

-
    <span slot="actions">
-
      {#if state.status === Status.Success}
-
        <button on:click={back} class="register"> Back </button>
-
      {/if}
-
    </span>
-
  </Modal>
-
{/if}
added src/base/faucet/Withdraw.svelte
@@ -0,0 +1,86 @@
+
<script lang="ts">
+
  import { onMount } from "svelte";
+
  import { navigate } from "svelte-routing";
+
  import type { Config } from "@app/config";
+
  import Loading from "@app/Loading.svelte";
+
  import Modal from "@app/Modal.svelte";
+
  import Err from "@app/Error.svelte";
+
  import { Status, State } from "@app/utils";
+
  import { withdraw } from "./lib";
+
  import { session } from '@app/session';
+

+
  export let config: Config;
+

+
  let error: Error;
+
  let state: State = {
+
    status: Status.Failed,
+
    error: "Error withdrawing, something happened.",
+
  };
+
  $: requester = ($session && $session.address);
+

+
  const back = () => navigate(`/faucet`);
+

+
  onMount(async () => {
+
    try {
+
      state.status = Status.Signing;
+
      const tx = await withdraw(window.history.state.amount, config);
+
      state.status = Status.Pending;
+
      await tx.wait();
+
      state.status = Status.Success;
+
    } catch (e) {
+
      console.error(e);
+
      error = e;
+
      state = { status: Status.Failed, error: e.message };
+
    }
+
  });
+
</script>
+

+
<style>
+
  .loader {
+
    display: flex;
+
    flex-direction: column;
+
    align-items: center;
+
  }
+
</style>
+

+
{#if error}
+
  <Err
+
    title="Transaction failed"
+
    message={error.message}
+
    on:close={back}
+
  />
+
{:else}
+
  <Modal>
+
    <span slot="title">
+
      {#if state.status === Status.Success}
+
        <div>🎉</div>
+
      {:else}
+
        <div>🌐</div>
+
      {/if}
+
      Withdrawal
+
    </span>
+

+
    <span slot="subtitle">
+
      {#if state.status === Status.Signing}
+
        Signing transaction. Please confirm in your wallet.
+
      {:else if state.status === Status.Pending}
+
        Awaiting transaction.
+
      {/if}
+
    </span>
+

+
    <span slot="body" class="loader">
+
      {#if state.status === Status.Success}
+
        The amount of {window.history.state.amount.toString()} RAD tokens has been successfully transfered to
+
        <span class="highlight">{requester}</span>
+
      {:else}
+
        <Loading small center />
+
      {/if}
+
    </span>
+

+
    <span slot="actions">
+
      {#if state.status === Status.Success}
+
        <button on:click={back}> Back </button>
+
      {/if}
+
    </span>
+
  </Modal>
+
{/if}
added src/base/faucet/lib.ts
@@ -0,0 +1,56 @@
+
import * as ethers from 'ethers';
+

+
import type { Config } from '@app/config';
+
import { assert } from '@app/error';
+
import type { TransactionResponse } from '@ethersproject/providers';
+
import { parseUnits } from '@ethersproject/units';
+

+
export async function withdraw(amount: number, config: Config): Promise<TransactionResponse> {
+
  assert(config.signer);
+

+
  const faucet = new ethers.Contract(
+
    config.radToken.faucet,
+
    config.abi.faucet,
+
    config.signer
+
  );
+

+
  return faucet.withdraw(config.radToken.address, ethers.utils.parseUnits(amount.toString()));
+
}
+

+
export async function getMaxWithdrawAmount(config: Config): Promise<ethers.BigNumber> {
+
  assert(config.signer);
+

+
  const faucet = new ethers.Contract(
+
    config.radToken.faucet,
+
    config.abi.faucet,
+
    config.signer
+
  );
+

+
  return faucet.maxWithdrawAmount();
+
}
+

+
export async function calculateTimeLock(amount: ethers.BigNumber, config: Config): Promise<ethers.BigNumber> {
+
  assert(config.signer);
+

+
  const faucet = new ethers.Contract(
+
    config.radToken.faucet,
+
    config.abi.faucet,
+
    config.signer
+
  );
+

+
  return faucet.calculateTimeLock(parseUnits(amount.toString()));
+
}
+

+
export async function lastWithdrawalByUser(config: Config): Promise<ethers.BigNumber> {
+
  assert(config.signer);
+

+
  const address = config.signer.getAddress();
+

+
  const faucet = new ethers.Contract(
+
    config.radToken.faucet,
+
    config.abi.faucet,
+
    config.signer
+
  );
+

+
  return faucet.lastWithdrawalByUser(address);
+
}