diff --git a/src/kernel_evm/Cargo.lock b/src/kernel_evm/Cargo.lock index 03650112b2aaf061ef0c2527f99d24cfd2abe3f9..ce6fabccfa37eae403816e15a4a2743d8c322fe9 100644 --- a/src/kernel_evm/Cargo.lock +++ b/src/kernel_evm/Cargo.lock @@ -429,6 +429,7 @@ dependencies = [ "tezos-smart-rollup-storage", "tezos_crypto_rs", "tezos_data_encoding", + "tezos_ethereum", "thiserror", ] @@ -1516,8 +1517,13 @@ dependencies = [ name = "tezos_ethereum" version = "0.1.0" dependencies = [ - "evm-execution", + "hex", + "libsecp256k1", "primitive-types", + "rlp", + "sha3", + "tezos-smart-rollup-encoding", + "tezos_crypto_rs", ] [[package]] diff --git a/src/kernel_evm/ethereum/Cargo.toml b/src/kernel_evm/ethereum/Cargo.toml index 629ae29a61bcb4ec51ba2f70bc490f2a7f1a4583..7e8f7dabf17aa4d01489c0239bc40fc1122a4c33 100644 --- a/src/kernel_evm/ethereum/Cargo.toml +++ b/src/kernel_evm/ethereum/Cargo.toml @@ -9,4 +9,12 @@ edition = "2021" [dependencies] primitive-types = { version = "0.11.1", default-features = false } -evm-execution = { path = "../evm_execution" } +rlp = "0.5.2" +hex = "0.4" +sha3 = { version = "0.10.6", default-features = false } +tezos_crypto_rs = { version = "0.4", default-features = false } +libsecp256k1 = { version = "0.7", default-features = false, features = ["static-context", "hmac"] } + +[dependencies.tezos-smart-rollup-encoding] +path = "../../kernel_sdk/encoding" + diff --git a/src/kernel_evm/evm_execution/src/address.rs b/src/kernel_evm/ethereum/src/address.rs similarity index 100% rename from src/kernel_evm/evm_execution/src/address.rs rename to src/kernel_evm/ethereum/src/address.rs diff --git a/src/kernel_evm/evm_execution/src/basic.rs b/src/kernel_evm/ethereum/src/basic.rs similarity index 98% rename from src/kernel_evm/evm_execution/src/basic.rs rename to src/kernel_evm/ethereum/src/basic.rs index 9bac78f92685e982db5f85cddc1ebe91b8a93efd..e60465228d7a1c338f97f252b028c2a589b38a63 100644 --- a/src/kernel_evm/evm_execution/src/basic.rs +++ b/src/kernel_evm/ethereum/src/basic.rs @@ -8,12 +8,11 @@ //! Many of the functions in this module (all the `one` and `zero`) can be made //! constant, but the underlying library and functions we use are not constant. //! TODO: -use crate::EthereumError; use core::ops::{Add, Div, Mul, Sub}; -use crypto::hash::BlockHash; use primitive_types::{H256 as PTH256, U256 as PTU256}; use rlp::{Decodable, DecoderError, Encodable, Rlp}; use sha3::{Digest, Keccak256}; +use tezos_crypto_rs::hash::BlockHash; use tezos_smart_rollup_encoding::timestamp::Timestamp; /// The size of one 256 bit word. Size in bytes @@ -75,15 +74,15 @@ pub struct GasLimit { impl GasLimit { /// Translate to unsigned 64 bit (should be adequate for all calls at the moment) /// Error can only be overflow. - pub fn to_u64(&self) -> Result { + pub fn to_u64(&self) -> Option { // Unfortunately, the `primitive_types` library doesn't implement u64 -> U256 // conversion in `const`. let max_u64: U256 = U256::from(core::u64::MAX); if self.value <= max_u64 { - Ok(self.value.0.low_u64()) + Some(self.value.0.low_u64()) } else { - Err(EthereumError::GasLimitOverflow(self.value)) + None } } diff --git a/src/kernel_evm/ethereum/src/lib.rs b/src/kernel_evm/ethereum/src/lib.rs index ee8cd51e3d0af0c934991bf5da01bfb322f314db..1aed8524697ed2232eca70d92214fe03b8ac5f3d 100644 --- a/src/kernel_evm/ethereum/src/lib.rs +++ b/src/kernel_evm/ethereum/src/lib.rs @@ -3,6 +3,9 @@ // SPDX-License-Identifier: MIT pub mod account; +pub mod address; +pub mod basic; pub mod eth_gen; +pub mod signatures; pub mod transaction; pub mod wei; diff --git a/src/kernel_evm/evm_execution/src/signatures.rs b/src/kernel_evm/ethereum/src/signatures.rs similarity index 100% rename from src/kernel_evm/evm_execution/src/signatures.rs rename to src/kernel_evm/ethereum/src/signatures.rs diff --git a/src/kernel_evm/ethereum/src/transaction.rs b/src/kernel_evm/ethereum/src/transaction.rs index b96c936bf0913f635d1a7ed2cdf946f40e1e78be..0fe698661a1d1c3f6a49bbb24bbe365c897c4d8e 100644 --- a/src/kernel_evm/ethereum/src/transaction.rs +++ b/src/kernel_evm/ethereum/src/transaction.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: MIT -use evm_execution::address::EthereumAddress; +use crate::address::EthereumAddress; use primitive_types::U256; use crate::eth_gen::{BlockHash, L2Level, OwnedHash}; diff --git a/src/kernel_evm/evm_execution/Cargo.toml b/src/kernel_evm/evm_execution/Cargo.toml index 16e55691866a6d969f703a075dd09eae2c73d893..c158019b96abaefe2c34b0287f166fd4cbc13ab9 100644 --- a/src/kernel_evm/evm_execution/Cargo.toml +++ b/src/kernel_evm/evm_execution/Cargo.toml @@ -33,6 +33,9 @@ ripemd = { version = "0.1.3", default-features = false } libsecp256k1 = { version = "0.7", default-features = false, features = ["static-context", "hmac"] } const-decoder = { version = "0.3.0" } +[dependencies.tezos_ethereum] +path = "../ethereum" + [dependencies.tezos-smart-rollup-core] path = "../../kernel_sdk/core" diff --git a/src/kernel_evm/evm_execution/src/account_storage.rs b/src/kernel_evm/evm_execution/src/account_storage.rs index a02b4a54975af8e50e6d970266675edbaac2afff..45725eae88955436dbde454f40edec64129f661c 100644 --- a/src/kernel_evm/evm_execution/src/account_storage.rs +++ b/src/kernel_evm/evm_execution/src/account_storage.rs @@ -4,12 +4,12 @@ //! Ethereum account state and storage -use super::basic::WORD_SIZE; use const_decoder::Decoder; use host::path::{concat, OwnedPath, Path, RefPath}; use host::runtime::{Runtime, RuntimeError, ValueType}; use primitive_types::{H160, H256, U256}; use sha3::{Digest, Keccak256}; +use tezos_ethereum::basic::WORD_SIZE; use tezos_smart_rollup_storage::storage::Storage; use thiserror::Error; diff --git a/src/kernel_evm/evm_execution/src/block.rs b/src/kernel_evm/evm_execution/src/block.rs index 5bb1d29fe41a8b704de942e9371f46f39bc3866d..1d2f349df876d5b5f4e88d86fcfc0e066ce26e5e 100644 --- a/src/kernel_evm/evm_execution/src/block.rs +++ b/src/kernel_evm/evm_execution/src/block.rs @@ -8,10 +8,10 @@ //! When then kernel "sees" an EOL from the PVM, it finalizes the current block //! and starts creating the next one. -use super::basic::{GasLimit, GasPrice, Wei}; use super::storage::blocks::get_current_number_n_timestamp; use host::runtime::Runtime; use primitive_types::{H160, U256}; +use tezos_ethereum::basic::{GasLimit, GasPrice, Wei}; /// All data for an Ethereum block. /// /// This data does not change for the duration of the block. All balues are diff --git a/src/kernel_evm/evm_execution/src/lib.rs b/src/kernel_evm/evm_execution/src/lib.rs index e1f9d6c77dc22251cffbb76a90f8a132225c2f6f..02cc86008dc67e1b14192ced825b2529724a005a 100644 --- a/src/kernel_evm/evm_execution/src/lib.rs +++ b/src/kernel_evm/evm_execution/src/lib.rs @@ -16,12 +16,9 @@ use tezos_smart_rollup_storage::StorageError; use thiserror::Error; pub mod account_storage; -pub mod address; -pub mod basic; pub mod block; pub mod handler; pub mod precompiles; -pub mod signatures; pub mod storage; pub mod transaction; @@ -67,7 +64,7 @@ pub enum EthereumError { /// A contract call transferred too much gas to sub-context or contract /// call itself got too much gas #[error("Gas limit overflow: {0}")] - GasLimitOverflow(basic::U256), + GasLimitOverflow(tezos_ethereum::basic::U256), } impl From for EthereumError { @@ -124,7 +121,6 @@ where #[cfg(test)] mod test { - use super::signatures::EthereumTransactionCommon; use super::*; use account_storage::{ account_path, init_account_storage as init_evm_account_storage, @@ -135,6 +131,8 @@ mod test { use host::runtime::Runtime; use primitive_types::H160; use std::str::FromStr; + use tezos_ethereum::address::EthereumAddress; + use tezos_ethereum::signatures::EthereumTransactionCommon; use tezos_smart_rollup_mock::MockHost; // The compiled initialization code for the Ethereum demo contract given @@ -475,7 +473,7 @@ mod test { #[test] //this is based on https://eips.ethereum.org/EIPS/eip-155 fn test_signatures() { - let (sk, _address) = signatures::string_to_sk_and_address( + let (sk, _address) = tezos_ethereum::signatures::string_to_sk_and_address( "4646464646464646464646464646464646464646464646464646464646464646" .to_string(), ); @@ -515,16 +513,17 @@ mod test { ), ]; test_list.iter().fold((), |_, (s, ea)| { - let (_, a) = signatures::string_to_sk_and_address(s.to_string()); + let (_, a) = + tezos_ethereum::signatures::string_to_sk_and_address(s.to_string()); let value: [u8; 20] = hex::decode(ea).unwrap().try_into().unwrap(); - let ea = address::EthereumAddress::from(value); + let ea = EthereumAddress::from(value); assert_eq!(a, ea); }) } #[test] fn test_caller_classic() { - let (_sk, address_from_sk) = signatures::string_to_sk_and_address( + let (_sk, address_from_sk) = tezos_ethereum::signatures::string_to_sk_and_address( "4646464646464646464646464646464646464646464646464646464646464646" .to_string(), ); @@ -537,7 +536,7 @@ mod test { .unwrap() .try_into() .unwrap(); - let expected_address = address::EthereumAddress::from(expected_address_string); + let expected_address = EthereumAddress::from(expected_address_string); assert_eq!(expected_address, address); assert_eq!(expected_address, address_from_sk) } diff --git a/src/kernel_evm/evm_execution/src/storage.rs b/src/kernel_evm/evm_execution/src/storage.rs index 707f51afcfb22da7a7d94893187bcd6dc204af82..8a2194a492c259878a49d29f64bd53e06dd7678c 100644 --- a/src/kernel_evm/evm_execution/src/storage.rs +++ b/src/kernel_evm/evm_execution/src/storage.rs @@ -183,8 +183,8 @@ pub mod blocks { pub mod tests { use super::test_utils::blocks_iter; use super::*; - use crate::basic::{H256, U256}; use primitive_types::U256 as PTU256; + use tezos_ethereum::basic::{H256, U256}; use tezos_smart_rollup_mock::MockHost; #[test] diff --git a/src/kernel_evm/kernel/src/block.rs b/src/kernel_evm/kernel/src/block.rs index b80c0154a0a2684e8244c707cf2da5889a7860f3..522464b58debb6ef303ba7a2b98d4c7d963e875c 100644 --- a/src/kernel_evm/kernel/src/block.rs +++ b/src/kernel_evm/kernel/src/block.rs @@ -7,8 +7,8 @@ use crate::error::{Error, TransferError}; use crate::helpers::address_to_hash; use crate::inbox::Transaction; use crate::storage; -use evm_execution::address::EthereumAddress; -use evm_execution::signatures::EthereumTransactionCommon; +use tezos_ethereum::address::EthereumAddress; +use tezos_ethereum::signatures::EthereumTransactionCommon; use tezos_smart_rollup_debug::debug_msg; use tezos_smart_rollup_host::path::OwnedPath; use tezos_smart_rollup_host::runtime::Runtime; diff --git a/src/kernel_evm/kernel/src/genesis.rs b/src/kernel_evm/kernel/src/genesis.rs index a3cb06913c88d663f84a5708b7d6a3f510cceb61..70f2aee6ba684787b8ed7a0524571d83352ffe56 100644 --- a/src/kernel_evm/kernel/src/genesis.rs +++ b/src/kernel_evm/kernel/src/genesis.rs @@ -6,9 +6,9 @@ use crate::error::Error; use crate::storage; use crate::storage::receipt_path; use crate::L2Block; -use evm_execution::address::EthereumAddress; use primitive_types::U256; use tezos_ethereum::account::Account; +use tezos_ethereum::address::EthereumAddress; use tezos_ethereum::eth_gen::L2Level; use tezos_ethereum::transaction::TransactionHash; use tezos_ethereum::transaction::TransactionReceipt; diff --git a/src/kernel_evm/kernel/src/helpers.rs b/src/kernel_evm/kernel/src/helpers.rs index dd2473615ba9dc13b8e180683544215f3fd0f895..bcae33ac1984ad1889f9a60a392bcfb27c755c53 100644 --- a/src/kernel_evm/kernel/src/helpers.rs +++ b/src/kernel_evm/kernel/src/helpers.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: MIT -use evm_execution::address::EthereumAddress; +use tezos_ethereum::address::EthereumAddress; use tezos_ethereum::eth_gen::OwnedHash; pub fn address_to_hash(address: EthereumAddress) -> OwnedHash { diff --git a/src/kernel_evm/kernel/src/inbox.rs b/src/kernel_evm/kernel/src/inbox.rs index 3c62049e9d1d5b8acc3de5949b307ebd7471a325..deafcb85c775bdacd3b28ce7913fd3d28fa5972a 100644 --- a/src/kernel_evm/kernel/src/inbox.rs +++ b/src/kernel_evm/kernel/src/inbox.rs @@ -3,7 +3,7 @@ // // SPDX-License-Identifier: MIT -use evm_execution::signatures::EthereumTransactionCommon; +use tezos_ethereum::signatures::EthereumTransactionCommon; use tezos_smart_rollup_host::input::Message; use tezos_smart_rollup_host::runtime::Runtime;