json file include network id

pull/1/head
yann300 6 years ago
parent aa425d4fac
commit c3a9c388b1
  1. 98
      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] = '<address>'
}
}
}
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] = '<address>'
}
}
}
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)
}
})
}
})
}

Loading…
Cancel
Save