mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| import sys
 | |
| import glob
 | |
| import subprocess
 | |
| import json
 | |
| 
 | |
| SOLC_BIN = sys.argv[1]
 | |
| REPORT_FILE = open("report.txt", mode="w", encoding='utf8', newline='\n')
 | |
| 
 | |
| for optimize in [False, True]:
 | |
|     for f in sorted(glob.glob("*.sol")):
 | |
|         sources = {}
 | |
|         sources[f] = {'content': open(f, mode='r', encoding='utf8').read()}
 | |
|         input_json = {
 | |
|             'language': 'Solidity',
 | |
|             'sources': sources,
 | |
|             'settings': {
 | |
|                 'optimizer': {
 | |
|                     'enabled': optimize
 | |
|                 },
 | |
|                 'outputSelection': {'*': {'*': ['evm.bytecode.object', 'metadata']}},
 | |
|                 'modelChecker': { "engine": 'none' }
 | |
|             }
 | |
|         }
 | |
|         args = [SOLC_BIN, '--standard-json']
 | |
|         if optimize:
 | |
|             args += ['--optimize']
 | |
|         proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|         (out, err) = proc.communicate(json.dumps(input_json).encode('utf-8'))
 | |
|         try:
 | |
|             result = json.loads(out.decode('utf-8').strip())
 | |
|             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_FILE.write(filename + ':' + contractName + ' ' +
 | |
|                                             contractData['evm']['bytecode']['object'] + '\n')
 | |
|                     else:
 | |
|                         REPORT_FILE.write(filename + ':' + contractName + ' NO BYTECODE\n')
 | |
|                     REPORT_FILE.write(filename + ':' + contractName + ' ' + contractData['metadata'] + '\n')
 | |
|         except KeyError:
 | |
|             REPORT_FILE.write(f + ": ERROR\n")
 |