From 9bf31c6929813967aaa5faa67cf6a716fa1c7d29 Mon Sep 17 00:00:00 2001 From: Ammar Arif Date: Wed, 16 Oct 2024 14:41:23 -0400 Subject: [PATCH] fix estimate message fee error --- crates/katana/rpc/rpc-types/src/message.rs | 10 ++++++++-- crates/katana/rpc/rpc/tests/messaging.rs | 17 ++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/crates/katana/rpc/rpc-types/src/message.rs b/crates/katana/rpc/rpc-types/src/message.rs index 120ecf28ff..5bb95ffa83 100644 --- a/crates/katana/rpc/rpc-types/src/message.rs +++ b/crates/katana/rpc/rpc-types/src/message.rs @@ -13,6 +13,12 @@ impl MsgFromL1 { // for the `estimateMessageFee` RPC. let nonce = Felt::ZERO; + // When executing a l1 handler tx, blockifier just assert that the paid_fee_on_l1 is + // anything but 0. See: https://github.com/dojoengine/sequencer/blob/d6951f24fc2082c7aa89cdbc063648915b131d74/crates/blockifier/src/transaction/transaction_execution.rs#L140-L145 + // + // For fee estimation, this value is basically irrelevant. + let paid_fee_on_l1 = 1u128; + let message_hash = compute_l2_to_l1_message_hash( // This conversion will never fail bcs `from_address` is 20 bytes and the it will only // fail if the slice is > 32 bytes @@ -25,9 +31,9 @@ impl MsgFromL1 { nonce, chain_id, message_hash, - calldata: self.0.payload, + paid_fee_on_l1, version: Felt::ZERO, - paid_fee_on_l1: Default::default(), + calldata: self.0.payload, contract_address: self.0.to_address.into(), entry_point_selector: self.0.entry_point_selector, } diff --git a/crates/katana/rpc/rpc/tests/messaging.rs b/crates/katana/rpc/rpc/tests/messaging.rs index 08fcf8fe67..fecc5155c6 100644 --- a/crates/katana/rpc/rpc/tests/messaging.rs +++ b/crates/katana/rpc/rpc/tests/messaging.rs @@ -20,10 +20,9 @@ use katana_rpc_types::receipt::ReceiptBlock; use rand::Rng; use starknet::accounts::{Account, ConnectedAccount}; use starknet::contract::ContractFactory; -use starknet::core::types::MsgFromL1; use starknet::core::types::{ - BlockId, BlockTag, ContractClass, Felt, Hash256, Transaction, TransactionFinalityStatus, - TransactionReceipt, + BlockId, BlockTag, ContractClass, Felt, Hash256, MsgFromL1, Transaction, + TransactionFinalityStatus, TransactionReceipt, }; use starknet::core::utils::get_contract_address; use starknet::macros::selector; @@ -331,8 +330,10 @@ async fn estimate_message_fee() -> Result<()> { // Compute the contract address of the l1 handler contract let l1handler_address = get_contract_address(Felt::ZERO, class_hash, &[], Felt::ZERO); + // Attempt to estimate the cost of calling a #[l1handler] function + let entry_point_selector = selector!("msg_handler_value"); - let payload = vec![felt!("0x123"), felt!("123")]; + let payload = vec![felt!("0x123"), felt!("123")]; // function arguments let from_address = felt!("0x1337"); let to_address = l1handler_address; @@ -344,13 +345,7 @@ async fn estimate_message_fee() -> Result<()> { }; let result = provider.estimate_message_fee(msg, BlockId::Tag(BlockTag::Pending)).await; - - match result { - Ok(_) => {} - Err(e) => { - dbg!(e); - } - } + assert!(result.is_ok()); Ok(()) }