diff --git a/src/message.rs b/src/message.rs index fe7f619..cac269f 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1,5 +1,5 @@ -use crate::types::Withdrawal; use crate::types::{AccessList, AuthorizationList, Hash}; +use crate::types::{Authorization, Withdrawal}; use crate::types::{HelloMessage, Transaction}; use crate::utils; use num::BigUint; @@ -435,17 +435,16 @@ pub fn parse_transaction(payload: Vec) -> Option { let authorization = tmp.at(n).unwrap(); assert!(authorization.is_list()); - // Some asshole create a transaction with 1407996450619573357857283148491789578994728514355 as a chain ID. WHY ? - let chain_id: Vec = authorization.at(0).unwrap().as_val().unwrap(); - let address: Vec = authorization.at(1).unwrap().as_val().unwrap(); - let nonce: u32 = authorization.at(2).unwrap().as_val().unwrap(); - let y_parity: u64 = authorization.at(3).unwrap().as_val().unwrap(); - let r: Vec = authorization.at(4).unwrap().as_val().unwrap(); - let s: Vec = authorization.at(5).unwrap().as_val().unwrap(); - - authorization_list - .0 - .push((chain_id, address, nonce, y_parity, r, s)); + let authorization = Authorization { + chain_id: authorization.at(0).unwrap().as_val().unwrap(), + address: authorization.at(1).unwrap().as_val().unwrap(), + nonce: authorization.at(2).unwrap().as_val().unwrap(), + y_parity: authorization.at(3).unwrap().as_val().unwrap(), + r: authorization.at(4).unwrap().as_val().unwrap(), + s: authorization.at(5).unwrap().as_val().unwrap(), + }; + + authorization_list.0.push(authorization); } let v: u64 = t.at(10).unwrap().as_val().unwrap(); diff --git a/src/types.rs b/src/types.rs index 80a996c..b906735 100644 --- a/src/types.rs +++ b/src/types.rs @@ -18,7 +18,22 @@ pub struct Hash(#[serde(with = "hex::serde")] pub Vec); pub struct AccessList(pub Vec<(Hash, Vec)>); #[derive(Serialize, Clone, Debug)] -pub struct AuthorizationList(pub Vec<(Vec, Vec, u32, u64, Vec, Vec)>); +pub struct AuthorizationList(pub Vec); + +// See https://eips.ethereum.org/EIPS/eip-7702 +#[derive(Serialize, Clone, Debug)] +pub struct Authorization { + #[serde(with = "hex::serde")] + pub chain_id: Vec, // Some asshole created a transaction with 1407996450619573357857283148491789578994728514355 as a chain ID. WHY ? + #[serde(with = "hex::serde")] + pub address: Vec, + pub nonce: u32, + pub y_parity: u64, + #[serde(with = "hex::serde")] + pub r: Vec, + #[serde(with = "hex::serde")] + pub s: Vec, +} #[derive(Clone, Debug)] pub struct Transaction { @@ -34,7 +49,7 @@ pub struct Transaction { pub access_list: Option, // Introduce in type 2 transactions pub max_fee_per_blob_gas: Option, // Introduce in type 3 transactions pub blob_versioned_hashes: Option>, // Introduce in type 3 transactions - pub authorization_list: Option, + pub authorization_list: Option, // Introduce in type 4 transactions pub v: u64, pub r: Vec, pub s: Vec,