diff --git a/src/app/files/compiler-metadata.js b/src/app/files/compiler-metadata.js index 8a29287e84..2eedb2ca31 100644 --- a/src/app/files/compiler-metadata.js +++ b/src/app/files/compiler-metadata.js @@ -1,65 +1,85 @@ 'use strict' +var executionContext = require('../../execution-context') class CompilerMetadata { constructor (events, opts) { var self = this self._events = events self._opts = opts + self.networks = ['VM:-', 'main:1', 'ropsten:3', 'rinkeby:4', 'kovan:42'] } syncContractMetadata () { var self = this self._events.compiler.register('compilationFinished', (success, data, source) => { - if (success) { - var provider = self._opts.fileManager.currentFileProvider() - var path = self._opts.fileManager.currentPath() - if (provider && path) { - self._opts.compiler.visitContracts((contract) => { - var fileName = path + '/' + contract.name + '.json' - provider.get(fileName, (error, content) => { - if (!error) { - content = content || '{}' - var metadata - try { - metadata = JSON.parse(content) - } catch (e) { - console.log(e) - } - var linkReferences = metadata['linkReferences'] - var autoDeployLib = metadata['autoDeployLib'] - if (!linkReferences) linkReferences = {} - if (autoDeployLib === undefined) autoDeployLib = true - for (var libFile in contract.object.evm.bytecode.linkReferences) { - if (!linkReferences[libFile]) linkReferences[libFile] = {} - for (var lib in contract.object.evm.bytecode.linkReferences[libFile]) { - if (!linkReferences[libFile][lib]) { - linkReferences[libFile][lib] = '
' - } - } - } - metadata['linkReferences'] = linkReferences - metadata['autoDeployLib'] = autoDeployLib - provider.set(fileName, JSON.stringify(metadata, null, '\t')) + if (!success) return + var provider = self._opts.fileManager.currentFileProvider() + var path = self._opts.fileManager.currentPath() + if (provider && path) { + self._opts.compiler.visitContracts((contract) => { + var fileName = path + '/' + contract.name + '.json' + provider.get(fileName, (error, content) => { + if (!error) { + content = content || '{}' + var metadata + try { + metadata = JSON.parse(content) + } catch (e) { + console.log(e) } - }) + + self.networks.forEach((network) => { + metadata[network] = self._syncContext(contract, metadata[network] || {}) + }) + + provider.set(fileName, JSON.stringify(metadata, null, '\t')) + } }) - } + }) } }) } + _syncContext (contract, metadata) { + var linkReferences = metadata['linkReferences'] + var autoDeployLib = metadata['autoDeployLib'] + if (!linkReferences) linkReferences = {} + if (autoDeployLib === undefined) autoDeployLib = true + + for (var libFile in contract.object.evm.bytecode.linkReferences) { + if (!linkReferences[libFile]) linkReferences[libFile] = {} + for (var lib in contract.object.evm.bytecode.linkReferences[libFile]) { + if (!linkReferences[libFile][lib]) { + linkReferences[libFile][lib] = '
' + } + } + } + metadata['linkReferences'] = linkReferences + metadata['autoDeployLib'] = autoDeployLib + return metadata + } + metadataOf (contractName, callback) { var self = this var provider = self._opts.fileManager.currentFileProvider() var path = self._opts.fileManager.currentPath() if (provider && path) { - var fileName = path + '/' + contractName + '.json' - provider.get(fileName, (error, content) => { - if (error) return callback(error) - try { - callback(null, JSON.parse(content)) - } catch (e) { - callback(e.message) + executionContext.detectNetwork((err, { id, name } = {}) => { + if (err) { + console.log(err) + } else { + var fileName = path + '/' + contractName + '.json' + provider.get(fileName, (error, content) => { + if (error) return callback(error) + try { + var metadata = JSON.parse(content) + if (metadata[name + ':' + id]) { + callback(null, metadata[name + ':' + id]) + } + } catch (e) { + callback(e.message) + } + }) } }) }