[WIP] compile-tab: add evmVersion

Specifying a specific EVM version for `solc` to target
is useful when targetting older private chains deployments
with the latest compiler.

This work in progress patch adds an "EVM Version" drop down menu
in the compiler tab.

This patch depends on https://github.com/ethereum/remix/pull/1193
in `remix-solidity` to pass down the `evmVersion` option.
pull/1/head
Scott Tsai 6 years ago committed by yann300
parent 01597bb7d5
commit 3997762249
  1. 13
      src/app/tabs/compileTab/compileTab.js
  2. 46
      src/app/tabs/compileTab/compilerContainer.js

@ -25,6 +25,13 @@ class CompileTab {
this.optimize = this.optimize === 'true'
this.queryParams.update({ optimize: this.optimize })
this.compiler.setOptimize(this.optimize)
this.evmVersion = this.queryParams.get().evmVersion
if (this.evmVersion === 'undefined' || this.evmVersion === 'null' || !this.evmVersion) {
this.evmVersion = null
}
this.queryParams.update({ evmVersion: this.evmVersion })
this.compiler.setEvmVersion(this.evmVersion)
}
setOptimize (newOptimizeValue) {
@ -33,6 +40,12 @@ class CompileTab {
this.compiler.setOptimize(this.optimize)
}
setEvmVersion (newEvmVersion) {
this.evmVersion = newEvmVersion
this.queryParams.update({ evmVersion: this.evmVersion })
this.compiler.setEvmVersion(this.evmVersion)
}
/**
* Compile a specific file of the file manager
* @param {string} target the path to the file to compile

@ -134,6 +134,33 @@ class CompilerContainer {
</select>`
this._view.version = yo`<span id="version"></span>`
this._view.evmVersionSelector = yo`
<select onchange="${this.onchangeEvmVersion.bind(this)}" class="custom-select" id="evmVersionSelector">
<option disabled selected>EVM Version: default</option>
<option value="default">compiler default</option>
<option>petersburg</option>
<option>constantinople</option>
<option>byzantium</option>
<option>spuriousDragon</option>
<option>tangerineWhistle</option>
<option>homestead</option>
</select>`
if (this.compileTabLogic.evmVersion) {
let s = this._view.evmVersionSelector
let i
for (i = 0; i < s.options.length; i++) {
if (s.options[i].value === this.compileTabLogic.evmVersion) {
break
}
}
if (i === s.options.length) { // invalid evmVersion from queryParams
s.selectedIndex = 1 // compiler default
this.onchangeEvmVersion()
} else {
s.selectedIndex = i
}
}
this._view.compilationButton = this.compilationButton()
this._view.compileContainer = yo`
@ -145,6 +172,9 @@ class CompilerContainer {
<label class="input-group-text border-0" for="versionSelector">Compiler</label>
</div>
${this._view.versionSelector}
<div class="input-group-prepend">
</div>
${this._view.evmVersionSelector}
</header>
${this._view.compilationButton}
</article>
@ -189,6 +219,22 @@ class CompilerContainer {
this.compileTabLogic.runCompiler()
}
onchangeEvmVersion (_) {
let s = this._view.evmVersionSelector
let v = s.value
if (v === 'default') {
v = null
}
this.compileTabLogic.setEvmVersion(v)
if (!v) {
v = 'default'
}
const o = yo` <option disabled="disabled" selected="selected">EVM Version: ${v}</option>`
s.options[0] = o
s.selectedIndex = 0
// calling `runCompiler()` here would cause the UI to freeze with the selection drop down menu open
}
onchangeLoadVersion (event) {
this.data.selectedVersion = this._view.versionSelector.value
this._updateVersionSelector()

Loading…
Cancel
Save