diff --git a/apps/remix-ide-e2e/src/commands/verifyContracts.ts b/apps/remix-ide-e2e/src/commands/verifyContracts.ts
index 027f71dd05..e7dbf4a591 100644
--- a/apps/remix-ide-e2e/src/commands/verifyContracts.ts
+++ b/apps/remix-ide-e2e/src/commands/verifyContracts.ts
@@ -22,6 +22,9 @@ function verifyContracts (browser: NightwatchBrowser, compiledContractNames: str
if (opts.version) {
browser
.click('*[data-id="compilation-details"]')
+ .waitForElementVisible('*[data-id="remixui_treeviewitem_metadata"]')
+ .pause(2000)
+ .click('*[data-id="remixui_treeviewitem_metadata"]')
.waitForElementVisible('*[data-id="treeViewDivtreeViewItemcompiler"]')
.pause(2000)
.click('*[data-id="treeViewDivtreeViewItemcompiler"]')
diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js
index f1751e2a86..d2397b7ac9 100644
--- a/apps/remix-ide/src/app.js
+++ b/apps/remix-ide/src/app.js
@@ -419,6 +419,8 @@ Please make a backup of your contracts and start using http://remix.ethereum.org
fn: null
}
)
+ } else {
+ startWalkthroughService()
}
// CONTENT VIEWS & DEFAULT PLUGINS
@@ -514,6 +516,4 @@ Please make a backup of your contracts and start using http://remix.ethereum.org
if (params.embed) framingService.embed()
framingService.start(params)
-
- startWalkthroughService()
}
diff --git a/apps/remix-ide/src/app/ui/landing-page/landing-page.js b/apps/remix-ide/src/app/ui/landing-page/landing-page.js
index 8652017b2a..7085a04649 100644
--- a/apps/remix-ide/src/app/ui/landing-page/landing-page.js
+++ b/apps/remix-ide/src/app/ui/landing-page/landing-page.js
@@ -216,7 +216,7 @@ export class LandingPage extends ViewPlugin {
const invertNum = (themeQuality === 'dark') ? 1 : 0
if (this.solEnv.getElementsByTagName('img')[0]) this.solEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
- if (this.debuggerEnv.getElementsByTagName('img')[0]) this.debuggerEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
+ if (this.optimismEnv.getElementsByTagName('img')[0]) this.optimismEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
if (this.solhintEnv.getElementsByTagName('img')[0]) this.solhintEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
if (this.learnEthEnv.getElementsByTagName('img')[0]) this.learnEthEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
if (this.sourcifyEnv.getElementsByTagName('img')[0]) this.sourcifyEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
@@ -277,10 +277,10 @@ export class LandingPage extends ViewPlugin {
this.verticalIcons.select('solidity')
_paq.push(['trackEvent', 'pluginManager', 'userActivate', 'solidity'])
}
- const startDebugger = async () => {
- await this.appManager.activatePlugin('debugger')
- this.verticalIcons.select('debugger')
- _paq.push(['trackEvent', 'pluginManager', 'userActivate', 'debugger'])
+ const startOptimism = async () => {
+ await this.appManager.activatePlugin('optimism-compiler')
+ this.verticalIcons.select('optimism-compiler')
+ _paq.push(['trackEvent', 'pluginManager', 'userActivate', 'optimism-compiler'])
}
const startSolhint = async () => {
await this.appManager.activatePlugin(['solidity', 'solhint'])
@@ -385,8 +385,8 @@ export class LandingPage extends ViewPlugin {
// main
this.solEnv = createLargeButton('assets/img/solidityLogo.webp', 'solidityLogo', 'Solidity', startSolidity)
// Featured
- this.debuggerEnv = createLargeButton('assets/img/debuggerLogo.webp', 'debuggerLogo', 'Debugger', startDebugger)
- this.solhintEnv = createLargeButton('assets/img/solhintLogo.png', 'solhintLogo', 'solhint linter', startSolhint)
+ this.optimismEnv = createLargeButton('assets/img/optimismLogo.webp', 'optimismLogo', 'Optimism', startOptimism)
+ this.solhintEnv = createLargeButton('assets/img/solhintLogo.png', 'solhintLogo', 'Solhint linter', startSolhint)
this.learnEthEnv = createLargeButton('assets/img/learnEthLogo.webp', 'learnEthLogo', 'LearnEth', startLearnEth)
this.sourcifyEnv = createLargeButton('assets/img/sourcifyLogo.webp', 'sourcifyLogo', 'Sourcify', startSourceVerify)
this.moreEnv = createLargeButton('assets/img/moreLogo.webp', 'moreLogo', 'More', startPluginManager)
@@ -395,7 +395,7 @@ export class LandingPage extends ViewPlugin {
const themeQuality = globalRegistry.get('themeModule').api.currentTheme().quality
const invertNum = (themeQuality === 'dark') ? 1 : 0
this.solEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
- this.debuggerEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
+ this.optimismEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
this.solhintEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
this.learnEthEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
this.sourcifyEnv.getElementsByTagName('img')[0].style.filter = `invert(${invertNum})`
@@ -505,10 +505,10 @@ export class LandingPage extends ViewPlugin {
Featured Plugins
${this.solEnv}
+ ${this.optimismEnv}
${this.learnEthEnv}
${this.solhintEnv}
- ${this.sourcifyEnv}
- ${this.debuggerEnv}
+ ${this.sourcifyEnv}
${this.moreEnv}
diff --git a/apps/remix-ide/src/assets/img/optimismLogo.webp b/apps/remix-ide/src/assets/img/optimismLogo.webp
new file mode 100644
index 0000000000..d7569da3f1
Binary files /dev/null and b/apps/remix-ide/src/assets/img/optimismLogo.webp differ
diff --git a/libs/remix-analyzer/package.json b/libs/remix-analyzer/package.json
index 0cf6c4702e..fbad74e65f 100644
--- a/libs/remix-analyzer/package.json
+++ b/libs/remix-analyzer/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-analyzer",
- "version": "0.5.12",
+ "version": "0.5.13",
"description": "Tool to perform static analysis on Solidity smart contracts",
"main": "index.js",
"types": ".index.d.ts",
@@ -23,7 +23,7 @@
"@ethereumjs/tx": "^3.2.1",
"@ethereumjs/vm": "^5.4.1",
"@remix-project/remix-astwalker": "^0.0.26",
- "@remix-project/remix-lib": "^0.5.3",
+ "@remix-project/remix-lib": "^0.5.4",
"async": "^2.6.2",
"ethereumjs-util": "^7.0.10",
"ethers": "^5.1.4",
@@ -51,5 +51,5 @@
"typescript": "^3.7.5"
},
"typings": "index.d.ts",
- "gitHead": "5e91f3010a7198f1b2d90cc7796bda750c58f1ea"
+ "gitHead": "664824605fa84648c79770631da371d4f81e0052"
}
\ No newline at end of file
diff --git a/libs/remix-astwalker/package.json b/libs/remix-astwalker/package.json
index 5642455132..a2f1962073 100644
--- a/libs/remix-astwalker/package.json
+++ b/libs/remix-astwalker/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-astwalker",
- "version": "0.0.33",
+ "version": "0.0.34",
"description": "Tool to walk through Solidity AST",
"main": "index.js",
"scripts": {
@@ -37,7 +37,7 @@
"@ethereumjs/block": "^3.3.0",
"@ethereumjs/tx": "^3.2.1",
"@ethereumjs/vm": "^5.4.1",
- "@remix-project/remix-lib": "^0.5.3",
+ "@remix-project/remix-lib": "^0.5.4",
"@types/tape": "^4.2.33",
"async": "^2.6.2",
"ethereumjs-util": "^7.0.10",
@@ -53,5 +53,5 @@
"tap-spec": "^5.0.0"
},
"typings": "index.d.ts",
- "gitHead": "5e91f3010a7198f1b2d90cc7796bda750c58f1ea"
+ "gitHead": "664824605fa84648c79770631da371d4f81e0052"
}
\ No newline at end of file
diff --git a/libs/remix-debug/package.json b/libs/remix-debug/package.json
index 5a8a8bc22b..73626b19d9 100644
--- a/libs/remix-debug/package.json
+++ b/libs/remix-debug/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-debug",
- "version": "0.5.3",
+ "version": "0.5.4",
"description": "Tool to debug Ethereum transactions",
"contributors": [
{
@@ -23,7 +23,7 @@
"@ethereumjs/tx": "^3.2.1",
"@ethereumjs/vm": "^5.4.1",
"@remix-project/remix-astwalker": "^0.0.26",
- "@remix-project/remix-lib": "^0.5.3",
+ "@remix-project/remix-lib": "^0.5.4",
"async": "^2.6.2",
"commander": "^2.19.0",
"deep-equal": "^1.0.1",
@@ -61,5 +61,5 @@
},
"homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-debug#readme",
"typings": "src/index.d.ts",
- "gitHead": "5e91f3010a7198f1b2d90cc7796bda750c58f1ea"
+ "gitHead": "664824605fa84648c79770631da371d4f81e0052"
}
\ No newline at end of file
diff --git a/libs/remix-lib/package.json b/libs/remix-lib/package.json
index 61a31e7d3f..56524a52af 100644
--- a/libs/remix-lib/package.json
+++ b/libs/remix-lib/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-lib",
- "version": "0.5.3",
+ "version": "0.5.4",
"description": "Library to various Remix tools",
"contributors": [
{
@@ -53,5 +53,5 @@
},
"homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-lib#readme",
"typings": "src/index.d.ts",
- "gitHead": "5e91f3010a7198f1b2d90cc7796bda750c58f1ea"
+ "gitHead": "664824605fa84648c79770631da371d4f81e0052"
}
\ No newline at end of file
diff --git a/libs/remix-simulator/package.json b/libs/remix-simulator/package.json
index d0ab857b8c..7775767bb9 100644
--- a/libs/remix-simulator/package.json
+++ b/libs/remix-simulator/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-simulator",
- "version": "0.2.3",
+ "version": "0.2.4",
"description": "Ethereum IDE and tools for the web",
"contributors": [
{
@@ -18,7 +18,7 @@
"@ethereumjs/common": "^2.2.0",
"@ethereumjs/tx": "^3.2.1",
"@ethereumjs/vm": "^5.4.1",
- "@remix-project/remix-lib": "^0.5.3",
+ "@remix-project/remix-lib": "^0.5.4",
"ansi-gray": "^0.1.1",
"async": "^3.1.0",
"body-parser": "^1.18.2",
@@ -66,5 +66,5 @@
},
"homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-simulator#readme",
"typings": "src/index.d.ts",
- "gitHead": "5e91f3010a7198f1b2d90cc7796bda750c58f1ea"
+ "gitHead": "664824605fa84648c79770631da371d4f81e0052"
}
\ No newline at end of file
diff --git a/libs/remix-solidity/package.json b/libs/remix-solidity/package.json
index e338edf16c..0cae8fcdc4 100644
--- a/libs/remix-solidity/package.json
+++ b/libs/remix-solidity/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-solidity",
- "version": "0.4.3",
+ "version": "0.4.4",
"description": "Tool to load and run Solidity compiler",
"main": "index.js",
"types": "./index.d.ts",
@@ -18,7 +18,7 @@
"@ethereumjs/block": "^3.3.0",
"@ethereumjs/tx": "^3.2.1",
"@ethereumjs/vm": "^5.4.1",
- "@remix-project/remix-lib": "^0.5.3",
+ "@remix-project/remix-lib": "^0.5.4",
"async": "^2.6.2",
"eslint-scope": "^5.0.0",
"ethereumjs-util": "^7.0.10",
@@ -59,5 +59,5 @@
},
"homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-solidity#readme",
"typings": "index.d.ts",
- "gitHead": "5e91f3010a7198f1b2d90cc7796bda750c58f1ea"
+ "gitHead": "664824605fa84648c79770631da371d4f81e0052"
}
\ No newline at end of file
diff --git a/libs/remix-tests/package.json b/libs/remix-tests/package.json
index f8c5c5184b..d63c4143f7 100644
--- a/libs/remix-tests/package.json
+++ b/libs/remix-tests/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-tests",
- "version": "0.2.3",
+ "version": "0.2.4",
"description": "Tool to test Solidity smart contracts",
"main": "src/index.js",
"types": "./src/index.d.ts",
@@ -39,9 +39,9 @@
"@ethereumjs/common": "^2.2.0",
"@ethereumjs/tx": "^3.2.1",
"@ethereumjs/vm": "^5.4.1",
- "@remix-project/remix-lib": "^0.5.3",
- "@remix-project/remix-simulator": "^0.2.3",
- "@remix-project/remix-solidity": "^0.4.3",
+ "@remix-project/remix-lib": "^0.5.4",
+ "@remix-project/remix-simulator": "^0.2.4",
+ "@remix-project/remix-solidity": "^0.4.4",
"ansi-gray": "^0.1.1",
"async": "^2.6.0",
"axios": ">=0.21.1",
@@ -77,5 +77,5 @@
"typescript": "^3.3.1"
},
"typings": "src/index.d.ts",
- "gitHead": "5e91f3010a7198f1b2d90cc7796bda750c58f1ea"
+ "gitHead": "664824605fa84648c79770631da371d4f81e0052"
}
\ No newline at end of file
diff --git a/libs/remix-ui/modal-dialog/src/lib/remix-ui-modal-dialog.tsx b/libs/remix-ui/modal-dialog/src/lib/remix-ui-modal-dialog.tsx
index ec016068e9..6a764a85e2 100644
--- a/libs/remix-ui/modal-dialog/src/lib/remix-ui-modal-dialog.tsx
+++ b/libs/remix-ui/modal-dialog/src/lib/remix-ui-modal-dialog.tsx
@@ -16,6 +16,24 @@ export const ModalDialog = (props: ModalDialogProps) => {
modal.current.focus()
}, [props.hide])
+ useEffect(() => {
+ function handleBlur (e) {
+ if (!e.currentTarget.contains(e.relatedTarget)) {
+ e.stopPropagation()
+ if (document.activeElement !== this) {
+ handleHide()
+ }
+ }
+ }
+ if (modal.current) {
+ modal.current.addEventListener('blur', handleBlur)
+
+ return () => {
+ modal.current.removeEventListener('blur', handleBlur)
+ }
+ }
+ }, [modal.current])
+
const modalKeyEvent = (keyCode) => {
if (keyCode === 27) { // Esc
if (props.cancelFn) props.cancelFn()
@@ -40,13 +58,6 @@ export const ModalDialog = (props: ModalDialogProps) => {
handleHide()
}
- const handleBlur = (e) => {
- if (!e.currentTarget.contains(e.relatedTarget)) {
- e.stopPropagation()
- handleHide()
- }
- }
-
return (
{
>
(dispatch: React.Disp
})
compileTabLogic.compiler.event.register('loadingCompiler', () => {
- dispatch(setCompilerMode('compilationDuration'))
+ dispatch(setCompilerMode('loadingCompiler'))
})
compileTabLogic.compiler.event.register('compilerLoaded', () => {
diff --git a/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx b/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx
index 0d40bd011c..5b0c5c55f4 100644
--- a/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx
+++ b/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx
@@ -8,6 +8,14 @@ import { resetEditorMode, listenToEvents } from './actions/compiler'
import './css/style.css'
+declare global {
+ interface Window {
+ _paq: any
+ }
+}
+
+const _paq = window._paq = window._paq || [] //eslint-disable-line
+
export const CompilerContainer = (props: CompilerContainerProps) => {
const { editor, config, queryParams, compileTabLogic, tooltip, modal, compiledFileName, setHardHatCompilation, updateCurrentVersion, isHardHatProject, configurationSettings } = props // eslint-disable-line
const [state, setState] = useState({
@@ -27,8 +35,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
language: '',
evmVersion: ''
})
+ const [disableCompileButton, setDisableCompileButton] = useState(false)
const compileIcon = useRef(null)
- const warningIcon = useRef(null)
const promptMessageInput = useRef(null)
const [hhCompilation, sethhCompilation] = useState(false)
const [compilerContainer, dispatch] = useReducer(compilerReducer, compilerInitialState)
@@ -75,6 +83,9 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
}, [compileTabLogic])
useEffect(() => {
+ const isDisabled = !compiledFileName || (compiledFileName && !isSolFileSelected(compiledFileName))
+
+ setDisableCompileButton(isDisabled)
setState(prevState => {
return { ...prevState, compiledFileName }
})
@@ -235,14 +246,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
}
const compilationDuration = (speed: number) => {
- if (!warningIcon.current) return
if (speed > 1000) {
- const msg = `Last compilation took ${speed}ms. We suggest to turn off autocompilation.`
-
- warningIcon.current.setAttribute('title', msg)
- warningIcon.current.style.visibility = 'visible'
- } else {
- warningIcon.current.style.visibility = 'hidden'
+ console.log(`Last compilation took ${speed}ms. We suggest to turn off autocompilation.`)
}
}
@@ -256,8 +261,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
if (!compileIcon.current) return
compileIcon.current.setAttribute('title', 'compiler is loading, please wait a few moments.')
compileIcon.current.classList.add('remixui_spinningIcon')
- warningIcon.current.style.visibility = 'hidden'
_updateLanguageSelector()
+ setDisableCompileButton(true)
}
const compilerLoaded = () => {
@@ -265,6 +270,9 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
compileIcon.current.setAttribute('title', '')
compileIcon.current.classList.remove('remixui_spinningIcon')
if (state.autoCompile) compile()
+ const isDisabled = !compiledFileName || (compiledFileName && !isSolFileSelected(compiledFileName))
+
+ setDisableCompileButton(isDisabled)
}
const compilationFinished = () => {
@@ -272,6 +280,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
compileIcon.current.setAttribute('title', 'idle')
compileIcon.current.classList.remove('remixui_spinningIcon')
compileIcon.current.classList.remove('remixui_bouncingIcon')
+ _paq.push(['trackEvent', 'compiler', 'compiled_with_version', _retrieveVersion()])
}
const scheduleCompilation = () => {
@@ -292,7 +301,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
if (!isSolFileSelected()) return
_setCompilerVersionFromPragma(currentFile)
- compileTabLogic.runCompiler()
+ compileTabLogic.runCompiler(hhCompilation)
}
const _retrieveVersion = (version?) => {
@@ -440,6 +449,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
const handleNightliesChange = (e) => {
const checked = e.target.checked
+ if (!checked) handleLoadVersion(state.defaultVersion)
config.set('includeNightlies', checked)
setState(prevState => {
return { ...prevState, includeNightlies: checked }
@@ -522,6 +532,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
}
-
modal(selectedContract, log, 'Close', null)
diff --git a/libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx b/libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx
index 2369404a90..a41d68a36d 100644
--- a/libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx
+++ b/libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx
@@ -89,6 +89,10 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
dispatch({ type: '', payload: {} })
// Show 'Enable Slither Analysis' checkbox
if (currentWorkspace && currentWorkspace.isLocalhost === true) setShowSlither('visible')
+ else {
+ setShowSlither('hidden')
+ setSlitherEnabled(false)
+ }
})
return () => { }
}, [props])
@@ -245,8 +249,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
showWarnings(warningMessage, 'warningModuleName')
props.event.trigger('staticAnaysisWarning', [warningCount])
}
- }).catch((error) => {
- console.log('Error found:', error) // This should be removed once testing done
+ }).catch(() => {
props.analysisModule.call('terminal', 'log', { type: 'error', value: '[Slither Analysis]: Error occured! See remixd console for details.' })
showWarnings(warningMessage, 'warningModuleName')
})
diff --git a/libs/remix-url-resolver/package.json b/libs/remix-url-resolver/package.json
index 7a6c7baeca..edd1a95af7 100644
--- a/libs/remix-url-resolver/package.json
+++ b/libs/remix-url-resolver/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-url-resolver",
- "version": "0.0.24",
+ "version": "0.0.25",
"description": "Solidity import url resolver engine",
"main": "index.js",
"types": "./index.d.ts",
@@ -42,5 +42,5 @@
"typescript": "^3.1.6"
},
"typings": "index.d.ts",
- "gitHead": "5e91f3010a7198f1b2d90cc7796bda750c58f1ea"
+ "gitHead": "664824605fa84648c79770631da371d4f81e0052"
}
\ No newline at end of file
diff --git a/libs/remixd/package.json b/libs/remixd/package.json
index 064fce325a..6f9123c651 100644
--- a/libs/remixd/package.json
+++ b/libs/remixd/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-project/remixd",
- "version": "0.4.2",
+ "version": "0.5.0",
"description": "remix server: allow accessing file system from remix.ethereum.org and start a dev environment (see help section)",
"main": "index.js",
"types": "./index.d.ts",
diff --git a/libs/remixd/src/services/slitherClient.ts b/libs/remixd/src/services/slitherClient.ts
index e2d9a281bb..a0808d281f 100644
--- a/libs/remixd/src/services/slitherClient.ts
+++ b/libs/remixd/src/services/slitherClient.ts
@@ -120,9 +120,9 @@ export class SlitherClient extends PluginClient {
allowPaths = allowPathString
remaps = remapString.trim()
}
- const allowPathsOption: string = allowPaths ? `--allow-paths ${allowPaths}` : ''
- const optimizeOption: string = optimize ? ' --optimize ' : ''
- const evmOption: string = evmVersion ? ` --evm-version ${evmVersion}` : ''
+ const allowPathsOption: string = allowPaths ? `--allow-paths ${allowPaths} ` : ''
+ const optimizeOption: string = optimize ? '--optimize ' : ''
+ const evmOption: string = evmVersion ? `--evm-version ${evmVersion}` : ''
const solcArgs: string = optimizeOption || evmOption || allowPathsOption ? `--solc-args '${allowPathsOption}${optimizeOption}${evmOption}'` : ''
const solcRemaps = remaps ? `--solc-remaps "${remaps}"` : ''