From 4b9267929a2f26031a486e92ce7fe49c49b4cb38 Mon Sep 17 00:00:00 2001 From: cebgcontract <99630598+cebgcontract@users.noreply.github.com> Date: Wed, 24 Aug 2022 16:22:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=AC=AC=E4=B8=89=E6=96=B9?= =?UTF-8?q?=E9=92=B1=E5=8C=85=E7=BD=91=E7=BB=9C=E5=88=87=E6=8D=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/comp/ZWalletConnect.ts | 27 ++++++++++++------------ src/index.ts | 35 +++++++++++++++++++++++++------- src/lib/WalletConnectProvider.ts | 1 + 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/comp/ZWalletConnect.ts b/src/comp/ZWalletConnect.ts index b32899e..0b3bc08 100644 --- a/src/comp/ZWalletConnect.ts +++ b/src/comp/ZWalletConnect.ts @@ -58,27 +58,26 @@ export class ZWalletConnect { resolve && resolve(chainId); } this.provider.on('chainChanged', onChainChange) + let params = { + chainId: toHexChainId(data.id), + chainName: data.name, + nativeCurrency: { + name: data.symbol, + symbol: data.symbol, + decimals: data.decimals || 18 + }, + rpcUrls: [data.rpc], + blockExplorerUrls: [data.explorerurl] + } this.provider.request({ method: 'wallet_addEthereumChain', - params: [ - { - chainId: toHexChainId(data.id), - chainName: data.name, - nativeCurrency: { - name: data.symbol, - symbol: data.symbol, - decimals: data.decimals || 18 - }, - blockExplorerUrls: [data.explorerurl], - rpcUrls: [data.rpc] - } - ] + params: [params] }) .then(() => { console.log('add chain success, wait result'); }) .catch(err=>{ - console.error('add chain error: ', err); + console.error('add chain error: ', JSON.stringify(err)); this.provider.removeListener('chainChanged', onChainChange); reject && reject(err); }) diff --git a/src/index.ts b/src/index.ts index a90876d..bb5e9ea 100644 --- a/src/index.ts +++ b/src/index.ts @@ -130,7 +130,7 @@ export default class JCWallet { start = Date.now() this.data = loadData() console.log(`init wallet ext data cost: ${(Date.now() - start) / 1000}`) - this.init({ chains: [322, 97], password: this.password }) + this.init({ chains: [322, 80001], password: this.password }) } private initThirdPartyWallet(chain: number) { @@ -140,6 +140,7 @@ export default class JCWallet { } this.wConnect = new ZWalletConnect(this.rpc) + this.init({ chains: [322, 80001], password: this.password }) } private init({ chains, password }: { chains: number[]; password: string }) { @@ -155,6 +156,9 @@ export default class JCWallet { } } } + if (this.walletType !== WalletType.INTERNAL) { + return; + } if (!this.wallet || this.wallet.length === 0) { // this.createAccount(); this.newWallet(password) @@ -179,12 +183,29 @@ export default class JCWallet { } updateCurrentChain(chainId: number) { - const chainData = this.chainMap.get(chainId) - this._currentChain = chainData - this.web3.eth.setProvider(chainData.rpc) - this.mainHandlers.emit(WALLET_CHAIN_CHANGE, chainData) - this.updateListType('tokens') - return this.currentChain + return new Promise((resolve, reject) => { + if (this.walletType === WalletType.INTERNAL) { + const chainData = this.chainMap.get(chainId) + this._currentChain = chainData + this.web3.eth.setProvider(chainData.rpc) + this.mainHandlers.emit(WALLET_CHAIN_CHANGE, chainData) + this.updateListType('tokens') + resolve && resolve(this.currentChain); + } else { + console.log('third parth wallet change chain: ' + chainId) + const chainData = this.chainMap.get(chainId) + this.wConnect.addOrChangeChain(chainData) + .then(() => { + resolve && resolve(chainData); + }) + .catch(err=>{ + reject && reject(err); + }) + // @ts-ignore + jumpToWallet() + } + }) + } updateListType(type: string) { diff --git a/src/lib/WalletConnectProvider.ts b/src/lib/WalletConnectProvider.ts index 2c122e1..022b058 100644 --- a/src/lib/WalletConnectProvider.ts +++ b/src/lib/WalletConnectProvider.ts @@ -84,6 +84,7 @@ class WalletConnectProvider extends ProviderEngine { }; request = async (payload: any): Promise => { + console.log('[WalletProvider]send: ' + JSON.stringify(payload)); return this.send(payload); };