Page MenuHomePhabricator

[Cashtab] MVP token creation
ClosedPublic

Authored by bytesofman on May 4 2021, 21:03.

Details

Reviewers
majcosta
Group Reviewers
Restricted Project
Commits
rABC80146d4c6054: [Cashtab] MVP token creation
Summary

Minimum viable product for creating your own tokens with Cashtab. Adds a new "Tokens" screen to main nav.

Adds a form based "Create Token" option.

Test Plan

npm start, navigate to new Tokens screen, create a token.

Diff Detail

Repository
rABC Bitcoin ABC
Branch
mint-tokens
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 15645
Build 31202: Build Diffcashtab-tests
Build 31201: arc lint + arc unit

Event Timeline

Failed tests logs:

====== CashTab Unit Tests:  Render StyledCollapse component ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Render StyledCollapse component 1`

- Snapshot  - 1
+ Received  + 1

  <div
-   className="ant-collapse ant-collapse-icon-position-left sc-bdVaJa bWyEBD"
+   className="ant-collapse ant-collapse-icon-position-left sc-bdVaJa AfOYf"
    role={null}
  />
    at Object.<anonymous> (/work/web/cashtab/src/components/Common/__tests__/StyledCollapse.test.js:14:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Configure without a wallet ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Configure without a wallet 1`

- Snapshot  - 8
+ Received  + 8

@@ -28,16 +28,16 @@
    </div>
    <div
      className="ant-spin-container ant-spin-blur"
    >
      <div
-       className="sc-kgoBCf dkabgy"
+       className="sc-kGXeez bnGuui"
      >
        <h2>
          <span
            aria-label="copy"
-           className="anticon anticon-copy sc-bwzfXH eCSKEi"
+           className="anticon anticon-copy sc-htpNat bGTymY"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="copy"
@@ -98,16 +98,16 @@
              Your seed phrase is the only way to restore your wallet. Write it down. Keep it safe.
            </div>
          </div>
        </div>
        <div
-         className="sc-kGXeez kTnHvP"
+         className="sc-kpOJdX eglhol"
        />
        <h2>
          <span
            aria-label="wallet"
-           className="anticon anticon-wallet sc-bxivhb gaDgkj"
+           className="anticon anticon-wallet sc-ifAKCX bzXUUf"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="wallet"
@@ -123,11 +123,11 @@
            </svg>
          </span>
           Manage Wallets
        </h2>
        <button
-         className="sc-gqjmRU XGywS"
+         className="sc-VigVT hEOBKE"
          onClick={[Function]}
        >
          <span
            aria-label="plus-square"
            className="anticon anticon-plus-square"
@@ -151,11 +151,11 @@
            </svg>
          </span>
           New Wallet
        </button>
        <button
-         className="sc-VigVT fqMxLW"
+         className="sc-jTzLTM bLkbAy"
          onClick={[Function]}
        >
          <span
            aria-label="import"
            className="anticon anticon-import"
@@ -176,15 +176,15 @@
            </svg>
          </span>
           Import Wallet
        </button>
        <div
-         className="sc-kGXeez kTnHvP"
+         className="sc-kpOJdX eglhol"
        />
        [
        <a
-         className="sc-fjdhpX eJaZHQ"
+         className="sc-jzJRlG erIHmd"
          href="https://docs.cashtabapp.com/docs/"
          rel="noreferrer"
          target="_blank"
          type="link"
        >
    at Object.<anonymous> (/work/web/cashtab/src/components/Configure/__tests__/Configure.test.js:24:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Configure with a wallet ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Configure with a wallet 1`

- Snapshot  - 9
+ Received  + 9

@@ -28,16 +28,16 @@
    </div>
    <div
      className="ant-spin-container ant-spin-blur"
    >
      <div
-       className="sc-kgoBCf dkabgy"
+       className="sc-kGXeez bnGuui"
      >
        <h2>
          <span
            aria-label="copy"
-           className="anticon anticon-copy sc-bwzfXH eCSKEi"
+           className="anticon anticon-copy sc-htpNat bGTymY"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="copy"
@@ -98,11 +98,11 @@
              Your seed phrase is the only way to restore your wallet. Write it down. Keep it safe.
            </div>
          </div>
        </div>
        <div
-         className="ant-collapse ant-collapse-icon-position-left sc-bdVaJa bWyEBD"
+         className="ant-collapse ant-collapse-icon-position-left sc-bdVaJa AfOYf"
          role={null}
        >
          <div
            className="ant-collapse-item"
          >
@@ -136,16 +136,16 @@
              Click to reveal seed phrase
            </div>
          </div>
        </div>
        <div
-         className="sc-kGXeez kTnHvP"
+         className="sc-kpOJdX eglhol"
        />
        <h2>
          <span
            aria-label="wallet"
-           className="anticon anticon-wallet sc-bxivhb gaDgkj"
+           className="anticon anticon-wallet sc-ifAKCX bzXUUf"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="wallet"
@@ -161,11 +161,11 @@
            </svg>
          </span>
           Manage Wallets
        </h2>
        <button
-         className="sc-gqjmRU XGywS"
+         className="sc-VigVT hEOBKE"
          onClick={[Function]}
        >
          <span
            aria-label="plus-square"
            className="anticon anticon-plus-square"
@@ -189,11 +189,11 @@
            </svg>
          </span>
           New Wallet
        </button>
        <button
-         className="sc-VigVT fqMxLW"
+         className="sc-jTzLTM bLkbAy"
          onClick={[Function]}
        >
          <span
            aria-label="import"
            className="anticon anticon-import"
@@ -214,15 +214,15 @@
            </svg>
          </span>
           Import Wallet
        </button>
        <div
-         className="sc-kGXeez kTnHvP"
+         className="sc-kpOJdX eglhol"
        />
        [
        <a
-         className="sc-fjdhpX eJaZHQ"
+         className="sc-jzJRlG erIHmd"
          href="https://docs.cashtabapp.com/docs/"
          rel="noreferrer"
          target="_blank"
          type="link"
        >
    at Object.<anonymous> (/work/web/cashtab/src/components/Configure/__tests__/Configure.test.js:35:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Wallet without BCH balance ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet without BCH balance 1`

- Snapshot  - 3
+ Received  + 3

@@ -94,20 +94,20 @@
          zgcqy6
        </span>
      </div>
    </div>,
    <div
-     className="sc-Rmtcm ldTlYI"
+     className="sc-bRBYWo evmpt"
    >
      <div
-       className="sc-bRBYWo cvfjTr"
+       className="sc-hzDkRC fOunrH"
        onClick={[Function]}
      >
        BCHA
      </div>
      <div
-       className="sc-bRBYWo cvfjTr nonactiveBtn"
+       className="sc-hzDkRC fOunrH nonactiveBtn"
        onClick={[Function]}
      >
        SLPA
      </div>
    </div>,
    at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:37:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet without BCH balance 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:55:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Wallet with BCH balances ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances 1`

- Snapshot  - 3
+ Received  + 3

@@ -77,20 +77,20 @@
          zgcqy6
        </span>
      </div>
    </div>,
    <div
-     className="sc-Rmtcm ldTlYI"
+     className="sc-bRBYWo evmpt"
    >
      <div
-       className="sc-bRBYWo cvfjTr"
+       className="sc-hzDkRC fOunrH"
        onClick={[Function]}
      >
        BCHA
      </div>
      <div
-       className="sc-bRBYWo cvfjTr nonactiveBtn"
+       className="sc-hzDkRC fOunrH nonactiveBtn"
        onClick={[Function]}
      >
        SLPA
      </div>
    </div>,
    at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:50:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:69:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Wallet with BCH balances and tokens ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens 1`

- Snapshot  - 3
+ Received  + 3

@@ -77,20 +77,20 @@
          zgcqy6
        </span>
      </div>
    </div>,
    <div
-     className="sc-Rmtcm ldTlYI"
+     className="sc-bRBYWo evmpt"
    >
      <div
-       className="sc-bRBYWo cvfjTr"
+       className="sc-hzDkRC fOunrH"
        onClick={[Function]}
      >
        BCHA
      </div>
      <div
-       className="sc-bRBYWo cvfjTr nonactiveBtn"
+       className="sc-hzDkRC fOunrH nonactiveBtn"
        onClick={[Function]}
      >
        SLPA
      </div>
    </div>,
    at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:63:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:83:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Wallet with BCH balances and tokens and state field ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens and state field 1`

- Snapshot  - 3
+ Received  + 3

@@ -77,20 +77,20 @@
          zgcqy6
        </span>
      </div>
    </div>,
    <div
-     className="sc-Rmtcm ldTlYI"
+     className="sc-bRBYWo evmpt"
    >
      <div
-       className="sc-bRBYWo cvfjTr"
+       className="sc-hzDkRC fOunrH"
        onClick={[Function]}
      >
        BCHA
      </div>
      <div
-       className="sc-bRBYWo cvfjTr nonactiveBtn"
+       className="sc-hzDkRC fOunrH nonactiveBtn"
        onClick={[Function]}
      >
        SLPA
      </div>
    </div>,
    at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:76:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens and state field 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:97:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Wallet with BCH balances and tokens and state field, but no params in state ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens and state field, but no params in state 1`

- Snapshot  - 3
+ Received  + 3

@@ -77,20 +77,20 @@
          zgcqy6
        </span>
      </div>
    </div>,
    <div
-     className="sc-Rmtcm ldTlYI"
+     className="sc-bRBYWo evmpt"
    >
      <div
-       className="sc-bRBYWo cvfjTr"
+       className="sc-hzDkRC fOunrH"
        onClick={[Function]}
      >
        BCHA
      </div>
      <div
-       className="sc-bRBYWo cvfjTr nonactiveBtn"
+       className="sc-hzDkRC fOunrH nonactiveBtn"
        onClick={[Function]}
      >
        SLPA
      </div>
    </div>,
    at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:89:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens and state field, but no params in state 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:111:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Without wallet defined ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Without wallet defined 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:129:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)

Each failure log is accessible here:
CashTab Unit Tests: Render StyledCollapse component
CashTab Unit Tests: Configure without a wallet
CashTab Unit Tests: Configure with a wallet
CashTab Unit Tests: Wallet without BCH balance
CashTab Unit Tests: Wallet with BCH balances
CashTab Unit Tests: Wallet with BCH balances and tokens
CashTab Unit Tests: Wallet with BCH balances and tokens and state field
CashTab Unit Tests: Wallet with BCH balances and tokens and state field, but no params in state
CashTab Unit Tests: Without wallet defined

Hide generated snapshot file

Failed tests logs:

====== CashTab Unit Tests:  Render StyledCollapse component ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Render StyledCollapse component 1`

- Snapshot  - 1
+ Received  + 1

  <div
-   className="ant-collapse ant-collapse-icon-position-left sc-bdVaJa bWyEBD"
+   className="ant-collapse ant-collapse-icon-position-left sc-bdVaJa AfOYf"
    role={null}
  />
    at Object.<anonymous> (/work/web/cashtab/src/components/Common/__tests__/StyledCollapse.test.js:14:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Configure without a wallet ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Configure without a wallet 1`

- Snapshot  - 8
+ Received  + 8

@@ -28,16 +28,16 @@
    </div>
    <div
      className="ant-spin-container ant-spin-blur"
    >
      <div
-       className="sc-kgoBCf dkabgy"
+       className="sc-kGXeez bnGuui"
      >
        <h2>
          <span
            aria-label="copy"
-           className="anticon anticon-copy sc-bwzfXH eCSKEi"
+           className="anticon anticon-copy sc-htpNat bGTymY"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="copy"
@@ -98,16 +98,16 @@
              Your seed phrase is the only way to restore your wallet. Write it down. Keep it safe.
            </div>
          </div>
        </div>
        <div
-         className="sc-kGXeez kTnHvP"
+         className="sc-kpOJdX eglhol"
        />
        <h2>
          <span
            aria-label="wallet"
-           className="anticon anticon-wallet sc-bxivhb gaDgkj"
+           className="anticon anticon-wallet sc-ifAKCX bzXUUf"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="wallet"
@@ -123,11 +123,11 @@
            </svg>
          </span>
           Manage Wallets
        </h2>
        <button
-         className="sc-gqjmRU XGywS"
+         className="sc-VigVT hEOBKE"
          onClick={[Function]}
        >
          <span
            aria-label="plus-square"
            className="anticon anticon-plus-square"
@@ -151,11 +151,11 @@
            </svg>
          </span>
           New Wallet
        </button>
        <button
-         className="sc-VigVT fqMxLW"
+         className="sc-jTzLTM bLkbAy"
          onClick={[Function]}
        >
          <span
            aria-label="import"
            className="anticon anticon-import"
@@ -176,15 +176,15 @@
            </svg>
          </span>
           Import Wallet
        </button>
        <div
-         className="sc-kGXeez kTnHvP"
+         className="sc-kpOJdX eglhol"
        />
        [
        <a
-         className="sc-fjdhpX eJaZHQ"
+         className="sc-jzJRlG erIHmd"
          href="https://docs.cashtabapp.com/docs/"
          rel="noreferrer"
          target="_blank"
          type="link"
        >
    at Object.<anonymous> (/work/web/cashtab/src/components/Configure/__tests__/Configure.test.js:24:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Configure with a wallet ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Configure with a wallet 1`

- Snapshot  - 9
+ Received  + 9

@@ -28,16 +28,16 @@
    </div>
    <div
      className="ant-spin-container ant-spin-blur"
    >
      <div
-       className="sc-kgoBCf dkabgy"
+       className="sc-kGXeez bnGuui"
      >
        <h2>
          <span
            aria-label="copy"
-           className="anticon anticon-copy sc-bwzfXH eCSKEi"
+           className="anticon anticon-copy sc-htpNat bGTymY"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="copy"
@@ -98,11 +98,11 @@
              Your seed phrase is the only way to restore your wallet. Write it down. Keep it safe.
            </div>
          </div>
        </div>
        <div
-         className="ant-collapse ant-collapse-icon-position-left sc-bdVaJa bWyEBD"
+         className="ant-collapse ant-collapse-icon-position-left sc-bdVaJa AfOYf"
          role={null}
        >
          <div
            className="ant-collapse-item"
          >
@@ -136,16 +136,16 @@
              Click to reveal seed phrase
            </div>
          </div>
        </div>
        <div
-         className="sc-kGXeez kTnHvP"
+         className="sc-kpOJdX eglhol"
        />
        <h2>
          <span
            aria-label="wallet"
-           className="anticon anticon-wallet sc-bxivhb gaDgkj"
+           className="anticon anticon-wallet sc-ifAKCX bzXUUf"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="wallet"
@@ -161,11 +161,11 @@
            </svg>
          </span>
           Manage Wallets
        </h2>
        <button
-         className="sc-gqjmRU XGywS"
+         className="sc-VigVT hEOBKE"
          onClick={[Function]}
        >
          <span
            aria-label="plus-square"
            className="anticon anticon-plus-square"
@@ -189,11 +189,11 @@
            </svg>
          </span>
           New Wallet
        </button>
        <button
-         className="sc-VigVT fqMxLW"
+         className="sc-jTzLTM bLkbAy"
          onClick={[Function]}
        >
          <span
            aria-label="import"
            className="anticon anticon-import"
@@ -214,15 +214,15 @@
            </svg>
          </span>
           Import Wallet
        </button>
        <div
-         className="sc-kGXeez kTnHvP"
+         className="sc-kpOJdX eglhol"
        />
        [
        <a
-         className="sc-fjdhpX eJaZHQ"
+         className="sc-jzJRlG erIHmd"
          href="https://docs.cashtabapp.com/docs/"
          rel="noreferrer"
          target="_blank"
          type="link"
        >
    at Object.<anonymous> (/work/web/cashtab/src/components/Configure/__tests__/Configure.test.js:35:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Wallet without BCH balance ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet without BCH balance 1`

- Snapshot  - 3
+ Received  + 3

@@ -94,20 +94,20 @@
          zgcqy6
        </span>
      </div>
    </div>,
    <div
-     className="sc-Rmtcm ldTlYI"
+     className="sc-bRBYWo evmpt"
    >
      <div
-       className="sc-bRBYWo cvfjTr"
+       className="sc-hzDkRC fOunrH"
        onClick={[Function]}
      >
        BCHA
      </div>
      <div
-       className="sc-bRBYWo cvfjTr nonactiveBtn"
+       className="sc-hzDkRC fOunrH nonactiveBtn"
        onClick={[Function]}
      >
        SLPA
      </div>
    </div>,
    at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:37:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet without BCH balance 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:55:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Wallet with BCH balances ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances 1`

- Snapshot  - 3
+ Received  + 3

@@ -77,20 +77,20 @@
          zgcqy6
        </span>
      </div>
    </div>,
    <div
-     className="sc-Rmtcm ldTlYI"
+     className="sc-bRBYWo evmpt"
    >
      <div
-       className="sc-bRBYWo cvfjTr"
+       className="sc-hzDkRC fOunrH"
        onClick={[Function]}
      >
        BCHA
      </div>
      <div
-       className="sc-bRBYWo cvfjTr nonactiveBtn"
+       className="sc-hzDkRC fOunrH nonactiveBtn"
        onClick={[Function]}
      >
        SLPA
      </div>
    </div>,
    at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:50:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:69:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Wallet with BCH balances and tokens ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens 1`

- Snapshot  - 3
+ Received  + 3

@@ -77,20 +77,20 @@
          zgcqy6
        </span>
      </div>
    </div>,
    <div
-     className="sc-Rmtcm ldTlYI"
+     className="sc-bRBYWo evmpt"
    >
      <div
-       className="sc-bRBYWo cvfjTr"
+       className="sc-hzDkRC fOunrH"
        onClick={[Function]}
      >
        BCHA
      </div>
      <div
-       className="sc-bRBYWo cvfjTr nonactiveBtn"
+       className="sc-hzDkRC fOunrH nonactiveBtn"
        onClick={[Function]}
      >
        SLPA
      </div>
    </div>,
    at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:63:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:83:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Wallet with BCH balances and tokens and state field ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens and state field 1`

- Snapshot  - 3
+ Received  + 3

@@ -77,20 +77,20 @@
          zgcqy6
        </span>
      </div>
    </div>,
    <div
-     className="sc-Rmtcm ldTlYI"
+     className="sc-bRBYWo evmpt"
    >
      <div
-       className="sc-bRBYWo cvfjTr"
+       className="sc-hzDkRC fOunrH"
        onClick={[Function]}
      >
        BCHA
      </div>
      <div
-       className="sc-bRBYWo cvfjTr nonactiveBtn"
+       className="sc-hzDkRC fOunrH nonactiveBtn"
        onClick={[Function]}
      >
        SLPA
      </div>
    </div>,
    at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:76:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens and state field 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:97:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Wallet with BCH balances and tokens and state field, but no params in state ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens and state field, but no params in state 1`

- Snapshot  - 3
+ Received  + 3

@@ -77,20 +77,20 @@
          zgcqy6
        </span>
      </div>
    </div>,
    <div
-     className="sc-Rmtcm ldTlYI"
+     className="sc-bRBYWo evmpt"
    >
      <div
-       className="sc-bRBYWo cvfjTr"
+       className="sc-hzDkRC fOunrH"
        onClick={[Function]}
      >
        BCHA
      </div>
      <div
-       className="sc-bRBYWo cvfjTr nonactiveBtn"
+       className="sc-hzDkRC fOunrH nonactiveBtn"
        onClick={[Function]}
      >
        SLPA
      </div>
    </div>,
    at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:89:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot()

Snapshot name: `Wallet with BCH balances and tokens and state field, but no params in state 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:111:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
====== CashTab Unit Tests:  Without wallet defined ======
Error: expect(received).toMatchSnapshot()

Snapshot name: `Without wallet defined 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,7 +1,7 @@
  <div
-   className="sc-bxivhb fGJzHZ"
+   className="sc-chPdSV emezXk"
  >
    <span
      aria-label="loading"
      className="anticon anticon-loading anticon-spin"
      role="img"
    at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:129:18)
    at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41
    at processTicksAndRejections (node:internal/process/task_queues:94:5)

Each failure log is accessible here:
CashTab Unit Tests: Render StyledCollapse component
CashTab Unit Tests: Configure without a wallet
CashTab Unit Tests: Configure with a wallet
CashTab Unit Tests: Wallet without BCH balance
CashTab Unit Tests: Wallet with BCH balances
CashTab Unit Tests: Wallet with BCH balances and tokens
CashTab Unit Tests: Wallet with BCH balances and tokens and state field
CashTab Unit Tests: Wallet with BCH balances and tokens and state field, but no params in state
CashTab Unit Tests: Without wallet defined

Updating snapshots on unit tests

Add unit test for new createToken function, correct css bug in new TokenCollapse component

Hide unit test mock for createToken function

Handle invalid wallet case with thrown error + add unit test for this

Unit tests for token genesis validation functions and css bug fix

Improve speed of form by making it its own react component, parse Genesis transactions in txHistory, unit tests for each

This revision is now accepted and ready to land.May 6 2021, 12:26