mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 20:29:23 +00:00
68 lines
2.2 KiB
Rust
68 lines
2.2 KiB
Rust
use std::{env, fs};
|
|
|
|
use alloy_sol_macro_input::SolInputKind;
|
|
|
|
fn write(sol: syn_solidity::File, file: &str) {
|
|
let sol = alloy_sol_macro_expander::expand::expand(sol).unwrap();
|
|
fs::write(file, sol.to_string()).unwrap();
|
|
}
|
|
|
|
fn sol(sol_files: &[&str], file: &str) {
|
|
let mut sol = String::new();
|
|
for sol_file in sol_files {
|
|
sol += &fs::read_to_string(sol_file).unwrap();
|
|
}
|
|
let SolInputKind::Sol(sol) = syn::parse_str(&sol).unwrap() else {
|
|
panic!("parsed .sols file wasn't SolInputKind::Sol");
|
|
};
|
|
write(sol, file);
|
|
}
|
|
|
|
fn main() {
|
|
let artifacts_path = env::var("OUT_DIR").unwrap().clone() + "/serai-processor-ethereum-router";
|
|
|
|
if !fs::exists(&artifacts_path).unwrap() {
|
|
fs::create_dir(&artifacts_path).unwrap();
|
|
}
|
|
|
|
build_solidity_contracts::build(
|
|
&["../../../networks/ethereum/schnorr/contracts", "../erc20/contracts", "contracts"],
|
|
"contracts",
|
|
&artifacts_path,
|
|
)
|
|
.unwrap();
|
|
// These are detected multiple times and distinguished, hence their renaming to canonical forms
|
|
let router_bin = artifacts_path.clone() + "/Router.bin";
|
|
let _ = fs::remove_file(&router_bin); // Remove the file if it already exists, if we can
|
|
fs::rename(artifacts_path.clone() + "/Router_sol_Router.bin", &router_bin).unwrap();
|
|
|
|
let router_bin_runtime = artifacts_path.clone() + "/Router.bin-runtime";
|
|
let _ = fs::remove_file(&router_bin_runtime);
|
|
fs::rename(artifacts_path.clone() + "/Router_sol_Router.bin-runtime", router_bin_runtime)
|
|
.unwrap();
|
|
|
|
// This cannot be handled with the sol! macro. The Router requires an import
|
|
// https://github.com/alloy-rs/core/issues/602
|
|
sol(
|
|
&[
|
|
"../../../networks/ethereum/schnorr/contracts/Schnorr.sol",
|
|
"contracts/IRouter.sol",
|
|
"contracts/Router.sol",
|
|
],
|
|
&(artifacts_path.clone() + "/router.rs"),
|
|
);
|
|
|
|
let test_artifacts_path = artifacts_path + "/tests";
|
|
if !fs::exists(&test_artifacts_path).unwrap() {
|
|
fs::create_dir(&test_artifacts_path).unwrap();
|
|
}
|
|
|
|
// Build the test contracts
|
|
build_solidity_contracts::build(
|
|
&["../../../networks/ethereum/schnorr/contracts", "../erc20/contracts", "contracts"],
|
|
"contracts/tests",
|
|
&test_artifacts_path,
|
|
)
|
|
.unwrap();
|
|
}
|