From 65668a4b72b572d6ebafead24e5cd18049225d84 Mon Sep 17 00:00:00 2001 From: Stanislav Titenko Date: Mon, 19 Dec 2022 16:11:37 +0100 Subject: [PATCH 1/7] Add support for Zeal injected wallet --- packages/injected/src/icons/zeal.ts | 6 ++++++ packages/injected/src/types.ts | 10 +++++++--- packages/injected/src/wallets.ts | 13 +++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 packages/injected/src/icons/zeal.ts diff --git a/packages/injected/src/icons/zeal.ts b/packages/injected/src/icons/zeal.ts new file mode 100644 index 000000000..b3fc05718 --- /dev/null +++ b/packages/injected/src/icons/zeal.ts @@ -0,0 +1,6 @@ +export default ` + + + + +` diff --git a/packages/injected/src/types.ts b/packages/injected/src/types.ts index f12098925..3726c9adb 100644 --- a/packages/injected/src/types.ts +++ b/packages/injected/src/types.ts @@ -49,7 +49,8 @@ export enum ProviderIdentityFlag { Core = 'isAvalanche', Opera = 'isOpera', Bitski = 'isBitski', - Enkrypt = 'isEnkrypt' + Enkrypt = 'isEnkrypt', + Zeal = 'isZeal' } export enum ProviderLabel { @@ -89,7 +90,8 @@ export enum ProviderLabel { BitKeep = 'BitKeep', Sequence = 'Sequence', Core = 'Core', - Enkrypt = 'Enkrypt' + Enkrypt = 'Enkrypt', + Zeal = 'Zeal' } export interface MeetOneProvider extends ExternalProvider { @@ -113,13 +115,15 @@ export enum InjectedNameSpace { BitKeep = 'bitkeep', Avalanche = 'avalanche', Bitski = 'Bitski', - Enkrypt = 'enkrypt' + Enkrypt = 'enkrypt', + Zeal = 'zeal' } export interface CustomWindow extends Window { BinanceChain: BinanceProvider ethereum: InjectedProvider tally: InjectedProvider + zeal: InjectedProvider web3: ExternalProvider | MeetOneProvider arbitrum: InjectedProvider xfi: { diff --git a/packages/injected/src/wallets.ts b/packages/injected/src/wallets.ts index d470a77dc..5e8d4b01d 100644 --- a/packages/injected/src/wallets.ts +++ b/packages/injected/src/wallets.ts @@ -496,6 +496,18 @@ const tally: InjectedWalletModule = { platforms: ['desktop'] } +const zeal: InjectedWalletModule = { + label: ProviderLabel.Zeal, + injectedNamespace: InjectedNameSpace.Zeal, + checkProviderIdentity: ({ provider }) => + !!provider && !!provider[ProviderIdentityFlag.Zeal], + getIcon: async () => (await import('./icons/zeal.js')).default, + getInterface: async () => ({ + provider: createEIP1193Provider(window.zeal) + }), + platforms: ['desktop'] +} + const rabby: InjectedWalletModule = { label: ProviderLabel.Rabby, injectedNamespace: InjectedNameSpace.Ethereum, @@ -619,6 +631,7 @@ const enkrypt: InjectedWalletModule = { } const wallets = [ + zeal, exodus, metamask, binance, From ef256826a0c36fe6a7dc55f9b4313f4dc00acc10 Mon Sep 17 00:00:00 2001 From: Stanislav Titenko Date: Tue, 20 Dec 2022 10:18:53 +0100 Subject: [PATCH 2/7] Add Zeal SDK module --- .circleci/config.yml | 18 +++++++++++ packages/demo/package.json | 1 + packages/demo/src/App.svelte | 9 ++++-- packages/zeal/README.md | 30 ++++++++++++++++++ packages/zeal/package.json | 59 ++++++++++++++++++++++++++++++++++++ packages/zeal/src/icon.ts | 6 ++++ packages/zeal/src/index.ts | 35 +++++++++++++++++++++ packages/zeal/tsconfig.json | 16 ++++++++++ 8 files changed, 171 insertions(+), 3 deletions(-) create mode 100644 packages/zeal/README.md create mode 100644 packages/zeal/package.json create mode 100644 packages/zeal/src/icon.ts create mode 100644 packages/zeal/src/index.ts create mode 100644 packages/zeal/tsconfig.json diff --git a/.circleci/config.yml b/.circleci/config.yml index 720824cc6..7a4ddbe2b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -333,6 +333,12 @@ jobs: working_directory: ~/web3-onboard-monorepo/packages/transaction-preview steps: - node-build-steps + build-zeal: + docker: + - image: cimg/node:16.13.1 + working_directory: ~/web3-onboard-monorepo/packages/zeal + steps: + - node-build-steps # Build staging/Alpha releases build-staging-core: @@ -503,6 +509,12 @@ jobs: working_directory: ~/web3-onboard-monorepo/packages/transaction-preview steps: - node-staging-build-steps + build-staging-zeal: + docker: + - image: cimg/node:16.13.1 + working_directory: ~/web3-onboard-monorepo/packages/zeal + steps: + - node-staging-build-steps workflows: version: 2 @@ -675,3 +687,9 @@ workflows: <<: *deploy_production_filters - build-staging-transaction-preview: <<: *deploy_staging_filters + zeal: + jobs: + - build-zeal: + <<: *deploy_production_filters + - build-staging-zeal: + <<: *deploy_staging_filters diff --git a/packages/demo/package.json b/packages/demo/package.json index 753a14daa..20fe62cbe 100644 --- a/packages/demo/package.json +++ b/packages/demo/package.json @@ -45,6 +45,7 @@ "@web3-onboard/enkrypt": "^2.0.0", "@web3-onboard/mew-wallet": "^2.0.0", "@web3-onboard/uauth": "^2.0.0", + "@web3-onboard/zeal": "^2.0.0", "vconsole": "^3.9.5" }, "license": "MIT", diff --git a/packages/demo/src/App.svelte b/packages/demo/src/App.svelte index 197a457df..65efe7257 100644 --- a/packages/demo/src/App.svelte +++ b/packages/demo/src/App.svelte @@ -17,6 +17,7 @@ import dcentModule from '@web3-onboard/dcent' import sequenceModule from '@web3-onboard/sequence' import tallyHoModule from '@web3-onboard/tallyho' + import zealModule from '@web3-onboard/zeal' import transactionPreviewModule from '@web3-onboard/transaction-preview' import enkryptModule from '@web3-onboard/enkrypt' import mewWalletModule from '@web3-onboard/mew-wallet' @@ -96,6 +97,7 @@ const keystone = keystoneModule() const gnosis = gnosisModule() const tallyho = tallyHoModule() + const zeal = zealModule() const trezorOptions = { email: 'test@test.com', @@ -127,6 +129,7 @@ const onboard = Onboard({ wallets: [ injected, + zeal, web3auth, ledger, trezor, @@ -290,7 +293,7 @@ } let toAddress - const sendTransaction = async (provider) => { + const sendTransaction = async provider => { const ethersProvider = new ethers.providers.Web3Provider(provider, 'any') const signer = ethersProvider.getSigner() @@ -552,9 +555,9 @@ :root { --background-color: #ffffff; /* --white */ --text-color: #1a1d26; /* --gray-700 */ - --border-color: #D0D4F7; /* --gray-100 taken from future mock */ + --border-color: #d0d4f7; /* --gray-100 taken from future mock */ - --accent-background: #EFF1FC; /* --gray-100 (currently gray-100 in connect modal) */ + --accent-background: #eff1fc; /* --gray-100 (currently gray-100 in connect modal) */ --accent-color: #929bed; /* --primary-400 */ --accent-color-hover: #eff1fc; /* --primary-200 */ diff --git a/packages/zeal/README.md b/packages/zeal/README.md new file mode 100644 index 000000000..ade12613d --- /dev/null +++ b/packages/zeal/README.md @@ -0,0 +1,30 @@ +# @web3-onboard/zeal + +## Wallet module for connecting Zeal to web3-onboard + +See [Zeal](https://www.zeal.app/) for details + +### Install + +`npm i @web3-onboard/zeal` + +## Usage + +```typescript +import Onboard from '@web3-onboard/core' +import zealWalletModule from '@web3-onboard/zeal' + +// initialize the module with options +const zealWalletSdk = zealWalletModule() + +const onboard = Onboard({ + // ... other Onboard options + wallets: [ + zealWalletModule() + //... other wallets + ] +}) + +const connectedWallets = await onboard.connectWallet() +console.log(connectedWallets) +``` diff --git a/packages/zeal/package.json b/packages/zeal/package.json new file mode 100644 index 000000000..572c191dc --- /dev/null +++ b/packages/zeal/package.json @@ -0,0 +1,59 @@ +{ + "name": "@web3-onboard/zeal", + "version": "2.0.0", + "description": "Zeal SDK wallet module for connecting to Web3-Onboard.", + "keywords": [ + "Ethereum", + "Web3", + "EVM", + "dapp", + "Multichain", + "Wallet", + "Transaction", + "Provider", + "Hardware Wallet", + "Notifications", + "React", + "MetaMask", + "Connect Wallet", + "Ethereum Hooks", + "Blocknative", + "Mempool", + "pending", + "confirmed", + "Injected Wallet", + "Crypto", + "Crypto Wallet", + "Zeal" + ], + "repository": { + "type": "git", + "url": "https://github.com/blocknative/web3-onboard.git", + "directory": "packages/zeal" + }, + "homepage": "https://onboard.blocknative.com", + "bugs": "https://github.com/blocknative/web3-onboard/issues", + "module": "dist/index.js", + "browser": "dist/index.js", + "main": "dist/index.js", + "type": "module", + "typings": "dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "tsc", + "dev": "tsc -w", + "type-check": "tsc --noEmit" + }, + "license": "MIT", + "devDependencies": { + "@ethersproject/providers": "^5.5.0", + "@types/node": "^17.0.21", + "typescript": "^4.5.5", + "window": "^4.2.7" + }, + "dependencies": { + "@web3-onboard/common": "^2.2.3" + } +} diff --git a/packages/zeal/src/icon.ts b/packages/zeal/src/icon.ts new file mode 100644 index 000000000..b3fc05718 --- /dev/null +++ b/packages/zeal/src/icon.ts @@ -0,0 +1,6 @@ +export default ` + + + + +` diff --git a/packages/zeal/src/index.ts b/packages/zeal/src/index.ts new file mode 100644 index 000000000..055a1d198 --- /dev/null +++ b/packages/zeal/src/index.ts @@ -0,0 +1,35 @@ +import type { WalletInit } from '@web3-onboard/common' +import type { ExternalProvider } from '@ethersproject/providers' +import { createEIP1193Provider } from '@web3-onboard/common' + +declare const window: Window & { zeal: ExternalProvider } + +function zealWallet(): WalletInit { + if (typeof window === 'undefined') return () => null + + return () => ({ + label: 'Zeal', + injectedNamespace: 'zeal', + checkProviderIdentity: ({ provider }: { provider: any }) => { + !!provider && !!provider['isZeal'] + }, + getIcon: async () => (await import('./icon.js')).default, + getInterface: async () => { + if ( + window.hasOwnProperty('zeal') && + 'isZeal' in window.zeal && + window.zeal.isZeal + ) { + return { + provider: createEIP1193Provider(window.zeal) + } + } else { + window.open('https://www.zeal.app/', '_blank') + throw new Error('Please Install Zeall to use this wallet') + } + }, + platforms: ['desktop'] + }) +} + +export default zealWallet diff --git a/packages/zeal/tsconfig.json b/packages/zeal/tsconfig.json new file mode 100644 index 000000000..53a27ffad --- /dev/null +++ b/packages/zeal/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*"], + + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "declaration": true, + "declarationDir": "dist", + "allowSyntheticDefaultImports": true, + "paths": { + "*": ["./src/*", "./node_modules/*"] + }, + "typeRoots": ["node_modules/@types"] + } + } \ No newline at end of file From 1eb5c8ffe2489b4d575443b7f8c152ccdb7bd1f7 Mon Sep 17 00:00:00 2001 From: Stanislav Titenko Date: Tue, 20 Dec 2022 10:23:21 +0100 Subject: [PATCH 3/7] Fix provider type --- packages/zeal/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/zeal/src/index.ts b/packages/zeal/src/index.ts index 055a1d198..4b5e7fca6 100644 --- a/packages/zeal/src/index.ts +++ b/packages/zeal/src/index.ts @@ -2,7 +2,7 @@ import type { WalletInit } from '@web3-onboard/common' import type { ExternalProvider } from '@ethersproject/providers' import { createEIP1193Provider } from '@web3-onboard/common' -declare const window: Window & { zeal: ExternalProvider } +declare const window: Window & { zeal: ExternalProvider & { isZeal: boolean } } function zealWallet(): WalletInit { if (typeof window === 'undefined') return () => null From eabdc7d90aa841b3f8b9b3f24a34b0ece9eef06b Mon Sep 17 00:00:00 2001 From: Stanislav Titenko Date: Fri, 23 Dec 2022 17:11:13 +0100 Subject: [PATCH 4/7] Add more info and dev contact details to README.md --- packages/zeal/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/zeal/README.md b/packages/zeal/README.md index ade12613d..d3aca1b2d 100644 --- a/packages/zeal/README.md +++ b/packages/zeal/README.md @@ -2,7 +2,9 @@ ## Wallet module for connecting Zeal to web3-onboard -See [Zeal](https://www.zeal.app/) for details +See [Zeal](https://www.zeal.app/) for details. + +For any questions or issues related to integration with Zeal wallet do not hesitate to contact our builders via [hi@zeal.app](mailto:hi@zeal.app) OR ping us on twitter [@withzeal](https://twitter.com/withzeal) ### Install From 2fb0e8be66bd0bf0871d13e55f2231e1fcf99369 Mon Sep 17 00:00:00 2001 From: resetko-zeal <112621289+resetko-zeal@users.noreply.github.com> Date: Fri, 23 Dec 2022 17:12:59 +0100 Subject: [PATCH 5/7] Apply suggestions related to version and dependencies Co-authored-by: Adam Carpenter --- packages/demo/package.json | 2 +- packages/zeal/README.md | 2 +- packages/zeal/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/demo/package.json b/packages/demo/package.json index 3f125e347..733944858 100644 --- a/packages/demo/package.json +++ b/packages/demo/package.json @@ -46,7 +46,7 @@ "@web3-onboard/enkrypt": "^2.0.0", "@web3-onboard/mew-wallet": "^2.0.0", "@web3-onboard/uauth": "^2.0.0", - "@web3-onboard/zeal": "^2.0.0", + "@web3-onboard/zeal": "^2.0.0-alpha.1", "vconsole": "^3.9.5" }, "license": "MIT", diff --git a/packages/zeal/README.md b/packages/zeal/README.md index ade12613d..b2656c992 100644 --- a/packages/zeal/README.md +++ b/packages/zeal/README.md @@ -6,7 +6,7 @@ See [Zeal](https://www.zeal.app/) for details ### Install -`npm i @web3-onboard/zeal` +`npm i @web3-onboard/core @web3-onboard/zeal` ## Usage diff --git a/packages/zeal/package.json b/packages/zeal/package.json index 572c191dc..dc6f761b5 100644 --- a/packages/zeal/package.json +++ b/packages/zeal/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/zeal", - "version": "2.0.0", + "version": "2.0.0-alpha.1", "description": "Zeal SDK wallet module for connecting to Web3-Onboard.", "keywords": [ "Ethereum", From 8539d7ede455affa60a43db29fd4ae712786aee2 Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Thu, 5 Jan 2023 12:12:32 -0700 Subject: [PATCH 6/7] fix demo for signing typed and sending transaction --- packages/demo/src/App.svelte | 103 ++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 27 deletions(-) diff --git a/packages/demo/src/App.svelte b/packages/demo/src/App.svelte index f004bd246..d08574bf8 100644 --- a/packages/demo/src/App.svelte +++ b/packages/demo/src/App.svelte @@ -63,7 +63,6 @@ let transactionObject = defaultTransactionObject let signMsg = 'Any string message' - let signTypedMsg const injected = injectedModule({ custom: [ @@ -297,6 +296,8 @@ let toAddress const sendTransaction = async provider => { + await onboard.setChain({ chainId: '0x5' }) + const ethersProvider = new ethers.providers.Web3Provider(provider, 'any') const signer = ethersProvider.getSigner() @@ -313,6 +314,8 @@ } const sendTransactionWithPreFlight = async (provider, balance) => { + await onboard.setChain({ chainId: '0x5' }) + const balanceValue = Object.values(balance)[0] const ethersProvider = new ethers.providers.Web3Provider(provider, 'any') @@ -365,13 +368,63 @@ console.log({ signMsg, signature, recoveredAddress, addr }) } + let typedMsg = JSON.stringify( + { + domain: { + chainId: '0x5', + name: 'Web3-Onboard Test App', + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + version: '1' + }, + message: { + contents: 'Hello, Bob!', + from: { + name: 'Cow', + wallets: [ + '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + '0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF' + ] + }, + to: [ + { + name: 'Bob', + wallets: [ + '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + '0xB0BdaBea57B0BDABeA57b0bdABEA57b0BDabEa57', + '0xB0B0b0b0b0b0B000000000000000000000000000' + ] + } + ] + }, + primaryType: 'Message', + types: { + EIP712Domain: [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' } + ], + Message: [ + { name: 'from', type: 'Person' }, + { name: 'to', type: 'Person[]' }, + { name: 'contents', type: 'string' } + ], + Person: [ + { name: 'name', type: 'string' }, + { name: 'wallets', type: 'address[]' } + ] + } + }, + undefined, + 2 + ) const signTypedMessage = async (provider, address) => { - const data = JSON.parse(signTypedMsg) + await onboard.setChain({ chainId: '0x5' }) const signature = await provider.request({ - method: 'eth_signTypedData', - params: [address, data] + method: 'eth_signTypedData_v4', + params: [address, typedMsg] }) - const { domain, types, message } = data + const { domain, types, message } = JSON.parse(typedMsg) delete types.EIP712Domain console.log(verifyTypedData(domain, types, message, signature)) @@ -1016,52 +1069,48 @@
-
-
-
-
- -
-