diff --git a/libs/remix-ui/run-tab/src/lib/actions/account.ts b/libs/remix-ui/run-tab/src/lib/actions/account.ts index 060de8bf62..68601be7cb 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/account.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/account.ts @@ -2,6 +2,7 @@ import { shortenAddress } from "@remix-ui/helper" import { RunTab } from "../types/run-tab" import { clearInstances, setAccount, setExecEnv } from "./actions" import { displayNotification, displayPopUp, fetchAccountsListFailed, fetchAccountsListRequest, fetchAccountsListSuccess, setExternalEndpoint, setMatchPassphrase, setPassphrase } from "./payload" +import { RunTabProps, RunTabState } from "../types" export const updateAccountBalances = async (plugin: RunTab, dispatch: React.Dispatch) => { const accounts = plugin.REACT_API.accounts.loadedAccounts @@ -31,7 +32,7 @@ export const fillAccountsList = async (plugin: RunTab, dispatch: React.Dispatch< for (const account of accounts) { const balance = await plugin.blockchain.getBalanceInEther(account) loadedAccounts[account] = shortenAddress(account, balance) - } + } const provider = plugin.blockchain.getProvider() if (provider === 'injected') { @@ -99,4 +100,21 @@ export const signMessageWithAddress = (plugin: RunTab, dispatch: React.Dispatch< } dispatch(displayNotification('Signed Message', modalContent(msgHash, signedData), 'OK', null, () => {}, null)) }) -} \ No newline at end of file +} + +export const extractCompilerVersion = (runTab: RunTabState, dispatch: React.Dispatch) => +{ + const runtabState = Object.entries(runTab['contracts'] ?? {}) + const contractList = runtabState[0] ?? {} + const contractNameHolder = runtabState[4] ?? ['currentName', ''] + const contractName = contractNameHolder[1] ?? '' + const currentObj = contractList[1] ?? {} + const currObjDetails = currentObj[contractName as string] ?? {} + const currObjDetailsLength = currObjDetails.length -1 + const alias = currObjDetails[currObjDetailsLength]['alias'] ?? '' + const serializeTarget = currObjDetails[currObjDetailsLength]?.compiler?.data?.contracts[contractName as string][alias]?.metadata ?? '' + const obj = (serializeTarget as string).length > 0 ? JSON.parse(serializeTarget) : {} + const version = obj?.compiler?.version ?? '' + const compilerVersion = `v${version?.split('+commit')[0]}` ?? 'v' + dispatch({ type: 'EXTRACT_COMPILER_VERSION', payload: {compilerVersion, runTab }}) +} diff --git a/libs/remix-ui/run-tab/src/lib/actions/payload.ts b/libs/remix-ui/run-tab/src/lib/actions/payload.ts index c8bee7af2e..dfa8fc4b16 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/payload.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/payload.ts @@ -1,5 +1,5 @@ import { ContractData } from '@remix-project/core-plugin' -import { ADD_DEPLOY_OPTION, ADD_INSTANCE, UPDATE_INSTANCES_BALANCE, ADD_PROVIDER, CLEAR_INSTANCES, CLEAR_RECORDER_COUNT, DISPLAY_NOTIFICATION, DISPLAY_POPUP_MESSAGE, FETCH_ACCOUNTS_LIST_FAILED, FETCH_ACCOUNTS_LIST_REQUEST, FETCH_ACCOUNTS_LIST_SUCCESS, FETCH_CONTRACT_LIST_FAILED, FETCH_CONTRACT_LIST_REQUEST, FETCH_CONTRACT_LIST_SUCCESS, HIDE_NOTIFICATION, HIDE_POPUP_MESSAGE, REMOVE_DEPLOY_OPTION, REMOVE_INSTANCE, REMOVE_PROVIDER, RESET_STATE, SET_BASE_FEE_PER_GAS, SET_CONFIRM_SETTINGS, SET_CURRENT_CONTRACT, SET_CURRENT_FILE, SET_DECODED_RESPONSE, SET_DEPLOY_OPTIONS, SET_EXECUTION_ENVIRONMENT, SET_EXTERNAL_WEB3_ENDPOINT, SET_GAS_LIMIT, SET_GAS_PRICE, SET_GAS_PRICE_STATUS, SET_IPFS_CHECKED_STATE, SET_LOAD_TYPE, SET_MATCH_PASSPHRASE, SET_MAX_FEE, SET_MAX_PRIORITY_FEE, SET_NETWORK_NAME, SET_PASSPHRASE, SET_PATH_TO_SCENARIO, SET_PERSONAL_MODE, SET_RECORDER_COUNT, SET_SELECTED_ACCOUNT, SET_SEND_UNIT, SET_SEND_VALUE, SET_REMIXD_ACTIVATED, FETCH_PROXY_DEPLOYMENTS, NEW_PROXY_DEPLOYMENT, RESET_PROXY_DEPLOYMENTS } from '../constants' +import { ADD_DEPLOY_OPTION, ADD_INSTANCE, UPDATE_INSTANCES_BALANCE, ADD_PROVIDER, CLEAR_INSTANCES, CLEAR_RECORDER_COUNT, DISPLAY_NOTIFICATION, DISPLAY_POPUP_MESSAGE, FETCH_ACCOUNTS_LIST_FAILED, FETCH_ACCOUNTS_LIST_REQUEST, FETCH_ACCOUNTS_LIST_SUCCESS, FETCH_CONTRACT_LIST_FAILED, FETCH_CONTRACT_LIST_REQUEST, FETCH_CONTRACT_LIST_SUCCESS, HIDE_NOTIFICATION, HIDE_POPUP_MESSAGE, REMOVE_DEPLOY_OPTION, REMOVE_INSTANCE, REMOVE_PROVIDER, RESET_STATE, SET_BASE_FEE_PER_GAS, SET_CONFIRM_SETTINGS, SET_CURRENT_CONTRACT, SET_CURRENT_FILE, SET_DECODED_RESPONSE, SET_DEPLOY_OPTIONS, SET_EXECUTION_ENVIRONMENT, SET_EXTERNAL_WEB3_ENDPOINT, SET_GAS_LIMIT, SET_GAS_PRICE, SET_GAS_PRICE_STATUS, SET_IPFS_CHECKED_STATE, SET_LOAD_TYPE, SET_MATCH_PASSPHRASE, SET_MAX_FEE, SET_MAX_PRIORITY_FEE, SET_NETWORK_NAME, SET_PASSPHRASE, SET_PATH_TO_SCENARIO, SET_PERSONAL_MODE, SET_RECORDER_COUNT, SET_SELECTED_ACCOUNT, SET_SEND_UNIT, SET_SEND_VALUE, SET_REMIXD_ACTIVATED, FETCH_PROXY_DEPLOYMENTS, NEW_PROXY_DEPLOYMENT, RESET_PROXY_DEPLOYMENTS, EXTRACT_COMPILER_VERSION } from '../constants' import { ContractList, DeployOptions } from '../types' export const fetchAccountsListRequest = () => { @@ -334,3 +334,10 @@ export const resetProxyDeployments = () => { type: RESET_PROXY_DEPLOYMENTS, } } + +export const setCompilerVersion = (version: string) => { + return { + type: EXTRACT_COMPILER_VERSION, + payload: version + } +} diff --git a/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx b/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx index 87912eccc4..33dd92b9ad 100644 --- a/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx @@ -481,6 +481,8 @@ export function ContractDropdownUI(props: ContractDropdownProps) { isValidProxyUpgrade={isValidProxyUpgrade} modal={props.modal} disabled={props.selectedAccount === ''} + dispatch={props.stateDispatch} + runTabState={props.runTabState} />
{ + extractCompilerVersion(props.runTabState, props.dispatch) if (deployState.deploy) { const proxyInitializeString = getMultiValsString(initializeFields.current) props.clickCallBack(props.initializerOptions.inputs.inputs, proxyInitializeString, ['Deploy with Proxy']) diff --git a/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx b/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx index 89ffdb976e..3b10a35968 100644 --- a/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx @@ -39,7 +39,7 @@ export function InstanceContainerUI(props: InstanceContainerProps) { {props.instances.instanceList.map((instance, index) => { return ( { - const listenForCompileFinished = async () => { - props.plugin.on('solidity', 'compilationFinished', - (file: string, source, languageVersion, data, input, version) => { - const versionUpdate = `v${version.split('+')[0]}` // remove commit hash - console.log(versionUpdate) - setVersion(versionUpdate) - }) - } - listenForCompileFinished() - - return () => { - props.plugin.off('solidity', 'compilationFinished') - } - }, []) + const [version, setVersion] = useState(props.plugin.compilerVersion ?? '') return ( <> diff --git a/libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx b/libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx index 561c0ad97b..9da8f5f1cd 100644 --- a/libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx @@ -285,7 +285,7 @@ export function UniversalDappUI(props: UdappProps) {
- +
diff --git a/libs/remix-ui/run-tab/src/lib/constants/index.ts b/libs/remix-ui/run-tab/src/lib/constants/index.ts index 016bad8856..5d21a4af2c 100644 --- a/libs/remix-ui/run-tab/src/lib/constants/index.ts +++ b/libs/remix-ui/run-tab/src/lib/constants/index.ts @@ -49,3 +49,4 @@ export const SET_REMIXD_ACTIVATED = 'SET_REMIXD_ACTIVATED' export const FETCH_PROXY_DEPLOYMENTS = 'FETCH_PROXY_DEPLOYMENTS' export const NEW_PROXY_DEPLOYMENT = 'NEW_PROXY_DEPLOYMENT' export const RESET_PROXY_DEPLOYMENTS = 'RESET_PROXY_DEPLOYMENTS' +export const EXTRACT_COMPILER_VERSION = 'EXTRACT_COMPILER_VERSION' diff --git a/libs/remix-ui/run-tab/src/lib/reducers/runTab.ts b/libs/remix-ui/run-tab/src/lib/reducers/runTab.ts index 77f4b24520..bb94357a11 100644 --- a/libs/remix-ui/run-tab/src/lib/reducers/runTab.ts +++ b/libs/remix-ui/run-tab/src/lib/reducers/runTab.ts @@ -1,6 +1,7 @@ import { ContractData } from '@remix-project/core-plugin' import { ContractList, DeployOptions, RunTabState } from '../types' -import { ADD_INSTANCE, UPDATE_INSTANCES_BALANCE, ADD_PROVIDER, CLEAR_INSTANCES, CLEAR_RECORDER_COUNT, DISPLAY_NOTIFICATION, DISPLAY_POPUP_MESSAGE, FETCH_ACCOUNTS_LIST_FAILED, FETCH_ACCOUNTS_LIST_REQUEST, FETCH_ACCOUNTS_LIST_SUCCESS, FETCH_CONTRACT_LIST_FAILED, FETCH_CONTRACT_LIST_REQUEST, FETCH_CONTRACT_LIST_SUCCESS, FETCH_PROVIDER_LIST_FAILED, FETCH_PROVIDER_LIST_REQUEST, FETCH_PROVIDER_LIST_SUCCESS, HIDE_NOTIFICATION, HIDE_POPUP_MESSAGE, REMOVE_INSTANCE, REMOVE_PROVIDER, RESET_STATE, SET_BASE_FEE_PER_GAS, SET_CONFIRM_SETTINGS, SET_CURRENT_CONTRACT, SET_CURRENT_FILE, SET_DECODED_RESPONSE, SET_DEPLOY_OPTIONS, SET_EXECUTION_ENVIRONMENT, SET_EXTERNAL_WEB3_ENDPOINT, SET_GAS_LIMIT, SET_GAS_PRICE, SET_GAS_PRICE_STATUS, SET_IPFS_CHECKED_STATE, SET_LOAD_TYPE, SET_MATCH_PASSPHRASE, SET_MAX_FEE, SET_MAX_PRIORITY_FEE, SET_NETWORK_NAME, SET_PASSPHRASE, SET_PATH_TO_SCENARIO, SET_PERSONAL_MODE, SET_RECORDER_COUNT, SET_SELECTED_ACCOUNT, SET_SEND_UNIT, SET_SEND_VALUE, ADD_DEPLOY_OPTION, REMOVE_DEPLOY_OPTION, SET_REMIXD_ACTIVATED, FETCH_PROXY_DEPLOYMENTS, NEW_PROXY_DEPLOYMENT, RESET_PROXY_DEPLOYMENTS } from '../constants' +import { ADD_INSTANCE, UPDATE_INSTANCES_BALANCE, ADD_PROVIDER, CLEAR_INSTANCES, CLEAR_RECORDER_COUNT, DISPLAY_NOTIFICATION, DISPLAY_POPUP_MESSAGE, FETCH_ACCOUNTS_LIST_FAILED, FETCH_ACCOUNTS_LIST_REQUEST, FETCH_ACCOUNTS_LIST_SUCCESS, FETCH_CONTRACT_LIST_FAILED, FETCH_CONTRACT_LIST_REQUEST, FETCH_CONTRACT_LIST_SUCCESS, FETCH_PROVIDER_LIST_FAILED, FETCH_PROVIDER_LIST_REQUEST, FETCH_PROVIDER_LIST_SUCCESS, HIDE_NOTIFICATION, HIDE_POPUP_MESSAGE, REMOVE_INSTANCE, REMOVE_PROVIDER, RESET_STATE, SET_BASE_FEE_PER_GAS, SET_CONFIRM_SETTINGS, SET_CURRENT_CONTRACT, SET_CURRENT_FILE, SET_DECODED_RESPONSE, SET_DEPLOY_OPTIONS, SET_EXECUTION_ENVIRONMENT, SET_EXTERNAL_WEB3_ENDPOINT, SET_GAS_LIMIT, SET_GAS_PRICE, SET_GAS_PRICE_STATUS, SET_IPFS_CHECKED_STATE, SET_LOAD_TYPE, SET_MATCH_PASSPHRASE, SET_MAX_FEE, SET_MAX_PRIORITY_FEE, SET_NETWORK_NAME, SET_PASSPHRASE, SET_PATH_TO_SCENARIO, SET_PERSONAL_MODE, SET_RECORDER_COUNT, SET_SELECTED_ACCOUNT, SET_SEND_UNIT, SET_SEND_VALUE, ADD_DEPLOY_OPTION, REMOVE_DEPLOY_OPTION, SET_REMIXD_ACTIVATED, FETCH_PROXY_DEPLOYMENTS, NEW_PROXY_DEPLOYMENT, RESET_PROXY_DEPLOYMENTS, EXTRACT_COMPILER_VERSION } from '../constants' +import { extractCompilerVersion } from '../actions/account' declare const window: any interface Action { @@ -411,7 +412,7 @@ export const runTabReducer = (state: RunTabState = runTabInitialState, action: A } } } - + case SET_IPFS_CHECKED_STATE: { const payload: boolean = action.payload @@ -657,6 +658,17 @@ export const runTabReducer = (state: RunTabState = runTabInitialState, action: A } } + case EXTRACT_COMPILER_VERSION: { + const payload = action.payload + return { + ...state, + contracts: { + ...payload.runTab.contracts, + }, + compilerVersion: payload.compilerVersion + } + } + default: return state } diff --git a/libs/remix-ui/run-tab/src/lib/run-tab.tsx b/libs/remix-ui/run-tab/src/lib/run-tab.tsx index 0e032d8651..7328435c0b 100644 --- a/libs/remix-ui/run-tab/src/lib/run-tab.tsx +++ b/libs/remix-ui/run-tab/src/lib/run-tab.tsx @@ -299,6 +299,8 @@ export function RunTabUI(props: RunTabProps) { isValidProxyAddress={isValidProxyAddress} isValidProxyUpgrade={isValidProxyUpgrade} proxy={runTab.proxy} + stateDispatch={dispatch} + runTabState={runTab} />
diff --git a/libs/remix-ui/run-tab/src/lib/types/index.ts b/libs/remix-ui/run-tab/src/lib/types/index.ts index 679ea6b72c..1f12c3957c 100644 --- a/libs/remix-ui/run-tab/src/lib/types/index.ts +++ b/libs/remix-ui/run-tab/src/lib/types/index.ts @@ -103,7 +103,8 @@ export interface RunTabState { remixdActivated: boolean, proxy: { deployments: { address: string, date: string, contractName: string }[] - } + }, + compilerVersion?: string } export interface SettingsProps { @@ -224,6 +225,8 @@ export type MainnetPrompt = ( ) => JSX.Element export interface ContractDropdownProps { + stateDispatch: React.Dispatch, + runTabState: RunTabState, selectedAccount: string, exEnvironment: string, contracts: { @@ -283,7 +286,7 @@ export interface RecorderProps { } export interface InstanceContainerProps { - plugin: RunTab, + state: RunTabState, instances: { instanceList: { contractData?: ContractData, @@ -370,6 +373,8 @@ export interface ContractGUIProps { isValidProxyAddress?: (address: string) => Promise, isValidProxyUpgrade?: (proxyAddress: string) => Promise, modal?: (title: string, message: string | JSX.Element, okLabel: string, okFn: () => void, cancelLabel?: string, cancelFn?: () => void, okBtnClass?: string, cancelBtnClass?: string) => void + dispatch?: React.Dispatch + runTabState?: RunTabState } export interface MainnetProps { network: Network, @@ -397,7 +402,7 @@ export interface UdappProps { decodedResponse?: Record, abi?: any }, - plugin: RunTab, + state: RunTabState, context: 'memory' | 'blockchain', removeInstance: (index: number) => void, index: number,