@@ -59,27 +59,36 @@ def contract_names(cls, code):
59
59
@classmethod
60
60
def compile (cls , code ):
61
61
"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' )
64
64
65
65
@classmethod
66
66
def mk_full_signature (cls , code ):
67
67
"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' ]
70
70
71
71
@classmethod
72
72
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 ' ],
74
74
stdin = subprocess .PIPE , stdout = subprocess .PIPE )
75
75
stdoutdata , stderrdata = p .communicate (input = code )
76
76
if p .returncode :
77
77
raise CompileError ('compilation failed' )
78
78
# contracts = json.loads(stdoutdata)['contracts']
79
79
contracts = yaml .safe_load (stdoutdata )['contracts' ]
80
+
80
81
for contract_name , data in contracts .items ():
81
82
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
83
92
84
93
85
94
def get_solidity ():
0 commit comments