diff --git a/crates/llvm-context/src/lib.rs b/crates/llvm-context/src/lib.rs index 72aad25..5d1c82b 100644 --- a/crates/llvm-context/src/lib.rs +++ b/crates/llvm-context/src/lib.rs @@ -61,7 +61,6 @@ pub use self::polkavm::evm::return_data as polkavm_evm_return_data; pub use self::polkavm::evm::storage as polkavm_evm_storage; pub use self::polkavm::metadata_hash::MetadataHash as PolkaVMMetadataHash; pub use self::polkavm::r#const as polkavm_const; -pub use self::polkavm::utils as polkavm_utils; pub use self::polkavm::Dependency as PolkaVMDependency; pub use self::polkavm::DummyDependency as PolkaVMDummyDependency; pub use self::polkavm::DummyLLVMWritable as PolkaVMDummyLLVMWritable; diff --git a/crates/llvm-context/src/polkavm/mod.rs b/crates/llvm-context/src/polkavm/mod.rs index b6395b6..f1d7037 100644 --- a/crates/llvm-context/src/polkavm/mod.rs +++ b/crates/llvm-context/src/polkavm/mod.rs @@ -4,10 +4,8 @@ pub mod r#const; pub mod context; pub mod evm; pub mod metadata_hash; -pub mod utils; pub use self::r#const::*; -use self::utils::keccak256; use crate::debug_config::DebugConfig; use crate::optimizer::settings::Settings as OptimizerSettings; @@ -15,6 +13,7 @@ use crate::optimizer::settings::Settings as OptimizerSettings; use anyhow::Context as AnyhowContext; use polkavm_common::program::ProgramBlob; use polkavm_disassembler::{Disassembler, DisassemblyFormat}; +use sha3::Digest; use self::context::build::Build; use self::context::Context; @@ -55,7 +54,7 @@ pub fn build_assembly_text( assembly_text.to_owned(), metadata_hash, bytecode.to_owned(), - keccak256(bytecode), + hex::encode(sha3::Keccak256::digest(bytecode)), )) } diff --git a/crates/llvm-context/src/polkavm/utils.rs b/crates/llvm-context/src/polkavm/utils.rs deleted file mode 100644 index 91d8ced..0000000 --- a/crates/llvm-context/src/polkavm/utils.rs +++ /dev/null @@ -1,60 +0,0 @@ -//! Some LLVM IR generator utilies. - -use crate::polkavm::context::Context; -use crate::polkavm::Dependency; - -/// Clamps `value` to `max_value`, if `value` is bigger than `max_value`. -pub fn clamp<'ctx, D>( - context: &mut Context<'ctx, D>, - value: inkwell::values::IntValue<'ctx>, - max_value: inkwell::values::IntValue<'ctx>, - name: &str, -) -> anyhow::Result> -where - D: Dependency + Clone, -{ - let in_bounds_block = context.append_basic_block(format!("{name}_is_bounds_block").as_str()); - let join_block = context.append_basic_block(format!("{name}_join_block").as_str()); - - let pointer = context.build_alloca(context.word_type(), format!("{name}_pointer").as_str()); - context.build_store(pointer, max_value)?; - - let is_in_bounds = context.builder().build_int_compare( - inkwell::IntPredicate::ULE, - value, - max_value, - format!("{name}_is_in_bounds").as_str(), - )?; - context.build_conditional_branch(is_in_bounds, in_bounds_block, join_block)?; - - context.set_basic_block(in_bounds_block); - context.build_store(pointer, value)?; - context.build_unconditional_branch(join_block); - - context.set_basic_block(join_block); - let result = context.build_load(pointer, name)?; - Ok(result.into_int_value()) -} - -/// Computes the `keccak256` hash for `preimage`. -pub fn keccak256(preimage: &[u8]) -> String { - use sha3::Digest; - - let hash_bytes = sha3::Keccak256::digest(preimage); - hash_bytes - .into_iter() - .map(|byte| format!("{byte:02x}")) - .collect::>() - .join("") -} - -#[cfg(test)] -mod tests { - #[test] - fn keccak256() { - assert_eq!( - super::keccak256("zksync".as_bytes()), - "0238fb1ab06c28c32885f9a4842207ac480c2467df26b6c58e201679628c5a5b" - ); - } -} diff --git a/crates/solidity/src/evmla/assembly/mod.rs b/crates/solidity/src/evmla/assembly/mod.rs index 6e0a56e..bf3502e 100644 --- a/crates/solidity/src/evmla/assembly/mod.rs +++ b/crates/solidity/src/evmla/assembly/mod.rs @@ -8,6 +8,7 @@ use std::collections::HashSet; use serde::Deserialize; use serde::Serialize; +use sha3::Digest; use crate::evmla::ethereal_ir::entry_link::EntryLink; use crate::evmla::ethereal_ir::EtherealIR; @@ -45,7 +46,7 @@ impl Assembly { /// Gets the contract `keccak256` hash. pub fn keccak256(&self) -> String { let json = serde_json::to_vec(self).expect("Always valid"); - revive_llvm_context::polkavm_utils::keccak256(json.as_slice()) + hex::encode(sha3::Keccak256::digest(json.as_slice())) } /// Sets the full contract path.