diff --git a/.yarn/cache/@coinbase-wallet-sdk-npm-3.1.0-17c22e2da6-7393133613.zip b/.yarn/cache/@coinbase-wallet-sdk-npm-3.1.0-17c22e2da6-7393133613.zip new file mode 100644 index 000000000..34f5ac800 Binary files /dev/null and b/.yarn/cache/@coinbase-wallet-sdk-npm-3.1.0-17c22e2da6-7393133613.zip differ diff --git a/.yarn/cache/@json-rpc-tools-provider-npm-1.7.6-cc129beab1-c60d73511d.zip b/.yarn/cache/@json-rpc-tools-provider-npm-1.7.6-cc129beab1-c60d73511d.zip new file mode 100644 index 000000000..7061c7bf0 Binary files /dev/null and b/.yarn/cache/@json-rpc-tools-provider-npm-1.7.6-cc129beab1-c60d73511d.zip differ diff --git a/.yarn/cache/@json-rpc-tools-types-npm-1.7.6-1c36bdb16d-f23ec7d79a.zip b/.yarn/cache/@json-rpc-tools-types-npm-1.7.6-1c36bdb16d-f23ec7d79a.zip new file mode 100644 index 000000000..ab8e4b20b Binary files /dev/null and b/.yarn/cache/@json-rpc-tools-types-npm-1.7.6-1c36bdb16d-f23ec7d79a.zip differ diff --git a/.yarn/cache/@json-rpc-tools-utils-npm-1.7.6-3168f282f4-32cac2e8cb.zip b/.yarn/cache/@json-rpc-tools-utils-npm-1.7.6-3168f282f4-32cac2e8cb.zip new file mode 100644 index 000000000..5c7ede451 Binary files /dev/null and b/.yarn/cache/@json-rpc-tools-utils-npm-1.7.6-3168f282f4-32cac2e8cb.zip differ diff --git a/.yarn/cache/@metamask-safe-event-emitter-npm-2.0.0-0f6c91f887-8b717ac5d5.zip b/.yarn/cache/@metamask-safe-event-emitter-npm-2.0.0-0f6c91f887-8b717ac5d5.zip new file mode 100644 index 000000000..ba309a9e3 Binary files /dev/null and b/.yarn/cache/@metamask-safe-event-emitter-npm-2.0.0-0f6c91f887-8b717ac5d5.zip differ diff --git a/.yarn/cache/@pedrouid-environment-npm-1.0.1-3a1b030297-fd88340ad7.zip b/.yarn/cache/@pedrouid-environment-npm-1.0.1-3a1b030297-fd88340ad7.zip new file mode 100644 index 000000000..1074f0b2a Binary files /dev/null and b/.yarn/cache/@pedrouid-environment-npm-1.0.1-3a1b030297-fd88340ad7.zip differ diff --git a/.yarn/cache/@rainbow-me-rainbowkit-npm-0.2.0-1103da41b3-049a12b204.zip b/.yarn/cache/@rainbow-me-rainbowkit-npm-0.2.0-1103da41b3-049a12b204.zip new file mode 100644 index 000000000..dad66fe2d Binary files /dev/null and b/.yarn/cache/@rainbow-me-rainbowkit-npm-0.2.0-1103da41b3-049a12b204.zip differ diff --git a/.yarn/cache/@types-bn.js-npm-4.11.6-85f0d125f5-7f66f2c7b7.zip b/.yarn/cache/@types-bn.js-npm-4.11.6-85f0d125f5-7f66f2c7b7.zip new file mode 100644 index 000000000..3f5eb43ce Binary files /dev/null and b/.yarn/cache/@types-bn.js-npm-4.11.6-85f0d125f5-7f66f2c7b7.zip differ diff --git a/.yarn/cache/@types-pbkdf2-npm-3.1.0-9fa74ff7fb-d15024b195.zip b/.yarn/cache/@types-pbkdf2-npm-3.1.0-9fa74ff7fb-d15024b195.zip new file mode 100644 index 000000000..7afb6d838 Binary files /dev/null and b/.yarn/cache/@types-pbkdf2-npm-3.1.0-9fa74ff7fb-d15024b195.zip differ diff --git a/.yarn/cache/@types-secp256k1-npm-4.0.3-945d1c398e-1bd10b9afa.zip b/.yarn/cache/@types-secp256k1-npm-4.0.3-945d1c398e-1bd10b9afa.zip new file mode 100644 index 000000000..2507eab4b Binary files /dev/null and b/.yarn/cache/@types-secp256k1-npm-4.0.3-945d1c398e-1bd10b9afa.zip differ diff --git a/.yarn/cache/@types-use-sync-external-store-npm-0.0.3-875a91a914-161ddb8eec.zip b/.yarn/cache/@types-use-sync-external-store-npm-0.0.3-875a91a914-161ddb8eec.zip new file mode 100644 index 000000000..65f8d4f47 Binary files /dev/null and b/.yarn/cache/@types-use-sync-external-store-npm-0.0.3-875a91a914-161ddb8eec.zip differ diff --git a/.yarn/cache/@vanilla-extract-css-npm-1.7.0-f5001fde19-2ecebcc25f.zip b/.yarn/cache/@vanilla-extract-css-npm-1.7.0-f5001fde19-2ecebcc25f.zip new file mode 100644 index 000000000..6f6963a14 Binary files /dev/null and b/.yarn/cache/@vanilla-extract-css-npm-1.7.0-f5001fde19-2ecebcc25f.zip differ diff --git a/.yarn/cache/@vanilla-extract-dynamic-npm-2.0.2-b974034f8e-c6f22606bc.zip b/.yarn/cache/@vanilla-extract-dynamic-npm-2.0.2-b974034f8e-c6f22606bc.zip new file mode 100644 index 000000000..20841c3e6 Binary files /dev/null and b/.yarn/cache/@vanilla-extract-dynamic-npm-2.0.2-b974034f8e-c6f22606bc.zip differ diff --git a/.yarn/cache/@vanilla-extract-private-npm-1.0.3-27ba5cf703-866a71ba68.zip b/.yarn/cache/@vanilla-extract-private-npm-1.0.3-27ba5cf703-866a71ba68.zip new file mode 100644 index 000000000..f66d605f6 Binary files /dev/null and b/.yarn/cache/@vanilla-extract-private-npm-1.0.3-27ba5cf703-866a71ba68.zip differ diff --git a/.yarn/cache/@vanilla-extract-sprinkles-npm-1.4.1-60a1bc80c6-e72407ca6a.zip b/.yarn/cache/@vanilla-extract-sprinkles-npm-1.4.1-60a1bc80c6-e72407ca6a.zip new file mode 100644 index 000000000..d7b323cd2 Binary files /dev/null and b/.yarn/cache/@vanilla-extract-sprinkles-npm-1.4.1-60a1bc80c6-e72407ca6a.zip differ diff --git a/.yarn/cache/@wagmi-core-npm-0.3.3-ec4df4a17e-e1a3eef734.zip b/.yarn/cache/@wagmi-core-npm-0.3.3-ec4df4a17e-e1a3eef734.zip new file mode 100644 index 000000000..03dbb54c0 Binary files /dev/null and b/.yarn/cache/@wagmi-core-npm-0.3.3-ec4df4a17e-e1a3eef734.zip differ diff --git a/.yarn/cache/@walletconnect-browser-utils-npm-1.7.8-b7419a468f-76d06a45a1.zip b/.yarn/cache/@walletconnect-browser-utils-npm-1.7.8-b7419a468f-76d06a45a1.zip new file mode 100644 index 000000000..30f23d237 Binary files /dev/null and b/.yarn/cache/@walletconnect-browser-utils-npm-1.7.8-b7419a468f-76d06a45a1.zip differ diff --git a/.yarn/cache/@walletconnect-client-npm-1.7.8-544a4e353d-44e39ab1a0.zip b/.yarn/cache/@walletconnect-client-npm-1.7.8-544a4e353d-44e39ab1a0.zip new file mode 100644 index 000000000..7cfcc1116 Binary files /dev/null and b/.yarn/cache/@walletconnect-client-npm-1.7.8-544a4e353d-44e39ab1a0.zip differ diff --git a/.yarn/cache/@walletconnect-core-npm-1.7.8-e6aca1f7a4-a35cc770a0.zip b/.yarn/cache/@walletconnect-core-npm-1.7.8-e6aca1f7a4-a35cc770a0.zip new file mode 100644 index 000000000..04f3b7614 Binary files /dev/null and b/.yarn/cache/@walletconnect-core-npm-1.7.8-e6aca1f7a4-a35cc770a0.zip differ diff --git a/.yarn/cache/@walletconnect-crypto-npm-1.0.2-09bc21664e-bd2987b880.zip b/.yarn/cache/@walletconnect-crypto-npm-1.0.2-09bc21664e-bd2987b880.zip new file mode 100644 index 000000000..86b4649ee Binary files /dev/null and b/.yarn/cache/@walletconnect-crypto-npm-1.0.2-09bc21664e-bd2987b880.zip differ diff --git a/.yarn/cache/@walletconnect-encoding-npm-1.0.1-85f0b336bc-964a9e0884.zip b/.yarn/cache/@walletconnect-encoding-npm-1.0.1-85f0b336bc-964a9e0884.zip new file mode 100644 index 000000000..005f50ae6 Binary files /dev/null and b/.yarn/cache/@walletconnect-encoding-npm-1.0.1-85f0b336bc-964a9e0884.zip differ diff --git a/.yarn/cache/@walletconnect-environment-npm-1.0.0-bc6b78dc54-ba553bbaaf.zip b/.yarn/cache/@walletconnect-environment-npm-1.0.0-bc6b78dc54-ba553bbaaf.zip new file mode 100644 index 000000000..83acd6432 Binary files /dev/null and b/.yarn/cache/@walletconnect-environment-npm-1.0.0-bc6b78dc54-ba553bbaaf.zip differ diff --git a/.yarn/cache/@walletconnect-ethereum-provider-npm-1.7.8-c338133702-f92f826c55.zip b/.yarn/cache/@walletconnect-ethereum-provider-npm-1.7.8-c338133702-f92f826c55.zip new file mode 100644 index 000000000..5ed79b48a Binary files /dev/null and b/.yarn/cache/@walletconnect-ethereum-provider-npm-1.7.8-c338133702-f92f826c55.zip differ diff --git a/.yarn/cache/@walletconnect-iso-crypto-npm-1.7.8-3b86ce86ca-f2ee34d484.zip b/.yarn/cache/@walletconnect-iso-crypto-npm-1.7.8-3b86ce86ca-f2ee34d484.zip new file mode 100644 index 000000000..65057722a Binary files /dev/null and b/.yarn/cache/@walletconnect-iso-crypto-npm-1.7.8-3b86ce86ca-f2ee34d484.zip differ diff --git a/.yarn/cache/@walletconnect-jsonrpc-http-connection-npm-1.0.0-5c029846a2-bdc55212b3.zip b/.yarn/cache/@walletconnect-jsonrpc-http-connection-npm-1.0.0-5c029846a2-bdc55212b3.zip new file mode 100644 index 000000000..afd136a0c Binary files /dev/null and b/.yarn/cache/@walletconnect-jsonrpc-http-connection-npm-1.0.0-5c029846a2-bdc55212b3.zip differ diff --git a/.yarn/cache/@walletconnect-jsonrpc-provider-npm-1.0.3-24340b3cf6-0ff900482a.zip b/.yarn/cache/@walletconnect-jsonrpc-provider-npm-1.0.3-24340b3cf6-0ff900482a.zip new file mode 100644 index 000000000..fc2e282cd Binary files /dev/null and b/.yarn/cache/@walletconnect-jsonrpc-provider-npm-1.0.3-24340b3cf6-0ff900482a.zip differ diff --git a/.yarn/cache/@walletconnect-jsonrpc-types-npm-1.0.0-a5a7069baa-6f38c5df6b.zip b/.yarn/cache/@walletconnect-jsonrpc-types-npm-1.0.0-a5a7069baa-6f38c5df6b.zip new file mode 100644 index 000000000..10ee7441c Binary files /dev/null and b/.yarn/cache/@walletconnect-jsonrpc-types-npm-1.0.0-a5a7069baa-6f38c5df6b.zip differ diff --git a/.yarn/cache/@walletconnect-jsonrpc-utils-npm-1.0.0-557b41797b-d760736a38.zip b/.yarn/cache/@walletconnect-jsonrpc-utils-npm-1.0.0-557b41797b-d760736a38.zip new file mode 100644 index 000000000..a82273962 Binary files /dev/null and b/.yarn/cache/@walletconnect-jsonrpc-utils-npm-1.0.0-557b41797b-d760736a38.zip differ diff --git a/.yarn/cache/@walletconnect-mobile-registry-npm-1.4.0-77ad61b21b-06f18842e6.zip b/.yarn/cache/@walletconnect-mobile-registry-npm-1.4.0-77ad61b21b-06f18842e6.zip new file mode 100644 index 000000000..db1ffd03e Binary files /dev/null and b/.yarn/cache/@walletconnect-mobile-registry-npm-1.4.0-77ad61b21b-06f18842e6.zip differ diff --git a/.yarn/cache/@walletconnect-qrcode-modal-npm-1.7.8-e859735f2b-dc1c33bb24.zip b/.yarn/cache/@walletconnect-qrcode-modal-npm-1.7.8-e859735f2b-dc1c33bb24.zip new file mode 100644 index 000000000..d6b65aeb2 Binary files /dev/null and b/.yarn/cache/@walletconnect-qrcode-modal-npm-1.7.8-e859735f2b-dc1c33bb24.zip differ diff --git a/.yarn/cache/@walletconnect-randombytes-npm-1.0.2-e9bdd0234c-bd76b68238.zip b/.yarn/cache/@walletconnect-randombytes-npm-1.0.2-e9bdd0234c-bd76b68238.zip new file mode 100644 index 000000000..a8627b76d Binary files /dev/null and b/.yarn/cache/@walletconnect-randombytes-npm-1.0.2-e9bdd0234c-bd76b68238.zip differ diff --git a/.yarn/cache/@walletconnect-safe-json-npm-1.0.0-76114111c6-a8ee161cad.zip b/.yarn/cache/@walletconnect-safe-json-npm-1.0.0-76114111c6-a8ee161cad.zip new file mode 100644 index 000000000..8be53b5a6 Binary files /dev/null and b/.yarn/cache/@walletconnect-safe-json-npm-1.0.0-76114111c6-a8ee161cad.zip differ diff --git a/.yarn/cache/@walletconnect-signer-connection-npm-1.7.8-759fc863ae-e4aa8d022d.zip b/.yarn/cache/@walletconnect-signer-connection-npm-1.7.8-759fc863ae-e4aa8d022d.zip new file mode 100644 index 000000000..0ac1cffc6 Binary files /dev/null and b/.yarn/cache/@walletconnect-signer-connection-npm-1.7.8-759fc863ae-e4aa8d022d.zip differ diff --git a/.yarn/cache/@walletconnect-socket-transport-npm-1.7.8-4f2065096f-a14f72b7cd.zip b/.yarn/cache/@walletconnect-socket-transport-npm-1.7.8-4f2065096f-a14f72b7cd.zip new file mode 100644 index 000000000..3320467b6 Binary files /dev/null and b/.yarn/cache/@walletconnect-socket-transport-npm-1.7.8-4f2065096f-a14f72b7cd.zip differ diff --git a/.yarn/cache/@walletconnect-types-npm-1.7.8-599d33f632-9c9d441d50.zip b/.yarn/cache/@walletconnect-types-npm-1.7.8-599d33f632-9c9d441d50.zip new file mode 100644 index 000000000..11bf54fe7 Binary files /dev/null and b/.yarn/cache/@walletconnect-types-npm-1.7.8-599d33f632-9c9d441d50.zip differ diff --git a/.yarn/cache/@walletconnect-utils-npm-1.7.8-b4b82ea2ed-272f49bcf1.zip b/.yarn/cache/@walletconnect-utils-npm-1.7.8-b4b82ea2ed-272f49bcf1.zip new file mode 100644 index 000000000..74540e6bd Binary files /dev/null and b/.yarn/cache/@walletconnect-utils-npm-1.7.8-b4b82ea2ed-272f49bcf1.zip differ diff --git a/.yarn/cache/@walletconnect-window-getters-npm-1.0.0-e14d14a8e5-192af7acb2.zip b/.yarn/cache/@walletconnect-window-getters-npm-1.0.0-e14d14a8e5-192af7acb2.zip new file mode 100644 index 000000000..bdbea48e1 Binary files /dev/null and b/.yarn/cache/@walletconnect-window-getters-npm-1.0.0-e14d14a8e5-192af7acb2.zip differ diff --git a/.yarn/cache/@walletconnect-window-metadata-npm-1.0.0-0dc17807e6-eec506ff6d.zip b/.yarn/cache/@walletconnect-window-metadata-npm-1.0.0-0dc17807e6-eec506ff6d.zip new file mode 100644 index 000000000..f042c9e82 Binary files /dev/null and b/.yarn/cache/@walletconnect-window-metadata-npm-1.0.0-0dc17807e6-eec506ff6d.zip differ diff --git a/.yarn/cache/@web3-react-abstract-connector-npm-6.0.7-733a51ba9e-fa8b0ea358.zip b/.yarn/cache/@web3-react-abstract-connector-npm-6.0.7-733a51ba9e-fa8b0ea358.zip deleted file mode 100644 index 717586f93..000000000 Binary files a/.yarn/cache/@web3-react-abstract-connector-npm-6.0.7-733a51ba9e-fa8b0ea358.zip and /dev/null differ diff --git a/.yarn/cache/@web3-react-core-npm-6.1.9-11f114d7d3-b7f3ad6281.zip b/.yarn/cache/@web3-react-core-npm-6.1.9-11f114d7d3-b7f3ad6281.zip deleted file mode 100644 index 3f595493d..000000000 Binary files a/.yarn/cache/@web3-react-core-npm-6.1.9-11f114d7d3-b7f3ad6281.zip and /dev/null differ diff --git a/.yarn/cache/@web3-react-injected-connector-npm-6.0.7-5cb516283f-867a634a12.zip b/.yarn/cache/@web3-react-injected-connector-npm-6.0.7-5cb516283f-867a634a12.zip deleted file mode 100644 index a1e1a3704..000000000 Binary files a/.yarn/cache/@web3-react-injected-connector-npm-6.0.7-5cb516283f-867a634a12.zip and /dev/null differ diff --git a/.yarn/cache/@web3-react-types-npm-6.0.7-9db83b83bb-29ae264ae4.zip b/.yarn/cache/@web3-react-types-npm-6.0.7-9db83b83bb-29ae264ae4.zip deleted file mode 100644 index 03a00b2f0..000000000 Binary files a/.yarn/cache/@web3-react-types-npm-6.0.7-9db83b83bb-29ae264ae4.zip and /dev/null differ diff --git a/.yarn/cache/aes-js-npm-3.1.2-d7549a23a2-062154d50b.zip b/.yarn/cache/aes-js-npm-3.1.2-d7549a23a2-062154d50b.zip new file mode 100644 index 000000000..321154329 Binary files /dev/null and b/.yarn/cache/aes-js-npm-3.1.2-d7549a23a2-062154d50b.zip differ diff --git a/.yarn/cache/ansi-regex-npm-4.1.1-af0a582bb9-b1a6ee44cb.zip b/.yarn/cache/ansi-regex-npm-4.1.1-af0a582bb9-b1a6ee44cb.zip new file mode 100644 index 000000000..e56881103 Binary files /dev/null and b/.yarn/cache/ansi-regex-npm-4.1.1-af0a582bb9-b1a6ee44cb.zip differ diff --git a/.yarn/cache/async-mutex-npm-0.2.6-9823894abb-f50102e0c5.zip b/.yarn/cache/async-mutex-npm-0.2.6-9823894abb-f50102e0c5.zip new file mode 100644 index 000000000..557973438 Binary files /dev/null and b/.yarn/cache/async-mutex-npm-0.2.6-9823894abb-f50102e0c5.zip differ diff --git a/.yarn/cache/available-typed-arrays-npm-1.0.5-88f321e4d3-20eb47b3ce.zip b/.yarn/cache/available-typed-arrays-npm-1.0.5-88f321e4d3-20eb47b3ce.zip new file mode 100644 index 000000000..62f8601d5 Binary files /dev/null and b/.yarn/cache/available-typed-arrays-npm-1.0.5-88f321e4d3-20eb47b3ce.zip differ diff --git a/.yarn/cache/axios-npm-0.21.4-e278873748-44245f24ac.zip b/.yarn/cache/axios-npm-0.21.4-e278873748-44245f24ac.zip new file mode 100644 index 000000000..756d87a54 Binary files /dev/null and b/.yarn/cache/axios-npm-0.21.4-e278873748-44245f24ac.zip differ diff --git a/.yarn/cache/base-x-npm-3.0.9-7b2588e106-957101d6fd.zip b/.yarn/cache/base-x-npm-3.0.9-7b2588e106-957101d6fd.zip new file mode 100644 index 000000000..79bdd2c70 Binary files /dev/null and b/.yarn/cache/base-x-npm-3.0.9-7b2588e106-957101d6fd.zip differ diff --git a/.yarn/cache/big-integer-npm-1.6.51-1a244d8e1f-3d444173d1.zip b/.yarn/cache/big-integer-npm-1.6.51-1a244d8e1f-3d444173d1.zip new file mode 100644 index 000000000..2961dbcc0 Binary files /dev/null and b/.yarn/cache/big-integer-npm-1.6.51-1a244d8e1f-3d444173d1.zip differ diff --git a/.yarn/cache/bind-decorator-npm-1.0.11-0bd0121ce0-41b6c69af5.zip b/.yarn/cache/bind-decorator-npm-1.0.11-0bd0121ce0-41b6c69af5.zip new file mode 100644 index 000000000..c4719a31d Binary files /dev/null and b/.yarn/cache/bind-decorator-npm-1.0.11-0bd0121ce0-41b6c69af5.zip differ diff --git a/.yarn/cache/blakejs-npm-1.2.1-b1ff783529-d699ba116c.zip b/.yarn/cache/blakejs-npm-1.2.1-b1ff783529-d699ba116c.zip new file mode 100644 index 000000000..55c757874 Binary files /dev/null and b/.yarn/cache/blakejs-npm-1.2.1-b1ff783529-d699ba116c.zip differ diff --git a/.yarn/cache/bn.js-npm-4.11.8-296affce9a-80d4709cd5.zip b/.yarn/cache/bn.js-npm-4.11.8-296affce9a-80d4709cd5.zip new file mode 100644 index 000000000..819e992e3 Binary files /dev/null and b/.yarn/cache/bn.js-npm-4.11.8-296affce9a-80d4709cd5.zip differ diff --git a/.yarn/cache/broadcast-channel-npm-3.7.0-81ceba70bb-803794c48d.zip b/.yarn/cache/broadcast-channel-npm-3.7.0-81ceba70bb-803794c48d.zip new file mode 100644 index 000000000..3f2bd853f Binary files /dev/null and b/.yarn/cache/broadcast-channel-npm-3.7.0-81ceba70bb-803794c48d.zip differ diff --git a/.yarn/cache/browserify-aes-npm-1.2.0-2ad4aeefbe-4a17c3eb55.zip b/.yarn/cache/browserify-aes-npm-1.2.0-2ad4aeefbe-4a17c3eb55.zip new file mode 100644 index 000000000..66bfb898d Binary files /dev/null and b/.yarn/cache/browserify-aes-npm-1.2.0-2ad4aeefbe-4a17c3eb55.zip differ diff --git a/.yarn/cache/bs58-npm-4.0.1-8d2a7822b1-b3c5365bb9.zip b/.yarn/cache/bs58-npm-4.0.1-8d2a7822b1-b3c5365bb9.zip new file mode 100644 index 000000000..c297f8c41 Binary files /dev/null and b/.yarn/cache/bs58-npm-4.0.1-8d2a7822b1-b3c5365bb9.zip differ diff --git a/.yarn/cache/bs58check-npm-2.1.2-4e87e40195-43bdf08a5d.zip b/.yarn/cache/bs58check-npm-2.1.2-4e87e40195-43bdf08a5d.zip new file mode 100644 index 000000000..697da499f Binary files /dev/null and b/.yarn/cache/bs58check-npm-2.1.2-4e87e40195-43bdf08a5d.zip differ diff --git a/.yarn/cache/buffer-alloc-npm-1.2.0-388beee0c7-560cd27f3c.zip b/.yarn/cache/buffer-alloc-npm-1.2.0-388beee0c7-560cd27f3c.zip new file mode 100644 index 000000000..ef6f1d41c Binary files /dev/null and b/.yarn/cache/buffer-alloc-npm-1.2.0-388beee0c7-560cd27f3c.zip differ diff --git a/.yarn/cache/buffer-alloc-unsafe-npm-1.1.0-b5d7ccb44c-c5e18bf51f.zip b/.yarn/cache/buffer-alloc-unsafe-npm-1.1.0-b5d7ccb44c-c5e18bf51f.zip new file mode 100644 index 000000000..d5c8f1123 Binary files /dev/null and b/.yarn/cache/buffer-alloc-unsafe-npm-1.1.0-b5d7ccb44c-c5e18bf51f.zip differ diff --git a/.yarn/cache/buffer-fill-npm-1.0.0-915809118a-c29b4723dd.zip b/.yarn/cache/buffer-fill-npm-1.0.0-915809118a-c29b4723dd.zip new file mode 100644 index 000000000..e4bc0cfb2 Binary files /dev/null and b/.yarn/cache/buffer-fill-npm-1.0.0-915809118a-c29b4723dd.zip differ diff --git a/.yarn/cache/buffer-xor-npm-1.0.3-56bb81b0dd-10c520df29.zip b/.yarn/cache/buffer-xor-npm-1.0.3-56bb81b0dd-10c520df29.zip new file mode 100644 index 000000000..7a036a163 Binary files /dev/null and b/.yarn/cache/buffer-xor-npm-1.0.3-56bb81b0dd-10c520df29.zip differ diff --git a/.yarn/cache/cipher-base-npm-1.0.4-2e98b97140-47d3568dbc.zip b/.yarn/cache/cipher-base-npm-1.0.4-2e98b97140-47d3568dbc.zip new file mode 100644 index 000000000..02eeb2cc0 Binary files /dev/null and b/.yarn/cache/cipher-base-npm-1.0.4-2e98b97140-47d3568dbc.zip differ diff --git a/.yarn/cache/cliui-npm-5.0.0-885b5f48ee-0bb8779efe.zip b/.yarn/cache/cliui-npm-5.0.0-885b5f48ee-0bb8779efe.zip new file mode 100644 index 000000000..96db49ca4 Binary files /dev/null and b/.yarn/cache/cliui-npm-5.0.0-885b5f48ee-0bb8779efe.zip differ diff --git a/.yarn/cache/clone-npm-2.1.2-1d491c6629-aaf106e9bc.zip b/.yarn/cache/clone-npm-2.1.2-1d491c6629-aaf106e9bc.zip new file mode 100644 index 000000000..6ae29b32e Binary files /dev/null and b/.yarn/cache/clone-npm-2.1.2-1d491c6629-aaf106e9bc.zip differ diff --git a/.yarn/cache/copy-to-clipboard-npm-3.3.1-18029bce99-3c7b1c333d.zip b/.yarn/cache/copy-to-clipboard-npm-3.3.1-18029bce99-3c7b1c333d.zip new file mode 100644 index 000000000..bffa1163e Binary files /dev/null and b/.yarn/cache/copy-to-clipboard-npm-3.3.1-18029bce99-3c7b1c333d.zip differ diff --git a/.yarn/cache/create-hash-npm-1.2.0-afd048e1ce-02a6ae3bb9.zip b/.yarn/cache/create-hash-npm-1.2.0-afd048e1ce-02a6ae3bb9.zip new file mode 100644 index 000000000..cb81aa9aa Binary files /dev/null and b/.yarn/cache/create-hash-npm-1.2.0-afd048e1ce-02a6ae3bb9.zip differ diff --git a/.yarn/cache/create-hmac-npm-1.1.7-b4ef32668a-ba12bb2257.zip b/.yarn/cache/create-hmac-npm-1.1.7-b4ef32668a-ba12bb2257.zip new file mode 100644 index 000000000..07a58d193 Binary files /dev/null and b/.yarn/cache/create-hmac-npm-1.1.7-b4ef32668a-ba12bb2257.zip differ diff --git a/.yarn/cache/cross-fetch-npm-3.1.5-e414995db9-f6b8c6ee3e.zip b/.yarn/cache/cross-fetch-npm-3.1.5-e414995db9-f6b8c6ee3e.zip new file mode 100644 index 000000000..813f1e031 Binary files /dev/null and b/.yarn/cache/cross-fetch-npm-3.1.5-e414995db9-f6b8c6ee3e.zip differ diff --git a/.yarn/cache/css-mediaquery-npm-0.1.2-39b61fbcad-8e26ae52d8.zip b/.yarn/cache/css-mediaquery-npm-0.1.2-39b61fbcad-8e26ae52d8.zip new file mode 100644 index 000000000..bd81d4ff8 Binary files /dev/null and b/.yarn/cache/css-mediaquery-npm-0.1.2-39b61fbcad-8e26ae52d8.zip differ diff --git a/.yarn/cache/css-what-npm-5.1.0-9991ae71a8-0b75d1bac9.zip b/.yarn/cache/css-what-npm-5.1.0-9991ae71a8-0b75d1bac9.zip new file mode 100644 index 000000000..e3212a7be Binary files /dev/null and b/.yarn/cache/css-what-npm-5.1.0-9991ae71a8-0b75d1bac9.zip differ diff --git a/.yarn/cache/deep-object-diff-npm-1.1.7-f83d006c8d-543fb1ae87.zip b/.yarn/cache/deep-object-diff-npm-1.1.7-f83d006c8d-543fb1ae87.zip new file mode 100644 index 000000000..645758ff9 Binary files /dev/null and b/.yarn/cache/deep-object-diff-npm-1.1.7-f83d006c8d-543fb1ae87.zip differ diff --git a/.yarn/cache/detect-browser-npm-5.2.0-3064055ad6-63b5c38fec.zip b/.yarn/cache/detect-browser-npm-5.2.0-3064055ad6-63b5c38fec.zip new file mode 100644 index 000000000..f1b97fcf8 Binary files /dev/null and b/.yarn/cache/detect-browser-npm-5.2.0-3064055ad6-63b5c38fec.zip differ diff --git a/.yarn/cache/detect-node-es-npm-1.1.0-2ad57e0b50-e46307d726.zip b/.yarn/cache/detect-node-es-npm-1.1.0-2ad57e0b50-e46307d726.zip new file mode 100644 index 000000000..49705443a Binary files /dev/null and b/.yarn/cache/detect-node-es-npm-1.1.0-2ad57e0b50-e46307d726.zip differ diff --git a/.yarn/cache/dijkstrajs-npm-1.0.2-c58f4835d6-8cd822441a.zip b/.yarn/cache/dijkstrajs-npm-1.0.2-c58f4835d6-8cd822441a.zip new file mode 100644 index 000000000..bd3aadba5 Binary files /dev/null and b/.yarn/cache/dijkstrajs-npm-1.0.2-c58f4835d6-8cd822441a.zip differ diff --git a/.yarn/cache/eip1193-provider-npm-1.0.1-af62387ed8-a56d6a8747.zip b/.yarn/cache/eip1193-provider-npm-1.0.1-af62387ed8-a56d6a8747.zip new file mode 100644 index 000000000..60ef6c949 Binary files /dev/null and b/.yarn/cache/eip1193-provider-npm-1.0.1-af62387ed8-a56d6a8747.zip differ diff --git a/.yarn/cache/emoji-regex-npm-7.0.3-cfe9479bb3-9159b2228b.zip b/.yarn/cache/emoji-regex-npm-7.0.3-cfe9479bb3-9159b2228b.zip new file mode 100644 index 000000000..22e27d234 Binary files /dev/null and b/.yarn/cache/emoji-regex-npm-7.0.3-cfe9479bb3-9159b2228b.zip differ diff --git a/.yarn/cache/encode-utf8-npm-1.0.3-8f92a23782-550224bf2a.zip b/.yarn/cache/encode-utf8-npm-1.0.3-8f92a23782-550224bf2a.zip new file mode 100644 index 000000000..526ff9b5c Binary files /dev/null and b/.yarn/cache/encode-utf8-npm-1.0.3-8f92a23782-550224bf2a.zip differ diff --git a/.yarn/cache/eth-block-tracker-npm-4.4.3-b13c452ee3-3ae7e459b1.zip b/.yarn/cache/eth-block-tracker-npm-4.4.3-b13c452ee3-3ae7e459b1.zip new file mode 100644 index 000000000..9d2390665 Binary files /dev/null and b/.yarn/cache/eth-block-tracker-npm-4.4.3-b13c452ee3-3ae7e459b1.zip differ diff --git a/.yarn/cache/eth-json-rpc-filters-npm-4.2.2-2500dc5257-add6ef65c3.zip b/.yarn/cache/eth-json-rpc-filters-npm-4.2.2-2500dc5257-add6ef65c3.zip new file mode 100644 index 000000000..47ae2d7f9 Binary files /dev/null and b/.yarn/cache/eth-json-rpc-filters-npm-4.2.2-2500dc5257-add6ef65c3.zip differ diff --git a/.yarn/cache/eth-json-rpc-middleware-npm-6.0.0-bf8eed1a10-d4ef8c6ba8.zip b/.yarn/cache/eth-json-rpc-middleware-npm-6.0.0-bf8eed1a10-d4ef8c6ba8.zip new file mode 100644 index 000000000..fcfae285e Binary files /dev/null and b/.yarn/cache/eth-json-rpc-middleware-npm-6.0.0-bf8eed1a10-d4ef8c6ba8.zip differ diff --git a/.yarn/cache/eth-query-npm-2.1.2-7c6adc825f-83daa0e284.zip b/.yarn/cache/eth-query-npm-2.1.2-7c6adc825f-83daa0e284.zip new file mode 100644 index 000000000..1ab59dc1b Binary files /dev/null and b/.yarn/cache/eth-query-npm-2.1.2-7c6adc825f-83daa0e284.zip differ diff --git a/.yarn/cache/eth-rpc-errors-npm-3.0.0-69edbfb820-c14db72bd2.zip b/.yarn/cache/eth-rpc-errors-npm-3.0.0-69edbfb820-c14db72bd2.zip new file mode 100644 index 000000000..ece57304b Binary files /dev/null and b/.yarn/cache/eth-rpc-errors-npm-3.0.0-69edbfb820-c14db72bd2.zip differ diff --git a/.yarn/cache/eth-rpc-errors-npm-4.0.2-c2d91d7141-1dbdee8f41.zip b/.yarn/cache/eth-rpc-errors-npm-4.0.2-c2d91d7141-1dbdee8f41.zip new file mode 100644 index 000000000..29d10850b Binary files /dev/null and b/.yarn/cache/eth-rpc-errors-npm-4.0.2-c2d91d7141-1dbdee8f41.zip differ diff --git a/.yarn/cache/eth-rpc-errors-npm-4.0.3-d154190eb6-5fa31d1a10.zip b/.yarn/cache/eth-rpc-errors-npm-4.0.3-d154190eb6-5fa31d1a10.zip new file mode 100644 index 000000000..2b80bda6a Binary files /dev/null and b/.yarn/cache/eth-rpc-errors-npm-4.0.3-d154190eb6-5fa31d1a10.zip differ diff --git a/.yarn/cache/eth-sig-util-npm-1.4.2-a3541658e1-578f5c571c.zip b/.yarn/cache/eth-sig-util-npm-1.4.2-a3541658e1-578f5c571c.zip new file mode 100644 index 000000000..94ce789dc Binary files /dev/null and b/.yarn/cache/eth-sig-util-npm-1.4.2-a3541658e1-578f5c571c.zip differ diff --git a/.yarn/cache/ethereum-cryptography-npm-0.1.3-ab43fc624b-54bae7a4a9.zip b/.yarn/cache/ethereum-cryptography-npm-0.1.3-ab43fc624b-54bae7a4a9.zip new file mode 100644 index 000000000..1b5318c94 Binary files /dev/null and b/.yarn/cache/ethereum-cryptography-npm-0.1.3-ab43fc624b-54bae7a4a9.zip differ diff --git a/.yarn/cache/ethereumjs-abi-https-8bd779d1bf-03127d0996.zip b/.yarn/cache/ethereumjs-abi-https-8bd779d1bf-03127d0996.zip new file mode 100644 index 000000000..f4cb2354d Binary files /dev/null and b/.yarn/cache/ethereumjs-abi-https-8bd779d1bf-03127d0996.zip differ diff --git a/.yarn/cache/ethereumjs-util-npm-5.2.1-72b39f4e7e-20db6c639d.zip b/.yarn/cache/ethereumjs-util-npm-5.2.1-72b39f4e7e-20db6c639d.zip new file mode 100644 index 000000000..be15cf08f Binary files /dev/null and b/.yarn/cache/ethereumjs-util-npm-5.2.1-72b39f4e7e-20db6c639d.zip differ diff --git a/.yarn/cache/ethereumjs-util-npm-6.2.1-581f80bb5a-e3cb4a2c03.zip b/.yarn/cache/ethereumjs-util-npm-6.2.1-581f80bb5a-e3cb4a2c03.zip new file mode 100644 index 000000000..dbf63c980 Binary files /dev/null and b/.yarn/cache/ethereumjs-util-npm-6.2.1-581f80bb5a-e3cb4a2c03.zip differ diff --git a/.yarn/cache/ethjs-util-npm-0.1.6-bd313edc1f-1f42959e78.zip b/.yarn/cache/ethjs-util-npm-0.1.6-bd313edc1f-1f42959e78.zip new file mode 100644 index 000000000..df961e23a Binary files /dev/null and b/.yarn/cache/ethjs-util-npm-0.1.6-bd313edc1f-1f42959e78.zip differ diff --git a/.yarn/cache/evp_bytestokey-npm-1.0.3-4a2644aaea-ad4e1577f1.zip b/.yarn/cache/evp_bytestokey-npm-1.0.3-4a2644aaea-ad4e1577f1.zip new file mode 100644 index 000000000..7688cebcd Binary files /dev/null and b/.yarn/cache/evp_bytestokey-npm-1.0.3-4a2644aaea-ad4e1577f1.zip differ diff --git a/.yarn/cache/for-each-npm-0.3.3-0010ca8cdd-6c48ff2bc6.zip b/.yarn/cache/for-each-npm-0.3.3-0010ca8cdd-6c48ff2bc6.zip new file mode 100644 index 000000000..7ba7b1639 Binary files /dev/null and b/.yarn/cache/for-each-npm-0.3.3-0010ca8cdd-6c48ff2bc6.zip differ diff --git a/.yarn/cache/get-nonce-npm-1.0.1-6272950b34-e2614e43b4.zip b/.yarn/cache/get-nonce-npm-1.0.1-6272950b34-e2614e43b4.zip new file mode 100644 index 000000000..e173102a3 Binary files /dev/null and b/.yarn/cache/get-nonce-npm-1.0.1-6272950b34-e2614e43b4.zip differ diff --git a/.yarn/cache/hash-base-npm-3.1.0-26fc5711dd-26b7e97ac3.zip b/.yarn/cache/hash-base-npm-3.1.0-26fc5711dd-26b7e97ac3.zip new file mode 100644 index 000000000..c43529d3a Binary files /dev/null and b/.yarn/cache/hash-base-npm-3.1.0-26fc5711dd-26b7e97ac3.zip differ diff --git a/.yarn/cache/invariant-npm-2.2.4-717fbdb119-cc3182d793.zip b/.yarn/cache/invariant-npm-2.2.4-717fbdb119-cc3182d793.zip new file mode 100644 index 000000000..710cf6cd9 Binary files /dev/null and b/.yarn/cache/invariant-npm-2.2.4-717fbdb119-cc3182d793.zip differ diff --git a/.yarn/cache/is-arguments-npm-1.1.1-eff4f6d4d7-7f02700ec2.zip b/.yarn/cache/is-arguments-npm-1.1.1-eff4f6d4d7-7f02700ec2.zip new file mode 100644 index 000000000..9b956d869 Binary files /dev/null and b/.yarn/cache/is-arguments-npm-1.1.1-eff4f6d4d7-7f02700ec2.zip differ diff --git a/.yarn/cache/is-fullwidth-code-point-npm-2.0.0-507f56ec71-eef9c6e15f.zip b/.yarn/cache/is-fullwidth-code-point-npm-2.0.0-507f56ec71-eef9c6e15f.zip new file mode 100644 index 000000000..56f17d398 Binary files /dev/null and b/.yarn/cache/is-fullwidth-code-point-npm-2.0.0-507f56ec71-eef9c6e15f.zip differ diff --git a/.yarn/cache/is-generator-function-npm-1.0.10-1d0f3809ef-d54644e7db.zip b/.yarn/cache/is-generator-function-npm-1.0.10-1d0f3809ef-d54644e7db.zip new file mode 100644 index 000000000..6045379e6 Binary files /dev/null and b/.yarn/cache/is-generator-function-npm-1.0.10-1d0f3809ef-d54644e7db.zip differ diff --git a/.yarn/cache/is-hex-prefixed-npm-1.0.0-676e6251c7-5ac58e6e52.zip b/.yarn/cache/is-hex-prefixed-npm-1.0.0-676e6251c7-5ac58e6e52.zip new file mode 100644 index 000000000..a41da3ed3 Binary files /dev/null and b/.yarn/cache/is-hex-prefixed-npm-1.0.0-676e6251c7-5ac58e6e52.zip differ diff --git a/.yarn/cache/is-typed-array-npm-1.1.9-c7c4ca7eec-11910f1e58.zip b/.yarn/cache/is-typed-array-npm-1.1.9-c7c4ca7eec-11910f1e58.zip new file mode 100644 index 000000000..02ee8c652 Binary files /dev/null and b/.yarn/cache/is-typed-array-npm-1.1.9-c7c4ca7eec-11910f1e58.zip differ diff --git a/.yarn/cache/isarray-npm-2.0.5-4ba522212d-bd5bbe4104.zip b/.yarn/cache/isarray-npm-2.0.5-4ba522212d-bd5bbe4104.zip new file mode 100644 index 000000000..f46224f1c Binary files /dev/null and b/.yarn/cache/isarray-npm-2.0.5-4ba522212d-bd5bbe4104.zip differ diff --git a/.yarn/cache/js-sha256-npm-0.9.0-1aa718efaf-ffad54b337.zip b/.yarn/cache/js-sha256-npm-0.9.0-1aa718efaf-ffad54b337.zip new file mode 100644 index 000000000..c018e4d11 Binary files /dev/null and b/.yarn/cache/js-sha256-npm-0.9.0-1aa718efaf-ffad54b337.zip differ diff --git a/.yarn/cache/json-rpc-engine-npm-5.4.0-9ce2276bbd-310af9dc25.zip b/.yarn/cache/json-rpc-engine-npm-5.4.0-9ce2276bbd-310af9dc25.zip new file mode 100644 index 000000000..2a5f0277d Binary files /dev/null and b/.yarn/cache/json-rpc-engine-npm-5.4.0-9ce2276bbd-310af9dc25.zip differ diff --git a/.yarn/cache/json-rpc-engine-npm-6.1.0-e87ec628e0-33b6c9bbd8.zip b/.yarn/cache/json-rpc-engine-npm-6.1.0-e87ec628e0-33b6c9bbd8.zip new file mode 100644 index 000000000..2e3b68f73 Binary files /dev/null and b/.yarn/cache/json-rpc-engine-npm-6.1.0-e87ec628e0-33b6c9bbd8.zip differ diff --git a/.yarn/cache/json-rpc-random-id-npm-1.0.1-f56faa6ecf-fcd2e88419.zip b/.yarn/cache/json-rpc-random-id-npm-1.0.1-f56faa6ecf-fcd2e88419.zip new file mode 100644 index 000000000..23fe28b49 Binary files /dev/null and b/.yarn/cache/json-rpc-random-id-npm-1.0.1-f56faa6ecf-fcd2e88419.zip differ diff --git a/.yarn/cache/json-stable-stringify-npm-1.0.1-65df019fbd-65d6cbf0fc.zip b/.yarn/cache/json-stable-stringify-npm-1.0.1-65df019fbd-65d6cbf0fc.zip new file mode 100644 index 000000000..f90216091 Binary files /dev/null and b/.yarn/cache/json-stable-stringify-npm-1.0.1-65df019fbd-65d6cbf0fc.zip differ diff --git a/.yarn/cache/jsonify-npm-0.0.0-80da2da40c-d8d4ed476c.zip b/.yarn/cache/jsonify-npm-0.0.0-80da2da40c-d8d4ed476c.zip new file mode 100644 index 000000000..78b9d9a18 Binary files /dev/null and b/.yarn/cache/jsonify-npm-0.0.0-80da2da40c-d8d4ed476c.zip differ diff --git a/.yarn/cache/keccak-npm-3.0.2-6e9dec8765-39a7d6128b.zip b/.yarn/cache/keccak-npm-3.0.2-6e9dec8765-39a7d6128b.zip new file mode 100644 index 000000000..9d609daae Binary files /dev/null and b/.yarn/cache/keccak-npm-3.0.2-6e9dec8765-39a7d6128b.zip differ diff --git a/.yarn/cache/keyvaluestorage-interface-npm-1.0.0-d6fc8e29c6-e20530e71b.zip b/.yarn/cache/keyvaluestorage-interface-npm-1.0.0-d6fc8e29c6-e20530e71b.zip new file mode 100644 index 000000000..b32902f22 Binary files /dev/null and b/.yarn/cache/keyvaluestorage-interface-npm-1.0.0-d6fc8e29c6-e20530e71b.zip differ diff --git a/.yarn/cache/match-sorter-npm-6.3.1-ff3565ebb9-a4b02b676a.zip b/.yarn/cache/match-sorter-npm-6.3.1-ff3565ebb9-a4b02b676a.zip new file mode 100644 index 000000000..ef47d1e80 Binary files /dev/null and b/.yarn/cache/match-sorter-npm-6.3.1-ff3565ebb9-a4b02b676a.zip differ diff --git a/.yarn/cache/md5.js-npm-1.3.5-130901125a-098494d885.zip b/.yarn/cache/md5.js-npm-1.3.5-130901125a-098494d885.zip new file mode 100644 index 000000000..b9cd75b5e Binary files /dev/null and b/.yarn/cache/md5.js-npm-1.3.5-130901125a-098494d885.zip differ diff --git a/.yarn/cache/microseconds-npm-0.2.0-dbdb8ab8bb-22bfa8553f.zip b/.yarn/cache/microseconds-npm-0.2.0-dbdb8ab8bb-22bfa8553f.zip new file mode 100644 index 000000000..826a52999 Binary files /dev/null and b/.yarn/cache/microseconds-npm-0.2.0-dbdb8ab8bb-22bfa8553f.zip differ diff --git a/.yarn/cache/nano-time-npm-1.0.0-6eca938be8-eef8548546.zip b/.yarn/cache/nano-time-npm-1.0.0-6eca938be8-eef8548546.zip new file mode 100644 index 000000000..1c6be2614 Binary files /dev/null and b/.yarn/cache/nano-time-npm-1.0.0-6eca938be8-eef8548546.zip differ diff --git a/.yarn/cache/node-addon-api-npm-2.0.2-8c2c1e9782-31fb22d674.zip b/.yarn/cache/node-addon-api-npm-2.0.2-8c2c1e9782-31fb22d674.zip new file mode 100644 index 000000000..48b3b30d3 Binary files /dev/null and b/.yarn/cache/node-addon-api-npm-2.0.2-8c2c1e9782-31fb22d674.zip differ diff --git a/.yarn/cache/node-gyp-build-npm-4.4.0-d95e1857d1-972a059f96.zip b/.yarn/cache/node-gyp-build-npm-4.4.0-d95e1857d1-972a059f96.zip new file mode 100644 index 000000000..2f443472a Binary files /dev/null and b/.yarn/cache/node-gyp-build-npm-4.4.0-d95e1857d1-972a059f96.zip differ diff --git a/.yarn/cache/oblivious-set-npm-1.0.0-8e7336b241-f31740ea9c.zip b/.yarn/cache/oblivious-set-npm-1.0.0-8e7336b241-f31740ea9c.zip new file mode 100644 index 000000000..a7494ea6d Binary files /dev/null and b/.yarn/cache/oblivious-set-npm-1.0.0-8e7336b241-f31740ea9c.zip differ diff --git a/.yarn/cache/outdent-npm-0.8.0-5e36779041-72b7c1a287.zip b/.yarn/cache/outdent-npm-0.8.0-5e36779041-72b7c1a287.zip new file mode 100644 index 000000000..1653d10cb Binary files /dev/null and b/.yarn/cache/outdent-npm-0.8.0-5e36779041-72b7c1a287.zip differ diff --git a/.yarn/cache/pbkdf2-npm-3.1.2-d67bbb584f-2c950a100b.zip b/.yarn/cache/pbkdf2-npm-3.1.2-d67bbb584f-2c950a100b.zip new file mode 100644 index 000000000..ac14daba0 Binary files /dev/null and b/.yarn/cache/pbkdf2-npm-3.1.2-d67bbb584f-2c950a100b.zip differ diff --git a/.yarn/cache/pify-npm-5.0.0-f5abe8ab8d-443e3e198a.zip b/.yarn/cache/pify-npm-5.0.0-f5abe8ab8d-443e3e198a.zip new file mode 100644 index 000000000..dabc1ec95 Binary files /dev/null and b/.yarn/cache/pify-npm-5.0.0-f5abe8ab8d-443e3e198a.zip differ diff --git a/.yarn/cache/pngjs-npm-3.4.0-4e495c1dad-8bd40bd698.zip b/.yarn/cache/pngjs-npm-3.4.0-4e495c1dad-8bd40bd698.zip new file mode 100644 index 000000000..24bc69f8e Binary files /dev/null and b/.yarn/cache/pngjs-npm-3.4.0-4e495c1dad-8bd40bd698.zip differ diff --git a/.yarn/cache/pngjs-npm-5.0.0-e8ba79f838-04e912cc45.zip b/.yarn/cache/pngjs-npm-5.0.0-e8ba79f838-04e912cc45.zip new file mode 100644 index 000000000..14e24a383 Binary files /dev/null and b/.yarn/cache/pngjs-npm-5.0.0-e8ba79f838-04e912cc45.zip differ diff --git a/.yarn/cache/preact-npm-10.4.1-e6252aa20d-e8c5eae6dc.zip b/.yarn/cache/preact-npm-10.4.1-e6252aa20d-e8c5eae6dc.zip new file mode 100644 index 000000000..3a090b16e Binary files /dev/null and b/.yarn/cache/preact-npm-10.4.1-e6252aa20d-e8c5eae6dc.zip differ diff --git a/.yarn/cache/preact-npm-10.7.2-dffb68bd4b-2f0655e043.zip b/.yarn/cache/preact-npm-10.7.2-dffb68bd4b-2f0655e043.zip new file mode 100644 index 000000000..40a53d7f1 Binary files /dev/null and b/.yarn/cache/preact-npm-10.7.2-dffb68bd4b-2f0655e043.zip differ diff --git a/.yarn/cache/qrcode-npm-1.4.4-f137b3816b-8c1a7ee309.zip b/.yarn/cache/qrcode-npm-1.4.4-f137b3816b-8c1a7ee309.zip new file mode 100644 index 000000000..408719210 Binary files /dev/null and b/.yarn/cache/qrcode-npm-1.4.4-f137b3816b-8c1a7ee309.zip differ diff --git a/.yarn/cache/qrcode-npm-1.5.0-0f02dca802-a0857713d4.zip b/.yarn/cache/qrcode-npm-1.5.0-0f02dca802-a0857713d4.zip new file mode 100644 index 000000000..a72b2b921 Binary files /dev/null and b/.yarn/cache/qrcode-npm-1.5.0-0f02dca802-a0857713d4.zip differ diff --git a/.yarn/cache/query-string-npm-6.13.5-9cf41f78b4-1019dea0ab.zip b/.yarn/cache/query-string-npm-6.13.5-9cf41f78b4-1019dea0ab.zip new file mode 100644 index 000000000..45c7ffc0c Binary files /dev/null and b/.yarn/cache/query-string-npm-6.13.5-9cf41f78b4-1019dea0ab.zip differ diff --git a/.yarn/cache/react-query-npm-4.0.0-beta.12-3badd986c4-0e24875e18.zip b/.yarn/cache/react-query-npm-4.0.0-beta.12-3badd986c4-0e24875e18.zip new file mode 100644 index 000000000..3e50c3220 Binary files /dev/null and b/.yarn/cache/react-query-npm-4.0.0-beta.12-3badd986c4-0e24875e18.zip differ diff --git a/.yarn/cache/react-remove-scroll-bar-npm-2.3.1-8468cbe922-490fb80d36.zip b/.yarn/cache/react-remove-scroll-bar-npm-2.3.1-8468cbe922-490fb80d36.zip new file mode 100644 index 000000000..020e118e2 Binary files /dev/null and b/.yarn/cache/react-remove-scroll-bar-npm-2.3.1-8468cbe922-490fb80d36.zip differ diff --git a/.yarn/cache/react-remove-scroll-npm-2.5.3-05bb6890ca-7b486cd468.zip b/.yarn/cache/react-remove-scroll-npm-2.5.3-05bb6890ca-7b486cd468.zip new file mode 100644 index 000000000..298cc83c3 Binary files /dev/null and b/.yarn/cache/react-remove-scroll-npm-2.5.3-05bb6890ca-7b486cd468.zip differ diff --git a/.yarn/cache/react-style-singleton-npm-2.2.0-0c4ac8ff3f-e999e978c3.zip b/.yarn/cache/react-style-singleton-npm-2.2.0-0c4ac8ff3f-e999e978c3.zip new file mode 100644 index 000000000..2cbf24d1e Binary files /dev/null and b/.yarn/cache/react-style-singleton-npm-2.2.0-0c4ac8ff3f-e999e978c3.zip differ diff --git a/.yarn/cache/remove-accents-npm-0.4.2-7cb341092a-84a6988555.zip b/.yarn/cache/remove-accents-npm-0.4.2-7cb341092a-84a6988555.zip new file mode 100644 index 000000000..dd33a9bc0 Binary files /dev/null and b/.yarn/cache/remove-accents-npm-0.4.2-7cb341092a-84a6988555.zip differ diff --git a/.yarn/cache/ripemd160-npm-2.0.2-7b1fb8dc76-006accc405.zip b/.yarn/cache/ripemd160-npm-2.0.2-7b1fb8dc76-006accc405.zip new file mode 100644 index 000000000..05c1425cd Binary files /dev/null and b/.yarn/cache/ripemd160-npm-2.0.2-7b1fb8dc76-006accc405.zip differ diff --git a/.yarn/cache/rlp-npm-2.2.7-4cb283b8fe-3db4dfe5c7.zip b/.yarn/cache/rlp-npm-2.2.7-4cb283b8fe-3db4dfe5c7.zip new file mode 100644 index 000000000..fd5be7d53 Binary files /dev/null and b/.yarn/cache/rlp-npm-2.2.7-4cb283b8fe-3db4dfe5c7.zip differ diff --git a/.yarn/cache/rxjs-npm-6.6.7-055046ea3c-bc334edef1.zip b/.yarn/cache/rxjs-npm-6.6.7-055046ea3c-bc334edef1.zip new file mode 100644 index 000000000..ba92cebbd Binary files /dev/null and b/.yarn/cache/rxjs-npm-6.6.7-055046ea3c-bc334edef1.zip differ diff --git a/.yarn/cache/safe-event-emitter-npm-1.0.1-58fa60af3a-2a15094bd2.zip b/.yarn/cache/safe-event-emitter-npm-1.0.1-58fa60af3a-2a15094bd2.zip new file mode 100644 index 000000000..99c8201ca Binary files /dev/null and b/.yarn/cache/safe-event-emitter-npm-1.0.1-58fa60af3a-2a15094bd2.zip differ diff --git a/.yarn/cache/safe-json-utils-npm-1.1.1-19e30bae4a-f82a5833b7.zip b/.yarn/cache/safe-json-utils-npm-1.1.1-19e30bae4a-f82a5833b7.zip new file mode 100644 index 000000000..f2c3948e8 Binary files /dev/null and b/.yarn/cache/safe-json-utils-npm-1.1.1-19e30bae4a-f82a5833b7.zip differ diff --git a/.yarn/cache/secp256k1-npm-4.0.3-b4e9ce065b-21e219adc0.zip b/.yarn/cache/secp256k1-npm-4.0.3-b4e9ce065b-21e219adc0.zip new file mode 100644 index 000000000..d5eb27fa3 Binary files /dev/null and b/.yarn/cache/secp256k1-npm-4.0.3-b4e9ce065b-21e219adc0.zip differ diff --git a/.yarn/cache/setimmediate-npm-1.0.5-54587459b6-c9a6f2c5b5.zip b/.yarn/cache/setimmediate-npm-1.0.5-54587459b6-c9a6f2c5b5.zip new file mode 100644 index 000000000..ec2aee7ef Binary files /dev/null and b/.yarn/cache/setimmediate-npm-1.0.5-54587459b6-c9a6f2c5b5.zip differ diff --git a/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip b/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip new file mode 100644 index 000000000..6d55cc05a Binary files /dev/null and b/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip differ diff --git a/.yarn/cache/stream-browserify-npm-3.0.0-4c0bd97245-4c47ef64d6.zip b/.yarn/cache/stream-browserify-npm-3.0.0-4c0bd97245-4c47ef64d6.zip new file mode 100644 index 000000000..57e1f6e30 Binary files /dev/null and b/.yarn/cache/stream-browserify-npm-3.0.0-4c0bd97245-4c47ef64d6.zip differ diff --git a/.yarn/cache/string-width-npm-3.1.0-e031bfa4e0-57f7ca73d2.zip b/.yarn/cache/string-width-npm-3.1.0-e031bfa4e0-57f7ca73d2.zip new file mode 100644 index 000000000..706d03c8c Binary files /dev/null and b/.yarn/cache/string-width-npm-3.1.0-e031bfa4e0-57f7ca73d2.zip differ diff --git a/.yarn/cache/strip-ansi-npm-5.2.0-275214c316-bdb5f76ade.zip b/.yarn/cache/strip-ansi-npm-5.2.0-275214c316-bdb5f76ade.zip new file mode 100644 index 000000000..2231cf589 Binary files /dev/null and b/.yarn/cache/strip-ansi-npm-5.2.0-275214c316-bdb5f76ade.zip differ diff --git a/.yarn/cache/strip-hex-prefix-npm-1.0.0-bf941e622d-4cafe7caee.zip b/.yarn/cache/strip-hex-prefix-npm-1.0.0-bf941e622d-4cafe7caee.zip new file mode 100644 index 000000000..1f2907a10 Binary files /dev/null and b/.yarn/cache/strip-hex-prefix-npm-1.0.0-bf941e622d-4cafe7caee.zip differ diff --git a/.yarn/cache/toggle-selection-npm-1.0.6-c506b73005-a90dc80ed1.zip b/.yarn/cache/toggle-selection-npm-1.0.6-c506b73005-a90dc80ed1.zip new file mode 100644 index 000000000..298acb636 Binary files /dev/null and b/.yarn/cache/toggle-selection-npm-1.0.6-c506b73005-a90dc80ed1.zip differ diff --git a/.yarn/cache/unload-npm-2.2.0-c40df6b4d0-88ba950c5f.zip b/.yarn/cache/unload-npm-2.2.0-c40df6b4d0-88ba950c5f.zip new file mode 100644 index 000000000..d0fed2b35 Binary files /dev/null and b/.yarn/cache/unload-npm-2.2.0-c40df6b4d0-88ba950c5f.zip differ diff --git a/.yarn/cache/use-callback-ref-npm-1.3.0-6c0773783f-7913df383a.zip b/.yarn/cache/use-callback-ref-npm-1.3.0-6c0773783f-7913df383a.zip new file mode 100644 index 000000000..6d6e6e06a Binary files /dev/null and b/.yarn/cache/use-callback-ref-npm-1.3.0-6c0773783f-7913df383a.zip differ diff --git a/.yarn/cache/use-sidecar-npm-1.1.2-dfc322e94a-925d1922f9.zip b/.yarn/cache/use-sidecar-npm-1.1.2-dfc322e94a-925d1922f9.zip new file mode 100644 index 000000000..f78234ac2 Binary files /dev/null and b/.yarn/cache/use-sidecar-npm-1.1.2-dfc322e94a-925d1922f9.zip differ diff --git a/.yarn/cache/use-sync-external-store-npm-1.1.0-dcd59c7439-8993a0b642.zip b/.yarn/cache/use-sync-external-store-npm-1.1.0-dcd59c7439-8993a0b642.zip new file mode 100644 index 000000000..22fab7420 Binary files /dev/null and b/.yarn/cache/use-sync-external-store-npm-1.1.0-dcd59c7439-8993a0b642.zip differ diff --git a/.yarn/cache/util-npm-0.12.4-a022701e3b-8eac7a6e6b.zip b/.yarn/cache/util-npm-0.12.4-a022701e3b-8eac7a6e6b.zip new file mode 100644 index 000000000..d60211d60 Binary files /dev/null and b/.yarn/cache/util-npm-0.12.4-a022701e3b-8eac7a6e6b.zip differ diff --git a/.yarn/cache/wagmi-npm-0.4.3-243b297264-a61991358b.zip b/.yarn/cache/wagmi-npm-0.4.3-243b297264-a61991358b.zip new file mode 100644 index 000000000..64a7e7eb3 Binary files /dev/null and b/.yarn/cache/wagmi-npm-0.4.3-243b297264-a61991358b.zip differ diff --git a/.yarn/cache/which-typed-array-npm-1.1.8-49776a7691-bedf4d30a7.zip b/.yarn/cache/which-typed-array-npm-1.1.8-49776a7691-bedf4d30a7.zip new file mode 100644 index 000000000..9c7d1fa3c Binary files /dev/null and b/.yarn/cache/which-typed-array-npm-1.1.8-49776a7691-bedf4d30a7.zip differ diff --git a/.yarn/cache/wrap-ansi-npm-5.1.0-293b407c18-9b48c86222.zip b/.yarn/cache/wrap-ansi-npm-5.1.0-293b407c18-9b48c86222.zip new file mode 100644 index 000000000..c6936069b Binary files /dev/null and b/.yarn/cache/wrap-ansi-npm-5.1.0-293b407c18-9b48c86222.zip differ diff --git a/.yarn/cache/ws-npm-7.5.3-3a046a0b1a-423dc0d859.zip b/.yarn/cache/ws-npm-7.5.3-3a046a0b1a-423dc0d859.zip new file mode 100644 index 000000000..9853f1b09 Binary files /dev/null and b/.yarn/cache/ws-npm-7.5.3-3a046a0b1a-423dc0d859.zip differ diff --git a/.yarn/cache/ws-npm-7.5.8-62217fef00-49479ccf3d.zip b/.yarn/cache/ws-npm-7.5.8-62217fef00-49479ccf3d.zip new file mode 100644 index 000000000..f43c1232d Binary files /dev/null and b/.yarn/cache/ws-npm-7.5.8-62217fef00-49479ccf3d.zip differ diff --git a/.yarn/cache/yargs-npm-13.3.2-1588f5dd4c-75c13e837e.zip b/.yarn/cache/yargs-npm-13.3.2-1588f5dd4c-75c13e837e.zip new file mode 100644 index 000000000..11cc07932 Binary files /dev/null and b/.yarn/cache/yargs-npm-13.3.2-1588f5dd4c-75c13e837e.zip differ diff --git a/.yarn/cache/yargs-parser-npm-13.1.2-546b639909-c8bb6f44d3.zip b/.yarn/cache/yargs-parser-npm-13.1.2-546b639909-c8bb6f44d3.zip new file mode 100644 index 000000000..e969da086 Binary files /dev/null and b/.yarn/cache/yargs-parser-npm-13.1.2-546b639909-c8bb6f44d3.zip differ diff --git a/.yarn/cache/zustand-npm-4.0.0-rc.1-66db6817b5-c88ae96286.zip b/.yarn/cache/zustand-npm-4.0.0-rc.1-66db6817b5-c88ae96286.zip new file mode 100644 index 000000000..70a892601 Binary files /dev/null and b/.yarn/cache/zustand-npm-4.0.0-rc.1-66db6817b5-c88ae96286.zip differ diff --git a/CHANGELOG.md b/CHANGELOG.md index cc1f386bb..4b4004b9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Support multiple wallets: WalletConneect, Trust, Rainbow etc #424 + ### Fixed - Improve dapp responsiviness #190 #356 diff --git a/packages/api/.gitignore b/packages/api/.gitignore index 414e716e5..db881d3d5 100644 --- a/packages/api/.gitignore +++ b/packages/api/.gitignore @@ -5,4 +5,5 @@ node_modules tsconfig.tsbuildinfo uploads/* !*uploads/praise_logo.png +!*uploads/gnosischain_logo.png .nyc_output \ No newline at end of file diff --git a/packages/api/src/activate/controllers.ts b/packages/api/src/activate/controllers.ts index 51fa214e8..55358b57e 100644 --- a/packages/api/src/activate/controllers.ts +++ b/packages/api/src/activate/controllers.ts @@ -12,19 +12,7 @@ import { UserAccountModel } from '@useraccount/entities'; import { ethers } from 'ethers'; import { Response } from 'express'; import { ActivateRequestBody } from './types'; - -const generateLoginMessage = ( - accountId: string, - ethereumAddress: string, - token: string -): string => { - return ( - 'SIGN THIS MESSAGE TO ACTIVATE YOUR ACCOUNT.\n\n' + - `ACCOUNT ID:\n${accountId}\n\n` + - `ADDRESS:\n${ethereumAddress}\n\n` + - `TOKEN:\n${token}` - ); -}; +import { generateActivateMessage } from './utils'; const activate = async ( req: TypedRequestBody, @@ -46,7 +34,7 @@ const activate = async ( throw new BadRequestError('User account already activated.'); // Generate expected message, token included. - const generatedMsg = generateLoginMessage( + const generatedMsg = generateActivateMessage( accountId, ethereumAddress, userAccount.activateToken @@ -68,6 +56,7 @@ const activate = async ( // Link user account with user userAccount.user = user; + userAccount.activateToken = undefined; await userAccount.save(); await logEvent(EventLogTypeKey.AUTHENTICATION, 'Activated account', { diff --git a/packages/api/src/activate/utils.ts b/packages/api/src/activate/utils.ts new file mode 100644 index 000000000..80b4f54c9 --- /dev/null +++ b/packages/api/src/activate/utils.ts @@ -0,0 +1,12 @@ +export const generateActivateMessage = ( + accountId: string, + ethereumAddress: string, + token: string +): string => { + return ( + 'SIGN THIS MESSAGE TO ACTIVATE YOUR ACCOUNT.\n\n' + + `ACCOUNT ID:\n${accountId}\n\n` + + `ADDRESS:\n${ethereumAddress}\n\n` + + `TOKEN:\n${token}` + ); +}; diff --git a/packages/api/src/auth/controllers.ts b/packages/api/src/auth/controllers.ts index 00eca2455..6a88ce5be 100644 --- a/packages/api/src/auth/controllers.ts +++ b/packages/api/src/auth/controllers.ts @@ -24,17 +24,10 @@ import { RefreshRequestInput, TokenSet, } from './types'; +import { generateLoginMessage } from './utils'; const jwtService = new JwtService(); -const generateLoginMessage = (account: string, nonce: string): string => { - return ( - 'SIGN THIS MESSAGE TO LOGIN TO PRAISE.\n\n' + - `ADDRESS:\n${account}\n\n` + - `NONCE:\n${nonce}` - ); -}; - /** * Description * @param diff --git a/packages/api/src/auth/utils.ts b/packages/api/src/auth/utils.ts index 923b0a7ab..802ad1e32 100644 --- a/packages/api/src/auth/utils.ts +++ b/packages/api/src/auth/utils.ts @@ -16,3 +16,14 @@ export const extractAccessTokenFromRequest = (req: Request): string => { return accessToken; }; + +export const generateLoginMessage = ( + account: string, + nonce: string +): string => { + return ( + 'SIGN THIS MESSAGE TO LOGIN TO PRAISE.\n\n' + + `ADDRESS:\n${account}\n\n` + + `NONCE:\n${nonce}` + ); +}; diff --git a/packages/api/uploads/gnosischain_logo.png b/packages/api/uploads/gnosischain_logo.png new file mode 100644 index 000000000..6c2274397 Binary files /dev/null and b/packages/api/uploads/gnosischain_logo.png differ diff --git a/packages/frontend/craco.config.js b/packages/frontend/craco.config.js index 7ded58122..fa662b15d 100644 --- a/packages/frontend/craco.config.js +++ b/packages/frontend/craco.config.js @@ -20,4 +20,22 @@ module.exports = { eslint: { enable: false, //TODO enable eslint during build }, + webpack: { + configure: { + resolve: { + /** + * with CRA 5 (webpack5), webpack no longer ships with node polyfills. + * Craco's team is looking to give it up (https://github.com/gsoft-inc/craco/issues/415). + * Possible alternatives: react-app-rewired or ejecting from CRA + */ + fallback: { + 'util': require.resolve("util/"), + }, + }, + // with CRA 5 (webpack5), sourceMapLoader now complains about every third-party app that was compiled from + // typescript but doesn't have 'ts' files. This line ignores them. + // See: https://github.com/facebook/create-react-app/issues/11924 + ignoreWarnings: [/to parse source map/i], + } + } }; diff --git a/packages/frontend/package.json b/packages/frontend/package.json index fa69d9252..a9922c5e6 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -14,13 +14,11 @@ "@fortawesome/react-fontawesome": "^0.1.17", "@headlessui/react": "^1.4.1", "@mui/material": "^5.3.0", + "@rainbow-me/rainbowkit": "^0.2.0", "@tailwindcss/forms": "latest", "@typescript-eslint/eslint-plugin": "^5.18.0", "@typescript-eslint/parser": "^5.18.0", "@ukstv/jazzicon-react": "^1.0.0", - "@web3-react/abstract-connector": "^6.0.7", - "@web3-react/core": "latest", - "@web3-react/injected-connector": "^6.0.7", "api": "workspace:^", "autoprefixer": "^10.4.7", "axios": "^0.22.0", @@ -38,6 +36,7 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.28.0", "eslint-plugin-react-hooks": "^4.3.0", + "ethers": "^5.6.8", "final-form": "^4.20.4", "jstz": "^2.1.1", "jwt-decode": "^3.1.2", @@ -61,11 +60,13 @@ "recoil-persist": "^4.0.0", "source-map-explorer": "^2.5.2", "tailwindcss": "^3.0.24", - "use-error-boundary": "^2.0.6" + "use-error-boundary": "^2.0.6", + "util": "^0.12.4", + "wagmi": "^0.4.3" }, "scripts": { "build": "craco build", - "analyze": "source-map-explorer 'build/static/js/*.js'", + "analyze": "yarn run build && source-map-explorer 'build/static/js/*.js'", "load-env": "env-cmd --silent --no-override -f ../../.env env-cmd --silent --no-override", "start": "TAILWIND_MODE=watch yarn run load-env craco start", "lint": "eslint . --ext .ts --ext .tsx", @@ -91,4 +92,4 @@ "@types/react-table": "^7.7.6", "typescript": "^4.5.5" } -} +} \ No newline at end of file diff --git a/packages/frontend/src/components/EthAccount.tsx b/packages/frontend/src/components/EthAccount.tsx deleted file mode 100644 index 7c06c4e2c..000000000 --- a/packages/frontend/src/components/EthAccount.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { EthState } from '@/model/eth'; -import { shortenEthAddress } from 'api/dist/user/utils'; -import { Jazzicon } from '@ukstv/jazzicon-react'; -import { useRecoilValue } from 'recoil'; - -interface EthAccountParams { - className?: string; -} - -export default function EthAccount({ - className, -}: EthAccountParams): JSX.Element | null { - const ethState = useRecoilValue(EthState); - if (ethState.connected && ethState.account) - return ( -
-
- -
-
{shortenEthAddress(ethState.account)}
-
- ); - - return null; -} diff --git a/packages/frontend/src/components/EthConnection.tsx b/packages/frontend/src/components/EthConnection.tsx deleted file mode 100644 index 5d566e524..000000000 --- a/packages/frontend/src/components/EthConnection.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import { injected } from '@/eth/connectors'; -import { useEagerConnect, useInactiveListener } from '@/eth/hooks'; -import { ActiveTokenSet } from '@/model/auth'; -import { EthState } from '@/model/eth'; -import { useWeb3React } from '@web3-react/core'; -import { InjectedConnector } from '@web3-react/injected-connector'; -import React from 'react'; -import { useSetRecoilState, useRecoilState } from 'recoil'; -import jwtDecode from 'jwt-decode'; -import { JWT } from '@/utils/jwt'; -export default function EthConnection(): JSX.Element | null { - const { - error: ethError, - connector: ethConnector, - account: ethAccount, - } = useWeb3React(); - const [activeTokenSet, setActiveTokenSet] = useRecoilState(ActiveTokenSet); - - // Attempt to activate pre-existing connection - const triedEager = useEagerConnect(); - - // Marks which ethConnector is being activated - const [activatingConnector, setActivatingConnector] = React.useState< - InjectedConnector | undefined - >(undefined); - - const activating = injected === activatingConnector; - const connected = injected === ethConnector; - const connectDisabled = !triedEager || activating || connected || !!ethError; - - // Listen to and react to network events - useInactiveListener(!triedEager || !!activatingConnector); - - // Handle logic to recognize the ethConnector currently being activated - React.useEffect(() => { - if (activatingConnector && activatingConnector === ethConnector) { - setActivatingConnector(undefined); - } - }, [activatingConnector, ethConnector]); - - // This allows us to stub out the Metamask extension in a test environment - // Waiting on Cypress for feedback on a better solution on stubbing out the connector - let envDependentConnectionStatus: boolean; - let envDependentAccount: string | null | undefined; - - if (process.env.NODE_ENV === 'test') { - envDependentAccount = process.env.REACT_APP_ETH_ADDRESS; - envDependentConnectionStatus = true; - } else { - envDependentAccount = ethAccount; - envDependentConnectionStatus = connected; - } - // End of testing conditional - - // Store current eth address and connection state in global state - const setEthState = useSetRecoilState(EthState); - React.useEffect(() => { - setEthState({ - // account: ethAccount, //Switch back to ethAccount after conditional stub above has been removed - account: envDependentAccount, - triedEager, - activating, - // connected, //Switch back to connected after conditional stub above has been removed - connected: envDependentConnectionStatus, - connectDisabled, - }); - }, [ - setEthState, - ethAccount, - triedEager, - activating, - connected, - connectDisabled, - envDependentAccount, - envDependentConnectionStatus, - ]); - - // Reset tokens store if ethereumAccount different from accessToken - React.useEffect(() => { - if (!activeTokenSet) return; - const accessTokenData: JWT = jwtDecode(activeTokenSet.accessToken); - - if (ethAccount && accessTokenData.ethereumAddress !== ethAccount) { - setActiveTokenSet(undefined); - } - }, [activeTokenSet, ethAccount, setActiveTokenSet]); - - return null; -} diff --git a/packages/frontend/src/components/account/EthAccount.tsx b/packages/frontend/src/components/account/EthAccount.tsx new file mode 100644 index 000000000..3c1e886ce --- /dev/null +++ b/packages/frontend/src/components/account/EthAccount.tsx @@ -0,0 +1,53 @@ +import { shortenEthAddress } from 'api/dist/user/utils'; +import { Jazzicon } from '@ukstv/jazzicon-react'; +import { useAccount } from 'wagmi'; +import { faAngleDown, faAngleRight } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { useState } from 'react'; +import EthAccountDialog from './EthAccountDialog'; + +interface EthAccountParams { + className?: string; + showDownCaret?: boolean; + showRightCaret?: boolean; +} + +export default function EthAccount({ + className, + showDownCaret = true, + showRightCaret = false, +}: EthAccountParams): JSX.Element | null { + const { data } = useAccount(); + const [isDialogOpen, setIsDialogOpen] = useState(false); + + if (!data?.address) return null; + + return ( + <> +
setIsDialogOpen(true)} + > +
+
+ +
+ {shortenEthAddress(data.address)} +
+
+ {showDownCaret && ( + + )} + {showRightCaret && ( + + )} +
+
+ setIsDialogOpen(false)} + /> + + ); +} diff --git a/packages/frontend/src/components/account/EthAccountDialog.tsx b/packages/frontend/src/components/account/EthAccountDialog.tsx new file mode 100644 index 000000000..90aadf0bf --- /dev/null +++ b/packages/frontend/src/components/account/EthAccountDialog.tsx @@ -0,0 +1,91 @@ +import { shortenEthAddress } from 'api/dist/user/utils'; +import { + faTimes, + faCopy, + faArrowRightFromBracket, +} from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { Dialog } from '@headlessui/react'; +import { Jazzicon } from '@ukstv/jazzicon-react'; +import { useDisconnect } from 'wagmi'; +import { ActiveTokenSet } from '@/model/auth'; +import { useSetRecoilState } from 'recoil'; +import { toast } from 'react-hot-toast'; +import { useRef } from 'react'; + +interface EthAccountDialogProps { + open?: boolean; + onClose(): void; + address: string; +} +const EthAccountDialog = ({ + open = false, + onClose, + address, +}: EthAccountDialogProps): JSX.Element => { + const { disconnect } = useDisconnect(); + const setActiveTokenSet = useSetRecoilState(ActiveTokenSet); + const contentRef = useRef(null); + + const handleCopyAddress = async (): Promise => { + await navigator.clipboard.writeText(address); + toast.success('Copied address'); + onClose(); + }; + + const handleDisconnect = (): void => { + disconnect(); + setActiveTokenSet(undefined); + onClose(); + }; + + return ( + onClose()} + className="fixed inset-0 z-50 overflow-y-auto" + initialFocus={contentRef} + > +
+ +
+
+ +
+
+
+ +
+ + {shortenEthAddress(address)} + +
+ + +
+
+
+
+
+ ); +}; + +export default EthAccountDialog; diff --git a/packages/frontend/src/components/auth/SignMessageButton.tsx b/packages/frontend/src/components/auth/SignMessageButton.tsx new file mode 100644 index 000000000..7d141353c --- /dev/null +++ b/packages/frontend/src/components/auth/SignMessageButton.tsx @@ -0,0 +1,40 @@ +import LoaderSpinner from '@/components/LoaderSpinner'; +import { useEffect } from 'react'; +import { useSignMessage } from 'wagmi'; + +interface Props { + text: string; + message: string; + onSignSuccess(signature: string): void; + onSignError(): void; +} + +const SignMessageButton = ({ + text, + message, + onSignSuccess, + onSignError, +}: Props): JSX.Element | null => { + const { isLoading, isSuccess, signMessage } = useSignMessage({ + message, + onError() { + onSignError(); + }, + onSuccess(data) { + onSignSuccess(data); + }, + }); + + return isLoading || isSuccess ? ( + + ) : ( + + ); +}; + +export { SignMessageButton }; diff --git a/packages/frontend/src/eth/connectors.ts b/packages/frontend/src/eth/connectors.ts deleted file mode 100644 index ec8ae3f5f..000000000 --- a/packages/frontend/src/eth/connectors.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { AbstractConnector } from '@web3-react/abstract-connector/dist'; -import { InjectedConnector } from '@web3-react/injected-connector'; - -export const injected = new InjectedConnector({ - // Eth mainnet, test nets and a few others xDai, Polygon, etc. - // Add more if requested, Praise does not perform any onchain actions - supportedChainIds: [1, 3, 4, 5, 56, 61, 137, 100], -}); - -export function isConnected(connector: AbstractConnector | undefined): boolean { - return injected === connector; -} diff --git a/packages/frontend/src/eth/hooks.ts b/packages/frontend/src/eth/hooks.ts deleted file mode 100644 index 32d17fc05..000000000 --- a/packages/frontend/src/eth/hooks.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { useWeb3React } from '@web3-react/core'; -import { useEffect, useState } from 'react'; -import { injected } from './connectors'; - -export function useEagerConnect(): boolean { - const { activate, active } = useWeb3React(); - const [tried, setTried] = useState(false); - - /* eslint-disable */ - useEffect(() => { - injected.isAuthorized().then((isAuthorized: boolean) => { - if (isAuthorized) { - activate(injected, undefined, true).catch(() => { - setTried(true); - }); - } else { - setTried(true); - } - }); - }, []); // intentionally only running on mount (make sure it's only mounted once :)) - /* eslint-enable */ - - // if the connection worked, wait until we get confirmation of that to flip the flag - useEffect(() => { - if (!tried && active) { - setTried(true); - } - }, [tried, active]); - - return tried; -} - -export function useInactiveListener(suppress = false): void { - const { active, error, activate } = useWeb3React(); - - useEffect(() => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const { ethereum } = window as any; - if (ethereum && ethereum.on && !active && !error && !suppress) { - const handleConnect = async (): Promise => { - console.log("Handling 'connect' event"); - await activate(injected); - }; - const handleChainChanged = async ( - chainId: string | number - ): Promise => { - console.log("Handling 'chainChanged' event with payload", chainId); - await activate(injected); - }; - const handleAccountsChanged = async ( - accounts: string[] - ): Promise => { - console.log("Handling 'accountsChanged' event with payload", accounts); - if (accounts.length > 0) { - await activate(injected); - } - }; - const handleNetworkChanged = async ( - networkId: string | number - ): Promise => { - console.log("Handling 'networkChanged' event with payload", networkId); - await activate(injected); - }; - - ethereum.on('connect', handleConnect); - ethereum.on('chainChanged', handleChainChanged); - ethereum.on('accountsChanged', handleAccountsChanged); - ethereum.on('networkChanged', handleNetworkChanged); - - return () => { - if (ethereum.removeListener) { - ethereum.removeListener('connect', handleConnect); - ethereum.removeListener('chainChanged', handleChainChanged); - ethereum.removeListener('accountsChanged', handleAccountsChanged); - ethereum.removeListener('networkChanged', handleNetworkChanged); - } - }; - } - }, [active, error, suppress, activate]); -} diff --git a/packages/frontend/src/eth/wallet.ts b/packages/frontend/src/eth/wallet.ts deleted file mode 100644 index ddab18a2b..000000000 --- a/packages/frontend/src/eth/wallet.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const hasMetaMask = (): boolean => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return typeof (window as any).ethereum !== 'undefined'; -}; diff --git a/packages/frontend/src/index.tsx b/packages/frontend/src/index.tsx index 3577cf46e..30c92cb8a 100644 --- a/packages/frontend/src/index.tsx +++ b/packages/frontend/src/index.tsx @@ -1,5 +1,3 @@ -import { ExternalProvider, Web3Provider } from '@ethersproject/providers'; -import { Web3ReactProvider } from '@web3-react/core'; import React from 'react'; import ReactDOM from 'react-dom'; import { Toaster } from 'react-hot-toast'; @@ -7,7 +5,19 @@ import { BrowserRouter as Router } from 'react-router-dom'; import { RecoilRoot } from 'recoil'; import RecoilNexus from 'recoil-nexus'; import { useErrorBoundary } from 'use-error-boundary'; -import EthConnection from './components/EthConnection'; +// eslint-disable-next-line import/no-unresolved +import '@rainbow-me/rainbowkit/styles.css'; +import { + Chain, + connectorsForWallets, + wallet, + RainbowKitProvider, + lightTheme, + Theme, +} from '@rainbow-me/rainbowkit'; +import { merge } from 'lodash'; +import { configureChains, createClient, WagmiConfig, chain } from 'wagmi'; +import { publicProvider } from 'wagmi/providers/public'; import Routes from './navigation/Routes'; import ErrorPage from './pages/ErrorPage'; import LoadScreen from '@/components/LoadScreen'; @@ -15,11 +25,74 @@ import './styles/globals.css'; const LOAD_DELAY = 500; -function getLibrary(provider: ExternalProvider): Web3Provider { - const library = new Web3Provider(provider); - library.pollingInterval = 12000; - return library; -} +const gnosisChain: Chain = { + id: 100, + name: 'Gnosis Chain', + network: 'Gnosis Chain', + iconUrl: `${process.env.REACT_APP_SERVER_URL}/uploads/gnosischain_logo.png`, + nativeCurrency: { + decimals: 18, + name: 'xDAI', + symbol: 'xDAI', + }, + rpcUrls: { + default: 'https://rpc.gnosischain.com', + }, + blockExplorers: { + default: { + name: 'BlockScout', + url: 'https://blockscout.com/xdai/mainnet/', + }, + blockscout: { + name: 'BlockScout', + url: 'https://blockscout.com/xdai/mainnet/', + }, + }, + testnet: false, +}; + +const { chains, provider } = configureChains( + [chain.mainnet, gnosisChain], + [publicProvider()] +); + +const needsInjectedWalletFallback = + typeof window !== 'undefined' && + window.ethereum && + !window.ethereum.isMetaMask && + !window.ethereum.isCoinbaseWallet; + +const connectors = connectorsForWallets([ + { + groupName: 'Recommended', + wallets: [ + wallet.metaMask({ chains }), + wallet.ledger({ chains }), + wallet.coinbase({ appName: 'Praise', chains }), + wallet.trust({ chains }), + wallet.imToken({ chains }), + wallet.walletConnect({ chains }), + wallet.rainbow({ chains }), + ...(needsInjectedWalletFallback ? [wallet.injected({ chains })] : []), + ], + }, +]); + +const wagmiClient = createClient({ + autoConnect: true, + connectors, + provider, +}); + +const customRainbowkitTheme = merge(lightTheme(), { + colors: { + accentColor: '#2d3748', // tailwind color gray-800 + }, + radii: { + connectButton: '0.25rem', // tailwind radius 'rounded' + modal: '0.25rem', + }, +} as Theme); interface DelayedLoadingProps { children: JSX.Element; @@ -58,25 +131,26 @@ ReactDOM.render( - - - -
- - }> - - - - - - -
-
-
+ + + +
+ + }> + + + + + + +
+
+
+
, diff --git a/packages/frontend/src/layouts/SignMessageLayout.tsx b/packages/frontend/src/layouts/SignMessageLayout.tsx new file mode 100644 index 000000000..e61c3129d --- /dev/null +++ b/packages/frontend/src/layouts/SignMessageLayout.tsx @@ -0,0 +1,76 @@ +import { faPrayingHands } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { ConnectButton } from '@rainbow-me/rainbowkit'; +import { useAccount } from 'wagmi'; +import { toast } from 'react-hot-toast'; +import { SignMessageButton } from '@/components/auth/SignMessageButton'; +import { useRecoilValue } from 'recoil'; +import { AccessToken } from '@/model/auth'; +import { useHistory } from 'react-router-dom'; +import LoaderSpinner from '@/components/LoaderSpinner'; +import EthAccount from '@/components/account/EthAccount'; + +interface Props { + children: JSX.Element; + onSignSuccess(signature: string): void; + message?: string; + buttonText?: string; +} + +const SignMessageLayout = ({ + children, + onSignSuccess, + message = undefined, + buttonText = 'Sign message', +}: Props): JSX.Element => { + const { data, isLoading } = useAccount(); + const accessToken = useRecoilValue(AccessToken); + const history = useHistory(); + + if (accessToken) { + history.replace('/'); + } + + return ( +
+
+
+ +
+
+ {children} + + {isLoading && !data && !message ? ( + + ) : ( +
+ {data ? ( +
+
+ Connected as +
+ +
+ ) : ( + + )} +
+ )} + + {data && message && ( +
+ void toast.error('Login denied')} + /> +
+ )} +
+
+
+ ); +}; + +export default SignMessageLayout; diff --git a/packages/frontend/src/model/activate.ts b/packages/frontend/src/model/activate.ts index ad7119a9d..eaad58aaa 100644 --- a/packages/frontend/src/model/activate.ts +++ b/packages/frontend/src/model/activate.ts @@ -1,36 +1,6 @@ -import { ActivateRequestBody } from 'api/dist/activate/types'; -import { AxiosResponse } from 'axios'; -import { atom, selectorFamily, SerializableParam } from 'recoil'; -import { ApiPost } from './api'; +import { atom } from 'recoil'; export const AccountActivated = atom({ key: 'AccountActivated', default: false, }); - -export interface ActivateRequestBodySerializable extends ActivateRequestBody { - [key: string]: SerializableParam; -} -export const AccountActivateQuery = selectorFamily< - AxiosResponse, - ActivateRequestBodySerializable ->({ - key: 'AccountActivateQuery', - get: - (params: ActivateRequestBody) => - ({ get }): AxiosResponse => { - const { ethereumAddress, accountId, message, signature } = params; - if (!ethereumAddress || !accountId || !message || !signature) - throw new Error('Invalid activation request.'); - - const data = { - ethereumAddress, - accountId, - message, - signature, - }; - - const response = get(ApiPost({ url: '/activate', data })); - return response; - }, -}); diff --git a/packages/frontend/src/model/eth.ts b/packages/frontend/src/model/eth.ts deleted file mode 100644 index c6d403566..000000000 --- a/packages/frontend/src/model/eth.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { atom } from 'recoil'; - -export interface EthStateInterface { - account: string | null | undefined; - triedEager: boolean; - activating: boolean; - connected: boolean; - connectDisabled: boolean; -} - -export const EthState = atom({ - key: 'EthState', - default: { - account: undefined, - triedEager: false, - activating: false, - connected: false, - connectDisabled: false, - } as EthStateInterface, -}); diff --git a/packages/frontend/src/navigation/Nav.tsx b/packages/frontend/src/navigation/Nav.tsx index 995a6a30d..e88334ff9 100644 --- a/packages/frontend/src/navigation/Nav.tsx +++ b/packages/frontend/src/navigation/Nav.tsx @@ -1,10 +1,7 @@ import AdminOnly from '@/components/auth/AdminOnly'; -import EthAccount from '@/components/EthAccount'; -import { ActiveTokenSet } from '@/model/auth'; +import EthAccount from '@/components/account/EthAccount'; import { SingleSetting } from '@/model/settings'; -import { classNames } from '@/utils/index'; import { - faAngleRight, faCalculator, faCog, faPrayingHands, @@ -12,21 +9,14 @@ import { faUserFriends, faBook, } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { Menu, Transition } from '@headlessui/react'; -import { Fragment } from 'react'; +import { Menu } from '@headlessui/react'; import { Link } from 'react-router-dom'; -import { useRecoilValue, useSetRecoilState } from 'recoil'; +import { useRecoilValue } from 'recoil'; import NavItem from './NavItem'; export default function Nav(): JSX.Element { - const setActiveTokenSet = useSetRecoilState(ActiveTokenSet); const logoSetting = useRecoilValue(SingleSetting('LOGO')); - const handleLogoutClick = (): void => { - setActiveTokenSet(undefined); - }; - return (