Skip to content

Commit

Permalink
fix test
Browse files Browse the repository at this point in the history
  • Loading branch information
kariy committed May 21, 2024
1 parent 9145e75 commit bcdd998
Showing 1 changed file with 43 additions and 56 deletions.
99 changes: 43 additions & 56 deletions crates/katana/core/src/service/messaging/ethereum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::str::FromStr;
use std::sync::Arc;

use alloy_network::Ethereum;
use alloy_primitives::{Address, LogData, U256};
use alloy_primitives::{Address, U256};
use alloy_provider::{Provider, ReqwestProvider};
use alloy_rpc_types::{BlockNumberOrTag, Filter, FilterBlockOption, FilterSet, Log, Topic};
use alloy_sol_types::{sol, SolEvent};
Expand Down Expand Up @@ -195,24 +195,14 @@ impl Messenger for EthereumMessaging {

// TODO: refactor this as a method of the message log struct
fn l1_handler_tx_from_log(log: Log, chain_id: ChainId) -> MessengerResult<L1HandlerTx> {
let parsed_log = LogMessageToL2::LogMessageToL2Event::decode_log(
&alloy_primitives::Log::<LogData>::new(
log.address(),
log.topics().into(),
log.data().clone().data,
)
.unwrap(),
false,
)
.unwrap();

let from_address =
EthAddress::try_from(parsed_log.from_address.as_slice()).expect("valid address");
let contract_address = felt_from_u256(parsed_log.to_address);
let entry_point_selector = felt_from_u256(parsed_log.selector);
let nonce: u64 = parsed_log.nonce.try_into().expect("nonce does not fit into u64.");
let paid_fee_on_l1: u128 = parsed_log.fee.try_into().expect("Fee does not fit into u128.");
let payload = parsed_log.payload.clone().into_iter().map(felt_from_u256).collect::<Vec<_>>();
let log = LogMessageToL2::LogMessageToL2Event::decode_log(log.as_ref(), false).unwrap();

let from_address = EthAddress::try_from(log.from_address.as_slice()).expect("valid address");
let contract_address = felt_from_u256(log.to_address);
let entry_point_selector = felt_from_u256(log.selector);
let nonce: u64 = log.nonce.try_into().expect("nonce does not fit into u64.");
let paid_fee_on_l1: u128 = log.fee.try_into().expect("Fee does not fit into u128.");
let payload = log.payload.clone().into_iter().map(felt_from_u256).collect::<Vec<_>>();

let message_hash = compute_l1_to_l2_message_hash(
from_address.clone(),
Expand Down Expand Up @@ -261,62 +251,60 @@ fn felt_from_u256(v: U256) -> FieldElement {
#[cfg(test)]
mod tests {

use alloy_primitives::{Address, B256, U256};
use alloy_primitives::{address, b256, LogData, U256};
use katana_primitives::chain::{ChainId, NamedChainId};
use katana_primitives::utils::transaction::compute_l1_to_l2_message_hash;
use starknet::macros::{felt, selector};

use super::*;

#[test]
fn l1_handler_tx_from_log_parse_ok() {
let from_address = "0x000000000000000000000000be3C44c09bc1a3566F3e1CA12e5AbA0fA4Ca72Be";
let to_address = "0x039dc79e64f4bb3289240f88e0bae7d21735bef0d1a51b2bf3c4730cb16983e1";
let selector = "0x02f15cff7b0eed8b9beb162696cf4e3e0e35fa7032af69cd1b7d2ac67a13f40f";
let from_address = felt!("0xbe3C44c09bc1a3566F3e1CA12e5AbA0fA4Ca72Be");
let to_address = felt!("0x39dc79e64f4bb3289240f88e0bae7d21735bef0d1a51b2bf3c4730cb16983e1");
let selector = felt!("0x2f15cff7b0eed8b9beb162696cf4e3e0e35fa7032af69cd1b7d2ac67a13f40f");
let payload = vec![FieldElement::ONE, FieldElement::TWO];
let nonce = 783082_u64;
let fee = 30000_u128;

// Payload two values: [1, 2].
let payload_buf = hex::decode("000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000bf2ea0000000000000000000000000000000000000000000000000000000000007530000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002").unwrap();

let calldata = vec![
FieldElement::from_hex_be(from_address).unwrap(),
FieldElement::ONE,
FieldElement::TWO,
];

let expected_tx_hash =
felt!("0x6182c63599a9638272f1ce5b5cadabece9c81c2d2b8f88ab7a294472b8fce8b");

let event = LogMessageToL2::LogMessageToL2Event::new(
(
b256!("db80dd488acf86d17c747445b0eabb5d57c541d3bd7b6b87af987858e5066b2b"),
address!("be3C44c09bc1a3566F3e1CA12e5AbA0fA4Ca72Be"),
U256::from_be_slice(&to_address.to_bytes_be()),
U256::from_be_slice(&selector.to_bytes_be()),
),
(vec![U256::from(1), U256::from(2)], U256::from(nonce), U256::from(fee)),
);

let log = Log {
inner: alloy_primitives::Log::<LogData> {
address: Address::from_str("0xde29d060D45901Fb19ED6C6e959EB22d8626708e").unwrap(),
data: LogData::new(
vec![
B256::from_str(
"0xdb80dd488acf86d17c747445b0eabb5d57c541d3bd7b6b87af987858e5066b2b",
)
.unwrap(),
B256::from_str(from_address).unwrap(),
B256::from_str(to_address).unwrap(),
B256::from_str(selector).unwrap(),
],
payload_buf.into(),
)
.expect("Failed to load log data"),
address: address!("de29d060D45901Fb19ED6C6e959EB22d8626708e"),
data: LogData::from(&event),
},
..Default::default()
};

// SN_GOERLI.
let chain_id = ChainId::Named(NamedChainId::Goerli);
let to_address = FieldElement::from_hex_be(to_address).unwrap();
let from_address = EthAddress::from_str(from_address).unwrap();
let selector = FieldElement::from_hex_be(selector).unwrap();
let from_address = EthAddress::from_felt(&from_address).unwrap();

let message_hash = compute_l1_to_l2_message_hash(
from_address.clone(),
to_address,
selector,
&payload,
nonce,
);

let message_hash =
compute_l1_to_l2_message_hash(from_address, to_address, selector, &calldata, nonce);
// the first element of the calldata is always the Ethereum address of the sender
// (msg.sender).
let calldata = vec![from_address.into()].into_iter().chain(payload.clone()).collect();

let expected = L1HandlerTx {
let expected_tx = L1HandlerTx {
calldata,
chain_id,
message_hash,
Expand All @@ -326,12 +314,11 @@ mod tests {
contract_address: to_address.into(),
entry_point_selector: selector,
};
let tx_hash = expected.calculate_hash();

let tx = l1_handler_tx_from_log(log, chain_id).expect("bad log format");
let actual_tx = l1_handler_tx_from_log(log, chain_id).expect("bad log format");

assert_eq!(tx, expected);
assert_eq!(tx_hash, expected_tx_hash);
assert_eq!(expected_tx, actual_tx);
assert_eq!(expected_tx_hash, expected_tx.calculate_hash());
}

#[test]
Expand Down

0 comments on commit bcdd998

Please sign in to comment.