Skip to content

Commit 6977d09

Browse files
authored
Fix yul verification bug (#451)
1 parent bba100c commit 6977d09

1 file changed

Lines changed: 38 additions & 3 deletions

File tree

  • smart-contract-verifier/smart-contract-verifier/src/solidity

smart-contract-verifier/smart-contract-verifier/src/solidity/multi_part.rs

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ impl From<MultiFileContent> for Vec<CompilerInput> {
5454
.into_iter()
5555
.map(|(name, content)| (name, Source::new(content)))
5656
.collect();
57-
let inputs: Vec<_> = CompilerInput::with_sources(sources)
57+
let inputs: Vec<_> = input_from_sources(sources)
5858
.into_iter()
5959
.map(|input| input.settings(settings.clone()))
6060
.collect();
@@ -122,6 +122,37 @@ fn settings_metadata(compiler_version: &Version) -> Vec<Option<SettingsMetadata>
122122
}
123123
}
124124

125+
const SOLIDITY: &str = "Solidity";
126+
const YUL: &str = "Yul";
127+
128+
fn input_from_sources(sources: Sources) -> Vec<CompilerInput> {
129+
let mut solidity_sources = BTreeMap::new();
130+
let mut yul_sources = BTreeMap::new();
131+
for (path, source) in sources {
132+
if path.to_str().unwrap_or_default().ends_with(".yul") {
133+
yul_sources.insert(path, source);
134+
} else {
135+
solidity_sources.insert(path, source);
136+
}
137+
}
138+
let mut res = Vec::new();
139+
if !solidity_sources.is_empty() {
140+
res.push(CompilerInput {
141+
language: SOLIDITY.to_string(),
142+
sources: solidity_sources,
143+
settings: Default::default(),
144+
});
145+
}
146+
if !yul_sources.is_empty() {
147+
res.push(CompilerInput {
148+
language: YUL.to_string(),
149+
sources: yul_sources,
150+
settings: Default::default(),
151+
});
152+
}
153+
res
154+
}
155+
125156
#[cfg(test)]
126157
mod tests {
127158
use super::*;
@@ -174,13 +205,17 @@ mod tests {
174205
#[test]
175206
fn yul_and_solidity_to_inputs() {
176207
let multi_part = MultiFileContent {
177-
sources: sources(&[("source.sol", "pragma"), ("source2.yul", "object \"A\" {}")]),
208+
sources: sources(&[
209+
("source.sol", "pragma"),
210+
("source2.yul", "object \"A\" {}"),
211+
(".yul", "object \"A\" {}"),
212+
]),
178213
evm_version: Some(EvmVersion::London),
179214
optimization_runs: Some(200),
180215
contract_libraries: None,
181216
};
182217
let expected_solidity = r#"{"language":"Solidity","sources":{"source.sol":{"content":"pragma"}},"settings":{"optimizer":{"enabled":true,"runs":200},"outputSelection":{"*":{"":["ast"],"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers"]}},"evmVersion":"london","libraries":{}}}"#;
183-
let expected_yul = r#"{"language":"Yul","sources":{"source2.yul":{"content":"object \"A\" {}"}},"settings":{"optimizer":{"enabled":true,"runs":200},"outputSelection":{"*":{"":["ast"],"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers"]}},"evmVersion":"london","libraries":{}}}"#;
218+
let expected_yul = r#"{"language":"Yul","sources":{".yul":{"content":"object \"A\" {}"},"source2.yul":{"content":"object \"A\" {}"}},"settings":{"optimizer":{"enabled":true,"runs":200},"outputSelection":{"*":{"":["ast"],"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers"]}},"evmVersion":"london","libraries":{}}}"#;
184219
test_to_input(multi_part, vec![expected_solidity, expected_yul]);
185220
}
186221
}

0 commit comments

Comments
 (0)