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 @@