Verify if valid address is a contract address

pull/5370/head
David Disu 2 years ago committed by Aniket
parent b9099a2097
commit 9d5979bcce
  1. 13
      libs/remix-ui/run-tab/src/lib/actions/deploy.ts
  2. 5
      libs/remix-ui/run-tab/src/lib/actions/index.ts
  3. 1
      libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx
  4. 4
      libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx
  5. 3
      libs/remix-ui/run-tab/src/lib/run-tab.tsx
  6. 6
      libs/remix-ui/run-tab/src/lib/types/index.ts

@ -6,6 +6,7 @@ import { DeployMode, MainnetPrompt } from "../types"
import { displayNotification, displayPopUp, setDecodedResponse } from "./payload"
import { addInstance } from "./actions"
import { addressToString, logBuilder } from "@remix-ui/helper"
import Web3 from "web3"
declare global {
interface Window {
@ -322,4 +323,16 @@ export const updateInstanceBalance = (plugin: RunTab) => {
})
}
}
}
export const isValidContractAddress = async (plugin: RunTab, address: string) => {
if (!address) {
return false
} else {
if (Web3.utils.isAddress(address)) {
return await plugin.blockchain.web3().eth.getCode(address) !== '0x'
} else {
return false
}
}
}

@ -6,7 +6,7 @@ import { createNewBlockchainAccount, fillAccountsList, setExecutionContext, sign
import { clearInstances, clearPopUp, removeInstance, setAccount, setGasFee, setMatchPassphrasePrompt,
setNetworkNameFromProvider, setPassphrasePrompt, setSelectedContract, setSendTransactionValue, setUnit,
updateBaseFeePerGas, updateConfirmSettings, updateGasPrice, updateGasPriceStatus, updateMaxFee, updateMaxPriorityFee, updateScenarioPath } from './actions'
import { createInstance, getContext, getFuncABIInputs, getSelectedContract, loadAddress, runTransactions, updateInstanceBalance, syncContractsInternal } from './deploy'
import { createInstance, getContext, getFuncABIInputs, getSelectedContract, loadAddress, runTransactions, updateInstanceBalance, syncContractsInternal, isValidContractAddress } from './deploy'
import { CompilerAbstract as CompilerAbstractType } from '@remix-project/remix-solidity-ts'
import { ContractData, FuncABI } from "@remix-project/core-plugin"
import { DeployMode, MainnetPrompt } from '../types'
@ -61,4 +61,5 @@ export const setScenarioPath = (path: string) => updateScenarioPath(dispatch, pa
export const getFuncABIValues = (funcABI: FuncABI) => getFuncABIInputs(plugin, funcABI)
export const setNetworkName = (networkName: string) => setNetworkNameFromProvider(dispatch, networkName)
export const updateSelectedContract = (contractName) => setSelectedContract(dispatch, contractName)
export const syncContracts = () => syncContractsInternal(plugin)
export const syncContracts = () => syncContractsInternal(plugin)
export const isValidProxyAddress = (address: string) => isValidContractAddress(plugin, address)

@ -312,6 +312,7 @@ export function ContractDropdownUI(props: ContractDropdownProps) {
evmBC={loadedContractData.bytecodeObject}
lookupOnly={false}
savedProxyAddress={proxyKey}
isValidProxyAddress={props.isValidProxyAddress}
/>
<div className="d-flex py-1 align-items-center custom-control custom-checkbox">
<input

@ -243,11 +243,11 @@ export function ContractGUI (props: ContractGUIProps) {
setProxyAddress(value)
}
const validateProxyAddress = (address: string) => {
const validateProxyAddress = async (address: string) => {
if (address === '') {
setProxyAddressError('proxy address cannot be empty')
} else {
if (Web3.utils.isAddress(address)) {
if (await props.isValidProxyAddress(address)) {
setProxyAddressError('')
} else {
setProxyAddressError('not a valid contract address')

@ -27,7 +27,7 @@ import {
storeNewScenario, runScenario,
setScenarioPath, getFuncABIValues,
setNetworkName, updateSelectedContract,
syncContracts
syncContracts, isValidProxyAddress
} from './actions'
import './css/run-tab.css'
import { PublishToStorage } from '@remix-ui/publish-to-storage'
@ -242,6 +242,7 @@ export function RunTabUI (props: RunTabProps) {
setNetworkName={setNetworkName}
setSelectedContract={updateSelectedContract}
remixdActivated={runTab.remixdActivated}
isValidProxyAddress={isValidProxyAddress}
/>
<RecorderUI
gasEstimationPrompt={gasEstimationPrompt}

@ -165,7 +165,8 @@ export interface ContractDropdownProps {
networkName: string,
setNetworkName: (name: string) => void,
setSelectedContract: (contractName: string) => void
remixdActivated: boolean
remixdActivated: boolean,
isValidProxyAddress?: (address: string) => Promise<boolean>
}
export interface RecorderProps {
@ -260,7 +261,8 @@ export interface ContractGUIProps {
isDeploy?: boolean,
deployOption?: { title: DeployMode, active: boolean }[],
initializerOptions?: DeployOption,
savedProxyAddress?: string
savedProxyAddress?: string,
isValidProxyAddress?: (address: string) => Promise<boolean>
}
export interface MainnetProps {
network: Network,

Loading…
Cancel
Save