From a61433e7fe4363ff90faf2d1e1c7669f4d563ed5 Mon Sep 17 00:00:00 2001 From: Kyungeun Kim - IOTRUST <43332806+KyungeunKim@users.noreply.github.com> Date: Tue, 7 Jun 2022 04:56:32 +0900 Subject: [PATCH 01/17] Support D'CENT wallet in PC and mobile (#996) * Support D'CENT wallet in PC/Mobile * Upgrade eth-dcent-keyring package * Update packages/dcent/package.json Co-authored-by: Adam Carpenter * add README file for D'CENT * Remove console.log, yarn.lock Co-authored-by: Adam Carpenter --- README.md | 2 +- packages/@types/index.d.ts | 1 + packages/dcent/README.md | 27 +++ packages/dcent/package.json | 27 +++ packages/dcent/src/icon.ts | 23 +++ packages/dcent/src/index.ts | 303 +++++++++++++++++++++++++++++++ packages/dcent/tsconfig.json | 15 ++ packages/demo/src/App.svelte | 6 +- packages/injected/src/wallets.ts | 16 -- packages/react/README.md | 6 +- yarn.lock | 38 +++- 11 files changed, 444 insertions(+), 20 deletions(-) create mode 100644 packages/dcent/README.md create mode 100644 packages/dcent/package.json create mode 100644 packages/dcent/src/icon.ts create mode 100644 packages/dcent/src/index.ts create mode 100644 packages/dcent/tsconfig.json diff --git a/README.md b/README.md index 13904ae0d..2b4d4d45e 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ For full documentation, check out the README.md for each package: - [Ledger](packages/ledger/README.md) - [Trezor](packages/trezor/README.md) - [Keystone](packages/keystone/README.md) - +- [D'CENT](packages/dcent/README.md) **Frameworks** - [React](packages/react/README.md) diff --git a/packages/@types/index.d.ts b/packages/@types/index.d.ts index fbc4d53ba..82658226d 100644 --- a/packages/@types/index.d.ts +++ b/packages/@types/index.d.ts @@ -1,5 +1,6 @@ declare module '*.png' declare module 'window' declare module '@keystonehq/eth-keyring' +declare module 'eth-dcent-keyring' declare module 'hdkey' declare const global: typeof globalThis & { window: CustomWindow } diff --git a/packages/dcent/README.md b/packages/dcent/README.md new file mode 100644 index 000000000..3f7fc4fa4 --- /dev/null +++ b/packages/dcent/README.md @@ -0,0 +1,27 @@ +# @web3-onboard/dcent + +## Wallet module for connecting D'CENT hardware wallets to web3-onboard + +### Install + +`npm i @web3-onboard/dcent` + +### Usage + +```typescript +import Onboard from '@web3-onboard/core' +import dcentModule from '@web3-onboard/dcent' + +const dcent = dcentModule() + +const onboard = Onboard({ + // ... other Onboard options + wallets: [ + dcent + //... other wallets + ] +}) + +const connectedWallets = await onboard.connectWallet() +console.log(connectedWallets) +``` diff --git a/packages/dcent/package.json b/packages/dcent/package.json new file mode 100644 index 000000000..af2d0a429 --- /dev/null +++ b/packages/dcent/package.json @@ -0,0 +1,27 @@ +{ + "name": "@web3-onboard/dcent", + "version": "1.0.0-alpha.1", + "description": "D'CENT module for web3-onboard", + "module": "dist/index.js", + "typings": "dist/index.d.ts", + "files": [ + "dist" + ], + "type": "module", + "scripts": { + "build": "tsc", + "dev": "tsc -w", + "type-check": "tsc --noEmit" + }, + "license": "MIT", + "devDependencies": { + "typescript": "^4.5.5" + }, + "dependencies": { + "@web3-onboard/common": "^2.0.0", + "@ethereumjs/common": "^2.6.1", + "@ethereumjs/tx": "^3.4.0", + "@ethersproject/providers": "^5.5.0", + "eth-dcent-keyring": "^0.2.2" + } +} diff --git a/packages/dcent/src/icon.ts b/packages/dcent/src/icon.ts new file mode 100644 index 000000000..a84338fed --- /dev/null +++ b/packages/dcent/src/icon.ts @@ -0,0 +1,23 @@ + +export default ` + + + + + + + + + + + + +` \ No newline at end of file diff --git a/packages/dcent/src/index.ts b/packages/dcent/src/index.ts new file mode 100644 index 000000000..56e68c2fc --- /dev/null +++ b/packages/dcent/src/index.ts @@ -0,0 +1,303 @@ +import { + Account, + accountSelect, + Chain, + createEIP1193Provider, + CustomNetwork, + ProviderRpcErrorCode, + ProviderRpcError, + ScanAccountsOptions, + WalletInit, + EIP1193Provider +} from '@web3-onboard/common' + +import type { providers } from 'ethers' +import type { CustomWindow } from '@web3-onboard/injected-wallets/src/types' +declare const window: CustomWindow + +const DEFAULT_BASE_PATH = "m/44'/60'/0'/0/0" + +const basePaths = [ + { + label: `D'CENT`, + value: DEFAULT_BASE_PATH + } +] + +const assets = [ + { + label: 'ETH' + } +] + +const generateAccounts = async ( + keyring: any, + provider: providers.StaticJsonRpcProvider +): Promise => { + const accounts = [] + + const addressList = await keyring.addAccounts() + const derivationPath = DEFAULT_BASE_PATH + const account = { + derivationPath, + address: addressList[0], + balance: { + asset: '', + value: await provider.getBalance(addressList[0]) + } + } + + accounts.push(account) + + // console.log('generateAccounts/accounts = ', accounts) + return accounts +} + +function dcent({ + customNetwork +}: { + customNetwork?: CustomNetwork +} = {}): WalletInit { + const getIcon = async () => (await import('./icon.js')).default + return helpers => { + const { device } = helpers + const isMobile = device.type === 'mobile' + // console.log('device.type ', device.type) + let accounts: Account[] | undefined + return { + label: 'D\'CENT', + getIcon, + getInterface: async ({ EventEmitter, chains }) => { + + const eventEmitter = new EventEmitter() + + if (isMobile) { + const provider = window.ethereum as EIP1193Provider + if(isMobile && (!provider)) { + location.replace("https://link.dcentwallet.com/DAppBrowser/?url=" + document.location) + } + provider.on = eventEmitter.on.bind(eventEmitter) + return { + provider + } + } + + const { StaticJsonRpcProvider } = await import( + '@ethersproject/providers' + ) + const { default: Common, Hardfork } = await import('@ethereumjs/common') + + const { default: EthDcentKeyring } = await import('eth-dcent-keyring') + const dcentKeyring = new EthDcentKeyring({}) + + // console.log('dcentKeyring ', dcentKeyring) + const { TransactionFactory: Transaction } = await import( + '@ethereumjs/tx' + ) + + let currentChain: Chain = chains[0] + const scanAccounts = async ({ + derivationPath, + chainId, + asset + }: ScanAccountsOptions): Promise => { + currentChain = + chains.find(({ id }: Chain) => id === chainId) || currentChain + + const provider = new StaticJsonRpcProvider(currentChain.rpcUrl) + + return generateAccounts(dcentKeyring, provider) + } + + const getAccounts = async () => { + accounts = await accountSelect({ + basePaths, + assets, + chains, + scanAccounts, + supportsCustomPath: false + }) + if (accounts.length) { + eventEmitter.emit('accountsChanged', [accounts[0].address]) + } + + return accounts + } + + const request = async ({ + method, + params + }: { + method: string + params: any + }) => { + const response = await fetch(currentChain.rpcUrl, { + method: 'POST', + body: JSON.stringify({ + id: '42', + method, + params + }) + }).then(res => res.json()) + + if (response.result) { + return response.result + } else { + throw response.error + } + } + const dcentProvider = { request } + const provider = createEIP1193Provider(dcentProvider, { + eth_requestAccounts: async () => { + // Triggers the account select modal if no accounts have been selected + const accounts = await getAccounts() + if (accounts.length === 0) { + throw new ProviderRpcError({ + code: ProviderRpcErrorCode.ACCOUNT_ACCESS_REJECTED, + message: 'User rejected the request.' + }) + } + return accounts[0] ? [accounts[0].address] : [] + }, + eth_selectAccounts: async () => { + const accounts = await getAccounts() + return accounts.map(({ address }) => address) + }, + eth_accounts: async () => { + return accounts && accounts[0].address ? [accounts[0].address] : [] + }, + eth_chainId: async () => { + return currentChain.id + }, + eth_signTransaction: async ({ params: [transactionObject] }) => { + if (!accounts) + throw new Error( + 'No account selected. Must call eth_requestAccounts first.' + ) + + if (!transactionObject) + throw new ProviderRpcError({ + message: 'Invalid method parameters', + code: ProviderRpcErrorCode.INVALID_PARAMS, + data: transactionObject + }) + + const account = + accounts.find( + account => account.address === transactionObject.from + ) || accounts[0] + + const { address: from } = account + + // Set the `from` field to the currently selected account + transactionObject = { ...transactionObject, from } + + // @ts-ignore -- Due to weird commonjs exports + const CommonConstructor = Common.default || Common + + const common = new CommonConstructor({ + chain: customNetwork || Number.parseInt(currentChain.id) || 1, + // Berlin is the minimum hardfork that will allow for EIP1559 + hardfork: Hardfork.Berlin, + // List of supported EIPS + eips: [1559] + }) + + transactionObject.gasLimit = + transactionObject.gas || transactionObject.gasLimit + + const transaction = Transaction.fromTxData( + { + ...transactionObject + }, + { common, freeze: false } + ) + + try { + const result = await dcentKeyring.signTransaction( + from, + transaction + ) + + // console.log(`0x${result.serialize().toString('hex')}`) + return `0x${result.serialize().toString('hex')}` + } catch (err) { + throw err + } + }, + eth_sendTransaction: async ({ baseRequest, params }) => { + const signedTx = await provider.request({ + method: 'eth_signTransaction', + params + }) as string + + const transactionHash = await baseRequest({ + method: 'eth_sendRawTransaction', + params: [signedTx] + }) as string + + return transactionHash + }, + eth_sign: async ({ params: [address, message] }) => { + if (!(accounts && accounts.length && accounts.length > 0)) + throw new Error( + 'No account selected. Must call eth_requestAccounts first.' + ) + + const account = + accounts.find(account => account.address === address) || + accounts[0] + + return dcentKeyring.signMessage(account.address, message) + }, + personal_sign: async ({ params: [message, address] }) => { + if (!(accounts && accounts.length && accounts.length > 0)) + throw new Error( + 'No account selected. Must call eth_requestAccounts first.' + ) + + const account = + accounts.find(account => account.address === address) || + accounts[0] + + return dcentKeyring.signPersonalMessage(account.address, message) + }, + eth_signTypedData: async ({ params: [address, typedData] }) => { + if (!(accounts && accounts.length && accounts.length > 0)) + throw new Error( + 'No account selected. Must call eth_requestAccounts first.' + ) + + const account = + accounts.find(account => account.address === address) || + accounts[0] + + const opt = { + version: "V4" + } + return dcentKeyring.signTypedData(account.address, typedData, opt) + }, + wallet_switchEthereumChain: async ({ params: [{ chainId }] }) => { + currentChain = + chains.find(({ id }) => id === chainId) || currentChain + if (!currentChain) + throw new Error('chain must be set before switching') + + eventEmitter.emit('chainChanged', currentChain.id) + return null + }, + wallet_addEthereumChain: null + }) + + provider.on = eventEmitter.on.bind(eventEmitter) + + return { + provider + } + + } + } + } +} + +export default dcent diff --git a/packages/dcent/tsconfig.json b/packages/dcent/tsconfig.json new file mode 100644 index 000000000..2d88134d0 --- /dev/null +++ b/packages/dcent/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*"], + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "declarationDir": "dist", + "paths": { + "*": ["./src/*", "./node_modules/*"] + }, + "typeRoots": ["node_modules/@types"], + "strict": false + } + } + \ No newline at end of file diff --git a/packages/demo/src/App.svelte b/packages/demo/src/App.svelte index a33a87ec3..1cd0ba67a 100644 --- a/packages/demo/src/App.svelte +++ b/packages/demo/src/App.svelte @@ -12,6 +12,7 @@ import walletConnectModule from '@web3-onboard/walletconnect' import coinbaseModule from '@web3-onboard/coinbase' import magicModule from '@web3-onboard/magic' + import dcentModule from '@web3-onboard/dcent' import { recoverAddress, arrayify, @@ -87,6 +88,8 @@ // for more info see the @web3-onboard/magic docs }) + const dcent = dcentModule() + const onboard = Onboard({ wallets: [ ledger, @@ -100,7 +103,8 @@ fortmatic, portis, torus, - gnosis + gnosis, + dcent ], chains: [ { diff --git a/packages/injected/src/wallets.ts b/packages/injected/src/wallets.ts index d6ab95014..b638c1b17 100644 --- a/packages/injected/src/wallets.ts +++ b/packages/injected/src/wallets.ts @@ -248,21 +248,6 @@ const blockwallet: InjectedWalletModule = { platforms: ['desktop'] } -const dcent: InjectedWalletModule = { - label: ProviderLabel.Dcent, - injectedNamespace: InjectedNameSpace.Ethereum, - checkProviderIdentity: ({ provider }) => - !!provider && !!provider[ProviderIdentityFlag.Dcent], - getIcon: async () => (await import('./icons/dcent.js')).default, - getInterface: async () => ({ - provider: createEIP1193Provider(window.ethereum, { - wallet_switchEthereumChain: UNSUPPORTED_METHOD, - eth_selectAccounts: UNSUPPORTED_METHOD - }) - }), - platforms: ['mobile'] -} - const frame: InjectedWalletModule = { label: ProviderLabel.Frame, injectedNamespace: InjectedNameSpace.Ethereum, @@ -491,7 +476,6 @@ const wallets = [ bitpie, blockwallet, brave, - dcent, frame, huobiwallet, hyperpay, diff --git a/packages/react/README.md b/packages/react/README.md index 84f1dd0a3..170f2f2cc 100644 --- a/packages/react/README.md +++ b/packages/react/README.md @@ -25,6 +25,7 @@ import portisModule from '@web3-onboard/portis' import fortmaticModule from '@web3-onboard/fortmatic' import torusModule from '@web3-onboard/torus' import keepkeyModule from '@web3-onboard/keepkey' +import dcentModule from '@web3-onboard/dcent' const injected = injectedModule() const coinbase = coinbaseModule() @@ -49,6 +50,8 @@ const trezorOptions = { const trezor = trezorModule(trezorOptions) +const dcent = dcentModule() + const web3Onboard = init({ wallets: [ injected, @@ -59,7 +62,8 @@ const web3Onboard = init({ keepkey, fortmatic, portis, - torus + torus, + dcent ], chains: [ { diff --git a/yarn.lock b/yarn.lock index fad265bae..67f99341a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -255,7 +255,7 @@ crc-32 "^1.2.0" ethereumjs-util "^7.1.4" -"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.6.3": +"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.3.1", "@ethereumjs/common@^2.6.3": version "2.6.3" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.3.tgz#39ddece7300b336276bad6c02f6a9f1a082caa05" integrity sha512-mQwPucDL7FDYIg9XQ8DL31CnIYZwGhU5hyOO5E+BMmT71G0+RHvIT5rIkLBirJEKxV6+Rcf9aEIY0kXInxUWpQ== @@ -271,6 +271,14 @@ "@ethereumjs/common" "^2.0.0" ethereumjs-util "^7.0.7" +"@ethereumjs/tx@3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.2.1.tgz#65f5f1c11541764f08377a94ba4b0dcbbd67739e" + integrity sha512-i9V39OtKvwWos1uVNZxdVhd7zFOyzFLjgt69CoiOY0EmXugS0HjO3uxpLBSglDKFMRriuGqw6ddKEv+RP1UNEw== + dependencies: + "@ethereumjs/common" "^2.3.1" + ethereumjs-util "^7.0.10" + "@ethereumjs/tx@3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.4.0.tgz#7eb1947eefa55eb9cf05b3ca116fb7a3dbd0bce7" @@ -3607,6 +3615,13 @@ data-urls@^1.1.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" +dcent-web-connector@^0.11.2: + version "0.11.3" + resolved "https://registry.yarnpkg.com/dcent-web-connector/-/dcent-web-connector-0.11.3.tgz#7decb528f4db16edfc199d0a45fd702920459ea7" + integrity sha512-5sXBLwthDWsieJeJa9zkqiP9aspybeD/fc1RLij1sfzR2vJjDeLDIfXJKyYc0Tqk73GijllrHpasgKxhO2qKEw== + dependencies: + events "^3.0.0" + debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -4335,6 +4350,15 @@ eth-crypto@^2.1.0: ethers "5.5.4" secp256k1 "4.0.3" +eth-dcent-keyring@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/eth-dcent-keyring/-/eth-dcent-keyring-0.2.2.tgz#4af7ccd9089411b0ca8366a7401a7c0d0acb6ef7" + integrity sha512-dPrR2Umx/OnOeycaoYx7O0Tzejzpya7dy0cx9+tjwsXTU8j1yIPfgUhfpHGX4k3xifK0u48OB47jyZdaGXNgVA== + dependencies: + "@ethereumjs/tx" "3.2.1" + dcent-web-connector "^0.11.2" + ethereumjs-util "7.0.9" + eth-ens-namehash@2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" @@ -4560,6 +4584,18 @@ ethereumjs-util@5.2.0: safe-buffer "^5.1.1" secp256k1 "^3.0.1" +ethereumjs-util@7.0.9: + version "7.0.9" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.9.tgz#2038baeb30f370a3e576ec175bd70bbbb6807d42" + integrity sha512-cRqvYYKJoitq6vMKMf8pXeVwvTrX+dRD0JwHaYqm8jvogK14tqIoCWH/KUHcRwnVxVXEYF/o6pup5jRG4V0xzg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.4" + ethereumjs-util@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23" From d5bd4ab275a3adeb8fbe72a4b8ba06f5f34fa535 Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Mon, 6 Jun 2022 15:03:02 -0600 Subject: [PATCH 02/17] [dcent - v1.0.0-alpha.1, injected v2.0.8-alpha.1] : Update - CI and cleanup (#1041) * Remove unneeded code and logs, formatted file, incremented version for injected wallets for removal of dcent injected, added CI --- .circleci/config.yml | 18 +++++++++++++ packages/dcent/src/index.ts | 47 +++++++++++++++------------------- packages/injected/package.json | 2 +- 3 files changed, 40 insertions(+), 27 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0d39a348b..40c720b78 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -267,6 +267,12 @@ jobs: working_directory: ~/web3-onboard-monorepo/packages/coinbase steps: - node-build-steps + build-dcent: + docker: + - image: cimg/node:16.13.1 + working_directory: ~/web3-onboard-monorepo/packages/dcent + steps: + - node-build-steps # Build staging/Alpha releases build-staging-core: @@ -371,6 +377,12 @@ jobs: working_directory: ~/web3-onboard-monorepo/packages/coinbase steps: - node-staging-build-steps + build-staging-dcent: + docker: + - image: cimg/node:16.13.1 + working_directory: ~/web3-onboard-monorepo/packages/dcent + steps: + - node-staging-build-steps workflows: version: 2 @@ -477,3 +489,9 @@ workflows: <<: *deploy_production_filters - build-staging-coinbase: <<: *deploy_staging_filters + dcent: + jobs: + - build-dcent: + <<: *deploy_production_filters + - build-staging-dcent: + <<: *deploy_staging_filters diff --git a/packages/dcent/src/index.ts b/packages/dcent/src/index.ts index 56e68c2fc..14ad919a0 100644 --- a/packages/dcent/src/index.ts +++ b/packages/dcent/src/index.ts @@ -35,7 +35,7 @@ const generateAccounts = async ( provider: providers.StaticJsonRpcProvider ): Promise => { const accounts = [] - + const addressList = await keyring.addAccounts() const derivationPath = DEFAULT_BASE_PATH const account = { @@ -48,8 +48,7 @@ const generateAccounts = async ( } accounts.push(account) - - // console.log('generateAccounts/accounts = ', accounts) + return accounts } @@ -62,25 +61,26 @@ function dcent({ return helpers => { const { device } = helpers const isMobile = device.type === 'mobile' - // console.log('device.type ', device.type) let accounts: Account[] | undefined return { - label: 'D\'CENT', + label: "D'CENT", getIcon, getInterface: async ({ EventEmitter, chains }) => { - const eventEmitter = new EventEmitter() if (isMobile) { - const provider = window.ethereum as EIP1193Provider - if(isMobile && (!provider)) { - location.replace("https://link.dcentwallet.com/DAppBrowser/?url=" + document.location) + const provider = window.ethereum as EIP1193Provider + if (isMobile && !provider) { + location.replace( + 'https://link.dcentwallet.com/DAppBrowser/?url=' + + document.location + ) } provider.on = eventEmitter.on.bind(eventEmitter) return { provider } - } + } const { StaticJsonRpcProvider } = await import( '@ethersproject/providers' @@ -89,23 +89,20 @@ function dcent({ const { default: EthDcentKeyring } = await import('eth-dcent-keyring') const dcentKeyring = new EthDcentKeyring({}) - - // console.log('dcentKeyring ', dcentKeyring) + const { TransactionFactory: Transaction } = await import( '@ethereumjs/tx' ) - + let currentChain: Chain = chains[0] const scanAccounts = async ({ - derivationPath, - chainId, - asset + chainId }: ScanAccountsOptions): Promise => { currentChain = chains.find(({ id }: Chain) => id === chainId) || currentChain const provider = new StaticJsonRpcProvider(currentChain.rpcUrl) - + return generateAccounts(dcentKeyring, provider) } @@ -218,23 +215,22 @@ function dcent({ from, transaction ) - - // console.log(`0x${result.serialize().toString('hex')}`) + return `0x${result.serialize().toString('hex')}` } catch (err) { throw err } }, eth_sendTransaction: async ({ baseRequest, params }) => { - const signedTx = await provider.request({ + const signedTx = (await provider.request({ method: 'eth_signTransaction', params - }) as string + })) as string - const transactionHash = await baseRequest({ + const transactionHash = (await baseRequest({ method: 'eth_sendRawTransaction', params: [signedTx] - }) as string + })) as string return transactionHash }, @@ -273,7 +269,7 @@ function dcent({ accounts[0] const opt = { - version: "V4" + version: 'V4' } return dcentKeyring.signTypedData(account.address, typedData, opt) }, @@ -290,11 +286,10 @@ function dcent({ }) provider.on = eventEmitter.on.bind(eventEmitter) - + return { provider } - } } } diff --git a/packages/injected/package.json b/packages/injected/package.json index 5e38bac98..7d9fb1969 100644 --- a/packages/injected/package.json +++ b/packages/injected/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/injected-wallets", - "version": "2.0.7", + "version": "2.0.8-alpha.1", "description": "Injected wallets module for web3-onboard", "module": "dist/index.js", "browser": "dist/index.js", From d4fed9f4427eb41dd7117848d0bed617a6ee7f06 Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Mon, 6 Jun 2022 16:13:12 -0600 Subject: [PATCH 03/17] [DCent - v1.0.0-alpha.1] : fix - Update types (#1042) * Remove unneeded code and logs, formatted file, incremented version for injected wallets for removal of dcent injected, added CI * More cleanup * cleanup types --- packages/dcent/src/index.ts | 6 +++++- packages/injected/src/types.ts | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/dcent/src/index.ts b/packages/dcent/src/index.ts index 14ad919a0..51a2ba4bb 100644 --- a/packages/dcent/src/index.ts +++ b/packages/dcent/src/index.ts @@ -12,7 +12,11 @@ import { } from '@web3-onboard/common' import type { providers } from 'ethers' -import type { CustomWindow } from '@web3-onboard/injected-wallets/src/types' + +interface CustomWindow extends Window { + ethereum: EIP1193Provider +} + declare const window: CustomWindow const DEFAULT_BASE_PATH = "m/44'/60'/0'/0/0" diff --git a/packages/injected/src/types.ts b/packages/injected/src/types.ts index 655fb89c1..2eddf8276 100644 --- a/packages/injected/src/types.ts +++ b/packages/injected/src/types.ts @@ -92,7 +92,6 @@ export enum InjectedNameSpace { XFI = 'xfi' } -// Arbitrum = 'arbitrum' export interface CustomWindow extends Window { BinanceChain: BinanceProvider ethereum: InjectedProvider From 793d8da200395863dc5fef834eca5abdd382cbc4 Mon Sep 17 00:00:00 2001 From: Aaron Cook Date: Tue, 7 Jun 2022 01:53:24 +0200 Subject: [PATCH 04/17] refactor: upgrade to React 18 + add `useAppState` (#915) * refactor: upgrade to React 18 + add `useAppState` * fix: remove unnecessary comma + types version * fix: memoize callbacks * fix: use new types * fix: adjust dependencies + add shim * Merge branch 'v2-web3-onboard-develop' into refactor/useappstate * fix: shim import + `useSetChain` return * package bump * Delete yarn-error.log * package bump * package bump Co-authored-by: Mahmud Co-authored-by: Mahmud <104795334+mahmud-bn@users.noreply.github.com> --- packages/react/package.json | 15 +++-- packages/react/src/index.ts | 120 +++++++++++++++++------------------- yarn.lock | 25 ++++++-- 3 files changed, 86 insertions(+), 74 deletions(-) diff --git a/packages/react/package.json b/packages/react/package.json index df20c5b95..cf8e0efa2 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/react", - "version": "2.1.7", + "version": "2.1.7-alpha.1", "description": "Collection of React Hooks for web3-onboard", "module": "dist/index.js", "browser": "dist/index.js", @@ -17,14 +17,17 @@ }, "license": "MIT", "devDependencies": { - "@types/react": "^17.0.39", + "@types/react": "^18.0.2", + "@types/use-sync-external-store": "^0.0.3", + "react": "^18.0.0", "typescript": "^4.5.5" }, "dependencies": { - "@web3-onboard/core": "^2.2.9", - "@web3-onboard/common": "^2.1.0" + "@web3-onboard/core": "^2.2.10", + "@web3-onboard/common": "^2.1.0-alpha.1", + "use-sync-external-store": "1.0.0" }, "peerDependencies": { - "react": "^17.0.2" + "react": ">=16.8" } -} +} \ No newline at end of file diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 23d9e7c7a..9d83b45bf 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -1,4 +1,5 @@ -import { useEffect, useState, useCallback, useMemo } from 'react' +import { useState, useCallback } from 'react' +import { useSyncExternalStore } from 'use-sync-external-store/shim' import Web3Onboard from '@web3-onboard/core' import type { @@ -9,8 +10,8 @@ import type { WalletState, ConnectedChain } from '@web3-onboard/core' - -import { Chain } from '@web3-onboard/common' +import type { Chain } from '@web3-onboard/common' +import type { AppState } from '@web3-onboard/core/dist/types' export let web3Onboard: OnboardAPI | null = null @@ -19,43 +20,62 @@ export const init = (options: InitOptions): OnboardAPI => { return web3Onboard } +const HOOK_ERROR_MESSAGE = 'Must initialize before using hooks.' + +const useAppState: { + (): AppState + (stateKey?: K): AppState[K] +} = (stateKey = undefined) => { + if (!web3Onboard) throw new Error(HOOK_ERROR_MESSAGE) + + const { select, get } = web3Onboard.state + + const subscribe = useCallback( + (onStoreChange: () => void) => { + const { unsubscribe } = stateKey + ? select(stateKey).subscribe(onStoreChange) + : select().subscribe(onStoreChange) + + return () => unsubscribe + }, + [stateKey] + ) + + const getSnapshot = useCallback(() => { + const snapshot = get() + return stateKey ? snapshot[stateKey] : snapshot + }, [stateKey]) + + return useSyncExternalStore(subscribe, getSnapshot) +} + export const useConnectWallet = (): [ { wallet: WalletState | null; connecting: boolean }, - (options: ConnectOptions) => Promise, + (options?: ConnectOptions) => Promise, (wallet: DisconnectOptions) => Promise ] => { - if (!web3Onboard) throw new Error('Must initialize before using hooks.') + if (!web3Onboard) throw new Error(HOOK_ERROR_MESSAGE) - const [wallet, setConnectedWallet] = useState( - () => (web3Onboard as OnboardAPI).state.get().wallets[0] || null - ) - const [connecting, setConnecting] = useState(false) + const { connectWallet, disconnectWallet } = web3Onboard - useEffect(() => { - const subscription = (web3Onboard as OnboardAPI).state - .select('wallets') - .subscribe(wallets => setConnectedWallet(wallets[0] || null)) + const wallets = useAppState('wallets') + const wallet = wallets[0] || null - return () => subscription.unsubscribe() - }, [wallet]) + const [connecting, setConnecting] = useState(false) - const connect = useCallback(async (options: ConnectOptions) => { + const connect = useCallback(async (options?: ConnectOptions) => { setConnecting(true) - const [connectedWallet] = await (web3Onboard as OnboardAPI).connectWallet( - options - ) + await connectWallet(options) setConnecting(false) - setConnectedWallet(connectedWallet || null) }, []) - const disconnect = useCallback(async ({ label }) => { + const disconnect = useCallback(async ({ label }: DisconnectOptions) => { setConnecting(true) - await (web3Onboard as OnboardAPI).disconnectWallet({ label }) + await disconnectWallet({ label }) - setConnectedWallet(null) setConnecting(false) }, []) @@ -77,63 +97,35 @@ export const useSetChain = ( }, (options: SetChainOptions) => Promise ] => { - if (!web3Onboard) throw new Error('Must initialize before using hooks.') + if (!web3Onboard) throw new Error(HOOK_ERROR_MESSAGE) - const { state, setChain } = web3Onboard as OnboardAPI - const [settingChain, setInProgress] = useState(false) - - const [connectedChain, setConnectedChain] = useState( - () => { - const initialWallets = (web3Onboard as OnboardAPI).state.get().wallets - if (initialWallets.length === 0) return null - return ( - ( - initialWallets.find(({ label }) => label === walletLabel) || - initialWallets[0] - ).chains[0] || null - ) - } - ) + const { setChain } = web3Onboard - const chains = useMemo(() => state.get().chains, []) + const { wallets, chains } = useAppState() - useEffect(() => { - const subscription = state.select('wallets').subscribe(wallets => { - const wallet = - wallets.find(({ label }) => label === walletLabel) || wallets[0] + const connectedChain = + (walletLabel + ? wallets.find(({ label }) => label === walletLabel) + : wallets[0] + )?.chains[0] || null - wallet && setConnectedChain(wallet.chains[0]) - }) - - return () => subscription.unsubscribe() - }, []) + const [settingChain, setInProgress] = useState(false) - const set = useCallback(async (options: SetChainOptions): Promise => { + const set = useCallback(async (options: SetChainOptions) => { setInProgress(true) const success = await setChain({ ...options, wallet: walletLabel }) setInProgress(false) - return success; + return success }, []) return [{ chains, connectedChain, settingChain }, set] } export const useWallets = (): WalletState[] => { - if (!web3Onboard) throw new Error('Must initialize before using hooks.') - - const [wallets, setConnectedWallets] = useState( - () => (web3Onboard as OnboardAPI).state.get().wallets - ) - - useEffect(() => { - const wallets$ = (web3Onboard as OnboardAPI).state.select('wallets') - const subscription = wallets$.subscribe(setConnectedWallets) - - return () => subscription.unsubscribe() - }, []) + if (!web3Onboard) throw new Error(HOOK_ERROR_MESSAGE) - return wallets + return useAppState('wallets') } diff --git a/yarn.lock b/yarn.lock index 67f99341a..ce95f5559 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1649,10 +1649,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react@^17.0.39": - version "17.0.43" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.43.tgz#4adc142887dd4a2601ce730bc56c3436fdb07a55" - integrity sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A== +"@types/react@^18.0.2": + version "18.0.9" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.9.tgz#d6712a38bd6cd83469603e7359511126f122e878" + integrity sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -1711,6 +1711,11 @@ dependencies: "@types/node" "*" +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + "@types/ws@^8.2.2": version "8.2.3" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.2.3.tgz#0bca6b03ba2f41e0fab782d4a573fe284aa907ae" @@ -7782,6 +7787,13 @@ react@16.13.1: object-assign "^4.1.1" prop-types "^15.6.2" +react@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.0.0.tgz#b468736d1f4a5891f38585ba8e8fb29f91c3cb96" + integrity sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A== + dependencies: + loose-envify "^1.1.0" + readable-stream@^1.0.33: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -9218,6 +9230,11 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-sync-external-store@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.0.0.tgz#d98f4a9c2e73d0f958e7e2d2c2bfb5f618cbd8fd" + integrity sha512-AFVsxg5GkFg8GDcxnl+Z0lMAz9rE8DGJCc28qnBuQF7lac57B5smLcT37aXpXIIPz75rW4g3eXHPjhHwdGskOw== + utf-8-validate@^5.0.2: version "5.0.8" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.8.tgz#4a735a61661dbb1c59a0868c397d2fe263f14e58" From 82a568a3899f2679b3b357ae80524de98add1906 Mon Sep 17 00:00:00 2001 From: Mahmud <104795334+mahmud-bn@users.noreply.github.com> Date: Mon, 6 Jun 2022 19:09:04 -0600 Subject: [PATCH 05/17] [react-v2.1.8-alpha.1]: fix - package bump (#1043) * package bump --- packages/react/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/package.json b/packages/react/package.json index cf8e0efa2..18efd4186 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/react", - "version": "2.1.7-alpha.1", + "version": "2.1.8-alpha.1", "description": "Collection of React Hooks for web3-onboard", "module": "dist/index.js", "browser": "dist/index.js", From 7097282eb36da3e7edf7d637f579e97b25592300 Mon Sep 17 00:00:00 2001 From: applicature-dlitvinov <101503007+applicature-dlitvinov@users.noreply.github.com> Date: Tue, 7 Jun 2022 17:42:31 +0300 Subject: [PATCH 06/17] [fix] fix connect wallet with disableModal flag (#1033) * [fix] fix connect wallet with disableModal flag * fix(#1032): update package version --- packages/core/package.json | 2 +- packages/core/src/views/connect/Index.svelte | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/core/package.json b/packages/core/package.json index 94e49f2d8..ed04ffe73 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/core", - "version": "2.2.10", + "version": "2.2.11-alpha.1", "scripts": { "build": "rollup -c", "dev": "rollup -c -w", diff --git a/packages/core/src/views/connect/Index.svelte b/packages/core/src/views/connect/Index.svelte index d71867ec8..95dbd8b6d 100644 --- a/packages/core/src/views/connect/Index.svelte +++ b/packages/core/src/views/connect/Index.svelte @@ -193,6 +193,10 @@ connectionRejected = true if (autoSelect) { walletToAutoSelect = null + + if (autoSelect.disableModals) { + connectWallet$.next({ inProgress: false }) + } } return } From fd145dec39c7315d2d2fe2a2d010b4f5d05c9288 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Jun 2022 08:53:18 -0600 Subject: [PATCH 07/17] Bump cross-fetch from 2.2.5 to 2.2.6 (#981) Bumps [cross-fetch](https://github.com/lquixada/cross-fetch) from 2.2.5 to 2.2.6. - [Release notes](https://github.com/lquixada/cross-fetch/releases) - [Commits](https://github.com/lquixada/cross-fetch/compare/v2.2.5...v2.2.6) --- updated-dependencies: - dependency-name: cross-fetch dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index ce95f5559..fcc8a7834 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3492,12 +3492,12 @@ cross-env@^7.0.3: cross-spawn "^7.0.1" cross-fetch@^2.1.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.5.tgz#afaf5729f3b6c78d89c9296115c9f142541a5705" - integrity sha512-xqYAhQb4NhCJSRym03dwxpP1bYXpK3y7UN83Bo2WFi3x1Zmzn0SL/6xGoPr+gpt4WmNrgCCX3HPysvOwFOW36w== + version "2.2.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.6.tgz#2ef0bb39a24ac034787965c457368a28730e220a" + integrity sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA== dependencies: - node-fetch "2.6.1" - whatwg-fetch "2.0.4" + node-fetch "^2.6.7" + whatwg-fetch "^2.0.4" cross-fetch@^3.1.4: version "3.1.5" @@ -6883,12 +6883,7 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1: +node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -10086,7 +10081,7 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" -whatwg-fetch@2.0.4: +whatwg-fetch@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== From e47459b3f60b848954774b0ddfe1fe8472743e26 Mon Sep 17 00:00:00 2001 From: Mahmud <104795334+mahmud-bn@users.noreply.github.com> Date: Tue, 7 Jun 2022 09:47:44 -0600 Subject: [PATCH 08/17] [core-v2.2.11-alpha.2 , react-v2.1.8-alpha.2]: enhancement - update connected wallets balance (#1038) * async * updatedBalances * update_balance * update balances * merge develop * cleanup * cleanup * cleanup * Readme update * Readme update * cleanup * package bump * package bump and merge develop * package bump * core version bump --- packages/core/README.md | 12 ++++++++++ packages/core/package.json | 2 +- packages/core/src/index.ts | 6 +++-- packages/core/src/store/actions.ts | 24 +++++++++++++++++--- packages/core/src/store/constants.ts | 1 + packages/core/src/store/index.ts | 17 +++++++++++--- packages/core/src/types.ts | 6 +++++ packages/core/src/updateBalances.ts | 33 ++++++++++++++++++++++++++++ packages/core/src/validation.ts | 8 ++++++- packages/demo/src/App.svelte | 3 +++ packages/react/package.json | 4 ++-- yarn.lock | 25 +++++++++++++++++++++ 12 files changed, 129 insertions(+), 12 deletions(-) create mode 100644 packages/core/src/updateBalances.ts diff --git a/packages/core/README.md b/packages/core/README.md index f8b17bc92..a6f43fcc9 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -416,6 +416,18 @@ const onboard = Onboard({ onboard.state.actions.setWalletModules([ledger, trezor]) ``` +**updatedBalances** +You may decide to get updated balances for connected wallets after a user action by calling the `updatedBalances` function, which expects a conditional array of addresses. + +``` +onboard.state.actions.updateBalances() // update all balances for all connected addresses +onboard.state.actions.updateBalances(['0xfdadfadsadsadsadasdsa']) // update balance for one address +onboard.state.actions.updateBalances([ + '0xfdadfadsadsadsadasdsa', + '0xfdsafdsfdsfdsfds' +]) // update balance for two addresses +``` + ## Setting the User's Chain/Network When initializing Onboard you define a list of chains/networks that your app supports. If you would like to prompt the user to switch to one of those chains, you can use the `setChain` method on an initialized instance of Onboard: diff --git a/packages/core/package.json b/packages/core/package.json index ed04ffe73..4de695732 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/core", - "version": "2.2.11-alpha.1", + "version": "2.2.11-alpha.2", "scripts": { "build": "rollup -c", "dev": "rollup -c -w", diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index b32dcdb3e..20405eafb 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -17,6 +17,7 @@ import App from './views/Index.svelte' import type { InitOptions, OnboardAPI } from './types' import { APP_INITIAL_STATE } from './constants' import { internalState } from './internals' +import updateBalances from './updateBalances' const API = { connectWallet, @@ -27,7 +28,8 @@ const API = { select: state.select, actions: { setWalletModules, - setLocale + setLocale, + updateBalances } } } @@ -224,4 +226,4 @@ function mountApp() { return app } -export default init +export default init \ No newline at end of file diff --git a/packages/core/src/store/actions.ts b/packages/core/src/store/actions.ts index f326071c4..db6b4cf0f 100644 --- a/packages/core/src/store/actions.ts +++ b/packages/core/src/store/actions.ts @@ -13,7 +13,8 @@ import type { UpdateAccountAction, UpdateAccountCenterAction, UpdateWalletAction, - WalletState + WalletState, + UpdateAllWalletsAction } from '../types' import { @@ -21,7 +22,8 @@ import { validateLocale, validateString, validateWallet, - validateWalletInit + validateWalletInit, + validateUpdateBalances } from '../validation' import { @@ -33,7 +35,8 @@ import { UPDATE_ACCOUNT, UPDATE_ACCOUNT_CENTER, SET_WALLET_MODULES, - SET_LOCALE + SET_LOCALE, + UPDATE_ALL_WALLETS } from './constants' import { internalState } from '../internals' @@ -177,6 +180,21 @@ export function setLocale(locale: string): void { dispatch(action as SetLocaleAction) } +export function updateAllWallets(wallets: WalletState[]): void { + const error = validateUpdateBalances(wallets) + + if (error) { + throw error + } + + const action = { + type: UPDATE_ALL_WALLETS, + payload: wallets + } + + dispatch(action as UpdateAllWalletsAction) +} + // ==== HELPERS ==== // export function initializeWalletModules(modules: WalletInit[]): WalletModule[] { const { device } = internalState diff --git a/packages/core/src/store/constants.ts b/packages/core/src/store/constants.ts index 7fe7e89a9..b54afcef3 100644 --- a/packages/core/src/store/constants.ts +++ b/packages/core/src/store/constants.ts @@ -7,3 +7,4 @@ export const UPDATE_ACCOUNT = 'update_account' export const UPDATE_ACCOUNT_CENTER = 'update_account_center' export const SET_WALLET_MODULES = 'set_wallet_modules' export const SET_LOCALE= 'set_locale' +export const UPDATE_ALL_WALLETS = 'update_balance' diff --git a/packages/core/src/store/index.ts b/packages/core/src/store/index.ts index 1dee9ccec..d7e45f45a 100644 --- a/packages/core/src/store/index.ts +++ b/packages/core/src/store/index.ts @@ -14,7 +14,8 @@ import type { AddWalletAction, UpdateAccountAction, UpdateAccountCenterAction, - Locale + Locale, + UpdateAllWalletsAction } from '../types' import { @@ -26,7 +27,8 @@ import { UPDATE_ACCOUNT, UPDATE_ACCOUNT_CENTER, SET_WALLET_MODULES, - SET_LOCALE + SET_LOCALE, + UPDATE_ALL_WALLETS } from './constants' function reducer(state: AppState, action: Action): AppState { @@ -102,6 +104,14 @@ function reducer(state: AppState, action: Action): AppState { } } + case UPDATE_ALL_WALLETS : { + const updatedWallets = payload as UpdateAllWalletsAction['payload'] + return { + ...state, + wallets: updatedWallets + } + } + case UPDATE_ACCOUNT_CENTER: { const update = payload as UpdateAccountCenterAction['payload'] return { @@ -112,6 +122,7 @@ function reducer(state: AppState, action: Action): AppState { } } } + case SET_WALLET_MODULES: { return { ...state, @@ -175,4 +186,4 @@ function get(): AppState { export const state = { select, get -} +} \ No newline at end of file diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 1abb83b81..2ede5aecf 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -136,6 +136,7 @@ export type Action = | UpdateAccountCenterAction | SetWalletModulesAction | SetLocaleAction + | UpdateAllWalletsAction export type AddChainsAction = { type: 'add_chains'; payload: Chain[] } export type AddWalletAction = { type: 'add_wallet'; payload: WalletState } @@ -175,6 +176,11 @@ export type SetLocaleAction = { payload: string } +export type UpdateAllWalletsAction = { + type: 'update_balance' + payload: WalletState[] +} + // ==== MISC ==== // export type ChainStyle = { icon: string diff --git a/packages/core/src/updateBalances.ts b/packages/core/src/updateBalances.ts new file mode 100644 index 000000000..b2a82ec14 --- /dev/null +++ b/packages/core/src/updateBalances.ts @@ -0,0 +1,33 @@ +import { state } from './store' +import { getBalance } from './provider' +import { updateAllWallets } from './store/actions' + +async function updateBalances(addresses?: string[]): Promise { + const { wallets, chains } = state.get() + + const updatedWallets = await Promise.all( + wallets.map(async wallet => { + const chain = chains.find(({ id }) => id === wallet.chains[0].id) + + const updatedAccounts = await Promise.all( + wallet.accounts.map(async account => { + // if no provided addresses, we want to update all balances + // otherwise check if address is in addresses array + if (!addresses || addresses.includes(account.address)) { + + const updatedBalance = await getBalance(account.address, chain) + + return { ...account, balance: updatedBalance } + } + + return account + }) + ) + return { ...wallet, accounts: updatedAccounts } + }) + ) + + updateAllWallets(updatedWallets) +} + +export default updateBalances \ No newline at end of file diff --git a/packages/core/src/validation.ts b/packages/core/src/validation.ts index 85a40942b..5fa2111ac 100644 --- a/packages/core/src/validation.ts +++ b/packages/core/src/validation.ts @@ -13,7 +13,6 @@ import type { const chainId = Joi.string().pattern(/^0x[0-9a-fA-F]+$/) const chainNamespace = Joi.string().valid('evm') const unknownObject = Joi.object().unknown() -// const address = Joi.string().regex(/^0x[a-fA-F0-9]{40}$/) const chain = Joi.object({ namespace: chainNamespace, @@ -65,6 +64,8 @@ const wallet = Joi.object({ chains: Joi.array().items(connectedChain) }) +const wallets = Joi.array().items(wallet) + const recommendedWallet = Joi.object({ name: Joi.string().required(), url: Joi.string().uri().required() @@ -209,3 +210,8 @@ export function validateWalletInit(data: WalletInit[]): ValidateReturn { export function validateLocale(data: string): ValidateReturn { return validate(locale, data) } + +export function validateUpdateBalances(data: +WalletState[]): ValidateReturn { + return validate(wallets, data) +} \ No newline at end of file diff --git a/packages/demo/src/App.svelte b/packages/demo/src/App.svelte index 1cd0ba67a..fbc63a4db 100644 --- a/packages/demo/src/App.svelte +++ b/packages/demo/src/App.svelte @@ -276,6 +276,9 @@ + {/if} {#if $wallets$} diff --git a/packages/react/package.json b/packages/react/package.json index 18efd4186..d4368d35e 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/react", - "version": "2.1.8-alpha.1", + "version": "2.1.8-alpha.2", "description": "Collection of React Hooks for web3-onboard", "module": "dist/index.js", "browser": "dist/index.js", @@ -23,7 +23,7 @@ "typescript": "^4.5.5" }, "dependencies": { - "@web3-onboard/core": "^2.2.10", + "@web3-onboard/core": "^2.2.11-alpha.2", "@web3-onboard/common": "^2.1.0-alpha.1", "use-sync-external-store": "1.0.0" }, diff --git a/yarn.lock b/yarn.lock index fcc8a7834..9c8cce184 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2079,6 +2079,31 @@ dependencies: "@walletconnect/window-getters" "^1.0.0" +"@web3-onboard/core@^2.2.10-alpha.1", "@web3-onboard/core@^2.2.9": + version "2.2.10" + resolved "https://registry.yarnpkg.com/@web3-onboard/core/-/core-2.2.10.tgz#61dcc912062548db38d67e228637a27c59122080" + integrity sha512-sQF14OkT+4ibefXPQ7ueZW7DcKbbCzQXZW64FZ+ETEpgKCYjVarqpcMlp5YB4jv49cWWqM8qXRoskaqz01PktQ== + dependencies: + "@web3-onboard/common" "^2.1.0" + bowser "^2.11.0" + ethers "5.5.3" + eventemitter3 "^4.0.7" + joi "17.6.0" + lodash.merge "^4.6.2" + lodash.partition "^4.6.0" + rxjs "^7.5.2" + svelte "^3.46.4" + svelte-i18n "^3.3.13" + +"@web3-onboard/injected-wallets@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@web3-onboard/injected-wallets/-/injected-wallets-2.0.7.tgz#d0f29adbf96b95b45bffb495fdd0c56821378e3d" + integrity sha512-jP7e6jpM2y/m88AxT40m3Nzc378gEympUXaKU1BESq1DWWJSkjNsaYKdp/2ADTajHUqoPB99jwiAPB0DNs2dLg== + dependencies: + "@web3-onboard/common" "^2.0.7" + joi "^17.4.2" + lodash.uniqby "^4.7.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From 7543b6e6c65678aa518787fe7f082959897c2275 Mon Sep 17 00:00:00 2001 From: Connor Mulhall <43109407+conwayconstar@users.noreply.github.com> Date: Wed, 8 Jun 2022 16:09:00 +0100 Subject: [PATCH 09/17] fix(keystone): use let for AirGappedKeyring const (#1047) * fix(keystone): use let for AirGappedKeyring const * chore(keystone): update package.json for Patch * chore(keystone): update version to 2.1.1-alpha.1 Co-authored-by: Taylor Dawson --- packages/keystone/package.json | 2 +- packages/keystone/src/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/keystone/package.json b/packages/keystone/package.json index 69ed57421..b2ef8369a 100644 --- a/packages/keystone/package.json +++ b/packages/keystone/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/keystone", - "version": "2.1.0", + "version": "2.1.1-alpha.1", "description": "Keystone module for web3-onboard", "module": "dist/index.js", "typings": "dist/index.d.ts", diff --git a/packages/keystone/src/index.ts b/packages/keystone/src/index.ts index a0693b441..a515c7947 100644 --- a/packages/keystone/src/index.ts +++ b/packages/keystone/src/index.ts @@ -79,7 +79,7 @@ function keystone({ '@ethersproject/providers' ) - const { default: AirGappedKeyring } = await import( + let { default: AirGappedKeyring } = await import( '@keystonehq/eth-keyring' ) From 8a3b72e93aafeb3522bf6f5d3b27c0a9bfb102b1 Mon Sep 17 00:00:00 2001 From: Mahmud <104795334+mahmud-bn@users.noreply.github.com> Date: Wed, 8 Jun 2022 17:31:44 -0600 Subject: [PATCH 10/17] [core-v2.2.11-alpha.3]: enhancement - add border-radius CSS variables (#1046) * border-styling-addition * merge develop --- packages/core/src/views/account-center/Maximized.svelte | 4 ++-- packages/core/src/views/connect/WalletButton.svelte | 5 ++++- packages/demo/src/App.svelte | 2 +- packages/react/package.json | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/core/src/views/account-center/Maximized.svelte b/packages/core/src/views/account-center/Maximized.svelte index 2553ed442..2f8d69a58 100644 --- a/packages/core/src/views/account-center/Maximized.svelte +++ b/packages/core/src/views/account-center/Maximized.svelte @@ -58,7 +58,7 @@ .wallets-section { width: 100%; - border-radius: 16px; + border-radius: var(--onboard-border-radius-3, var(--border-radius-3)); } .p5 { @@ -117,7 +117,7 @@ .network-container { margin: 0 1px 1px 1px; - border-radius: 15px; + border-radius: var(--onboard-border-radius-3, var(--border-radius-3)); color: var(--onboard-gray-500, var(--gray-500)); } diff --git a/packages/core/src/views/connect/WalletButton.svelte b/packages/core/src/views/connect/WalletButton.svelte index a458a674c..fa56d3eec 100644 --- a/packages/core/src/views/connect/WalletButton.svelte +++ b/packages/core/src/views/connect/WalletButton.svelte @@ -47,7 +47,10 @@ } button.wallet-button-styling { - border-radius: var(--onboard-wallet-button-border-radius, var(--border-radius-1)); + border-radius: var( + --onboard-wallet-button-border-radius, + var(--border-radius-1) + ); box-shadow: var(--onboard-wallet-button-box-shadow, var(--box-shadow-0)); } diff --git a/packages/demo/src/App.svelte b/packages/demo/src/App.svelte index fbc63a4db..02e922574 100644 --- a/packages/demo/src/App.svelte +++ b/packages/demo/src/App.svelte @@ -104,7 +104,7 @@ portis, torus, gnosis, - dcent + dcent ], chains: [ { diff --git a/packages/react/package.json b/packages/react/package.json index d4368d35e..63e78d0e8 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -23,7 +23,7 @@ "typescript": "^4.5.5" }, "dependencies": { - "@web3-onboard/core": "^2.2.11-alpha.2", + "@web3-onboard/core": "^2.2.11-alpha.3", "@web3-onboard/common": "^2.1.0-alpha.1", "use-sync-external-store": "1.0.0" }, From 1707499260af35374196d83087e6f8912520b39c Mon Sep 17 00:00:00 2001 From: Mahmud <104795334+mahmud-bn@users.noreply.github.com> Date: Wed, 8 Jun 2022 18:02:08 -0600 Subject: [PATCH 11/17] [core-v2.2.11-alpha.3]: Fix - core package bump (#1048) * border-styling-addition * merge develop * core bump --- packages/core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/package.json b/packages/core/package.json index 4de695732..c0e197561 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/core", - "version": "2.2.11-alpha.2", + "version": "2.2.11-alpha.3", "scripts": { "build": "rollup -c", "dev": "rollup -c -w", From c93fb6c6e97ff78f671a8e909d484b14c76e3d04 Mon Sep 17 00:00:00 2001 From: Aaron Barnard Date: Thu, 9 Jun 2022 10:15:52 +1000 Subject: [PATCH 12/17] Fixes clashing svg vars (#1050) --- packages/dcent/package.json | 2 +- packages/dcent/src/icon.ts | 23 +++++++++++------------ packages/injected/package.json | 2 +- packages/injected/src/icons/dcent.ts | 21 ++++++++++----------- yarn.lock | 12 +++++++++++- 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/packages/dcent/package.json b/packages/dcent/package.json index af2d0a429..440f4f157 100644 --- a/packages/dcent/package.json +++ b/packages/dcent/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/dcent", - "version": "1.0.0-alpha.1", + "version": "2.0.0-alpha.2", "description": "D'CENT module for web3-onboard", "module": "dist/index.js", "typings": "dist/index.d.ts", diff --git a/packages/dcent/src/icon.ts b/packages/dcent/src/icon.ts index a84338fed..0d38f3890 100644 --- a/packages/dcent/src/icon.ts +++ b/packages/dcent/src/icon.ts @@ -1,23 +1,22 @@ - -export default ` - + - - + - - - + -` \ No newline at end of file +` diff --git a/packages/injected/package.json b/packages/injected/package.json index 7d9fb1969..a10473e1b 100644 --- a/packages/injected/package.json +++ b/packages/injected/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/injected-wallets", - "version": "2.0.8-alpha.1", + "version": "2.0.8-alpha.2", "description": "Injected wallets module for web3-onboard", "module": "dist/index.js", "browser": "dist/index.js", diff --git a/packages/injected/src/icons/dcent.ts b/packages/injected/src/icons/dcent.ts index 949bb98fc..0d38f3890 100644 --- a/packages/injected/src/icons/dcent.ts +++ b/packages/injected/src/icons/dcent.ts @@ -1,23 +1,22 @@ -export default ` - - + - - + - - - + ` diff --git a/yarn.lock b/yarn.lock index 9c8cce184..413b8de7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2079,7 +2079,7 @@ dependencies: "@walletconnect/window-getters" "^1.0.0" -"@web3-onboard/core@^2.2.10-alpha.1", "@web3-onboard/core@^2.2.9": +"@web3-onboard/core@^2.2.9": version "2.2.10" resolved "https://registry.yarnpkg.com/@web3-onboard/core/-/core-2.2.10.tgz#61dcc912062548db38d67e228637a27c59122080" integrity sha512-sQF14OkT+4ibefXPQ7ueZW7DcKbbCzQXZW64FZ+ETEpgKCYjVarqpcMlp5YB4jv49cWWqM8qXRoskaqz01PktQ== @@ -2104,6 +2104,16 @@ joi "^17.4.2" lodash.uniqby "^4.7.0" +"@web3-onboard/keystone@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@web3-onboard/keystone/-/keystone-2.1.0.tgz#21799e814485719586f4a6df615bd276437e8270" + integrity sha512-o9jJ37SKEsish6aJwViUY61olXhW6zmB52lf3MH6tiKx4wKriO2zErnAUK4Exw+xf2wyTuqciwtgzAOLQMpPkA== + dependencies: + "@ethereumjs/tx" "^3.4.0" + "@ethersproject/providers" "^5.5.0" + "@keystonehq/eth-keyring" "^0.14.0-alpha.10.3" + "@web3-onboard/common" "^2.1.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From 5f3bd78278266e56fab7aab181c360010bd2a30c Mon Sep 17 00:00:00 2001 From: Mahmud <104795334+mahmud-bn@users.noreply.github.com> Date: Wed, 8 Jun 2022 18:16:14 -0600 Subject: [PATCH 13/17] react version bump (#1049) react version bump --- packages/react/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/package.json b/packages/react/package.json index 63e78d0e8..23007c899 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/react", - "version": "2.1.8-alpha.2", + "version": "2.1.8-alpha.3", "description": "Collection of React Hooks for web3-onboard", "module": "dist/index.js", "browser": "dist/index.js", From 1555676c485ca97537ff7b873e3fb480bbfa5ed6 Mon Sep 17 00:00:00 2001 From: Aaron Barnard Date: Thu, 9 Jun 2022 10:55:41 +1000 Subject: [PATCH 14/17] Increment release versions --- packages/core/package.json | 2 +- packages/dcent/package.json | 4 ++-- packages/injected/package.json | 4 ++-- packages/keystone/package.json | 2 +- packages/react/package.json | 8 ++++---- packages/vue/package.json | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index c0e197561..1fc07f85d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/core", - "version": "2.2.11-alpha.3", + "version": "2.2.11", "scripts": { "build": "rollup -c", "dev": "rollup -c -w", diff --git a/packages/dcent/package.json b/packages/dcent/package.json index 440f4f157..e68e6975c 100644 --- a/packages/dcent/package.json +++ b/packages/dcent/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/dcent", - "version": "2.0.0-alpha.2", + "version": "2.0.0", "description": "D'CENT module for web3-onboard", "module": "dist/index.js", "typings": "dist/index.d.ts", @@ -18,7 +18,7 @@ "typescript": "^4.5.5" }, "dependencies": { - "@web3-onboard/common": "^2.0.0", + "@web3-onboard/common": "^2.1.0", "@ethereumjs/common": "^2.6.1", "@ethereumjs/tx": "^3.4.0", "@ethersproject/providers": "^5.5.0", diff --git a/packages/injected/package.json b/packages/injected/package.json index a10473e1b..c9f2366a4 100644 --- a/packages/injected/package.json +++ b/packages/injected/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/injected-wallets", - "version": "2.0.8-alpha.2", + "version": "2.0.8", "description": "Injected wallets module for web3-onboard", "module": "dist/index.js", "browser": "dist/index.js", @@ -25,7 +25,7 @@ "window": "^4.2.7" }, "dependencies": { - "@web3-onboard/common": "^2.0.7", + "@web3-onboard/common": "^2.1.0", "joi": "^17.4.2", "lodash.uniqby": "^4.7.0" } diff --git a/packages/keystone/package.json b/packages/keystone/package.json index b2ef8369a..1c98ea972 100644 --- a/packages/keystone/package.json +++ b/packages/keystone/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/keystone", - "version": "2.1.1-alpha.1", + "version": "2.1.1", "description": "Keystone module for web3-onboard", "module": "dist/index.js", "typings": "dist/index.d.ts", diff --git a/packages/react/package.json b/packages/react/package.json index 23007c899..3bc1f2049 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/react", - "version": "2.1.8-alpha.3", + "version": "2.1.8", "description": "Collection of React Hooks for web3-onboard", "module": "dist/index.js", "browser": "dist/index.js", @@ -23,11 +23,11 @@ "typescript": "^4.5.5" }, "dependencies": { - "@web3-onboard/core": "^2.2.11-alpha.3", - "@web3-onboard/common": "^2.1.0-alpha.1", + "@web3-onboard/core": "^2.2.11", + "@web3-onboard/common": "^2.1.0", "use-sync-external-store": "1.0.0" }, "peerDependencies": { "react": ">=16.8" } -} \ No newline at end of file +} diff --git a/packages/vue/package.json b/packages/vue/package.json index d422b3a58..421e943f4 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -24,7 +24,7 @@ "@vueuse/core": "^8.4.2", "@vueuse/rxjs": "^8.2.0", "@web3-onboard/common": "^2.1.0", - "@web3-onboard/core": "^2.2.9", + "@web3-onboard/core": "^2.2.11", "vue-demi": "^0.12.4" }, "peerDependencies": { From e55d326dfe20c96ac68730a02ebf796941850305 Mon Sep 17 00:00:00 2001 From: Aaron Barnard Date: Thu, 9 Jun 2022 11:11:29 +1000 Subject: [PATCH 15/17] Fix CI --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8f5da8649..79a814e52 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -73,7 +73,7 @@ aliases: echo "$FILE exist" circleci step halt fi - + - &generate-lock-file run: name: Generate lock file @@ -502,6 +502,7 @@ workflows: - build-dcent: <<: *deploy_production_filters - build-staging-dcent: + <<: *deploy_staging_filters vue: jobs: - build-vue: From c6165dabbcfc6a21b6dd740c962e4552481aeac3 Mon Sep 17 00:00:00 2001 From: Aaron Barnard Date: Thu, 9 Jun 2022 11:13:16 +1000 Subject: [PATCH 16/17] Fix dcent CI --- .circleci/config.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 79a814e52..caec2c5af 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -271,6 +271,8 @@ jobs: docker: - image: cimg/node:16.13.1 working_directory: ~/web3-onboard-monorepo/packages/dcent + steps: + - node-build-steps build-vue: docker: - image: cimg/node:16.13.1 @@ -385,6 +387,8 @@ jobs: docker: - image: cimg/node:16.13.1 working_directory: ~/web3-onboard-monorepo/packages/dcent + steps: + - node-staging-build-steps build-staging-vue: docker: - image: cimg/node:16.13.1 From e760b1386a437b188d250fc66b325435c62c5a39 Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Wed, 8 Jun 2022 20:20:18 -0600 Subject: [PATCH 17/17] Update demo packages to release versions --- packages/demo/package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/demo/package.json b/packages/demo/package.json index eea185090..4b7b587eb 100644 --- a/packages/demo/package.json +++ b/packages/demo/package.json @@ -23,12 +23,13 @@ }, "dependencies": { "@web3-onboard/coinbase": "^2.0.3", - "@web3-onboard/core": "^2.2.9", + "@web3-onboard/core": "^2.2.11", + "@web3-onboard/dcent": "^2.0.0", "@web3-onboard/fortmatic": "^2.0.2", "@web3-onboard/gnosis": "^2.0.1", - "@web3-onboard/injected-wallets": "^2.0.7", + "@web3-onboard/injected-wallets": "^2.0.8", "@web3-onboard/keepkey": "^2.1.0", - "@web3-onboard/keystone": "^2.1.0", + "@web3-onboard/keystone": "^2.1.1", "@web3-onboard/ledger": "^2.1.0", "@web3-onboard/magic": "^2.0.1", "@web3-onboard/portis": "^2.0.0",