option for generating metadata

pull/3094/head
yann300 6 years ago
parent 62c0d79bc7
commit 551577b04b
  1. 2
      src/app/files/compiler-metadata.js
  2. 3
      src/app/panels/file-panel.js
  3. 1
      src/app/tabs/run-tab.js
  4. 11
      src/app/tabs/settings-tab.js

@ -13,6 +13,7 @@ class CompilerMetadata {
var self = this var self = this
self._events.compiler.register('compilationFinished', (success, data, source) => { self._events.compiler.register('compilationFinished', (success, data, source) => {
if (!success) return if (!success) return
if (!self._opts.config.get('settings/generate-contract-metadata')) return
var provider = self._opts.fileManager.currentFileProvider() var provider = self._opts.fileManager.currentFileProvider()
var path = self._opts.fileManager.currentPath() var path = self._opts.fileManager.currentPath()
if (provider && path) { if (provider && path) {
@ -71,6 +72,7 @@ class CompilerMetadata {
var fileName = path + '/' + contractName + '.json' var fileName = path + '/' + contractName + '.json'
provider.get(fileName, (error, content) => { provider.get(fileName, (error, content) => {
if (error) return callback(error) if (error) return callback(error)
if (!content) return callback()
try { try {
var metadata = JSON.parse(content) var metadata = JSON.parse(content)
return callback(null, metadata[name + ':' + id] || metadata[name] || metadata[id] || metadata[name.toLowerCase() + ':' + id] || metadata[name.toLowerCase()]) return callback(null, metadata[name + ':' + id] || metadata[name] || metadata[id] || metadata[name.toLowerCase() + ':' + id] || metadata[name.toLowerCase()])

@ -68,7 +68,8 @@ function filepanel (localRegistry) {
}, },
{ {
fileManager: self._deps.fileManager, fileManager: self._deps.fileManager,
compiler: self._deps.compiler compiler: self._deps.compiler,
config: self._deps.config
} }
) )
self._compilerMetadata.syncContractMetadata() self._compilerMetadata.syncContractMetadata()

@ -397,6 +397,7 @@ function contractDropdown (events, self) {
self._deps.udapp.runTx(data, runTxCallback) self._deps.udapp.runTx(data, runTxCallback)
}) })
} else { } else {
if (Object.keys(selectedContract.contract.object.evm.bytecode.linkReferences).length) self._deps.logCallback(`linking ${JSON.stringify(selectedContract.contract.object.evm.bytecode.linkReferences, null, '\t')} using ${JSON.stringify(contractMetadata.linkReferences, null, '\t')}`)
txFormat.encodeConstructorCallAndLinkLibraries(selectedContract.contract.object, args, constructor, contractMetadata.linkReferences, selectedContract.contract.object.evm.bytecode.linkReferences, (error, data) => { txFormat.encodeConstructorCallAndLinkLibraries(selectedContract.contract.object, args, constructor, contractMetadata.linkReferences, selectedContract.contract.object.evm.bytecode.linkReferences, (error, data) => {
createInstanceCallback(error, selectedContract, data) createInstanceCallback(error, selectedContract, data)
}) })

@ -26,7 +26,7 @@ module.exports = class SettingsTab {
} }
self._view = { /* eslint-disable */ self._view = { /* eslint-disable */
el: null, el: null,
optionVM: null, personal: null, warnPersonalMode: null, optionVM: null, personal: null, warnPersonalMode: null, generateContractMetadata: null,
pluginInput: null, versionSelector: null, version: null, pluginInput: null, versionSelector: null, version: null,
theme: { dark: null, light: null }, theme: { dark: null, light: null },
plugins: {}, plugins: {},
@ -62,6 +62,8 @@ module.exports = class SettingsTab {
It is not recommended (and also most likely not relevant) to use this mode with an injected provider (Mist, Metamask, ...) or with JavaScript VM. It is not recommended (and also most likely not relevant) to use this mode with an injected provider (Mist, Metamask, ...) or with JavaScript VM.
Remix never persist any passphrase.`.split('\n').map(s => s.trim()).join(' ') Remix never persist any passphrase.`.split('\n').map(s => s.trim()).join(' ')
self._view.warnPersonalMode = yo`<i title=${warnText} class="${css.icon} fa fa-exclamation-triangle" aria-hidden="true"></i>` self._view.warnPersonalMode = yo`<i title=${warnText} class="${css.icon} fa fa-exclamation-triangle" aria-hidden="true"></i>`
self._view.generateContractMetadata = yo`<input onchange=${onchangeGenerateContractMetadata} id="generatecontractmetadata" type="checkbox">`
if (self._deps.config.get('settings/generate-contract-metadata')) self._view.generateContractMetadata.setAttribute('checked', '')
self._view.pluginInput = yo`<textarea rows="4" cols="70" id="plugininput" type="text" class="${css.pluginTextArea}" ></textarea>` self._view.pluginInput = yo`<textarea rows="4" cols="70" id="plugininput" type="text" class="${css.pluginTextArea}" ></textarea>`
self._view.theme.light = yo`<input onchange=${onswitch2lightTheme} class="${css.col1}" name="theme" id="themeLight" type="radio">` self._view.theme.light = yo`<input onchange=${onswitch2lightTheme} class="${css.col1}" name="theme" id="themeLight" type="radio">`
@ -71,6 +73,10 @@ module.exports = class SettingsTab {
self._view.config.general = yo` self._view.config.general = yo`
<div class="${css.info}"> <div class="${css.info}">
<div class=${css.title}>General settings</div> <div class=${css.title}>General settings</div>
<div class="${css.crow}">
<div>${self._view.generateContractMetadata}</div>
<span class="${css.checkboxText}">Generate contract metadata. Generate a JSON file in the contract folder. Allows to specify library addresses the contract depends on. If nothing is specified, Remix deploy libraries automatically.</span>
</div>
<div class="${css.crow}"> <div class="${css.crow}">
<div>${self._view.optionVM}</div> <div>${self._view.optionVM}</div>
<span class="${css.checkboxText}">Always use Ethereum VM at Load</span> <span class="${css.checkboxText}">Always use Ethereum VM at Load</span>
@ -176,6 +182,9 @@ module.exports = class SettingsTab {
loadPlugins([json], {removable: true}) loadPlugins([json], {removable: true})
} }
function onchangeGenerateContractMetadata (event) {
self._deps.config.set('settings/generate-contract-metadata', !self._deps.config.get('settings/generate-contract-metadata'))
}
function onchangeOption (event) { function onchangeOption (event) {
self._deps.config.set('settings/always-use-vm', !self._deps.config.get('settings/always-use-vm')) self._deps.config.set('settings/always-use-vm', !self._deps.config.get('settings/always-use-vm'))
} }

Loading…
Cancel
Save