Skip to content

Commit eac79e2

Browse files
committed
wip
Signed-off-by: Cyrill Leutwiler <bigcyrill@hotmail.com>
1 parent 119c13a commit eac79e2

16 files changed

Lines changed: 201 additions & 170 deletions

File tree

crates/llvm-context/src/optimizer/settings/mod.rs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -227,18 +227,3 @@ impl std::fmt::Display for Settings {
227227
)
228228
}
229229
}
230-
231-
impl TryFrom<&SolcStandardJsonInputSettingsOptimizer> for Settings {
232-
type Error = anyhow::Error;
233-
234-
fn try_from(value: &SolcStandardJsonInputSettingsOptimizer) -> Result<Self, Self::Error> {
235-
let mut result = match value.mode {
236-
Some(mode) => Self::try_from_cli(mode)?,
237-
None => Self::size(),
238-
};
239-
if value.fallback_to_optimizing_for_size.unwrap_or_default() {
240-
result.enable_fallback_to_size();
241-
}
242-
Ok(result)
243-
}
244-
}

crates/resolc/src/build/contract.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,15 +136,15 @@ impl Contract {
136136
self,
137137
standard_json_contract: &mut SolcStandardJsonOutputContract,
138138
) -> anyhow::Result<()> {
139-
standard_json_contract.metadata = Some(self.metadata_json);
139+
standard_json_contract.metadata = self.metadata_json;
140140

141141
let assembly_text = self.build.assembly_text;
142142
let bytecode = hex::encode(self.build.bytecode.as_slice());
143143
if let Some(evm) = standard_json_contract.evm.as_mut() {
144144
evm.modify(assembly_text, bytecode);
145145
}
146146

147-
standard_json_contract.factory_dependencies = Some(self.build.factory_dependencies);
147+
standard_json_contract.factory_dependencies = self.build.factory_dependencies;
148148
standard_json_contract.hash = self.build.bytecode_hash.map(hex::encode);
149149

150150
Ok(())

crates/resolc/src/lib.rs

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ use std::collections::BTreeSet;
3939
use std::io::Write;
4040
use std::path::PathBuf;
4141

42-
use revive_common::Keccak256;
4342
use revive_common::MetadataHash;
4443
use revive_llvm_context::OptimizerSettings;
4544
use revive_solc_json_interface::ResolcWarning;
@@ -94,7 +93,7 @@ pub fn yul<T: Compiler>(
9493
pub fn llvm_ir(
9594
input_files: &[PathBuf],
9695
libraries: &[String],
97-
metadata_hash: Keccak256,
96+
metadata_hash: MetadataHash,
9897
messages: &mut Vec<SolcStandardJsonOutputError>,
9998
optimizer_settings: revive_llvm_context::OptimizerSettings,
10099
debug_config: revive_llvm_context::DebugConfig,
@@ -129,40 +128,34 @@ pub fn standard_output<T: Compiler>(
129128
input_files: &[PathBuf],
130129
libraries: &[String],
131130
messages: &mut Vec<SolcStandardJsonOutputError>,
132-
metadata_hash: Keccak256,
131+
metadata_hash: MetadataHash,
133132
solc: &mut T,
134133
evm_version: Option<revive_common::EVMVersion>,
135134
solc_optimizer_enabled: bool,
136135
optimizer_settings: revive_llvm_context::OptimizerSettings,
137136
base_path: Option<String>,
138137
include_paths: Vec<String>,
139138
allow_paths: Option<String>,
140-
remappings: Option<BTreeSet<String>>,
139+
remappings: BTreeSet<String>,
141140
suppressed_warnings: Vec<ResolcWarning>,
142141
debug_config: revive_llvm_context::DebugConfig,
143142
llvm_arguments: &[String],
144143
memory_config: SolcStandardJsonInputSettingsPolkaVMMemory,
145144
) -> anyhow::Result<Build> {
146145
let solc_version = solc.version()?;
147-
148-
let solc_input = SolcStandardJsonInput::try_from_solidity_paths(
146+
let mut solc_input = SolcStandardJsonInput::try_from_solidity_paths(
149147
evm_version,
150148
input_files,
151149
libraries,
152150
remappings,
153151
SolcStandardJsonInputSettingsSelection::new_required(),
154-
SolcStandardJsonInputSettingsOptimizer::new(
155-
solc_optimizer_enabled,
156-
None,
157-
&solc_version.default,
158-
optimizer_settings.is_fallback_to_size_enabled(),
159-
),
160-
None,
152+
SolcStandardJsonInputSettingsOptimizer::default(),
153+
Default::default(),
161154
suppressed_warnings,
162-
Some(SolcStandardJsonInputSettingsPolkaVM::new(
155+
SolcStandardJsonInputSettingsPolkaVM::new(
163156
Some(memory_config),
164157
debug_config.emit_debug_info,
165-
)),
158+
),
166159
false,
167160
)?;
168161
let mut solc_output = solc.standard_json(
@@ -178,9 +171,9 @@ pub fn standard_output<T: Compiler>(
178171
let linker_symbols = solc_input.settings.libraries.as_linker_symbols()?;
179172

180173
let project = Project::try_from_standard_json_output(
181-
solc_output,
174+
&mut solc_output,
182175
solc_input.settings.libraries,
183-
solc_version,
176+
&solc_version,
184177
&debug_config,
185178
)?;
186179
solc_output.take_and_write_warnings();
@@ -210,14 +203,16 @@ pub fn standard_json<T: Compiler>(
210203
solc: &mut T,
211204
detect_missing_libraries: bool,
212205
messages: &mut Vec<SolcStandardJsonOutputError>,
213-
metadata_hash: Keccak256,
206+
metadata_hash: MetadataHash,
214207
json_path: Option<PathBuf>,
215208
base_path: Option<String>,
216209
include_paths: Vec<String>,
217210
allow_paths: Option<String>,
218-
mut debug_config: revive_llvm_context::DebugConfig,
211+
debug_config: revive_llvm_context::DebugConfig,
219212
llvm_arguments: &[String],
213+
memory_config: SolcStandardJsonInputSettingsPolkaVMMemory,
220214
) -> anyhow::Result<()> {
215+
let solc_version = solc.version()?;
221216
let mut solc_input = SolcStandardJsonInput::try_from(json_path.as_deref())?;
222217
let language = solc_input.language;
223218
let prune_output = solc_input.settings.selection_to_prune();
@@ -247,9 +242,9 @@ pub fn standard_json<T: Compiler>(
247242
)?;
248243

249244
let project = Project::try_from_standard_json_output(
250-
solc_output,
245+
&mut solc_output,
251246
solc_input.settings.libraries,
252-
solc.version(),
247+
&solc_version,
253248
&debug_config,
254249
)?;
255250
if solc_output.has_errors() {
@@ -258,7 +253,7 @@ pub fn standard_json<T: Compiler>(
258253

259254
if detect_missing_libraries {
260255
let missing_libraries = project.get_missing_libraries(&deployed_libraries);
261-
missing_libraries.write_to_standard_json(&mut solc_output, solc_version.as_ref());
256+
missing_libraries.write_to_standard_json(&mut solc_output, &solc_version);
262257
solc_output.write_and_exit(prune_output);
263258
}
264259

@@ -271,12 +266,12 @@ pub fn standard_json<T: Compiler>(
271266
memory_config,
272267
)?;
273268
if build.has_errors() {
274-
build.write_to_standard_json(&mut solc_output, solc.version().as_ref())?;
269+
build.write_to_standard_json(&mut solc_output, &solc_version)?;
275270
solc_output.write_and_exit(prune_output);
276271
}
277272

278273
let build = build.link(linker_symbols);
279-
build.write_to_standard_json(&mut solc_output, solc.version().as_ref())?;
274+
build.write_to_standard_json(&mut solc_output, &solc_version)?;
280275
solc_output.write_and_exit(prune_output);
281276
}
282277

@@ -286,15 +281,16 @@ pub fn combined_json<T: Compiler>(
286281
format: String,
287282
input_files: &[PathBuf],
288283
libraries: &[String],
289-
metadata_hash: Keccak256,
284+
messages: &mut Vec<SolcStandardJsonOutputError>,
285+
metadata_hash: MetadataHash,
290286
solc: &mut T,
291287
evm_version: Option<revive_common::EVMVersion>,
292288
solc_optimizer_enabled: bool,
293289
optimizer_settings: revive_llvm_context::OptimizerSettings,
294290
base_path: Option<String>,
295291
include_paths: Vec<String>,
296292
allow_paths: Option<String>,
297-
remappings: Option<BTreeSet<String>>,
293+
remappings: BTreeSet<String>,
298294
suppressed_warnings: Vec<ResolcWarning>,
299295
debug_config: revive_llvm_context::DebugConfig,
300296
output_directory: Option<PathBuf>,
@@ -305,11 +301,12 @@ pub fn combined_json<T: Compiler>(
305301
let build = standard_output(
306302
input_files,
307303
libraries,
304+
messages,
305+
metadata_hash,
308306
solc,
309307
evm_version,
310308
solc_optimizer_enabled,
311309
optimizer_settings,
312-
include_metadata_hash,
313310
base_path,
314311
include_paths,
315312
allow_paths,

crates/resolc/src/process/input.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
use std::collections::BTreeMap;
55
use std::collections::BTreeSet;
66

7-
use revive_common::Keccak256;
7+
use revive_common::MetadataHash;
88
use revive_solc_json_interface::SolcStandardJsonInputSettingsPolkaVMMemory;
99
use serde::Deserialize;
1010
use serde::Serialize;
@@ -17,7 +17,7 @@ pub struct Input {
1717
/// The contract representation.
1818
pub contract: Contract,
1919
/// Whether to append the metadata hash.
20-
pub metadata_hash: Keccak256,
20+
pub metadata_hash: MetadataHash,
2121
/// The optimizer settings.
2222
pub optimizer_settings: revive_llvm_context::OptimizerSettings,
2323
/// The debug output config.
@@ -38,7 +38,7 @@ impl Input {
3838
/// A shortcut constructor.
3939
pub fn new(
4040
contract: Contract,
41-
metadata_hash: Keccak256,
41+
metadata_hash: MetadataHash,
4242
optimizer_settings: revive_llvm_context::OptimizerSettings,
4343
debug_config: revive_llvm_context::DebugConfig,
4444
llvm_arguments: Vec<String>,

crates/resolc/src/process/mod.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,23 @@ pub trait Process {
2525
let input: Input = revive_common::deserialize_from_str(input_json.as_str())
2626
.map_err(|error| anyhow::anyhow!("Stdin parsing error: {error}"))?;
2727

28-
let source_location = SourceLocation::new(input.contract.identifier.path);
28+
let source_location = SourceLocation::new(input.contract.identifier.path.to_owned());
2929

3030
let result = std::thread::Builder::new()
3131
.stack_size(64 * 1024 * 1024)
3232
.spawn(move || {
3333
input
3434
.contract
3535
.compile(
36-
input.identifier_paths,
37-
input.missing_libraries,
38-
input.factory_dependencies,
39-
input.metadata_hash_type,
40-
input.append_cbor,
36+
None,
4137
input.optimizer_settings,
42-
input.llvm_options,
43-
input.output_assembly,
38+
input.metadata_hash,
4439
input.debug_config,
40+
&input.llvm_arguments,
41+
input.memory_config,
42+
input.missing_libraries,
43+
input.factory_dependencies,
44+
input.identifier_paths,
4545
)
4646
.map(Output::new)
4747
.map_err(|error| {

crates/resolc/src/project/contract/mod.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use std::collections::BTreeSet;
88
use std::collections::HashSet;
99

1010
use revive_common::Keccak256;
11+
use revive_common::MetadataHash;
1112
use revive_llvm_context::Optimizer;
1213
use revive_solc_json_interface::SolcStandardJsonInputSettingsPolkaVMMemory;
1314
use serde::Deserialize;
@@ -61,11 +62,10 @@ impl Contract {
6162
/// Compiles the specified contract, setting its build artifacts.
6263
pub fn compile(
6364
mut self,
64-
project: Project,
6565
solc_version: Option<SolcVersion>,
6666
optimizer_settings: revive_llvm_context::OptimizerSettings,
67-
include_metadata_hash: bool,
68-
mut debug_config: revive_llvm_context::DebugConfig,
67+
metadata_hash: MetadataHash,
68+
debug_config: revive_llvm_context::DebugConfig,
6969
llvm_arguments: &[String],
7070
memory_config: SolcStandardJsonInputSettingsPolkaVMMemory,
7171
missing_libraries: BTreeSet<String>,
@@ -87,7 +87,11 @@ impl Contract {
8787
);
8888
let metadata_json = serde_json::to_value(&metadata).expect("Always valid");
8989
let metadata_json_bytes = serde_json::to_vec(&metadata_json).expect("Always valid");
90-
let metadata_bytes = Keccak256::from_slice(&metadata_json_bytes).into();
90+
let metadata_bytes = match metadata_hash {
91+
MetadataHash::Keccak256 => Keccak256::from_slice(&metadata_json_bytes).into(),
92+
MetadataHash::IPFS => todo!("IPFS hash isn't supported yet"),
93+
MetadataHash::None => None,
94+
};
9195

9296
let build = match self.ir {
9397
IR::Yul(mut yul) => {

crates/resolc/src/project/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use std::path::PathBuf;
1212
#[cfg(feature = "parallel")]
1313
use rayon::iter::{IntoParallelIterator, ParallelIterator};
1414
use revive_common::Keccak256;
15+
use revive_common::MetadataHash;
1516
use revive_llvm_context::DebugConfig;
1617
use revive_llvm_context::OptimizerSettings;
1718
use revive_solc_json_interface::SolcStandardJsonInputSettingsPolkaVMMemory;
@@ -79,7 +80,7 @@ impl Project {
7980
self,
8081
messages: &mut Vec<SolcStandardJsonOutputError>,
8182
optimizer_settings: OptimizerSettings,
82-
metadata_hash: Keccak256,
83+
metadata_hash: MetadataHash,
8384
debug_config: DebugConfig,
8485
llvm_arguments: &[String],
8586
memory_config: SolcStandardJsonInputSettingsPolkaVMMemory,

crates/resolc/src/solc/solc_compiler.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@ impl Compiler for SolcCompiler {
6565
command.arg(allow_paths);
6666
}
6767

68-
input.normalize();
69-
7068
let input_json = serde_json::to_vec(&input).expect("Always valid");
7169

7270
let process = command.spawn().map_err(|error| {

crates/resolc/src/solc/soljson_compiler.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ impl Compiler for SoljsonCompiler {
4141
anyhow::bail!("configuring allow paths is not supported with solJson")
4242
}
4343

44-
input.normalize();
45-
4644
let suppressed_warnings = input.suppressed_warnings.take().unwrap_or_default();
4745

4846
let input_json = serde_json::to_string(&input).expect("Always valid");

0 commit comments

Comments
 (0)