From bf5ca53102c1c0730ce1fe5efd2ccde03d317e67 Mon Sep 17 00:00:00 2001 From: juan Date: Fri, 19 Mar 2021 12:05:54 -0500 Subject: [PATCH 1/3] fix merge --- packages/bridge/package.json | 4 +- packages/bridge/src/contexts/ethereum.tsx | 140 ++++++++++++++---- .../bridge/src/wallet-adapters/metamask.tsx | 99 +++++++++++++ .../src/wallet-adapters/wallet-connect.tsx | 93 ++++++++++++ yarn.lock | 109 ++++++++++++++ 5 files changed, 415 insertions(+), 30 deletions(-) create mode 100644 packages/bridge/src/wallet-adapters/metamask.tsx create mode 100644 packages/bridge/src/wallet-adapters/wallet-connect.tsx diff --git a/packages/bridge/package.json b/packages/bridge/package.json index 117f18d..1c5f27e 100644 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -2,7 +2,6 @@ "name": "bridge", "version": "0.1.0", "dependencies": { - "@solana/wallet-base": "0.0.1", "@ant-design/icons": "^4.4.0", "@babel/preset-typescript": "^7.12.13", "@craco/craco": "^5.7.0", @@ -13,6 +12,7 @@ "@solana/spl-token": "0.0.13", "@solana/spl-token-registry": "^0.2.0", "@solana/spl-token-swap": "0.1.0", + "@solana/wallet-base": "0.0.1", "@solana/web3.js": "^0.86.2", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.5.0", @@ -26,7 +26,7 @@ "@uniswap/token-lists": "^1.0.0-beta.19", "@walletconnect/client": "^1.3.6", "@walletconnect/qrcode-modal": "^1.3.6", - "@walletconnect/web3-provider": "^1.3.6", + "@walletconnect/web3-provider": "^1.4.0", "@web3-react/core": "^6.0.9", "@web3-react/fortmatic-connector": "^6.0.9", "@web3-react/injected-connector": "^6.0.7", diff --git a/packages/bridge/src/contexts/ethereum.tsx b/packages/bridge/src/contexts/ethereum.tsx index 0b91cb6..a6e0ccd 100644 --- a/packages/bridge/src/contexts/ethereum.tsx +++ b/packages/bridge/src/contexts/ethereum.tsx @@ -4,6 +4,7 @@ import React, { useCallback, useContext, useEffect, + useMemo, useState, } from 'react'; // @ts-ignore @@ -13,9 +14,29 @@ import { useWallet as useEthereumWallet } from 'use-wallet'; import WalletConnectProvider from '@walletconnect/web3-provider'; // @ts-ignore import Fortmatic from 'fortmatic'; -import { useConnectionConfig, useWallet, ENV } from '@oyster/common'; +import { useWallet, useLocalStorageState, WalletAdapter } from '@oyster/common'; import { TokenList, TokenInfo } from '@uniswap/token-lists'; import { ethers } from 'ethers'; +import { MetamaskWalletAdapter } from '../wallet-adapters/metamask'; +import { Button, Modal } from 'antd'; +import {WalletConnectWalletAdapter} from "../wallet-adapters/wallet-connect"; + +const ASSETS_URL = + 'https://raw.githubusercontent.com/solana-labs/oyster/main/assets/wallets/'; +export const ETH_WALLET_PROVIDERS = [ + { + name: 'Metamask', + url: 'https://www.metamask.com', + icon: `${ASSETS_URL}metamask.svg`, + adapter: MetamaskWalletAdapter, + }, + { + name: 'Wallect Connect', + url: 'https://walletconnect.org/', + icon: `${ASSETS_URL}walletconnect.svg`, + adapter: WalletConnectWalletAdapter, + }, +]; export interface EthereumContextState { provider?: ethers.providers.Web3Provider; @@ -39,11 +60,16 @@ export const EthereumContext = createContext({ export const EthereumProvider: FunctionComponent = ({ children }) => { const [accounts, setAccounts] = useState(['']); const [provider, setProvider] = useState(); + + const [providerUrl, setProviderUrl] = useLocalStorageState( + 'ethWalletProvider', + ); const [connected, setConnected] = useState(false); const [chainId, setChainId] = useState(0); - //const { env } = useConnectionConfig(); + const [isModalVisible, setIsModalVisible] = useState(false); + const { connected: walletConnected } = useWallet(); - //const wallet = useEthereumWallet(); + const [tokens, setTokens] = useState<{ map: Map; list: TokenInfo[]; @@ -51,6 +77,18 @@ export const EthereumProvider: FunctionComponent = ({ children }) => { map: new Map(), list: [], }); + const walletProvider = useMemo( + () => ETH_WALLET_PROVIDERS.find(({ url }) => url === providerUrl), + [providerUrl], + ); + const wallet = useMemo( + function () { + if (walletProvider) { + return new walletProvider.adapter() as WalletAdapter; + } + }, + [walletProvider, providerUrl], + ); useEffect(() => { (async () => { @@ -100,47 +138,53 @@ export const EthereumProvider: FunctionComponent = ({ children }) => { })(); }, [setTokens]); - const onConnectEthereum = () => { - // @ts-ignore - window.ethereum.request({ method: 'eth_requestAccounts' }).then(() => { - // @ts-ignore - const provider = new ethers.providers.Web3Provider( - (window as any).ethereum, - ); - const signer = provider.getSigner(); - signer.getAddress().then(account => { - setAccounts([account]); - setConnected(true); - }); - provider.getNetwork().then(network => { - setChainId(network.chainId); - }); - setProvider(provider); - }); - }; + const onConnectEthereum = useCallback(() => { + if (wallet && providerUrl) { + wallet.connect(); + } else { + select(); + } + }, [wallet, providerUrl]); useEffect(() => { - if (connected) { - // @ts-ignore - window.ethereum.on('disconnect', error => { + if (wallet) { + wallet.on('connect', () => { + // @ts-ignore + setAccounts(wallet.accounts); + // @ts-ignore + setChainId(wallet.chainID); + // @ts-ignore + setProvider(wallet.provider); + setConnected(true); + }); + wallet.on('disconnect', error => { setConnected(false); }); // @ts-ignore - window.ethereum.on('accountsChanged', accounts => { + wallet.on('accountsChanged', accounts => { if (!accounts || !accounts[0]) setConnected(false); }); // @ts-ignore - window.ethereum.on('chainChanged', (chainId: string) => { + wallet.on('chainChanged', (chainId: string) => { setChainId(parseInt(chainId, 16)); }); } - }, [connected]); + return () => { + setConnected(false); + if (wallet) { + wallet.disconnect(); + } + }; + }, [wallet]); + + const select = useCallback(() => setIsModalVisible(true), []); + const close = useCallback(() => setIsModalVisible(false), []); useEffect(() => { if (walletConnected && !connected) { onConnectEthereum(); } - }, [walletConnected]); + }, [walletConnected, connected]); return ( { }} > {children} + + {ETH_WALLET_PROVIDERS.map(provider => { + const onClick = function () { + setProviderUrl(provider.url); + close(); + }; + + return ( + + ); + })} + ); }; diff --git a/packages/bridge/src/wallet-adapters/metamask.tsx b/packages/bridge/src/wallet-adapters/metamask.tsx new file mode 100644 index 0000000..143584e --- /dev/null +++ b/packages/bridge/src/wallet-adapters/metamask.tsx @@ -0,0 +1,99 @@ +import EventEmitter from 'eventemitter3'; +import { PublicKey, Transaction } from '@solana/web3.js'; +import { notify, WalletAdapter } from '@oyster/common'; +import { ethers } from 'ethers'; + +export class MetamaskWalletAdapter + extends EventEmitter + implements WalletAdapter { + _publicKey: PublicKey | null; + _onProcess: boolean; + _accounts: Array; + _chainID: number; + _provider: any; + constructor() { + super(); + this._publicKey = null; + this._provider = null; + this._accounts = []; + this._chainID = 0; + this._onProcess = false; + this.connect = this.connect.bind(this); + } + + get publicKey() { + return this._publicKey; + } + get provider() { + return this._provider; + } + get accounts() { + return this._accounts; + } + get chainID() { + return this._chainID; + } + + async signTransaction(transaction: Transaction) { + return (window as any).ethereum.signTransaction(transaction); + } + + connect() { + if (this._onProcess) { + return; + } + + if ((window as any).ethereum === undefined) { + notify({ + message: 'Metamask Error', + description: 'Please install metamask wallet from Chrome ', + }); + return; + } + + this._onProcess = true; + // @ts-ignore + window.ethereum + .request({ method: 'eth_requestAccounts' }) + .then(() => { + // @ts-ignore + const provider = new ethers.providers.Web3Provider( + (window as any).ethereum, + ); + const signer = provider.getSigner(); + signer.getAddress().then(account => { + this._accounts = [account]; + provider.getNetwork().then(network => { + this._chainID = network.chainId; + this._provider = provider; + this.emit('connect'); + }); + }); + // @ts-ignore + window.ethereum.on('disconnect', error => { + this.emit('disconnect', error); + }); + // @ts-ignore + window.ethereum.on('accountsChanged', accounts => { + this.emit('accountsChanged', accounts); + }); + // @ts-ignore + window.ethereum.on('chainChanged', (chainId: string) => { + this.emit('chainChanged', chainId); + }); + }) + .catch(() => { + this.disconnect(); + }) + .finally(() => { + this._onProcess = false; + }); + } + + disconnect() { + if (this._publicKey) { + this._publicKey = null; + this.emit('disconnect'); + } + } +} diff --git a/packages/bridge/src/wallet-adapters/wallet-connect.tsx b/packages/bridge/src/wallet-adapters/wallet-connect.tsx new file mode 100644 index 0000000..86cdd14 --- /dev/null +++ b/packages/bridge/src/wallet-adapters/wallet-connect.tsx @@ -0,0 +1,93 @@ +import EventEmitter from 'eventemitter3'; +import { PublicKey, Transaction } from '@solana/web3.js'; +import { notify, WalletAdapter } from '@oyster/common'; +import { ethers } from 'ethers'; +import WalletConnectProvider from "@walletconnect/web3-provider"; + +export class WalletConnectWalletAdapter + extends EventEmitter + implements WalletAdapter { + _publicKey: PublicKey | null; + _onProcess: boolean; + _accounts: Array; + _chainID: number; + _provider: any; + + constructor() { + super(); + this._publicKey = null; + this._provider = null; + this._accounts = []; + this._chainID = 0; + this._onProcess = false; + this.connect = this.connect.bind(this); + } + + get publicKey() { + return this._publicKey; + } + get provider() { + return this._provider; + } + get accounts() { + return this._accounts; + } + get chainID() { + return this._chainID; + } + + async signTransaction(transaction: Transaction) { + return this._provider.signTransaction(transaction); + } + + connect() { + if (this._onProcess) { + return; + } + + this._onProcess = true; + + // Create WalletConnect Provider + const walletConnectProvider = new WalletConnectProvider({ + infuraId: "27e484dcd9e3efcfd25a83a78777cdf1", + }); + walletConnectProvider.enable().then(()=>{ + const provider = new ethers.providers.Web3Provider(walletConnectProvider); + const signer = provider.getSigner(); + signer.getAddress().then(account => { + this._accounts = [account]; + provider.getNetwork().then(network => { + this._chainID = network.chainId; + this._provider = provider; + this.emit('connect'); + }); + }); + // @ts-ignore + walletConnectProvider.on('disconnect', (code: number, reason: string) => { + this.emit('disconnect', {code, reason}); + }); + // @ts-ignore + walletConnectProvider.on('accountsChanged', (accounts: string[]) => { + this.emit('accountsChanged', accounts); + }); + // @ts-ignore + walletConnectProvider.on('chainChanged', (chainId: number) => { + this.emit('chainChanged', chainId); + }); + }) + .catch(() => { + this.disconnect(); + }) + .finally(() => { + this._onProcess = false; + }); + + } + + disconnect() { + if (this._publicKey) { + this._publicKey = null; + this.emit('disconnect'); + } + } +} diff --git a/yarn.lock b/yarn.lock index 53a7df4..6fb37bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3781,6 +3781,17 @@ resolved "https://registry.yarnpkg.com/@uniswap/token-lists/-/token-lists-1.0.0-beta.19.tgz#5256db144fba721a6233f43b92ffb388cbd58327" integrity sha512-19V3KM7DAe40blWW1ApiaSYwqbq0JTKMO3yChGBrXzQBl+BoQZRTNZ4waCyoZ5QM45Q0Mxd6bCn6jXcH9G1kjg== +"@walletconnect/browser-utils@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.4.0.tgz#2998d0433086a0a4376d6c883b708a54ea18a3de" + integrity sha512-2oLQGaQ53bJvoToYG17XGf8palfbNF4ZdSvBKmEYX1ac9NnDetEPBfryz0Ij2s4f9o9XfVKFO7+HPLzm2ayMMw== + dependencies: + "@walletconnect/types" "^1.4.0" + detect-browser "5.2.0" + safe-json-utils "1.0.0" + window-getters "1.0.0" + window-metadata "1.0.0" + "@walletconnect/client@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.3.6.tgz#537b7af6bf87a906fcf171fd5bc4e56a2a3d1908" @@ -3791,6 +3802,16 @@ "@walletconnect/types" "^1.3.6" "@walletconnect/utils" "^1.3.6" +"@walletconnect/client@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.4.0.tgz#b6dc28b7758370adadc9b8da372c626594cd30c0" + integrity sha512-lg3JFCuECCvZEl7BpOztNtnStOmOpGqXuSIhisnaEtqUgHdopH275Rz5jU736X5uS+7VExU6LOIWKNPPXlY2ZQ== + dependencies: + "@walletconnect/core" "^1.4.0" + "@walletconnect/iso-crypto" "^1.4.0" + "@walletconnect/types" "^1.4.0" + "@walletconnect/utils" "^1.4.0" + "@walletconnect/core@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.3.6.tgz#1690081bc4666b6644ed6a1bed128509a5259e50" @@ -3800,6 +3821,15 @@ "@walletconnect/types" "^1.3.6" "@walletconnect/utils" "^1.3.6" +"@walletconnect/core@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.4.0.tgz#fbd4085f46a0765262b19570dd715b1fd5abc0b4" + integrity sha512-0rPfgSAcdCHG/JcEUgLAJ6wnQOsd7AiBEAUv7d71ViORu1gKrXm8mWKpWnPkPV53IH+oRVVP0pAGEpwo7f+Bdw== + dependencies: + "@walletconnect/socket-transport" "^1.4.0" + "@walletconnect/types" "^1.4.0" + "@walletconnect/utils" "^1.4.0" + "@walletconnect/http-connection@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.3.6.tgz#98be28c312cfcca86b962b5a3a2813ac7b3f4866" @@ -3810,6 +3840,16 @@ eventemitter3 "4.0.7" xhr2-cookies "1.1.0" +"@walletconnect/http-connection@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.4.0.tgz#0643310af0023270f76ab663ba381f8deb3bedcb" + integrity sha512-HIYrgzz/Fagwoyco6RsnxAD9pFLdt0cp+g+Rhw770QIhax0PjzpiC+IcLcYqVDFcCJwss6pZFlyPu7AAK67VDw== + dependencies: + "@walletconnect/types" "^1.4.0" + "@walletconnect/utils" "^1.4.0" + eventemitter3 "4.0.7" + xhr2-cookies "1.1.0" + "@walletconnect/iso-crypto@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.3.6.tgz#e6003d46fbc12b979e96269d94eebd8e801c0305" @@ -3819,11 +3859,25 @@ "@walletconnect/types" "^1.3.6" "@walletconnect/utils" "^1.3.6" +"@walletconnect/iso-crypto@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.4.0.tgz#e134faa46f14827383217277004aa69e76763ea7" + integrity sha512-pd5N6brECiRCp9A7skW1gL/fw24vjzy8zQJvn75GFRcuYcHNgpQwFOAq5OvaZt6/9wBIL1rVZ9QdBpyZ+EX85w== + dependencies: + "@pedrouid/iso-crypto" "^1.0.0" + "@walletconnect/types" "^1.4.0" + "@walletconnect/utils" "^1.4.0" + "@walletconnect/mobile-registry@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.3.6.tgz#891d08b62c8e5c61f96203aad588c2c463c5d7f3" integrity sha512-OhOCFJhUWKVbRzU9XcAcYIW9cC6gNb+kFttIAtjbaocRGgN+n5NDoUZsrrd6iurjvS6ToCWkalvlYbXDU5/xtw== +"@walletconnect/mobile-registry@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz#502cf8ab87330841d794819081e748ebdef7aee5" + integrity sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw== + "@walletconnect/qrcode-modal@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.3.6.tgz#4ab9562e19069d453e04a3376f485aadf5f91de3" @@ -3835,6 +3889,17 @@ preact "10.4.1" qrcode "1.4.4" +"@walletconnect/qrcode-modal@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.4.0.tgz#a502886b9ec044bf2d3c86018decacca810f1aba" + integrity sha512-FOov70va04sOReI9ijGPbYexXtNWS7VZPlSEv7vHLq5ufcghh0sPsl5MfO6wvyNqpSJERbGoTmaHLSMR7LjpFg== + dependencies: + "@walletconnect/browser-utils" "^1.4.0" + "@walletconnect/mobile-registry" "^1.4.0" + "@walletconnect/types" "^1.4.0" + preact "10.4.1" + qrcode "1.4.4" + "@walletconnect/socket-transport@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.3.6.tgz#702951831ff17db8f4c337dcdcb107cce377dae4" @@ -3844,11 +3909,25 @@ "@walletconnect/utils" "^1.3.6" ws "7.3.0" +"@walletconnect/socket-transport@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.4.0.tgz#2b7f90cede720dbcf03a11f641b4e707a2c1580f" + integrity sha512-X/7Hm+4w0d9fn0xf8adXetlHxmvpyw1cvUPHSCPxEzC+xACdZE1Q/dveDfEb/RaWlv7Z3IQoagVSCN/3xzkyYQ== + dependencies: + "@walletconnect/types" "^1.4.0" + "@walletconnect/utils" "^1.4.0" + ws "7.3.0" + "@walletconnect/types@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.3.6.tgz#892da6fb4570d9bc5450dc1a5810d7b4d345dd08" integrity sha512-fNir3Pi1ZpuVlgNr8qtP2LOSsV9rNgJGHmBnHHqKNmpuRpPxG1mhmKFdDHNGyVIP5bM5CWIXmlULDTax63UJbg== +"@walletconnect/types@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.4.0.tgz#debd38ae72231b304f281cbd1e6758cb4a1b26a4" + integrity sha512-aCeuVzIos3VsRIK+/nnk8WHAftQNVOLUeWOTZoClOOGFJk5HpaPNfyIHJ+hjU4VXh/3YuN0yqnCeMWVjKlQ3nw== + "@walletconnect/utils@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.3.6.tgz#e55cb5510eb41b4ae6be8e88c1de42abf309bdd3" @@ -3865,6 +3944,19 @@ window-getters "1.0.0" window-metadata "1.0.0" +"@walletconnect/utils@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.4.0.tgz#2ab4889e92a84a8f28aa7134ed86df7fa035ed76" + integrity sha512-MFUKROV/TQKj6J95uNW0s04MU/yhl6wohZh5LwtKbFKIY2tsba+qM2miEXMo9fMOpxq/HnjBsVVVTZT9bSeIRw== + dependencies: + "@json-rpc-tools/utils" "1.6.1" + "@walletconnect/browser-utils" "^1.4.0" + "@walletconnect/types" "^1.4.0" + bn.js "4.11.8" + enc-utils "3.0.0" + js-sha3 "0.8.0" + query-string "6.13.5" + "@walletconnect/web3-provider@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.3.6.tgz#a09f0c08115475918ed4fe8d0503d28e29ac1877" @@ -3877,6 +3969,18 @@ "@walletconnect/utils" "^1.3.6" web3-provider-engine "16.0.1" +"@walletconnect/web3-provider@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.4.0.tgz#45530f8fb0f52e3dc38cc435f7a10c7e4b94bc7c" + integrity sha512-Z7t61acIeeNsPz/kK74tiHHK/sFv1j1YPZYaq2GpoKh1qBnHMWWenk8Q8PbGRGc0ouEExXxaqRGYb2/0IICaxA== + dependencies: + "@walletconnect/client" "^1.4.0" + "@walletconnect/http-connection" "^1.4.0" + "@walletconnect/qrcode-modal" "^1.4.0" + "@walletconnect/types" "^1.4.0" + "@walletconnect/utils" "^1.4.0" + web3-provider-engine "16.0.1" + "@web3-react/abstract-connector@^6.0.7": version "6.0.7" resolved "https://registry.yarnpkg.com/@web3-react/abstract-connector/-/abstract-connector-6.0.7.tgz#401b3c045f1e0fab04256311be49d5144e9badc6" @@ -7547,6 +7651,11 @@ detect-browser@5.1.0: resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.1.0.tgz#0c51c66b747ad8f98a6832bf3026a5a23a7850ff" integrity sha512-WKa9p+/MNwmTiS+V2AS6eGxic+807qvnV3hC+4z2GTY+F42h1n8AynVTMMc4EJBC32qMs6yjOTpeDEQQt/AVqQ== +detect-browser@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.2.0.tgz#c9cd5afa96a6a19fda0bbe9e9be48a6b6e1e9c97" + integrity sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA== + detect-gpu@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/detect-gpu/-/detect-gpu-3.0.0.tgz#d1ced721581c27fec29e24aee8c3eadf45450b5a" From 5eed226ed8f6d4e92bc0a2eadd2436840281cc0c Mon Sep 17 00:00:00 2001 From: juan Date: Fri, 19 Mar 2021 13:34:53 -0500 Subject: [PATCH 2/3] added wallet connect adapter --- .../bridge/public/blockchains/walletconnect.svg | 12 ++++++++++++ packages/bridge/src/assets/walletconnect.svg | 12 ++++++++++++ .../src/components/EthereumConnect/index.tsx | 16 ++++------------ .../src/components/TokenSelectModal/index.tsx | 1 + .../src/components/TokenSelectModal/style.less | 5 ++++- .../bridge/src/components/Transfer/index.tsx | 2 +- packages/bridge/src/contexts/ethereum.tsx | 14 +++++++++----- packages/bridge/src/wallet-adapters/metamask.tsx | 6 +++++- .../src/wallet-adapters/wallet-connect.tsx | 6 +++++- 9 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 packages/bridge/public/blockchains/walletconnect.svg create mode 100644 packages/bridge/src/assets/walletconnect.svg diff --git a/packages/bridge/public/blockchains/walletconnect.svg b/packages/bridge/public/blockchains/walletconnect.svg new file mode 100644 index 0000000..a2243de --- /dev/null +++ b/packages/bridge/public/blockchains/walletconnect.svg @@ -0,0 +1,12 @@ + + + + WalletConnect + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/packages/bridge/src/assets/walletconnect.svg b/packages/bridge/src/assets/walletconnect.svg new file mode 100644 index 0000000..a2243de --- /dev/null +++ b/packages/bridge/src/assets/walletconnect.svg @@ -0,0 +1,12 @@ + + + + WalletConnect + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/packages/bridge/src/components/EthereumConnect/index.tsx b/packages/bridge/src/components/EthereumConnect/index.tsx index a744915..0c52d6f 100644 --- a/packages/bridge/src/components/EthereumConnect/index.tsx +++ b/packages/bridge/src/components/EthereumConnect/index.tsx @@ -2,12 +2,11 @@ import React from 'react'; import { Button } from 'antd'; import { useCorrectNetwork } from '../../hooks/useCorrectNetwork'; -import metamaskIcon from '../../assets/metamask.svg'; import { shortenAddress } from '@oyster/common'; import { useEthereum } from '../../contexts'; export const EthereumConnect = () => { - const { accounts, onConnectEthereum, connected } = useEthereum(); + const { accounts, onConnectEthereum, connected, walletProvider } = useEthereum(); const { hasCorrespondingNetworks } = useCorrectNetwork(); return ( @@ -16,11 +15,11 @@ export const EthereumConnect = () => { hasCorrespondingNetworks ? ( <> {'metamask-icon'} {shortenAddress(accounts[0], 4)} @@ -31,14 +30,7 @@ export const EthereumConnect = () => { ) ) : ( )} diff --git a/packages/bridge/src/components/TokenSelectModal/index.tsx b/packages/bridge/src/components/TokenSelectModal/index.tsx index a232dbd..e6406e4 100644 --- a/packages/bridge/src/components/TokenSelectModal/index.tsx +++ b/packages/bridge/src/components/TokenSelectModal/index.tsx @@ -119,6 +119,7 @@ export const TokenSelectModal = (props: { visible={isModalVisible} onCancel={() => hideModal()} footer={null} + className={"token-select-modal"} > { }); } else { console.log('Asset: ', asset); - debugger; + //debugger; // get user address from asset // diff --git a/packages/bridge/src/contexts/ethereum.tsx b/packages/bridge/src/contexts/ethereum.tsx index a6e0ccd..e69685b 100644 --- a/packages/bridge/src/contexts/ethereum.tsx +++ b/packages/bridge/src/contexts/ethereum.tsx @@ -14,7 +14,8 @@ import { useWallet as useEthereumWallet } from 'use-wallet'; import WalletConnectProvider from '@walletconnect/web3-provider'; // @ts-ignore import Fortmatic from 'fortmatic'; -import { useWallet, useLocalStorageState, WalletAdapter } from '@oyster/common'; +import { useWallet, useLocalStorageState} from '@oyster/common'; +import { WalletAdapter } from '@solana/wallet-base' import { TokenList, TokenInfo } from '@uniswap/token-lists'; import { ethers } from 'ethers'; import { MetamaskWalletAdapter } from '../wallet-adapters/metamask'; @@ -31,9 +32,9 @@ export const ETH_WALLET_PROVIDERS = [ adapter: MetamaskWalletAdapter, }, { - name: 'Wallect Connect', - url: 'https://walletconnect.org/', - icon: `${ASSETS_URL}walletconnect.svg`, + name: 'Wallet Connect', + url: 'https://walletconnect.org', + icon: `/blockchains/walletconnect.svg`, adapter: WalletConnectWalletAdapter, }, ]; @@ -46,6 +47,7 @@ export interface EthereumContextState { accounts: string[]; connected: boolean; chainId: number; + walletProvider: any; onConnectEthereum?: () => void; } @@ -55,6 +57,7 @@ export const EthereumContext = createContext({ accounts: [''], chainId: 0, connected: false, + walletProvider: null, }); export const EthereumProvider: FunctionComponent = ({ children }) => { @@ -184,7 +187,7 @@ export const EthereumProvider: FunctionComponent = ({ children }) => { if (walletConnected && !connected) { onConnectEthereum(); } - }, [walletConnected, connected]); + }, [walletConnected, connected, providerUrl]); return ( { provider, connected, chainId, + walletProvider, onConnectEthereum: () => onConnectEthereum(), }} > diff --git a/packages/bridge/src/wallet-adapters/metamask.tsx b/packages/bridge/src/wallet-adapters/metamask.tsx index 143584e..44843fa 100644 --- a/packages/bridge/src/wallet-adapters/metamask.tsx +++ b/packages/bridge/src/wallet-adapters/metamask.tsx @@ -1,6 +1,7 @@ import EventEmitter from 'eventemitter3'; import { PublicKey, Transaction } from '@solana/web3.js'; -import { notify, WalletAdapter } from '@oyster/common'; +import { notify } from '@oyster/common'; +import { WalletAdapter } from '@solana/wallet-base' import { ethers } from 'ethers'; export class MetamaskWalletAdapter @@ -37,6 +38,9 @@ export class MetamaskWalletAdapter async signTransaction(transaction: Transaction) { return (window as any).ethereum.signTransaction(transaction); } + async signMultipleTransaction(transactions: Transaction[]) { + return transactions; + } connect() { if (this._onProcess) { diff --git a/packages/bridge/src/wallet-adapters/wallet-connect.tsx b/packages/bridge/src/wallet-adapters/wallet-connect.tsx index 86cdd14..b13751e 100644 --- a/packages/bridge/src/wallet-adapters/wallet-connect.tsx +++ b/packages/bridge/src/wallet-adapters/wallet-connect.tsx @@ -1,6 +1,7 @@ import EventEmitter from 'eventemitter3'; import { PublicKey, Transaction } from '@solana/web3.js'; -import { notify, WalletAdapter } from '@oyster/common'; +import { notify } from '@oyster/common'; +import { WalletAdapter } from '@solana/wallet-base' import { ethers } from 'ethers'; import WalletConnectProvider from "@walletconnect/web3-provider"; @@ -39,6 +40,9 @@ export class WalletConnectWalletAdapter async signTransaction(transaction: Transaction) { return this._provider.signTransaction(transaction); } + async signMultipleTransaction(transactions: Transaction[]) { + return transactions; + } connect() { if (this._onProcess) { From 29a540e9a6a9494a0c7ea3bb1a8cb4d6bea1b214 Mon Sep 17 00:00:00 2001 From: juan Date: Fri, 19 Mar 2021 13:40:14 -0500 Subject: [PATCH 3/3] changed infura API key --- packages/bridge/src/wallet-adapters/wallet-connect.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bridge/src/wallet-adapters/wallet-connect.tsx b/packages/bridge/src/wallet-adapters/wallet-connect.tsx index b13751e..bcb6592 100644 --- a/packages/bridge/src/wallet-adapters/wallet-connect.tsx +++ b/packages/bridge/src/wallet-adapters/wallet-connect.tsx @@ -53,7 +53,7 @@ export class WalletConnectWalletAdapter // Create WalletConnect Provider const walletConnectProvider = new WalletConnectProvider({ - infuraId: "27e484dcd9e3efcfd25a83a78777cdf1", + infuraId: "535ab8649e9f40cface13cbded7d647e", }); walletConnectProvider.enable().then(()=>{ const provider = new ethers.providers.Web3Provider(walletConnectProvider);