From 4bfc2364e3a58b19ad042b8abd9ab12658f9efc4 Mon Sep 17 00:00:00 2001 From: bitfalt <75431447+bitfalt@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:32:02 -0600 Subject: [PATCH] feat: add eth_chain_id entrypoint --- crates/contracts/src/kakarot_core/interface.cairo | 4 ++++ crates/contracts/src/kakarot_core/kakarot.cairo | 7 +++++++ crates/utils/src/constants.cairo | 1 + 3 files changed, 12 insertions(+) diff --git a/crates/contracts/src/kakarot_core/interface.cairo b/crates/contracts/src/kakarot_core/interface.cairo index 8c014f3b..e3a6f07a 100644 --- a/crates/contracts/src/kakarot_core/interface.cairo +++ b/crates/contracts/src/kakarot_core/interface.cairo @@ -31,6 +31,10 @@ pub trait IKakarotCore { self: @TContractState, origin: EthAddress, tx: Transaction ) -> (bool, Span, u64); + // Getter for the transaction chain_id + // Returns the chain_id of the transaction after applying modulo 2^53 + fn eth_chain_id(self: @TContractState) -> u64; + /// Transaction entrypoint into the EVM /// Executes an EVM transaction and possibly modifies the state fn eth_send_transaction(ref self: TContractState, tx: Transaction) -> (bool, Span, u64); diff --git a/crates/contracts/src/kakarot_core/kakarot.cairo b/crates/contracts/src/kakarot_core/kakarot.cairo index 1a605665..77c9da1f 100644 --- a/crates/contracts/src/kakarot_core/kakarot.cairo +++ b/crates/contracts/src/kakarot_core/kakarot.cairo @@ -34,6 +34,7 @@ pub mod KakarotCore { use utils::eth_transaction::transaction::{Transaction, TransactionTrait}; use utils::helpers::compute_starknet_address; use utils::set::{Set, SetTrait}; + use utils::constants::POW_2_53; component!(path: ownable_component, storage: ownable, event: OwnableEvent); component!(path: upgradeable_component, storage: upgradeable, event: UpgradeableEvent); @@ -164,6 +165,12 @@ pub mod KakarotCore { (success, return_data, gas_used) } + fn eth_chain_id(self: @ContractState) -> u64 { + let tx_info = get_tx_info().unbox(); + let tx_chain_id: u64 = tx_info.chain_id.try_into().unwrap(); + tx_chain_id % POW_2_53.try_into().unwrap() + } + fn eth_send_transaction(ref self: ContractState, tx: Transaction) -> (bool, Span, u64) { let gas_price = validate_eth_tx(@self, tx); diff --git a/crates/utils/src/constants.cairo b/crates/utils/src/constants.cairo index bb97faa8..899b1382 100644 --- a/crates/utils/src/constants.cairo +++ b/crates/utils/src/constants.cairo @@ -216,6 +216,7 @@ pub const POW_2_24: u128 = 0x1000000; pub const POW_2_32: u128 = 0x100000000; pub const POW_2_40: u128 = 0x10000000000; pub const POW_2_48: u128 = 0x1000000000000; +pub const POW_2_53: u128 = 0x20000000000000; pub const POW_2_56: u128 = 0x100000000000000; pub const POW_2_64: u128 = 0x10000000000000000; pub const POW_2_72: u128 = 0x1000000000000000000;