Update bytecode output to cope with metadata-only compilability.

This commit is contained in:
chriseth 2019-03-04 16:19:34 +01:00
parent fcbb8ec51c
commit 19761a08fa
2 changed files with 30 additions and 9 deletions

View File

@ -10,15 +10,32 @@ report = open("report.txt", "wb")
for optimize in [False, True]: for optimize in [False, True]:
for f in sorted(glob.glob("*.sol")): for f in sorted(glob.glob("*.sol")):
args = [solc, '--combined-json', 'bin,metadata', f] sources = {}
sources[f] = {'content': open(f, 'r').read()}
input = {
'language': 'Solidity',
'sources': sources,
'settings': {
'optimizer': {
'enabled': optimize
},
'outputSelection': { '*': { '*': ['evm.bytecode.object', 'metadata'] } }
}
}
args = [solc, '--standard-json']
if optimize: if optimize:
args += ['--optimize'] args += ['--optimize']
proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(out, err) = proc.communicate() (out, err) = proc.communicate(json.dumps(input))
try: try:
result = json.loads(out.strip()) result = json.loads(out.strip())
for contractName in sorted(result['contracts'].keys()): for filename in sorted(result['contracts'].keys()):
report.write(contractName + ' ' + result['contracts'][contractName]['bin'] + '\n') for contractName in sorted(result['contracts'][filename].keys()):
report.write(contractName + ' ' + result['contracts'][contractName]['metadata'] + '\n') contractData = result['contracts'][filename][contractName]
except: if 'evm' in contractData and 'bytecode' in contractData['evm']:
report.write(filename + ':' + contractName + ' ' + contractData['evm']['bytecode']['object'] + '\n')
else:
report.write(filename + ':' + contractName + ' NO BYTECODE\n')
report.write(filename + ':' + contractName + ' ' + contractData['metadata'] + '\n')
except KeyError:
report.write(f + ": ERROR\n") report.write(f + ": ERROR\n")

View File

@ -88,8 +88,12 @@ for (var optimize of [false, true])
{ {
for (var contractName in result['contracts'][filename]) for (var contractName in result['contracts'][filename])
{ {
console.log(filename + ':' + contractName + ' ' + result['contracts'][filename][contractName].evm.bytecode.object) var contractData = result['contracts'][filename][contractName];
console.log(filename + ':' + contractName + ' ' + result['contracts'][filename][contractName].metadata) if (contractData.evm !== undefined && contractData.evm.bytecode !== undefined)
console.log(filename + ':' + contractName + ' ' + contractData.evm.bytecode.object)
else
console.log(filename + ':' + contractName + ' NO BYTECODE')
console.log(filename + ':' + contractName + ' ' + contractData.metadata)
} }
} }
} }