op_alloy_rpc_types/
transaction.rsuse alloy_eips::{eip2930::AccessList, eip7702::SignedAuthorization};
use alloy_primitives::{BlockHash, ChainId, TxKind, B256, U256};
use alloy_rpc_types_eth::Signature;
use alloy_serde::OtherFields;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))]
#[serde(rename_all = "camelCase")]
pub struct Transaction {
#[serde(flatten)]
pub inner: alloy_rpc_types_eth::Transaction,
#[serde(default, skip_serializing_if = "Option::is_none", with = "alloy_serde::quantity::opt")]
pub mint: Option<u128>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source_hash: Option<B256>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_system_tx: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", with = "alloy_serde::quantity::opt")]
pub deposit_receipt_version: Option<u64>,
}
impl alloy_consensus::Transaction for Transaction {
fn chain_id(&self) -> Option<ChainId> {
self.inner.chain_id()
}
fn nonce(&self) -> u64 {
self.inner.nonce()
}
fn gas_limit(&self) -> u64 {
self.inner.gas_limit()
}
fn gas_price(&self) -> Option<u128> {
self.inner.gas_price()
}
fn max_fee_per_gas(&self) -> u128 {
self.inner.max_fee_per_gas()
}
fn max_priority_fee_per_gas(&self) -> Option<u128> {
self.inner.max_priority_fee_per_gas()
}
fn max_fee_per_blob_gas(&self) -> Option<u128> {
self.inner.max_fee_per_blob_gas()
}
fn priority_fee_or_price(&self) -> u128 {
self.inner.priority_fee_or_price()
}
fn to(&self) -> TxKind {
self.inner.to()
}
fn value(&self) -> U256 {
self.inner.value()
}
fn input(&self) -> &[u8] {
self.inner.input()
}
fn ty(&self) -> u8 {
self.inner.ty()
}
fn access_list(&self) -> Option<&AccessList> {
self.inner.access_list()
}
fn blob_versioned_hashes(&self) -> Option<&[B256]> {
self.inner.blob_versioned_hashes()
}
fn authorization_list(&self) -> Option<&[SignedAuthorization]> {
self.inner.authorization_list()
}
}
impl alloy_network_primitives::TransactionResponse for Transaction {
type Signature = Signature;
fn tx_hash(&self) -> alloy_primitives::TxHash {
self.inner.tx_hash()
}
fn block_hash(&self) -> Option<BlockHash> {
self.inner.block_hash()
}
fn block_number(&self) -> Option<u64> {
self.inner.block_number()
}
fn transaction_index(&self) -> Option<u64> {
self.inner.transaction_index()
}
fn from(&self) -> alloy_primitives::Address {
self.inner.from()
}
fn to(&self) -> Option<alloy_primitives::Address> {
self.inner.to()
}
fn signature(&self) -> Option<Self::Signature> {
self.inner.signature()
}
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[doc(alias = "OptimismTxFields")]
#[serde(rename_all = "camelCase")]
pub struct OptimismTransactionFields {
#[serde(default, skip_serializing_if = "Option::is_none", with = "alloy_serde::quantity::opt")]
pub mint: Option<u128>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source_hash: Option<B256>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_system_tx: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", with = "alloy_serde::quantity::opt")]
pub deposit_receipt_version: Option<u64>,
}
impl From<OptimismTransactionFields> for OtherFields {
fn from(value: OptimismTransactionFields) -> Self {
serde_json::to_value(value).unwrap().try_into().unwrap()
}
}