#![allow(clippy::unwrap_used, clippy::expect_used)]
use std::env;
use std::path::Path;
use ethrex_sdk_contract_utils::git_clone;
fn main() {
println!("cargo::rerun-if-env-changed=COMPILE_CONTRACTS");
println!("cargo::rerun-if-changed=build.rs");
let out_dir = env::var_os("OUT_DIR").unwrap();
let contracts_path = Path::new(&out_dir).join("contracts");
std::fs::create_dir_all(contracts_path.join("lib")).expect("Failed to create contracts/lib");
if env::var_os("COMPILE_CONTRACTS").is_none() {
std::fs::create_dir_all(contracts_path.join("solc_out"))
.expect("failed to create contracts output directory");
std::fs::write(contracts_path.join("solc_out/ERC1967Proxy.bytecode"), [])
.expect("failed to write ERC1967Proxy bytecode");
return;
}
git_clone(
"https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable.git",
contracts_path
.join("lib/openzeppelin-contracts-upgradeable")
.to_str()
.expect("Failed to convert path to str"),
Some("release-v5.4"),
true,
)
.unwrap();
let proxy_contract_path = contracts_path.join("lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol");
ethrex_sdk_contract_utils::compile_contract(
&contracts_path,
&proxy_contract_path,
false,
false,
None,
&[&contracts_path],
Some(999999),
)
.expect("failed to compile ERC1967Proxy contract");
let contract_bytecode_hex =
std::fs::read_to_string(contracts_path.join("solc_out/ERC1967Proxy.bin"))
.expect("failed to read ERC1967Proxy bytecode");
let contract_bytecode = hex::decode(contract_bytecode_hex.trim())
.expect("failed to hex-decode ERC1967Proxy bytecode");
std::fs::write(
contracts_path.join("solc_out/ERC1967Proxy.bytecode"),
contract_bytecode,
)
.expect("failed to write ERC1967Proxy bytecode");
}