From b324a6c7ba185433d69477a21e7bed371f063a80 Mon Sep 17 00:00:00 2001 From: Andrei O Date: Tue, 22 Nov 2022 14:07:42 +0200 Subject: [PATCH] add: eth_getCode support --- src/extension/content.ts | 3 ++- src/extension/serviceWorker.ts | 14 +++++++++++++- src/utils/wallet.ts | 6 ++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/extension/content.ts b/src/extension/content.ts index 13ead33..eec4892 100644 --- a/src/extension/content.ts +++ b/src/extension/content.ts @@ -56,7 +56,8 @@ const allowedMethods = { 'wallet_getPermissions': true, 'net_listening': true, 'eth_coinbase': true, - 'wallet_addEthereumChain': true + 'wallet_addEthereumChain': true, + 'eth_getCode': true } window.addEventListener("message", (event) => { diff --git a/src/extension/serviceWorker.ts b/src/extension/serviceWorker.ts index d3ea107..a673576 100644 --- a/src/extension/serviceWorker.ts +++ b/src/extension/serviceWorker.ts @@ -1,6 +1,6 @@ import { getSelectedAccount, getSelectedNetwork, smallRandomString, getSettings, clearPk, openTab, getUrl, addToHistory, getNetworks, strToHex } from '@/utils/platform'; import { userApprove, userReject, rIdWin, rIdData } from '@/extension/userRequest' -import { signMsg, getBalance, getBlockNumber, estimateGas, sendTransaction, getGasPrice, getBlockByNumber, evmCall, getTxByHash, getTxReceipt, signTypedData } from '@/utils/wallet' +import { signMsg, getBalance, getBlockNumber, estimateGas, sendTransaction, getGasPrice, getBlockByNumber, evmCall, getTxByHash, getTxReceipt, signTypedData, getCode } from '@/utils/wallet' import type { RequestArguments } from '@/extension/types' import { rpcError } from '@/extension/rpcConstants' import { updatePrices } from '@/utils/gecko' @@ -162,6 +162,18 @@ const mainListner = (message: RequestArguments, sender:any, sendResponse: (a: an } break } + case 'eth_getCode': { + try { + sendResponse(await getCode(message?.params?.[0] as string)) + } catch { + sendResponse({ + error: true, + code: rpcError.USER_REJECTED, + message: 'No network or user selected' + }) + } + break + } case 'eth_blockNumber': { try { sendResponse(await getBlockNumber()) diff --git a/src/utils/wallet.ts b/src/utils/wallet.ts index 04d5269..e767a96 100644 --- a/src/utils/wallet.ts +++ b/src/utils/wallet.ts @@ -70,6 +70,12 @@ export const getTxReceipt = async (hash: string) => { return await provider.getTransactionReceipt(hash) } +export const getCode = async (addr: string) => { + const network = await getSelectedNetwork() + const provider = new ethers.providers.JsonRpcProvider(network.rpc) + return await provider.getCode(addr) +} + export const sendTransaction = async ({ data= '', gas='0x0', to='', from='', value='0x0', gasPrice='0x0'}: {to: string, from: string, data: string, value: string, gas: string, gasPrice: string}, gasEstimate: Promise | null = null, pGasPrice : Promise | null) => {