Skip to content
This repository was archived by the owner on May 23, 2023. It is now read-only.

Commit 7519e7c

Browse files
committed
sort contracts
1 parent 54554a5 commit 7519e7c

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

ethereum/_solidity.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,27 +59,36 @@ def contract_names(cls, code):
5959
@classmethod
6060
def compile(cls, code):
6161
"returns binary of last contract in code"
62-
contracts = cls.combined(code)
63-
return contracts[cls.contract_names(code)[-1]]['binary'].decode('hex')
62+
sorted_contracts = cls.combined(code)
63+
return sorted_contracts[-1][1]['binary'].decode('hex')
6464

6565
@classmethod
6666
def mk_full_signature(cls, code):
6767
"returns signature of last contract in code"
68-
contracts = cls.combined(code)
69-
return contracts[cls.contract_names(code)[-1]]['json-abi']
68+
sorted_contracts = cls.combined(code)
69+
return sorted_contracts[-1][1]['json-abi']
7070

7171
@classmethod
7272
def combined(cls, code):
73-
p = subprocess.Popen(['solc', '--combined-json', 'json-abi,binary'],
73+
p = subprocess.Popen(['solc', '--combined-json', 'json-abi,binary,sol-abi'],
7474
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
7575
stdoutdata, stderrdata = p.communicate(input=code)
7676
if p.returncode:
7777
raise CompileError('compilation failed')
7878
# contracts = json.loads(stdoutdata)['contracts']
7979
contracts = yaml.safe_load(stdoutdata)['contracts']
80+
8081
for contract_name, data in contracts.items():
8182
data['json-abi'] = yaml.safe_load(data['json-abi'])
82-
return contracts
83+
data['sol-abi'] = yaml.safe_load(data['sol-abi'])
84+
85+
names = cls.contract_names(code)
86+
assert len(names) == len(contracts)
87+
sorted_contracts = []
88+
for name in names:
89+
sorted_contracts.append((name, contracts[name]))
90+
91+
return sorted_contracts
8392

8493

8594
def get_solidity():

0 commit comments

Comments
 (0)