Skip to content

Commit 6e14a12

Browse files
joeizangAniket-Engg
authored andcommitted
add reducer action to handle solidity compiler version
1 parent dd4392f commit 6e14a12

File tree

11 files changed

+64
-29
lines changed

11 files changed

+64
-29
lines changed

libs/remix-ui/run-tab/src/lib/actions/account.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { shortenAddress } from "@remix-ui/helper"
22
import { RunTab } from "../types/run-tab"
33
import { clearInstances, setAccount, setExecEnv } from "./actions"
44
import { displayNotification, displayPopUp, fetchAccountsListFailed, fetchAccountsListRequest, fetchAccountsListSuccess, setExternalEndpoint, setMatchPassphrase, setPassphrase } from "./payload"
5+
import { RunTabProps, RunTabState } from "../types"
56

67
export const updateAccountBalances = async (plugin: RunTab, dispatch: React.Dispatch<any>) => {
78
const accounts = plugin.REACT_API.accounts.loadedAccounts
@@ -31,7 +32,7 @@ export const fillAccountsList = async (plugin: RunTab, dispatch: React.Dispatch<
3132
for (const account of accounts) {
3233
const balance = await plugin.blockchain.getBalanceInEther(account)
3334
loadedAccounts[account] = shortenAddress(account, balance)
34-
}
35+
}
3536
const provider = plugin.blockchain.getProvider()
3637

3738
if (provider === 'injected') {
@@ -99,4 +100,21 @@ export const signMessageWithAddress = (plugin: RunTab, dispatch: React.Dispatch<
99100
}
100101
dispatch(displayNotification('Signed Message', modalContent(msgHash, signedData), 'OK', null, () => {}, null))
101102
})
102-
}
103+
}
104+
105+
export const extractCompilerVersion = (runTab: RunTabState, dispatch: React.Dispatch<any>) =>
106+
{
107+
const runtabState = Object.entries(runTab['contracts'] ?? {})
108+
const contractList = runtabState[0] ?? {}
109+
const contractNameHolder = runtabState[4] ?? ['currentName', '']
110+
const contractName = contractNameHolder[1] ?? ''
111+
const currentObj = contractList[1] ?? {}
112+
const currObjDetails = currentObj[contractName as string] ?? {}
113+
const currObjDetailsLength = currObjDetails.length -1
114+
const alias = currObjDetails[currObjDetailsLength]['alias'] ?? ''
115+
const serializeTarget = currObjDetails[currObjDetailsLength]?.compiler?.data?.contracts[contractName as string][alias]?.metadata ?? ''
116+
const obj = (serializeTarget as string).length > 0 ? JSON.parse(serializeTarget) : {}
117+
const version = obj?.compiler?.version ?? ''
118+
const compilerVersion = `v${version?.split('+commit')[0]}` ?? 'v'
119+
dispatch({ type: 'EXTRACT_COMPILER_VERSION', payload: {compilerVersion, runTab }})
120+
}

libs/remix-ui/run-tab/src/lib/actions/payload.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ContractData } from '@remix-project/core-plugin'
2-
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'
2+
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'
33
import { ContractList, DeployOptions } from '../types'
44

55
export const fetchAccountsListRequest = () => {
@@ -334,3 +334,10 @@ export const resetProxyDeployments = () => {
334334
type: RESET_PROXY_DEPLOYMENTS,
335335
}
336336
}
337+
338+
export const setCompilerVersion = (version: string) => {
339+
return {
340+
type: EXTRACT_COMPILER_VERSION,
341+
payload: version
342+
}
343+
}

libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,8 @@ export function ContractDropdownUI(props: ContractDropdownProps) {
481481
isValidProxyUpgrade={isValidProxyUpgrade}
482482
modal={props.modal}
483483
disabled={props.selectedAccount === ''}
484+
dispatch={props.stateDispatch}
485+
runTabState={props.runTabState}
484486
/>
485487
<div className="d-flex py-1 align-items-center custom-control custom-checkbox">
486488
<input

libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {ContractGUIProps} from '../types'
66
import {CopyToClipboard} from '@remix-ui/clipboard'
77
import {CustomTooltip, ProxyAddressToggle, ProxyDropdownMenu, shortenDate, shortenProxyAddress, unavailableProxyLayoutMsg, upgradeReportMsg} from '@remix-ui/helper'
88
import {Dropdown} from 'react-bootstrap'
9+
import { extractCompilerVersion } from '../actions/account'
910

1011
const txFormat = remixLib.execution.txFormat
1112
const txHelper = remixLib.execution.txHelper
@@ -173,6 +174,7 @@ export function ContractGUI(props: ContractGUIProps) {
173174
}
174175

175176
const handleActionClick = async () => {
177+
extractCompilerVersion(props.runTabState, props.dispatch)
176178
if (deployState.deploy) {
177179
const proxyInitializeString = getMultiValsString(initializeFields.current)
178180
props.clickCallBack(props.initializerOptions.inputs.inputs, proxyInitializeString, ['Deploy with Proxy'])

libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export function InstanceContainerUI(props: InstanceContainerProps) {
3939
{props.instances.instanceList.map((instance, index) => {
4040
return (
4141
<UniversalDappUI
42-
plugin={props.plugin}
42+
state={props.state}
4343
key={index}
4444
instance={instance}
4545
context={props.getContext()}

libs/remix-ui/run-tab/src/lib/components/lowlevelInteractionIcon.tsx

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,15 @@ import { CustomTooltip } from '@remix-ui/helper'
22
import React, { useEffect, useState } from 'react'
33
import { FormattedMessage } from 'react-intl'
44
import { RunTab } from '../types/run-tab'
5+
import { extractCompilerVersion } from '../actions/account'
6+
import { RunTabState } from '../types'
57

68
export type LowLevelInteractionIconProps = {
7-
plugin: RunTab
9+
plugin: RunTabState
810
}
911

1012
export function LowLevelInteractionIcon (props: LowLevelInteractionIconProps) {
11-
const [version, setVersion] = useState('')
12-
13-
useEffect(() => {
14-
const listenForCompileFinished = async () => {
15-
props.plugin.on('solidity', 'compilationFinished',
16-
(file: string, source, languageVersion, data, input, version) => {
17-
const versionUpdate = `v${version.split('+')[0]}` // remove commit hash
18-
console.log(versionUpdate)
19-
setVersion(versionUpdate)
20-
})
21-
}
22-
listenForCompileFinished()
23-
24-
return () => {
25-
props.plugin.off('solidity', 'compilationFinished')
26-
}
27-
}, [])
13+
const [version, setVersion] = useState(props.plugin.compilerVersion ?? '')
2814

2915
return (
3016
<>

libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ export function UniversalDappUI(props: UdappProps) {
285285
<div className="py-2 border-top d-flex justify-content-start flex-grow-1">
286286
<FormattedMessage id="udapp.lowLevelInteractions" />
287287
</div>
288-
<LowLevelInteractionIcon plugin={props.plugin} />
288+
<LowLevelInteractionIcon plugin={props.state} />
289289
</div>
290290
<div className="d-flex flex-column align-items-start">
291291
<label className="">CALLDATA</label>

libs/remix-ui/run-tab/src/lib/constants/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,4 @@ export const SET_REMIXD_ACTIVATED = 'SET_REMIXD_ACTIVATED'
4949
export const FETCH_PROXY_DEPLOYMENTS = 'FETCH_PROXY_DEPLOYMENTS'
5050
export const NEW_PROXY_DEPLOYMENT = 'NEW_PROXY_DEPLOYMENT'
5151
export const RESET_PROXY_DEPLOYMENTS = 'RESET_PROXY_DEPLOYMENTS'
52+
export const EXTRACT_COMPILER_VERSION = 'EXTRACT_COMPILER_VERSION'

libs/remix-ui/run-tab/src/lib/reducers/runTab.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ContractData } from '@remix-project/core-plugin'
22
import { ContractList, DeployOptions, RunTabState } from '../types'
3-
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'
3+
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'
4+
import { extractCompilerVersion } from '../actions/account'
45

56
declare const window: any
67
interface Action {
@@ -411,7 +412,7 @@ export const runTabReducer = (state: RunTabState = runTabInitialState, action: A
411412
}
412413
}
413414
}
414-
415+
415416
case SET_IPFS_CHECKED_STATE: {
416417
const payload: boolean = action.payload
417418

@@ -657,6 +658,17 @@ export const runTabReducer = (state: RunTabState = runTabInitialState, action: A
657658
}
658659
}
659660

661+
case EXTRACT_COMPILER_VERSION: {
662+
const payload = action.payload
663+
return {
664+
...state,
665+
contracts: {
666+
...payload.runTab.contracts,
667+
},
668+
compilerVersion: payload.compilerVersion
669+
}
670+
}
671+
660672
default:
661673
return state
662674
}

libs/remix-ui/run-tab/src/lib/run-tab.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,8 @@ export function RunTabUI(props: RunTabProps) {
299299
isValidProxyAddress={isValidProxyAddress}
300300
isValidProxyUpgrade={isValidProxyUpgrade}
301301
proxy={runTab.proxy}
302+
stateDispatch={dispatch}
303+
runTabState={runTab}
302304
/>
303305
<RecorderUI
304306
plugin={plugin}
@@ -322,7 +324,7 @@ export function RunTabUI(props: RunTabProps) {
322324
runTransactions={executeTransactions}
323325
sendValue={runTab.sendValue}
324326
getFuncABIInputs={getFuncABIValues}
325-
plugin={props.plugin}
327+
state={runTab}
326328
/>
327329
</div>
328330
</div>

0 commit comments

Comments
 (0)