From 19761a08fae727dfb0c4af1115fc8fb8d42ad1f4 Mon Sep 17 00:00:00 2001 From: chriseth Date: Mon, 4 Mar 2019 16:19:34 +0100 Subject: [PATCH] Update bytecode output to cope with metadata-only compilability. --- scripts/bytecodecompare/prepare_report.py | 31 ++++++++++++++++++----- scripts/bytecodecompare/storebytecode.sh | 8 ++++-- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/scripts/bytecodecompare/prepare_report.py b/scripts/bytecodecompare/prepare_report.py index 427724b71..41878bb86 100755 --- a/scripts/bytecodecompare/prepare_report.py +++ b/scripts/bytecodecompare/prepare_report.py @@ -10,15 +10,32 @@ report = open("report.txt", "wb") for optimize in [False, True]: 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: args += ['--optimize'] - proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - (out, err) = proc.communicate() + proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (out, err) = proc.communicate(json.dumps(input)) try: result = json.loads(out.strip()) - for contractName in sorted(result['contracts'].keys()): - report.write(contractName + ' ' + result['contracts'][contractName]['bin'] + '\n') - report.write(contractName + ' ' + result['contracts'][contractName]['metadata'] + '\n') - except: + for filename in sorted(result['contracts'].keys()): + for contractName in sorted(result['contracts'][filename].keys()): + contractData = result['contracts'][filename][contractName] + 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") diff --git a/scripts/bytecodecompare/storebytecode.sh b/scripts/bytecodecompare/storebytecode.sh index b7f562621..c993f0c32 100755 --- a/scripts/bytecodecompare/storebytecode.sh +++ b/scripts/bytecodecompare/storebytecode.sh @@ -88,8 +88,12 @@ for (var optimize of [false, true]) { for (var contractName in result['contracts'][filename]) { - console.log(filename + ':' + contractName + ' ' + result['contracts'][filename][contractName].evm.bytecode.object) - console.log(filename + ':' + contractName + ' ' + result['contracts'][filename][contractName].metadata) + var contractData = result['contracts'][filename][contractName]; + 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) } } }