diff --git a/CHANGELOG.md b/CHANGELOG.md index afc6a1b..aa71646 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Manifest Version 1.3.3 + +- improved eth_call and eth_blockNumber to be more compatible with older websites +- better error internal handling +- modify the receipt returned to resamble more the one from Metamask + ## Manifest Version 1.3.2 - added button to open non kyc exchange, no referral is used to maximize privacy diff --git a/public/assets/randomGrad.svg b/public/assets/randomGrad.svg new file mode 100644 index 0000000..cf83897 --- /dev/null +++ b/public/assets/randomGrad.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/extension/content.ts b/src/extension/content.ts index e9a22ba..240117e 100644 --- a/src/extension/content.ts +++ b/src/extension/content.ts @@ -63,7 +63,7 @@ window.addEventListener("message", (event) => { } const data = { type: "CLWALLET_PAGE", data: res, resId: event.data.resId }; - // console.info('data out', data) + console.info('data out', data) window.postMessage(data, "*"); }) } diff --git a/src/extension/inject.ts b/src/extension/inject.ts index d73d85f..4440392 100644 --- a/src/extension/inject.ts +++ b/src/extension/inject.ts @@ -78,7 +78,7 @@ if(Object.values(promResolvers).filter(r=> r).length < 10 ) { if (ping) { data.type = 'CLWALLET_PING' } - // console.info('data in', data) + console.info('data in', data) window.postMessage(data, "*"); }) } else { @@ -341,7 +341,7 @@ const listner = function(event: any) { (eth).selectedAddress = event?.data?.data?.address ?? null; (eth).isConnected = () => true; } else if( listnerName === 'chainChanged' ) { - // console.info(event?.data?.data?.data); + console.info(event?.data?.data?.data); (eth).networkVersion = event?.data?.data?.data.toString(10) ?? '137'; (eth).chainId = event?.data?.data?.data ?? '0x89'; } else if ( listnerName === 'accountsChanged' ) { diff --git a/src/extension/manifest.json b/src/extension/manifest.json index 771ae4b..c859227 100644 --- a/src/extension/manifest.json +++ b/src/extension/manifest.json @@ -3,8 +3,8 @@ "name": "__MSG_appName__", "description": "__MSG_appDesc__", "default_locale": "en", - "version": "1.3.2", - "version_name": "1.3.2", + "version": "1.3.3", + "version_name": "1.3.3", "icons": { "16": "assets/extension-icon/wallet_16.png", "32": "assets/extension-icon/wallet_32.png", diff --git a/src/extension/serviceWorker.ts b/src/extension/serviceWorker.ts index 98f454b..e76c879 100644 --- a/src/extension/serviceWorker.ts +++ b/src/extension/serviceWorker.ts @@ -167,24 +167,36 @@ const mainListner = (message: RequestArguments, sender:any, sendResponse: (a: an // ETH API switch (message.method) { case 'eth_call': { - sendResponse(await evmCall(message?.params?.[0])) + try { + sendResponse(await evmCall(message?.params ?? [])) + } catch (e) { + sendResponse({ + error: true, + code: rpcError.USER_REJECTED, + message: 'No network or user selected' + }) + console.error('eth_call', e) + } break } case 'eth_getBlockByNumber': { try { const params = message?.params?.[0] as any const block = await getBlockByNumber(params) as any - block.gasLimit = block.gasLimit.toHexString() - block.gasUsed = block.gasUsed.toHexString() - block.baseFeePerGas = block.baseFeePerGas.toHexString() - block._difficulty = block._difficulty.toHexString() - sendResponse(block) - } catch { + const newBlock = {...block} + newBlock.gasLimit = numToHexStr(block.gasLimit) + newBlock.gasUsed = numToHexStr(block.gasUsed) + newBlock.baseFeePerGas = numToHexStr(block.baseFeePerGas) + newBlock._difficulty = numToHexStr(block.difficulty) + newBlock.difficulty = block._difficulty + sendResponse(newBlock) + } catch (e) { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) + console.log('eth_getBlockByNumber', e) } break; } @@ -195,49 +207,52 @@ const mainListner = (message: RequestArguments, sender:any, sendResponse: (a: an }else { sendResponse(numToHexStr(Number(await getTxCount(message?.params?.[0] as string)))) } - } catch { + } catch (e) { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) - + console.error('eth_getTransactionCount', e) } break } case 'eth_getTransactionByHash': { try { sendResponse(await getTxByHash(message?.params?.[0] as string)) - } catch { + } catch (e) { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) + console.error('eth_getTransactionByHash', e) } break } case 'eth_getTransactionReceipt':{ try { sendResponse(await getTxReceipt(message?.params?.[0] as string)) - } catch { + } catch (e) { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) + console.error('eth_getTransactionReceipt', e) } break } case 'eth_gasPrice': { try { sendResponse(numToHexStr(BigInt(Math.trunc(await getGasPrice() * 1e9)))) - } catch { + } catch(e) { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) + console.error('eth_gasPrice', e) } break; } @@ -246,36 +261,39 @@ const mainListner = (message: RequestArguments, sender:any, sendResponse: (a: an const balance = await getBalance() const balanceHex = numToHexStr(balance ?? 0n) sendResponse(balanceHex) - } catch { + } catch (e) { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) + console.error('eth_getBalance', e) } break } case 'eth_getCode': { try { sendResponse(await getCode(message?.params?.[0] as string)) - } catch { + } catch (e) { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) + console.error('eth_getCode', e) } break } case 'eth_blockNumber': { try { sendResponse(await getBlockNumber()) - } catch { + } catch (e) { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) + console.error('eth_blockNumber', e) } break } @@ -311,12 +329,14 @@ const mainListner = (message: RequestArguments, sender:any, sendResponse: (a: an code: rpcError.USER_REJECTED, message: 'Gas estimate failed' }) - } + } else { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) + console.error('eth_estimateGas', err) + } } break } @@ -324,12 +344,13 @@ const mainListner = (message: RequestArguments, sender:any, sendResponse: (a: an case 'eth_accounts': { try { sendResponse(await getSelectedAddress()) - } catch { + } catch (e) { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) + console.error('eth_accounts', e) } break } @@ -338,12 +359,13 @@ const mainListner = (message: RequestArguments, sender:any, sendResponse: (a: an const network = await getSelectedNetwork() const chainId = network?.chainId ?? 0 sendResponse(`0x${chainId.toString(16)}`) - } catch { + } catch (e) { sendResponse({ error: true, code: rpcError.USER_REJECTED, message: 'No network or user selected' }) + console.error('eth_chainId', e) } break } diff --git a/src/utils/wallet.ts b/src/utils/wallet.ts index 61d005c..4a640b4 100644 --- a/src/utils/wallet.ts +++ b/src/utils/wallet.ts @@ -1,5 +1,30 @@ -import { getSelectedAccount, getSelectedNetwork } from '@/utils/platform'; -import { ethers} from "ethers" +import { getSelectedAccount, getSelectedNetwork, numToHexStr } from '@/utils/platform'; +import { ethers } from "ethers" + +const convertReceipt = (receipt: ethers.TransactionReceipt | null) => { + if(!receipt) return null + const newReceipt = {...receipt} as any + newReceipt.transactionHash = newReceipt.hash + newReceipt.blockNumber = numToHexStr(newReceipt.blockNumber) + newReceipt.index = numToHexStr(newReceipt.index) + newReceipt.transactionIndex = newReceipt.index + newReceipt.cumulativeGasUsed = numToHexStr(newReceipt.cumulativeGasUsed) + newReceipt.gasUsed = numToHexStr(newReceipt.gasUsed) + newReceipt.gasPrice = numToHexStr(newReceipt.gasPrice) + newReceipt.type = "0x2" + newReceipt.status = numToHexStr(newReceipt.status) + newReceipt.logs = receipt?.logs?.map((log: any) => { + return { + ...log, + blockNumber: numToHexStr(log.blockNumber), + logIndex: numToHexStr(log.index), + transactionIndex: numToHexStr(log.transactionIndex), + removed: false + } + }) + return newReceipt +} + export const signMsg = async (msg: string) => { const account = await getSelectedAccount() @@ -55,10 +80,15 @@ export const estimateGas = async ({to = '', from = '', data = '', value = '0x0' return await provider.estimateGas({to, from, data, value}) } -export const evmCall = async ({to = '', from = '', data = '', value = '0x0' }: {to: string, from: string, data: string, value: string}) => { +export const evmCall = async (params: any[]) => { + const param1 = (params[0] ?? {to:'', from: '', data:'', value: '0x0', blockTag: 'latest' }) as {to: string, from: string, data: string, value: string, blockTag: string} + const param2 = (params[1] ?? 'latest') as string + param1.blockTag = param2 + + const network = await getSelectedNetwork() const provider = new ethers.JsonRpcProvider(network.rpc) - return await provider.call({to, from, data, value}) + return await provider.call(param1) } export const getTxByHash = async (hash: string) => { @@ -68,9 +98,16 @@ export const getTxByHash = async (hash: string) => { } export const getTxReceipt = async (hash: string) => { + try { const network = await getSelectedNetwork() const provider = new ethers.JsonRpcProvider(network.rpc) - return await provider.getTransactionReceipt(hash) + const receipt = await provider.getTransactionReceipt(hash) + + return convertReceipt(receipt) + } catch (e) { + console.error(e) + return null + } } export const getCode = async (addr: string) => { diff --git a/src/views/AssetsTab.vue b/src/views/AssetsTab.vue index c848117..ddcf89e 100644 --- a/src/views/AssetsTab.vue +++ b/src/views/AssetsTab.vue @@ -52,7 +52,7 @@