From 5db6f708bda70af8f326b1386a884d559c19d1cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex?= Date: Thu, 23 Jul 2026 21:21:03 +0000 Subject: [PATCH] refactor(mantle): Transaction Traits (#3168) --- c-bindings/src/api/subscriptions.rs | 12 +- c-bindings/src/api/wallet.rs | 18 +- core/benches/mantle_tx_components.rs | 3 +- core/src/block/genesis.rs | 3 +- core/src/block/mod.rs | 34 ++-- core/src/header/mod.rs | 3 +- core/src/mantle/gas.rs | 3 + core/src/mantle/mock.rs | 9 +- core/src/mantle/mod.rs | 165 +----------------- core/src/mantle/ops/mod.rs | 3 +- core/src/mantle/traits/genesis.rs | 37 ++++ core/src/mantle/traits/hashable.rs | 30 ++++ core/src/mantle/traits/mantle_tx.rs | 25 +++ core/src/mantle/traits/mod.rs | 11 ++ core/src/mantle/traits/preverified_tx.rs | 12 ++ core/src/mantle/traits/storage.rs | 9 + core/src/mantle/transactions/codec.rs | 3 +- core/src/mantle/transactions/genesis_tx.rs | 12 +- core/src/mantle/transactions/tx.rs | 51 ++---- core/src/utils/merkle.rs | 8 +- .../archiver/src/block.rs | 3 +- .../sequencer/src/sequencer.rs | 3 +- .../tui-zone/src/run_commands/run_config.rs | 3 +- .../tui-zone/src/run_commands/run_deposit.rs | 2 +- .../tui-zone/src/run_commands/run_withdraw.rs | 3 +- .../tui-zone/src/run_commands/unit_tests.rs | 3 +- ledger/src/cryptarchia/mod.rs | 20 +-- ledger/src/lib.rs | 57 +++--- ledger/src/mantle/mod.rs | 3 +- nodes/api-common/src/bodies/wallet.rs | 2 +- nodes/node/binary/src/api/backend.rs | 8 +- nodes/node/binary/src/api/handlers.rs | 93 +++++----- .../src/api/serializers/transactions.rs | 2 +- nodes/node/binary/src/config/mempool/mod.rs | 2 +- nodes/node/binary/src/config/time/mod.rs | 2 +- nodes/node/binary/src/generic_services/mod.rs | 16 +- .../src/generic_services/sdp/mempool.rs | 2 +- nodes/node/binary/src/lib.rs | 2 +- services/api/src/http/mantle.rs | 102 +++-------- .../api/src/http/storage/adapters/rocksdb.rs | 7 +- services/api/src/http/storage/mod.rs | 7 +- services/chain/chain-leader/src/lib.rs | 18 +- .../chain/chain-leader/src/mempool/adapter.rs | 4 +- services/chain/chain-leader/src/relays.rs | 4 +- .../chain/chain-network/src/bootstrap/ibd.rs | 6 +- services/chain/chain-network/src/lib.rs | 27 +-- .../chain-network/src/mempool/adapter.rs | 4 +- .../src/network/adapters/libp2p.rs | 24 +-- services/chain/chain-network/src/relays.rs | 4 +- services/chain/chain-service/src/lib.rs | 9 +- services/chain/chain-service/src/relays.rs | 7 +- services/chain/chain-service/src/states.rs | 2 +- .../src/storage/adapters/storage.rs | 11 +- services/tx-service/src/tx/service.rs | 8 +- services/wallet/src/lib.rs | 8 +- tests/src/common/chain.rs | 2 +- tests/src/common/manual_cluster.rs | 2 +- tests/src/common/wallet/funding_from_chain.rs | 5 +- tests/src/common/wallet/scanner/accounting.rs | 5 +- .../src/common/wallet/transaction/prepare.rs | 3 +- .../src/common/wallet/transaction/signing.rs | 6 +- .../cucumber/steps/manual_mempool/actions.rs | 3 +- .../src/cucumber/steps/manual_nodes/utils.rs | 2 +- .../tracked_transactions.rs | 3 +- .../src/cucumber/steps/manual_zone/support.rs | 3 +- tests/src/cucumber/steps/wallet_fund.rs | 3 +- tests/src/tests/mantle/chain_start.rs | 3 +- tests/src/tests/mantle/channel.rs | 3 +- tests/src/tests/mantle/leader.rs | 2 +- tests/src/tests/mantle/sdp/ops.rs | 2 +- tests/src/topology/mod.rs | 2 +- .../src/framework/deployment_artifacts.rs | 2 +- .../src/node/configs/postprocess.rs | 2 +- .../src/workloads/inscription/workload.rs | 3 +- .../src/workloads/transaction/workload.rs | 3 +- tools/config/src/consensus.rs | 2 +- tools/config/src/lib.rs | 2 +- tools/config/src/sdp.rs | 2 +- wallet/src/lib.rs | 7 +- zone-sdk/src/adapter.rs | 3 +- zone-sdk/src/sequencer/actor.rs | 3 +- zone-sdk/src/sequencer/block_fetch.rs | 3 +- zone-sdk/src/sequencer/state.rs | 7 +- zone-sdk/src/sequencer/tx_builder.rs | 3 +- zone-sdk/src/sequencer/types.rs | 3 +- zone-sdk/src/sequencer/zone_sequencer.rs | 3 +- 86 files changed, 465 insertions(+), 561 deletions(-) create mode 100644 core/src/mantle/traits/genesis.rs create mode 100644 core/src/mantle/traits/hashable.rs create mode 100644 core/src/mantle/traits/mantle_tx.rs create mode 100644 core/src/mantle/traits/mod.rs create mode 100644 core/src/mantle/traits/preverified_tx.rs create mode 100644 core/src/mantle/traits/storage.rs diff --git a/c-bindings/src/api/subscriptions.rs b/c-bindings/src/api/subscriptions.rs index 302e72c06..f80965d35 100644 --- a/c-bindings/src/api/subscriptions.rs +++ b/c-bindings/src/api/subscriptions.rs @@ -5,7 +5,9 @@ use lb_chain_service::api::CryptarchiaServiceApi; use lb_core::{ block::{Block as CoreBlock, BlockTransactions}, mantle::{ - StorageSize, Transaction, TransactionHasher, TxHash, transactions::states::Unverified, + TxHash, + traits::{Hashable, StorageSize, hashable}, + transactions::states::Unverified, }, }; use lb_node::{ @@ -31,12 +33,12 @@ pub struct TxWithId { tx: SignedMantleTx, } -impl Transaction for TxWithId { +impl Hashable for TxWithId { //noinspection RsTypeCheck: The type is correct, but the linter is confused by // the closure. - const HASHER: TransactionHasher = - |tx| as Transaction>::HASHER(&tx.tx); - type Hash = as Transaction>::Hash; + const HASHER: hashable::Hasher = + |tx| as Hashable>::HASHER(&tx.tx); + type Hash = as Hashable>::Hash; fn as_signing(&self) -> Vec { self.tx.as_signing() diff --git a/c-bindings/src/api/wallet.rs b/c-bindings/src/api/wallet.rs index d9ae8907a..517d0952a 100644 --- a/c-bindings/src/api/wallet.rs +++ b/c-bindings/src/api/wallet.rs @@ -8,7 +8,7 @@ use lb_api_service::http::mempool; use lb_core::{ header::HeaderId as CoreHeaderId, mantle::{ - MantleTx, Note, NoteId as CoreNoteId, Op, OpProof, SignedMantleTx, Transaction, + MantleTx, Note, NoteId as CoreNoteId, Op, OpProof, SignedMantleTx, gas::GasCost, ledger::{Inputs, Outputs}, ops::{ @@ -18,6 +18,7 @@ use lb_core::{ }, transfer::TransferOp, }, + traits::Hashable, transactions::{ MantleTxBuilder, states::{Preverified, Unverified}, @@ -715,7 +716,7 @@ pub(crate) fn transfer_funds_sync( ) })?; - if let Err(error) = mempool::add_tx(handle, signed_tx.clone(), Transaction::hash).await { + if let Err(error) = mempool::add_tx(handle, signed_tx.clone(), Hashable::hash).await { return Err(OperationStatus::error( OperationStatusCode::DynError, format!("Failed to add transaction to mempool: {error}"), @@ -1002,7 +1003,7 @@ pub(crate) fn channel_deposit_with_notes_sync( })? .response; - if let Err(error) = mempool::add_tx(handle, signed_tx.clone(), Transaction::hash).await { + if let Err(error) = mempool::add_tx(handle, signed_tx.clone(), Hashable::hash).await { return Err(OperationStatus::error( OperationStatusCode::DynError, format!("Failed to add transaction to mempool: {error}"), @@ -1353,7 +1354,7 @@ pub(crate) fn channel_deposit_sync( })?; // 6. Submit to the mempool. - if let Err(error) = mempool::add_tx(handle, signed_tx.clone(), Transaction::hash).await { + if let Err(error) = mempool::add_tx(handle, signed_tx.clone(), Hashable::hash).await { return Err(OperationStatus::error( OperationStatusCode::DynError, format!("Failed to add transaction to mempool: {error}"), @@ -1623,7 +1624,7 @@ pub type FfiSubmitTransactionResult = FfiStatusResult; /// /// Mirrors the node's `POST /mempool/add/tx` HTTP handler. The transaction is /// a JSON string with the exact same schema as the HTTP request body — for -/// example a transaction funded via [`wallet_fund_tx`] and completed with the +/// example, a transaction funded via [`wallet_fund_tx`] and completed with the /// caller's op proofs. /// /// # Arguments @@ -1683,12 +1684,7 @@ pub unsafe extern "C" fn submit_signed_transaction( let transaction_hash = preverified_tx.hash().as_signing_bytes(); let runtime_handle = node.get_runtime_handle(); let submit_result = runtime_handle.block_on(async { - mempool::add_tx( - node.get_overwatch_handle(), - preverified_tx, - Transaction::hash, - ) - .await + mempool::add_tx(node.get_overwatch_handle(), preverified_tx, Hashable::hash).await }); if let Err(error) = submit_result { return FfiSubmitTransactionResult::err(OperationStatus::error( diff --git a/core/benches/mantle_tx_components.rs b/core/benches/mantle_tx_components.rs index 32ee00e80..c67546538 100644 --- a/core/benches/mantle_tx_components.rs +++ b/core/benches/mantle_tx_components.rs @@ -17,7 +17,7 @@ use lb_poseidon2::Digest; use logos_blockchain_core::{ crypto::{Hasher, ZkHasher}, mantle::{ - MantleTx, SignedMantleTx, Transaction as _, TxHash, + MantleTx, SignedMantleTx, TxHash, nom::NomEncode as _, ops::{ Op, OpProof, @@ -26,6 +26,7 @@ use logos_blockchain_core::{ inscribe::{Inscription, InscriptionOp}, }, }, + traits::Hashable as _, transactions::{ codec::{decode_signed_mantle_tx, encode_signed_mantle_tx}, states::Unverified, diff --git a/core/src/block/genesis.rs b/core/src/block/genesis.rs index 4a9328f48..0c8bbd105 100644 --- a/core/src/block/genesis.rs +++ b/core/src/block/genesis.rs @@ -1270,9 +1270,10 @@ mod tests { use crate::{ header::HeaderId, mantle::{ - CryptarchiaParameter, GenesisTime, GenesisTx as _, NoteId, + CryptarchiaParameter, GenesisTime, NoteId, nom::NomEncode as _, ops::channel::{ChannelId, MsgId, inscribe::Inscription}, + traits::genesis::GenesisTx as _, transactions::states::Preverified, }, sdp::{Locator, ProviderId, ServiceType}, diff --git a/core/src/block/mod.rs b/core/src/block/mod.rs index 8f07d9542..fe1ece709 100644 --- a/core/src/block/mod.rs +++ b/core/src/block/mod.rs @@ -12,7 +12,10 @@ use serde::{Deserialize, Serialize, de::DeserializeOwned}; use crate::{ codec::{DeserializeOp as _, SerializeOp as _}, header::{ContentId, Header, HeaderId}, - mantle::{StorageSize, Transaction, TxHash}, + mantle::{ + TxHash, + traits::{Hashable, StorageSize}, + }, proofs::leader_proof::{Groth16LeaderProof, LeaderProof as _}, utils::merkle, }; @@ -65,7 +68,7 @@ pub struct Block { impl<'de, Tx> Deserialize<'de> for Block where - Tx: Clone + Eq + Deserialize<'de> + Transaction + StorageSize, + Tx: Clone + Eq + Deserialize<'de> + Hashable + StorageSize, { fn deserialize(deserializer: D) -> Result where @@ -123,7 +126,7 @@ impl Block { signing_key: &Ed25519Key, ) -> Result where - Tx: Transaction + StorageSize, + Tx: Hashable + StorageSize, { // 1. Non-genesis blocks only if slot == Slot::genesis() { @@ -162,7 +165,7 @@ impl Block { signature: Ed25519Signature, ) -> Result where - Tx: Transaction + StorageSize, + Tx: Hashable + StorageSize, { let block = Self { header, @@ -176,7 +179,7 @@ impl Block { fn into_verified(self) -> Result where - Tx: Transaction + StorageSize, + Tx: Hashable + StorageSize, { // 1. Non-genesis blocks only if self.header.slot() == Slot::genesis() { @@ -205,7 +208,7 @@ impl Block { fn validate_total_transactions_size(&self) -> Result where - Tx: Transaction + StorageSize, + Tx: Hashable + StorageSize, { let mut total = 0usize; @@ -230,7 +233,7 @@ impl Block { fn calculate_content_id(transactions: &[Tx]) -> ContentId where - Tx: Transaction, + Tx: Hashable, { let root_hash = merkle::calculate_block_root(transactions); ContentId::from(root_hash) @@ -263,10 +266,10 @@ impl Block { pub fn to_proposal(self) -> Proposal where - Tx: Transaction, + Tx: Hashable, { let mempool_transactions: Vec = - self.transactions.iter().map(Transaction::hash).collect(); + self.transactions.iter().map(Hashable::hash).collect(); let references = References { mempool_transactions, }; @@ -279,7 +282,7 @@ impl Block { } } -impl + StorageSize> +impl + StorageSize> TryFrom for Block { type Error = crate::codec::Error; @@ -294,7 +297,9 @@ impl } } -impl TryFrom> for Bytes { +impl> TryFrom> + for Bytes +{ type Error = crate::codec::Error; fn try_from(block: Block) -> Result { @@ -316,9 +321,10 @@ mod tests { use crate::{ crypto::ZkHasher, mantle::{ - MantleTx, TransactionHasher, + MantleTx, ledger::{Note, Utxo}, ops::leader_claim::VoucherCm, + traits::hashable, transactions::Ops, }, proofs::leader_proof::{LeaderPrivate, LeaderPublic}, @@ -471,10 +477,10 @@ mod tests { #[derive(Clone, Copy, Debug)] struct TestMantleTx; - impl Transaction for TestMantleTx { + impl Hashable for TestMantleTx { //noinspection RsTypeCheck: The type is correct, but the linter is confused by // the closure. - const HASHER: TransactionHasher = |_tx| TxHash::from([0u8; 32]); + const HASHER: hashable::Hasher = |_tx| TxHash::from([0u8; 32]); type Hash = TxHash; fn as_signing(&self) -> Vec { diff --git a/core/src/header/mod.rs b/core/src/header/mod.rs index df70c6b03..6b8bfe4ee 100644 --- a/core/src/header/mod.rs +++ b/core/src/header/mod.rs @@ -319,7 +319,7 @@ mod block_root_test_vectors { use super::*; use crate::{ mantle::{ - MantleTx, Note, Op, Transaction as _, + MantleTx, Note, Op, channel::{SlotTimeframe, SlotTimeout}, ledger::{Inputs, NoteId, Outputs}, ops::{ @@ -334,6 +334,7 @@ mod block_root_test_vectors { leader_claim::{LeaderClaimOp, VoucherCm}, transfer::TransferOp, }, + traits::Hashable as _, transactions::Ops, }, sdp::{ diff --git a/core/src/mantle/gas.rs b/core/src/mantle/gas.rs index a97e408d9..de144d1c0 100644 --- a/core/src/mantle/gas.rs +++ b/core/src/mantle/gas.rs @@ -115,11 +115,14 @@ pub trait GasCalculator { &self, context: &Self::Context, ) -> Result; + fn storage_gas_cost(&self, context: &Self::Context) -> Result; + fn execution_gas_consumption( &self, context: &Self::Context, ) -> Result; + fn storage_gas_consumption(&self, context: &Self::Context) -> Result; } diff --git a/core/src/mantle/mock.rs b/core/src/mantle/mock.rs index 5567c75f5..e2b114edb 100644 --- a/core/src/mantle/mock.rs +++ b/core/src/mantle/mock.rs @@ -8,7 +8,10 @@ use serde::{Serialize, de::DeserializeOwned}; use crate::{ codec::SerializeOp as _, - mantle::{StorageSize, Transaction, TransactionHasher, TxHash}, + mantle::{ + TxHash, + traits::{Hashable, Hasher, StorageSize}, + }, }; #[derive(Debug, Clone, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)] @@ -38,10 +41,10 @@ impl MockTransaction { } } -impl Transaction for MockTransaction { +impl Hashable for MockTransaction { //noinspection RsTypeCheck: The type is correct, but the linter is confused by // the closure. - const HASHER: TransactionHasher = Self::id; + const HASHER: Hasher = Self::id; type Hash = MockTxId; fn as_signing(&self) -> Vec { diff --git a/core/src/mantle/mod.rs b/core/src/mantle/mod.rs index 8044cb4f5..4bb3ae8d0 100644 --- a/core/src/mantle/mod.rs +++ b/core/src/mantle/mod.rs @@ -5,177 +5,14 @@ pub mod ledger; pub mod mock; pub mod nom; pub mod ops; +pub mod traits; pub mod transactions; -use std::hash::Hash; - pub use gas::{GasCalculator, GasConstants}; pub use ledger::{Note, NoteId, Utxo, Value}; pub use ops::{Op, OpProof}; -use ops::{channel::inscribe::InscriptionOp, sdp::SDPDeclareOp}; -use thiserror::Error; pub use transactions::{CryptarchiaParameter, GenesisTime}; pub use crate::mantle::transactions::{MantleTx, SignedMantleTx, TxHash, VerificationError}; -use crate::mantle::{ - gas::{Gas, GasCost, GasOverflow}, - ops::transfer::TransferOp, - transactions::tx::VerifiedOps, -}; pub const MAX_MANTLE_TXS: usize = 1024; - -pub type TransactionHasher = fn(&T) -> ::Hash; - -pub trait StorageSize { - fn storage_size(&self) -> usize; -} - -pub trait Transaction { - const HASHER: TransactionHasher; - type Hash: Hash + Eq + Clone; - fn hash(&self) -> Self::Hash { - Self::HASHER(self) - } - /// Returns the bytes' that are used to form a signature of a transaction. - /// - /// The resulting bytes' are then used by the `HASHER` - /// to produce the transaction's unique hash, which is what is typically - /// signed by the transaction originator. - fn as_signing(&self) -> Vec; -} - -// TODO: Purge out gas fns -pub trait AuthenticatedMantleTx: Transaction + GasCalculator + StorageSize { - type Context; - - /// Returns the underlying `MantleTx` that this transaction represents. - fn mantle_tx(&self) -> &MantleTx; - - /// Returns an iterator over the operations and their corresponding proofs - /// in this transaction. - fn ops_with_proof(&self) -> impl Iterator; - - // Gas Cost functions with context already handled - fn total_gas_cost( - &self, - context: ::Context, - ) -> Result; - fn storage_gas_cost( - &self, - context: ::Context, - ) -> Result; - fn execution_gas_consumption( - &self, - context: ::Context, - ) -> Result; - fn storage_gas_consumption( - &self, - context: ::Context, - ) -> Result; -} - -pub trait PreverifiedMantleTx: AuthenticatedMantleTx { - /// Returns the cursor to the verified operations in this transaction. - fn verified_ops(&self) -> VerifiedOps<'_>; -} - -/// A genesis transaction as specified in -// https://www.notion.so/nomos-tech/v1-1-Bedrock-Genesis-Block-32e261aa09df80689540ec445172b00d -pub trait GenesisTx: Transaction { - fn genesis_transfer(&self) -> &TransferOp; - fn genesis_inscription(&self) -> &InscriptionOp; - fn cryptarchia_parameter(&self) -> CryptarchiaParameter; - fn sdp_declarations(&self) -> impl Iterator; - fn mantle_tx(&self) -> &MantleTx; -} - -impl Transaction for &T { - //noinspection RsTypeCheck: The type is correct, but the linter is confused by - // the closure. - const HASHER: TransactionHasher = |tx| T::HASHER(tx); - type Hash = T::Hash; - - fn as_signing(&self) -> Vec { - T::as_signing(self) - } -} - -impl StorageSize for &T { - fn storage_size(&self) -> usize { - T::storage_size(self) - } -} - -impl AuthenticatedMantleTx for &T { - type Context = ::Context; - - fn mantle_tx(&self) -> &MantleTx { - T::mantle_tx(self) - } - - fn ops_with_proof(&self) -> impl Iterator { - T::ops_with_proof(self) - } - - fn total_gas_cost( - &self, - context: ::Context, - ) -> Result { - ::total_gas_cost::(self, context) - } - - fn storage_gas_cost( - &self, - context: ::Context, - ) -> Result { - ::storage_gas_cost(self, context) - } - - fn execution_gas_consumption( - &self, - context: ::Context, - ) -> Result { - ::execution_gas_consumption::(self, context) - } - - fn storage_gas_consumption( - &self, - context: ::Context, - ) -> Result { - ::storage_gas_consumption(self, context) - } -} - -impl PreverifiedMantleTx for &T { - fn verified_ops(&self) -> VerifiedOps<'_> { - T::verified_ops(self) - } -} - -impl GenesisTx for &T { - fn genesis_transfer(&self) -> &TransferOp { - T::genesis_transfer(self) - } - fn genesis_inscription(&self) -> &InscriptionOp { - T::genesis_inscription(self) - } - - fn cryptarchia_parameter(&self) -> CryptarchiaParameter { - T::cryptarchia_parameter(self) - } - - fn sdp_declarations(&self) -> impl Iterator { - T::sdp_declarations(self) - } - - fn mantle_tx(&self) -> &MantleTx { - T::mantle_tx(self) - } -} - -#[derive(Debug, Error)] -pub enum Error { - #[error("Invalid witness")] - InvalidWitness, -} diff --git a/core/src/mantle/ops/mod.rs b/core/src/mantle/ops/mod.rs index 997542b9b..3eeb1995a 100644 --- a/core/src/mantle/ops/mod.rs +++ b/core/src/mantle/ops/mod.rs @@ -304,10 +304,11 @@ mod mantle_test_vectors { use super::*; use crate::{ mantle::{ - MantleTx, Note, Transaction as _, + MantleTx, Note, channel::{SlotTimeframe, SlotTimeout}, ledger::{Inputs, NoteId, Outputs}, ops::channel::{ChannelId, MsgId, config::Keys, deposit::Metadata}, + traits::Hashable as _, transactions::Ops, }, sdp::{ diff --git a/core/src/mantle/traits/genesis.rs b/core/src/mantle/traits/genesis.rs new file mode 100644 index 000000000..810a43cda --- /dev/null +++ b/core/src/mantle/traits/genesis.rs @@ -0,0 +1,37 @@ +use crate::mantle::{ + CryptarchiaParameter, MantleTx, OpProof, TxHash, + ops::{channel::inscribe::InscriptionOp, sdp::SDPDeclareOp, transfer::TransferOp}, + traits::Hashable, +}; + +/// A genesis transaction as specified in the +/// [Spec](https://www.notion.so/nomos-tech/v1-1-Bedrock-Genesis-Block-32e261aa09df80689540ec445172b00d). +pub trait GenesisTx: Hashable { + fn genesis_transfer(&self) -> &TransferOp; + fn genesis_inscription(&self) -> &InscriptionOp; + fn cryptarchia_parameter(&self) -> CryptarchiaParameter; + fn sdp_declarations(&self) -> impl Iterator; + fn mantle_tx(&self) -> &MantleTx; +} + +impl GenesisTx for &T { + fn genesis_transfer(&self) -> &TransferOp { + T::genesis_transfer(self) + } + + fn genesis_inscription(&self) -> &InscriptionOp { + T::genesis_inscription(self) + } + + fn cryptarchia_parameter(&self) -> CryptarchiaParameter { + T::cryptarchia_parameter(self) + } + + fn sdp_declarations(&self) -> impl Iterator { + T::sdp_declarations(self) + } + + fn mantle_tx(&self) -> &MantleTx { + T::mantle_tx(self) + } +} diff --git a/core/src/mantle/traits/hashable.rs b/core/src/mantle/traits/hashable.rs new file mode 100644 index 000000000..cdd43e388 --- /dev/null +++ b/core/src/mantle/traits/hashable.rs @@ -0,0 +1,30 @@ +use std::hash::Hash; + +pub type Hasher = fn(&T) -> ::Hash; + +pub trait Hashable { + const HASHER: Hasher; + type Hash: Hash + Eq + Clone; + + fn hash(&self) -> Self::Hash { + Self::HASHER(self) + } + + /// Returns the bytes that are used to form a signature of a transaction. + /// + /// The resulting bytes are then used by the `HASHER` to produce the + /// transaction's unique hash, which is what is typically signed by the + /// transaction originator. + fn as_signing(&self) -> Vec; +} + +impl Hashable for &T { + //noinspection RsTypeCheck: The type is correct, but the linter is confused by + // the closure. + const HASHER: Hasher = |tx| T::HASHER(tx); + type Hash = T::Hash; + + fn as_signing(&self) -> Vec { + T::as_signing(self) + } +} diff --git a/core/src/mantle/traits/mantle_tx.rs b/core/src/mantle/traits/mantle_tx.rs new file mode 100644 index 000000000..ae597ba43 --- /dev/null +++ b/core/src/mantle/traits/mantle_tx.rs @@ -0,0 +1,25 @@ +use crate::mantle::{ + GasCalculator, MantleTx, Op, OpProof, TxHash, + traits::{Hashable, StorageSize}, +}; + +pub type OpWithProof<'a> = (&'a Op, &'a OpProof); + +pub trait MantleTxWithProofs: Hashable + GasCalculator + StorageSize { + /// Returns the underlying `MantleTx` that this transaction represents. + fn mantle_tx(&self) -> &MantleTx; + + /// Returns an iterator over the operations and their corresponding proofs + /// in this transaction. + fn ops_with_proof(&self) -> impl Iterator>; +} + +impl MantleTxWithProofs for &T { + fn mantle_tx(&self) -> &MantleTx { + T::mantle_tx(self) + } + + fn ops_with_proof(&self) -> impl Iterator> { + T::ops_with_proof(self) + } +} diff --git a/core/src/mantle/traits/mod.rs b/core/src/mantle/traits/mod.rs new file mode 100644 index 000000000..2dba67ab2 --- /dev/null +++ b/core/src/mantle/traits/mod.rs @@ -0,0 +1,11 @@ +pub mod genesis; +pub mod hashable; +pub mod mantle_tx; +pub mod preverified_tx; +pub mod storage; + +pub use genesis::GenesisTx; +pub use hashable::{Hashable, Hasher}; +pub use mantle_tx::MantleTxWithProofs; +pub use preverified_tx::PreverifiedMantleTx; +pub use storage::StorageSize; diff --git a/core/src/mantle/traits/preverified_tx.rs b/core/src/mantle/traits/preverified_tx.rs new file mode 100644 index 000000000..9e8695d80 --- /dev/null +++ b/core/src/mantle/traits/preverified_tx.rs @@ -0,0 +1,12 @@ +use crate::mantle::{traits::mantle_tx::MantleTxWithProofs, transactions::tx::VerifiedOps}; + +pub trait PreverifiedMantleTx: MantleTxWithProofs { + /// Returns the cursor to the verified operations in this transaction. + fn verified_ops(&self) -> VerifiedOps<'_>; +} + +impl PreverifiedMantleTx for &T { + fn verified_ops(&self) -> VerifiedOps<'_> { + T::verified_ops(self) + } +} diff --git a/core/src/mantle/traits/storage.rs b/core/src/mantle/traits/storage.rs new file mode 100644 index 000000000..fbde6e849 --- /dev/null +++ b/core/src/mantle/traits/storage.rs @@ -0,0 +1,9 @@ +pub trait StorageSize { + fn storage_size(&self) -> usize; +} + +impl StorageSize for &T { + fn storage_size(&self) -> usize { + T::storage_size(self) + } +} diff --git a/core/src/mantle/transactions/codec.rs b/core/src/mantle/transactions/codec.rs index 5d434efcb..12956735b 100644 --- a/core/src/mantle/transactions/codec.rs +++ b/core/src/mantle/transactions/codec.rs @@ -103,7 +103,7 @@ mod tests { use super::*; use crate::{ mantle::{ - Note, NoteId, OpProof, Transaction as _, Utxo, + Note, NoteId, OpProof, Utxo, ledger::{BoundedInputs, BoundedOutputs, Inputs, Outputs}, ops::{ channel::{ @@ -116,6 +116,7 @@ mod tests { sdp::{SDPActiveOp, SDPDeclareOp, SDPWithdrawOp}, transfer::TransferOp, }, + traits::Hashable as _, transactions::{GasPrices, Ops, tx::OpsProofs}, }, proofs::{ diff --git a/core/src/mantle/transactions/genesis_tx.rs b/core/src/mantle/transactions/genesis_tx.rs index 1caa3da81..aa33e6cf7 100644 --- a/core/src/mantle/transactions/genesis_tx.rs +++ b/core/src/mantle/transactions/genesis_tx.rs @@ -14,7 +14,7 @@ use super::{SignedMantleTx, TxHash}; use crate::{ crypto::{Digest as _, Hasher}, mantle::{ - MantleTx, OpProof, Transaction, TransactionHasher, + MantleTx, OpProof, gas::{Gas, GasCalculator, GasConstants, GasCost, GasOverflow, GasPrice}, nom::{NomDecode, NomEncode}, ops::{ @@ -24,6 +24,7 @@ use crate::{ sdp::SDPDeclareOp, transfer::TransferOp, }, + traits::{GenesisTx as GenesisTxTrait, Hashable, hashable}, transactions::states::Preverified, }, }; @@ -159,11 +160,12 @@ fn valid_cryptarchia_inscription( ) } -impl Transaction for GenesisTx { +impl Hashable for GenesisTx { //noinspection RsTypeCheck: The type is correct, but the linter is confused by // the closure. - const HASHER: TransactionHasher = |tx| TxHash(Hasher::digest(tx.as_signing()).into()); + const HASHER: hashable::Hasher = |tx| TxHash(Hasher::digest(tx.as_signing()).into()); type Hash = TxHash; + fn as_signing(&self) -> Vec { self.tx.as_signing() } @@ -199,7 +201,7 @@ impl GasCalculator for GenesisTx { } } -impl crate::mantle::GenesisTx for GenesisTx { +impl GenesisTxTrait for GenesisTx { fn genesis_transfer(&self) -> &TransferOp { // Safe to unwrap because we validated this in from_tx match &self.mantle_tx().ops()[0] { @@ -776,8 +778,6 @@ mod tests { #[test] fn test_genesis_tx_cryptarchia_parameter() { - use crate::mantle::GenesisTx as _; - let param = cryptarchia_param(); let tx = create_trusted_tx( vec![Op::ChannelInscribe(inscription_op( diff --git a/core/src/mantle/transactions/tx.rs b/core/src/mantle/transactions/tx.rs index 6a6486c5a..b6893dded 100644 --- a/core/src/mantle/transactions/tx.rs +++ b/core/src/mantle/transactions/tx.rs @@ -17,7 +17,6 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer}; use crate::{ crypto::{Digest as _, Hash, Hasher}, mantle::{ - AuthenticatedMantleTx, PreverifiedMantleTx, StorageSize, Transaction, TransactionHasher, Value, channel::Channels, gas::{Gas, GasCalculator, GasConstants, GasCost, GasOverflow, GasPrice}, @@ -37,6 +36,10 @@ use crate::{ }, transfer::{TransferOp, TransferValidationContext}, }, + traits::{ + Hashable, MantleTxWithProofs, PreverifiedMantleTx, StorageSize, hashable, + mantle_tx::OpWithProof, + }, transactions::{ MAX_OPS_PER_TX, Ops, codec::{ @@ -326,12 +329,12 @@ impl MantleTx { } } -static MANTLE_TXHASH_V1_BYTES: LazyLock> = LazyLock::new(|| b"MANTLE_TXHASH_V1".to_vec()); +static MANTLE_TX_HASH_V1_BYTES: LazyLock> = LazyLock::new(|| b"MANTLE_TXHASH_V1".to_vec()); -impl Transaction for MantleTx { +impl Hashable for MantleTx { //noinspection RsTypeCheck: The type is correct, but the linter is confused by // the closure. - const HASHER: TransactionHasher = |tx| { + const HASHER: hashable::Hasher = |tx| { let bytes: [u8; 32] = Hasher::digest(tx.as_signing()).into(); TxHash::from(bytes) }; @@ -340,7 +343,7 @@ impl Transaction for MantleTx { fn as_signing(&self) -> Vec { // constant and structure as defined in the Mantle specification: // https://www.notion.so/nomos-tech/v1-3-Mantle-Specification-31e261aa09df818f9327ee87e5a6d433#31e261aa09df80aea7cff4eb98d61b6e - let mut buffer = MANTLE_TXHASH_V1_BYTES.to_vec(); + let mut buffer = MANTLE_TX_HASH_V1_BYTES.to_vec(); buffer.extend(self.encode()); buffer } @@ -926,10 +929,10 @@ fn verify_channel_multi_sig( Ok(()) } -impl Transaction for SignedMantleTx { +impl Hashable for SignedMantleTx { //noinspection RsTypeCheck: The type is correct, but the linter is confused by // the closure. - const HASHER: TransactionHasher = |tx| { + const HASHER: hashable::Hasher = |tx| { let bytes: [u8; 32] = Hasher::digest(tx.as_signing()).into(); TxHash::from(bytes) }; @@ -940,44 +943,14 @@ impl Transaction for SignedMantleTx { } } -impl AuthenticatedMantleTx for SignedMantleTx { - type Context = GasPrices; - +impl MantleTxWithProofs for SignedMantleTx { fn mantle_tx(&self) -> &MantleTx { &self.mantle_tx } - fn ops_with_proof(&self) -> impl Iterator { + fn ops_with_proof(&self) -> impl Iterator> { self.ops_with_proof() } - - fn total_gas_cost( - &self, - context: ::Context, - ) -> Result { - GasCalculator::total_gas_cost::(&self, &context) - } - - fn storage_gas_cost( - &self, - context: ::Context, - ) -> Result { - GasCalculator::storage_gas_cost(&self, &context) - } - - fn execution_gas_consumption( - &self, - context: ::Context, - ) -> Result { - GasCalculator::execution_gas_consumption::(&self, &context) - } - - fn storage_gas_consumption( - &self, - context: ::Context, - ) -> Result { - GasCalculator::storage_gas_consumption(&self, &context) - } } impl PreverifiedMantleTx for SignedMantleTx { diff --git a/core/src/utils/merkle.rs b/core/src/utils/merkle.rs index 12ace08aa..48dbaca19 100644 --- a/core/src/utils/merkle.rs +++ b/core/src/utils/merkle.rs @@ -1,6 +1,6 @@ use crate::{ crypto::{Digest as _, Hash, Hasher}, - mantle::{Transaction, TxHash}, + mantle::{TxHash, traits::Hashable}, }; pub fn node(left: impl AsRef<[u8]>, right: impl AsRef<[u8]>) -> [u8; 32] { @@ -11,12 +11,12 @@ pub fn node(left: impl AsRef<[u8]>, right: impl AsRef<[u8]>) -> [u8; 32] { } // Calculates a 32-byte Merkle root of transactions -pub fn calculate_block_root>(transactions: &[T]) -> Hash { - let mut leaves: Vec<_> = transactions.iter().map(Transaction::hash).collect(); +pub fn calculate_block_root>(transactions: &[T]) -> Hash { + let mut leaves: Vec<_> = transactions.iter().map(Hashable::hash).collect(); let target_size = leaves.len().max(1).next_power_of_two(); - let zero_leaf: ::Hash = [0u8; 32].into(); + let zero_leaf: ::Hash = [0u8; 32].into(); leaves.resize(target_size, zero_leaf); while leaves.len() > 1 { diff --git a/deployment/l2-sequencer-archival-demo/archiver/src/block.rs b/deployment/l2-sequencer-archival-demo/archiver/src/block.rs index eff677b98..4c3d0ac28 100644 --- a/deployment/l2-sequencer-archival-demo/archiver/src/block.rs +++ b/deployment/l2-sequencer-archival-demo/archiver/src/block.rs @@ -5,8 +5,9 @@ use lb_common_http_client::CommonHttpClient; use lb_core::{ header::HeaderId, mantle::{ - Op, SignedMantleTx, Transaction as _, TxHash, + Op, SignedMantleTx, TxHash, ops::channel::{ChannelId, inscribe::InscriptionOp}, + traits::Hashable as _, transactions::states::Unverified, }, }; diff --git a/deployment/l2-sequencer-archival-demo/sequencer/src/sequencer.rs b/deployment/l2-sequencer-archival-demo/sequencer/src/sequencer.rs index 2a40d3f66..138483c75 100644 --- a/deployment/l2-sequencer-archival-demo/sequencer/src/sequencer.rs +++ b/deployment/l2-sequencer-archival-demo/sequencer/src/sequencer.rs @@ -4,7 +4,7 @@ use lb_common_http_client::{ChainServiceInfo, CommonHttpClient}; use lb_core::{ header::HeaderId, mantle::{ - MantleTx, SignedMantleTx, Transaction as _, + MantleTx, SignedMantleTx, ops::{ Op, OpProof, channel::{ @@ -12,6 +12,7 @@ use lb_core::{ inscribe::{Inscription, InscriptionOp}, }, }, + traits::Hashable as _, transactions::states::{Unverified, VerificationState}, }, }; diff --git a/deployment/tui-zone/src/run_commands/run_config.rs b/deployment/tui-zone/src/run_commands/run_config.rs index e16125ff0..0b26d5272 100644 --- a/deployment/tui-zone/src/run_commands/run_config.rs +++ b/deployment/tui-zone/src/run_commands/run_config.rs @@ -2,12 +2,13 @@ use std::path::PathBuf; use lb_core::{ mantle::{ - Op, OpProof, SignedMantleTx, Transaction as _, + Op, OpProof, SignedMantleTx, nom::NomEncode as _, ops::channel::{ ChannelId, ChannelKeyIndex, config::{ChannelConfigOp, Keys}, }, + traits::Hashable as _, transactions::codec::encode_signed_mantle_tx, }, proofs::channel_multi_sig_proof::{ChannelMultiSigProof, IndexedSignature}, diff --git a/deployment/tui-zone/src/run_commands/run_deposit.rs b/deployment/tui-zone/src/run_commands/run_deposit.rs index 4886a7a13..e087c3b8a 100644 --- a/deployment/tui-zone/src/run_commands/run_deposit.rs +++ b/deployment/tui-zone/src/run_commands/run_deposit.rs @@ -1,5 +1,5 @@ use lb_core::mantle::{ - Op, OpProof, SignedMantleTx, Transaction as _, ops::channel::inscribe::Inscription, + Op, OpProof, SignedMantleTx, ops::channel::inscribe::Inscription, traits::Hashable as _, }; use lb_key_management_system_service::keys::ZkKey; diff --git a/deployment/tui-zone/src/run_commands/run_withdraw.rs b/deployment/tui-zone/src/run_commands/run_withdraw.rs index b48c437a6..4af76c1ab 100644 --- a/deployment/tui-zone/src/run_commands/run_withdraw.rs +++ b/deployment/tui-zone/src/run_commands/run_withdraw.rs @@ -2,8 +2,9 @@ use std::path::PathBuf; use lb_core::{ mantle::{ - Op, OpProof, SignedMantleTx, Transaction as _, + Op, OpProof, SignedMantleTx, ops::channel::{ChannelId, ChannelKeyIndex}, + traits::Hashable as _, transactions::codec::encode_signed_mantle_tx, }, proofs::channel_multi_sig_proof::{ChannelMultiSigProof, IndexedSignature}, diff --git a/deployment/tui-zone/src/run_commands/unit_tests.rs b/deployment/tui-zone/src/run_commands/unit_tests.rs index 3628ac87f..a4dbfdedc 100644 --- a/deployment/tui-zone/src/run_commands/unit_tests.rs +++ b/deployment/tui-zone/src/run_commands/unit_tests.rs @@ -7,7 +7,7 @@ mod tests { }; use lb_core::mantle::{ - MantleTx, Note, NoteId, Op, SignedMantleTx, Transaction as _, Utxo, Value, + MantleTx, Note, NoteId, Op, SignedMantleTx, Utxo, Value, ledger::Inputs, nom::NomEncode as _, ops::channel::{ @@ -15,6 +15,7 @@ mod tests { inscribe::{Inscription, InscriptionOp}, withdraw::ChannelWithdrawOp, }, + traits::Hashable as _, transactions::{Ops, codec::encode_signed_mantle_tx, tx::OpsProofs}, }; use lb_groth16::{Fr, fr_to_bytes}; diff --git a/ledger/src/cryptarchia/mod.rs b/ledger/src/cryptarchia/mod.rs index 471254c40..d481ab9d8 100644 --- a/ledger/src/cryptarchia/mod.rs +++ b/ledger/src/cryptarchia/mod.rs @@ -8,10 +8,11 @@ use lb_core::{ crypto::{ZkDigest, ZkHasher}, events::TxEvent, mantle::{ - GenesisTx, NoteId, Utxo, Value, + NoteId, Utxo, Value, gas::{Gas, GasConstants, GasCost, GasPrice}, ledger::Operation as _, ops::transfer::TransferOp, + traits::GenesisTx, transactions::{GENESIS_EXECUTION_GAS_PRICE, GENESIS_STORAGE_GAS_PRICE}, }, proofs::leader_proof::{self, LeaderPublic}, @@ -726,12 +727,13 @@ pub mod tests { use lb_core::{ crypto::{Digest as _, Hasher}, mantle::{ - AuthenticatedMantleTx, MantleTx, Note, Op, + GasCalculator as _, MantleTx, Note, Op, OpProof::ZkSig, - SignedMantleTx, Transaction as _, + SignedMantleTx, gas::MainnetGasConstants, ledger::{Inputs, Outputs}, ops::{leader_claim::VoucherCm, sdp::SDPDeclareOp}, + traits::Hashable as _, transactions::{ GasPrices, states::{Preverified, Unverified}, @@ -1592,8 +1594,7 @@ pub mod tests { vec![output_note], ); - let _fees = - AuthenticatedMantleTx::total_gas_cost::(&tx, GasPrices::new(0, 0)); + let _fees = tx.total_gas_cost::(&GasPrices::new(0, 0)); let result = ledger_state.try_apply_transfer::<(), MainnetGasConstants>(&transfer_op); assert!(result.is_err()); @@ -1618,8 +1619,7 @@ pub mod tests { let (tx, transfer_op, _transfer_sig) = create_tx_with_transfer(&[(¬e_sk, &input_utxo)], vec![output_note1, output_note2]); - let _fees = - AuthenticatedMantleTx::total_gas_cost::(&tx, GasPrices::new(0, 0)); + let _fees = tx.total_gas_cost::(&GasPrices::new(0, 0)); let (new_state, balance, events) = ledger_state .try_apply_transfer::<(), MainnetGasConstants>(&transfer_op) .unwrap(); @@ -1651,8 +1651,7 @@ pub mod tests { vec![], ); - let _fees = - AuthenticatedMantleTx::total_gas_cost::(&tx, GasPrices::new(0, 0)); + let _fees = tx.total_gas_cost::(&GasPrices::new(0, 0)); let (final_state, final_balance, events) = new_state .try_apply_transfer::<(), MainnetGasConstants>(&transfer_op) .unwrap(); @@ -1760,8 +1759,7 @@ pub mod tests { let (tx, transfer_op, _transfer_sig) = create_tx_with_transfer(&[(&input_sk, &input_utxo)], vec![]); - let _fees = - AuthenticatedMantleTx::total_gas_cost::(&tx, GasPrices::new(0, 0)); + let _fees = tx.total_gas_cost::(&GasPrices::new(0, 0)); let result = ledger_state.try_apply_transfer::<(), MainnetGasConstants>(&transfer_op); assert!(result.is_ok()); diff --git a/ledger/src/lib.rs b/ledger/src/lib.rs index a81afff81..f734db57f 100644 --- a/ledger/src/lib.rs +++ b/ledger/src/lib.rs @@ -15,8 +15,7 @@ use lb_core::{ block::BlockNumber, events::{Events, HeaderEvent, TxEvent}, mantle::{ - AuthenticatedMantleTx, GenesisTx, NoteId, Op, PreverifiedMantleTx, TxHash, Utxo, Value, - VerificationError, + NoteId, Op, TxHash, Utxo, Value, VerificationError, gas::{Gas, GasConstants, GasCost, GasOverflow}, ledger::Operation as _, ops::{ @@ -26,6 +25,7 @@ use lb_core::{ }, leader_claim::LeaderClaimExecutionContext, }, + traits::{GenesisTx, MantleTxWithProofs, PreverifiedMantleTx}, transactions::{GasPrices, MantleTxContext, MantleTxGasContext}, }, proofs::leader_proof, @@ -146,7 +146,7 @@ where txs: impl Iterator, ) -> Result<(Id, LedgerState, Events), LedgerError> where - Tx: PreverifiedMantleTx + 'tx + AuthenticatedMantleTx, + Tx: PreverifiedMantleTx + 'tx, LeaderProof: leader_proof::LeaderProof, Constants: GasConstants, { @@ -216,7 +216,7 @@ impl LedgerState { config: &Config, ) -> Result<(Self, Events), LedgerError> where - Tx: PreverifiedMantleTx + 'tx + AuthenticatedMantleTx, + Tx: PreverifiedMantleTx + 'tx, LeaderProof: leader_proof::LeaderProof, Constants: GasConstants, { @@ -364,7 +364,7 @@ impl LedgerState { txs: impl Iterator, ) -> Result<(Self, Vec), LedgerError> where - Tx: PreverifiedMantleTx + 'tx + AuthenticatedMantleTx, + Tx: PreverifiedMantleTx + 'tx, { let mut total_block_execution_gas: Gas = 0.into(); let mut total_fee_burned: GasCost = 0.into(); @@ -382,8 +382,7 @@ impl LedgerState { storage_gas_price: *self.cryptarchia_ledger.storage_gas_price(), }; // Check the transaction is balanced - let total_gas_cost = - AuthenticatedMantleTx::total_gas_cost::(tx, gas_prices.clone())?; + let total_gas_cost = tx.total_gas_cost::(&gas_prices)?; tracing::debug!( balance, total_gas_cost = total_gas_cost.into_inner(), @@ -400,23 +399,16 @@ impl LedgerState { // Update the total of fee burned and tipped in the block let tx_fee_burned = GasCost::calculate( - AuthenticatedMantleTx::execution_gas_consumption::( - tx, - gas_prices.clone(), - )?, + tx.execution_gas_consumption::(&gas_prices)?, gas_prices.execution_base_gas_price, )? - .checked_add(AuthenticatedMantleTx::storage_gas_cost( - tx, - gas_prices.clone(), - )?)?; + .checked_add(tx.storage_gas_cost(&gas_prices)?)?; let tx_fee_tip = GasCost::from(balance as Value).checked_sub(tx_fee_burned)?; total_fee_burned = total_fee_burned.checked_add(tx_fee_burned)?; total_fee_tip = total_fee_tip.checked_add(tx_fee_tip)?; - total_block_execution_gas = total_block_execution_gas.checked_add( - AuthenticatedMantleTx::execution_gas_consumption::(tx, gas_prices)?, - )?; + total_block_execution_gas = total_block_execution_gas + .checked_add(tx.execution_gas_consumption::(&gas_prices)?)?; // Check that the block is not exceeding the Gas limit if total_block_execution_gas > EXECUTION_GAS_LIMIT { @@ -674,7 +666,7 @@ impl LedgerState { tx: &'tx Tx, ) -> Result<(Self, Balance, Vec), LedgerError> where - Tx: PreverifiedMantleTx + 'tx + AuthenticatedMantleTx, + Tx: PreverifiedMantleTx + 'tx + MantleTxWithProofs, { let mut verified_ops = tx.verified_ops(); @@ -709,7 +701,7 @@ mod tests { use lb_core::{ events::TxEventPayload, mantle::{ - MantleTx, Note, OpProof, SignedMantleTx, Transaction as _, + GasCalculator as _, MantleTx, Note, OpProof, SignedMantleTx, gas::MainnetGasConstants, ledger::{Inputs, Outputs, Utxos}, ops::{ @@ -725,6 +717,7 @@ mod tests { sdp::SDPActiveOp, transfer::TransferOp, }, + traits::Hashable as _, transactions::{ Ops, states::{Preverified, Unverified}, @@ -949,9 +942,11 @@ mod tests { vec![output_note], std::slice::from_ref(&sk), ); - let fees = - AuthenticatedMantleTx::total_gas_cost::(&tx, GasPrices::default()) - .unwrap(); + + let default_gas_prices = GasPrices::default(); + let fees = tx + .total_gas_cost::(&default_gas_prices) + .unwrap(); output_note.value = utxo.note.value - fees.into_inner(); let tx = create_tx(vec![utxo.id()], vec![output_note], &[sk]) @@ -1645,11 +1640,9 @@ mod tests { std::slice::from_ref(&sk), ); // Pays 2925 fees = 2705 execution base fee + 0 execution tip + 220 storage - let fees = AuthenticatedMantleTx::total_gas_cost::( - &tx, - ledger.get_gas_prices(), - ) - .unwrap(); + let fees = tx + .total_gas_cost::(&ledger.get_gas_prices()) + .unwrap(); output_note.value = utxo.note.value - fees.into_inner(); let tx = create_tx(vec![utxo.id()], vec![output_note], &[sk]) .preverify() @@ -1688,11 +1681,9 @@ mod tests { update_ledger_prices(&mut ledger, 1, 1); // The tx pays 794 fees = 590 execution base fee + 0 execution tip + 204 // storage - let fees = AuthenticatedMantleTx::total_gas_cost::( - &tx, - ledger.get_gas_prices(), - ) - .unwrap(); + let fees = tx + .total_gas_cost::(&ledger.get_gas_prices()) + .unwrap(); output_note.value = utxo.note.value - fees.into_inner(); let tx = create_tx( vec![utxo.id()], diff --git a/ledger/src/mantle/mod.rs b/ledger/src/mantle/mod.rs index d13b2ab75..eaad3d91c 100644 --- a/ledger/src/mantle/mod.rs +++ b/ledger/src/mantle/mod.rs @@ -7,7 +7,7 @@ use lb_core::{ crypto::ZkHasher, events::TxEvent, mantle::{ - GenesisTx, NoteId, Value, + NoteId, Value, ledger::Operation as _, ops::{ channel::{ @@ -18,6 +18,7 @@ use lb_core::{ sdp::{SDPActiveOp, SDPDeclareOp, SDPWithdrawOp}, transfer::TransferError, }, + traits::GenesisTx, }, sdp::locked_notes::LockedNotes, }; diff --git a/nodes/api-common/src/bodies/wallet.rs b/nodes/api-common/src/bodies/wallet.rs index 6eb61a3d9..dc3338ccf 100644 --- a/nodes/api-common/src/bodies/wallet.rs +++ b/nodes/api-common/src/bodies/wallet.rs @@ -95,7 +95,7 @@ pub mod transfer_funds { use lb_core::{ header::HeaderId, mantle::{ - SignedMantleTx, Transaction as _, Value, transactions::states::VerificationState, + SignedMantleTx, Value, traits::Hashable as _, transactions::states::VerificationState, }, }; use lb_key_management_system_keys::keys::ZkPublicKey; diff --git a/nodes/node/binary/src/api/backend.rs b/nodes/node/binary/src/api/backend.rs index 372a6fd0c..6ae59e0fb 100644 --- a/nodes/node/binary/src/api/backend.rs +++ b/nodes/node/binary/src/api/backend.rs @@ -20,7 +20,7 @@ use lb_chain_leader_service::api::ChainLeaderServiceData; use lb_chain_service::CryptarchiaConsensus; use lb_core::{ header::HeaderId, - mantle::{SignedMantleTx, Transaction, transactions::states::Preverified}, + mantle::{SignedMantleTx, traits::Hashable, transactions::states::Preverified}, }; pub use lb_http_api_common::settings::AxumBackendSettings; use lb_http_api_common::{metrics::http_metrics_middleware, paths}; @@ -113,7 +113,7 @@ where MempoolStorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -151,13 +151,13 @@ where TxMempoolService< lb_tx_service::network::adapters::libp2p::Libp2pAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, MempoolStorageAdapter, RuntimeServiceId, >, diff --git a/nodes/node/binary/src/api/handlers.rs b/nodes/node/binary/src/api/handlers.rs index c8a5b7644..c1c0aa5c9 100644 --- a/nodes/node/binary/src/api/handlers.rs +++ b/nodes/node/binary/src/api/handlers.rs @@ -26,8 +26,9 @@ use lb_core::{ events::Events, header::HeaderId, mantle::{ - Op, OpProof, SignedMantleTx, Transaction, TxHash, + Op, OpProof, SignedMantleTx, TxHash, ops::channel::ChannelId, + traits::Hashable, transactions::{ MantleTxBuilder, states::{Preverified, Unverified}, @@ -379,7 +380,7 @@ where StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -396,13 +397,13 @@ where TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -427,13 +428,13 @@ where )] pub async fn mantle_status( State(handle): State>, - Json(items): Json as Transaction>::Hash>>, + Json(items): Json as Hashable>::Hash>>, ) -> Response where StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -450,13 +451,13 @@ where TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -698,7 +699,7 @@ where StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -715,13 +716,13 @@ where TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -734,14 +735,14 @@ where Libp2pNetworkBackend, MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, StorageAdapter, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, - >(&handle, tx, Transaction::hash)) + >(&handle, tx, Hashable::hash)) } #[utoipa::path( @@ -759,7 +760,7 @@ where StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -777,13 +778,13 @@ where TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -804,7 +805,7 @@ where StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -822,13 +823,13 @@ where TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -851,7 +852,7 @@ where StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -868,13 +869,13 @@ where TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -887,13 +888,13 @@ where .relay::, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -956,7 +957,7 @@ where StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -974,13 +975,13 @@ where TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -1025,14 +1026,14 @@ where Libp2pNetworkBackend, MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, StorageAdapter, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, - >(&handle, signed_tx, Transaction::hash) + >(&handle, signed_tx, Hashable::hash) .await?; Ok(ChannelDepositResponseBody { hash: tx_hash }) @@ -1726,7 +1727,7 @@ pub mod wallet { StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -1744,13 +1745,13 @@ pub mod wallet { TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -1787,14 +1788,14 @@ pub mod wallet { Libp2pNetworkBackend, MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, StorageAdapter, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, - >(&handle, transaction.clone(), Transaction::hash) + >(&handle, transaction.clone(), Hashable::hash) .await { return (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()).into_response(); @@ -1823,7 +1824,7 @@ pub mod wallet { StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -1841,13 +1842,13 @@ pub mod wallet { TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -1883,7 +1884,7 @@ pub mod wallet { StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -1901,13 +1902,13 @@ pub mod wallet { TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -1943,7 +1944,7 @@ pub mod wallet { StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, Item = SignedMantleTx, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, > + Send + Sync + Clone @@ -1961,13 +1962,13 @@ pub mod wallet { TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, diff --git a/nodes/node/binary/src/api/serializers/transactions.rs b/nodes/node/binary/src/api/serializers/transactions.rs index 8125205d9..5f7634f4a 100644 --- a/nodes/node/binary/src/api/serializers/transactions.rs +++ b/nodes/node/binary/src/api/serializers/transactions.rs @@ -7,7 +7,7 @@ use serde::Serialize; #[derive(Serialize)] #[serde(remote = "MantleTx")] pub struct ApiTransactionSerializer { - #[serde(getter = "::hash")] + #[serde(getter = "::hash")] hash: TxHash, #[serde(getter = "MantleTx::ops")] ops: Ops, diff --git a/nodes/node/binary/src/config/mempool/mod.rs b/nodes/node/binary/src/config/mempool/mod.rs index 312664ba6..a1263f5dc 100644 --- a/nodes/node/binary/src/config/mempool/mod.rs +++ b/nodes/node/binary/src/config/mempool/mod.rs @@ -1,5 +1,5 @@ use lb_core::mantle::{ - SignedMantleTx, Transaction as _, TxHash, transactions::states::Preverified, + SignedMantleTx, TxHash, traits::Hashable as _, transactions::states::Preverified, }; use lb_services_utils::overwatch::RecoveryData; use lb_tx_service::{ diff --git a/nodes/node/binary/src/config/time/mod.rs b/nodes/node/binary/src/config/time/mod.rs index 0720c52bf..0b7a32c3b 100644 --- a/nodes/node/binary/src/config/time/mod.rs +++ b/nodes/node/binary/src/config/time/mod.rs @@ -1,4 +1,4 @@ -use lb_core::mantle::GenesisTx as _; +use lb_core::mantle::traits::GenesisTx as _; use lb_cryptarchia_engine::{EpochConfig, time::SlotConfig}; use lb_time_service::{ TimeServiceSettings, diff --git a/nodes/node/binary/src/generic_services/mod.rs b/nodes/node/binary/src/generic_services/mod.rs index e6c85de09..e44bb4776 100644 --- a/nodes/node/binary/src/generic_services/mod.rs +++ b/nodes/node/binary/src/generic_services/mod.rs @@ -3,7 +3,7 @@ use lb_chain_network_service::network::adapters::libp2p::LibP2pAdapter; use lb_chain_service::CryptarchiaConsensus; use lb_core::{ header::HeaderId, - mantle::{SignedMantleTx, Transaction, TxHash, transactions::states::Preverified}, + mantle::{SignedMantleTx, TxHash, traits::Hashable, transactions::states::Preverified}, }; use lb_key_management_system_service::backend::preload::PreloadKMSBackend; use lb_sdp_service::{SdpSettings, state::SdpState}; @@ -19,7 +19,7 @@ pub mod sdp; pub type TxMempoolService = lb_tx_service::TxMempoolService< lb_tx_service::network::adapters::libp2p::Libp2pAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< @@ -28,13 +28,13 @@ pub type TxMempoolService = lb_tx_service::TxMempoolService< TxHash, RocksStorageAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, >, RuntimeServiceId, >, RocksStorageAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, >, RuntimeServiceId, >; @@ -44,17 +44,17 @@ pub type TimeService = pub type MempoolAdapter = lb_tx_service::network::adapters::libp2p::Libp2pAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >; pub type MempoolBackend = Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RocksStorageAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, >, RuntimeServiceId, >; @@ -110,7 +110,7 @@ pub type SdpMempoolAdapter = sdp::mempool::SdpMempoolAdapter< TxHash, RocksStorageAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, >, RuntimeServiceId, >, diff --git a/nodes/node/binary/src/generic_services/sdp/mempool.rs b/nodes/node/binary/src/generic_services/sdp/mempool.rs index 4672dda0c..5aa93823b 100644 --- a/nodes/node/binary/src/generic_services/sdp/mempool.rs +++ b/nodes/node/binary/src/generic_services/sdp/mempool.rs @@ -5,7 +5,7 @@ use std::{ use lb_core::{ header::HeaderId, - mantle::{SignedMantleTx, Transaction as _, TxHash, transactions::states::Preverified}, + mantle::{SignedMantleTx, TxHash, traits::Hashable as _, transactions::states::Preverified}, }; use lb_sdp_service::mempool::{MempoolAdapterError, SdpMempoolAdapter as SdpMempoolAdapterTrait}; use lb_storage_service::StorageService; diff --git a/nodes/node/binary/src/lib.rs b/nodes/node/binary/src/lib.rs index d24310a8f..ff6378417 100644 --- a/nodes/node/binary/src/lib.rs +++ b/nodes/node/binary/src/lib.rs @@ -17,7 +17,7 @@ use lb_core::mantle::transactions::states::Preverified; pub use lb_core::{ codec, header::HeaderId, - mantle::{SignedMantleTx, Transaction, TxHash}, + mantle::{SignedMantleTx, TxHash, traits::Hashable}, }; pub use lb_network_service::backends::libp2p::Libp2p as NetworkBackend; pub use lb_storage_service::backends::{ diff --git a/services/api/src/http/mantle.rs b/services/api/src/http/mantle.rs index 3a8d2ae61..f32bbbae4 100644 --- a/services/api/src/http/mantle.rs +++ b/services/api/src/http/mantle.rs @@ -13,7 +13,7 @@ use lb_core::{ events::Events, header::HeaderId, mantle::{ - SignedMantleTx, Transaction, TxHash, channel::ChannelState, ops::channel::ChannelId, + SignedMantleTx, TxHash, channel::ChannelState, ops::channel::ChannelId, traits::Hashable, transactions::states::Preverified, }, sdp::{Declaration, DeclarationId}, @@ -61,13 +61,13 @@ pub struct BlockWithChainState { pub type MempoolService = TxMempoolService< MempoolNetworkAdapter< SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, RuntimeServiceId, >, Mempool< HeaderId, SignedMantleTx, - as Transaction>::Hash, + as Hashable>::Hash, StorageAdapter, RuntimeServiceId, >, @@ -98,7 +98,7 @@ pub async fn mantle_mempool_metrics( where StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, Item = SignedMantleTx, > + Clone + 'static, @@ -128,12 +128,12 @@ where pub async fn mantle_mempool_status( handle: &overwatch::overwatch::handle::OverwatchHandle, - items: Vec< as Transaction>::Hash>, + items: Vec< as Hashable>::Hash>, ) -> Result, super::DynError> where StorageAdapter: lb_tx_service::storage::MempoolStorageAdapter< RuntimeServiceId, - Key = as Transaction>::Hash, + Key = as Hashable>::Hash, Item = SignedMantleTx, > + Clone + 'static, @@ -233,14 +233,8 @@ pub async fn get_new_blocks_stream< super::DynError, > where - Transaction: Clone - + Eq - + Serialize - + DeserializeOwned - + Send - + Sync - + 'static - + lb_core::mantle::Transaction, + Transaction: + Clone + Eq + Serialize + DeserializeOwned + Send + Sync + 'static + Hashable, StorageBackend: lb_storage_service::backends::StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, @@ -331,14 +325,8 @@ async fn load_blocks_with_chain_state_by_ids Result>, super::DynError> where - Transaction: Clone - + Eq - + Serialize - + DeserializeOwned - + Send - + Sync - + 'static - + lb_core::mantle::Transaction, + Transaction: + Clone + Eq + Serialize + DeserializeOwned + Send + Sync + 'static + Hashable, StorageBackend: lb_storage_service::backends::StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, @@ -411,14 +399,8 @@ async fn fetch_and_load_mutable_blocks Result>, super::DynError> where - Transaction: Clone - + Eq - + Serialize - + DeserializeOwned - + Send - + Sync - + 'static - + lb_core::mantle::Transaction, + Transaction: + Clone + Eq + Serialize + DeserializeOwned + Send + Sync + 'static + Hashable, StorageBackend: lb_storage_service::backends::StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, @@ -524,14 +506,8 @@ async fn fetch_and_load_immutable_blocks Result>, super::DynError> where - Transaction: Clone - + Eq - + Serialize - + DeserializeOwned - + Send - + Sync - + 'static - + lb_core::mantle::Transaction, + Transaction: + Clone + Eq + Serialize + DeserializeOwned + Send + Sync + 'static + Hashable, StorageBackend: lb_storage_service::backends::StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, @@ -568,14 +544,8 @@ pub async fn get_blocks_in_slot_range_with_snapshot Result>, super::DynError> where - Transaction: Clone - + Eq - + Serialize - + DeserializeOwned - + Send - + Sync - + 'static - + lb_core::mantle::Transaction, + Transaction: + Clone + Eq + Serialize + DeserializeOwned + Send + Sync + 'static + Hashable, StorageBackend: lb_storage_service::backends::StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, @@ -748,14 +718,8 @@ pub async fn get_immutable_blocks to_slot: usize, ) -> Result>, super::DynError> where - Transaction: Clone - + Eq - + Serialize - + DeserializeOwned - + Send - + Sync - + 'static - + lb_core::mantle::Transaction, + Transaction: + Clone + Eq + Serialize + DeserializeOwned + Send + Sync + 'static + Hashable, StorageBackend: lb_storage_service::backends::StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, @@ -803,14 +767,8 @@ pub async fn get_block( header_id: HeaderId, ) -> Result>, super::DynError> where - Transaction: Clone - + Eq - + Serialize - + DeserializeOwned - + Send - + Sync - + 'static - + lb_core::mantle::Transaction, + Transaction: + Clone + Eq + Serialize + DeserializeOwned + Send + Sync + 'static + Hashable, StorageBackend: lb_storage_service::backends::StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, @@ -847,14 +805,8 @@ pub async fn get_transactions( super::DynError, > where - Transaction: Clone - + Eq - + Serialize - + DeserializeOwned - + Send - + Sync - + 'static - + lb_core::mantle::Transaction, + Transaction: + Clone + Eq + Serialize + DeserializeOwned + Send + Sync + 'static + Hashable, StorageBackend: lb_storage_service::backends::StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, @@ -889,14 +841,8 @@ pub async fn get_transaction( tx_hash: TxHash, ) -> Result, super::DynError> where - Transaction: Clone - + Eq - + Serialize - + DeserializeOwned - + Send - + Sync - + 'static - + lb_core::mantle::Transaction, + Transaction: + Clone + Eq + Serialize + DeserializeOwned + Send + Sync + 'static + Hashable, StorageBackend: lb_storage_service::backends::StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, diff --git a/services/api/src/http/storage/adapters/rocksdb.rs b/services/api/src/http/storage/adapters/rocksdb.rs index 675de2306..91032d796 100644 --- a/services/api/src/http/storage/adapters/rocksdb.rs +++ b/services/api/src/http/storage/adapters/rocksdb.rs @@ -8,7 +8,10 @@ use futures::{StreamExt as _, TryStreamExt as _}; use lb_core::{ block::Block, header::HeaderId, - mantle::{StorageSize, Transaction, TxHash}, + mantle::{ + TxHash, + traits::{Hashable, StorageSize}, + }, }; use lb_storage_service::{StorageMsg, StorageService, backends::rocksdb::RocksBackend}; use overwatch::services::{ServiceData, relay::OutboundRelay}; @@ -36,7 +39,7 @@ where + DeserializeOwned + Clone + Eq - + Transaction + + Hashable + StorageSize + 'static, { diff --git a/services/api/src/http/storage/mod.rs b/services/api/src/http/storage/mod.rs index 21392b50b..cfc67dfc3 100644 --- a/services/api/src/http/storage/mod.rs +++ b/services/api/src/http/storage/mod.rs @@ -1,7 +1,10 @@ use lb_core::{ block::Block, header::HeaderId, - mantle::{StorageSize, Transaction, TxHash}, + mantle::{ + TxHash, + traits::{Hashable, StorageSize}, + }, }; use lb_storage_service::{StorageService, backends::rocksdb::RocksBackend}; use overwatch::services::{ServiceData, relay::OutboundRelay}; @@ -22,7 +25,7 @@ pub trait StorageAdapter { + DeserializeOwned + Clone + Eq - + Transaction + + Hashable + StorageSize + 'static; diff --git a/services/chain/chain-leader/src/lib.rs b/services/chain/chain-leader/src/lib.rs index 6fbc2d498..7aead4b7e 100644 --- a/services/chain/chain-leader/src/lib.rs +++ b/services/chain/chain-leader/src/lib.rs @@ -20,8 +20,10 @@ use lb_core::{ block::{Block, BlockTransactions, Error as BlockError, MAX_BLOCK_TRANSACTIONS_SIZE}, header::HeaderId, mantle::{ - AuthenticatedMantleTx, SignedMantleTx, StorageSize, Transaction, TxHash, - gas::MainnetGasConstants, transactions::states::Preverified, + SignedMantleTx, TxHash, + gas::MainnetGasConstants, + traits::{Hashable, MantleTxWithProofs, StorageSize}, + transactions::states::Preverified, }, proofs::leader_proof::{Groth16LeaderProof, LeaderPrivate}, }; @@ -170,7 +172,7 @@ pub struct CryptarchiaLeader< Mempool::RecoveryState: Serialize + DeserializeOwned, Mempool::Settings: Clone, Mempool::Item: Clone + Eq + Debug + 'static, - Mempool::Item: AuthenticatedMantleTx, + Mempool::Item: MantleTxWithProofs, MempoolNetAdapter: MempoolNetworkAdapter, >::Settings: Send + Sync, @@ -209,7 +211,7 @@ where Mempool::RecoveryState: Serialize + DeserializeOwned, Mempool::Storage: MempoolStorageAdapter + Clone + Send + Sync, Mempool::Settings: Clone, - Mempool::Item: AuthenticatedMantleTx + Clone + Eq + Debug, + Mempool::Item: MantleTxWithProofs + Clone + Eq + Debug, MempoolNetAdapter: MempoolNetworkAdapter, >::Settings: Send + Sync, @@ -266,7 +268,7 @@ where Mempool::Storage: MempoolStorageAdapter + Clone + Send + Sync, Mempool::RecoveryState: Serialize + DeserializeOwned, Mempool::Settings: Clone + Send + Sync + 'static, - Mempool::Item: Transaction + Mempool::Item: Hashable + Debug + Clone + Eq @@ -276,7 +278,7 @@ where + Sync + Unpin + 'static, - Mempool::Item: AuthenticatedMantleTx, + Mempool::Item: MantleTxWithProofs, MempoolNetAdapter: MempoolNetworkAdapter + Send + Sync @@ -551,7 +553,7 @@ where + 'static, Mempool::RecoveryState: Serialize + DeserializeOwned, Mempool::Settings: Clone + Send + Sync + 'static, - Mempool::Item: AuthenticatedMantleTx + Mempool::Item: MantleTxWithProofs + Debug + Clone + Eq @@ -654,7 +656,7 @@ where // Transactions that never became applicable are genuinely invalid against // this block's ledger state and can be evicted from the mempool. - let invalid_tx_hashes: Vec<_> = pending.iter().map(Transaction::hash).collect(); + let invalid_tx_hashes: Vec<_> = pending.iter().map(Hashable::hash).collect(); if !invalid_tx_hashes.is_empty() && let Err(e) = relays diff --git a/services/chain/chain-leader/src/mempool/adapter.rs b/services/chain/chain-leader/src/mempool/adapter.rs index e6a908198..8e0c9de46 100644 --- a/services/chain/chain-leader/src/mempool/adapter.rs +++ b/services/chain/chain-leader/src/mempool/adapter.rs @@ -3,7 +3,7 @@ use std::pin::Pin; use futures::Stream; use lb_core::{ header::HeaderId, - mantle::{Transaction, TxHash}, + mantle::{TxHash, traits::Hashable}, }; use lb_tx_service::MempoolMsg; use overwatch::services::relay::OutboundRelay; @@ -25,7 +25,7 @@ impl MempoolAdapter { #[async_trait::async_trait] impl MempoolAdapterTrait for MempoolAdapter where - Tx: Transaction + Send + Sync + 'static, + Tx: Hashable + Send + Sync + 'static, { async fn get_mempool_view( &self, diff --git a/services/chain/chain-leader/src/relays.rs b/services/chain/chain-leader/src/relays.rs index a2e74c4e0..e9b8b0004 100644 --- a/services/chain/chain-leader/src/relays.rs +++ b/services/chain/chain-leader/src/relays.rs @@ -4,7 +4,7 @@ use std::fmt::Debug; use lb_chain_service::api::CryptarchiaServiceData; use lb_core::{ header::HeaderId, - mantle::{AuthenticatedMantleTx, TxHash}, + mantle::{TxHash, traits::MantleTxWithProofs}, }; use lb_storage_service::StorageService; use lb_time_service::{TimeService, TimeServiceMessage, backends::TimeBackend as TimeBackendTrait}; @@ -50,7 +50,7 @@ where + Send + Sync + 'static - + AuthenticatedMantleTx, + + MantleTxWithProofs, Mempool::Settings: Clone, MempoolNetAdapter: MempoolNetworkAdapter + Send diff --git a/services/chain/chain-network/src/bootstrap/ibd.rs b/services/chain/chain-network/src/bootstrap/ibd.rs index 37abf6e99..23a74641c 100644 --- a/services/chain/chain-network/src/bootstrap/ibd.rs +++ b/services/chain/chain-network/src/bootstrap/ibd.rs @@ -12,7 +12,7 @@ use lb_chain_service::{ use lb_core::{ block::Block, header::HeaderId, - mantle::{AuthenticatedMantleTx, TxHash}, + mantle::{TxHash, traits::MantleTxWithProofs}, }; use lb_cryptarchia_sync::GetTipResponse; use lb_tx_service::backend::RecoverableMempool; @@ -33,7 +33,7 @@ pub trait IbdBlockProcessor { pub struct ChainNetworkIbdBlockProcessor where Cryptarchia: CryptarchiaServiceData, - Cryptarchia::Tx: AuthenticatedMantleTx + Debug + Clone + Send + Sync, + Cryptarchia::Tx: MantleTxWithProofs + Debug + Clone + Send + Sync, Mempool: RecoverableMempool + Send + Sync, RuntimeServiceId: Send + Sync, @@ -46,7 +46,7 @@ impl IbdBlockProcessor where Cryptarchia: CryptarchiaServiceData, - Cryptarchia::Tx: AuthenticatedMantleTx + Debug + Clone + Send + Sync, + Cryptarchia::Tx: MantleTxWithProofs + Debug + Clone + Send + Sync, Mempool: RecoverableMempool + Send + Sync, RuntimeServiceId: Send + Sync, diff --git a/services/chain/chain-network/src/lib.rs b/services/chain/chain-network/src/lib.rs index ece244b70..e353fdf75 100644 --- a/services/chain/chain-network/src/lib.rs +++ b/services/chain/chain-network/src/lib.rs @@ -19,7 +19,10 @@ use lb_chain_service::api::{CryptarchiaServiceApi, CryptarchiaServiceData}; use lb_core::{ block::{Block, BlockTransactions, Proposal}, header::HeaderId, - mantle::{AuthenticatedMantleTx, Transaction, TxHash}, + mantle::{ + TxHash, + traits::{Hashable, MantleTxWithProofs}, + }, }; pub use lb_cryptarchia_engine::{Epoch, Slot}; pub use lb_ledger::EpochState; @@ -125,7 +128,7 @@ pub struct ChainNetwork< Mempool::Settings: Clone, Mempool::Storage: MempoolStorageAdapter + Clone + Send + Sync, Mempool::Item: Clone + Eq + Debug + 'static, - Mempool::Item: AuthenticatedMantleTx, + Mempool::Item: MantleTxWithProofs, MempoolNetAdapter: MempoolNetworkAdapter, MempoolNetAdapter::Settings: Send + Sync, @@ -153,7 +156,7 @@ where Mempool::RecoveryState: Serialize + for<'de> Deserialize<'de>, Mempool::Settings: Clone, Mempool::Storage: MempoolStorageAdapter + Clone + Send + Sync, - Mempool::Item: AuthenticatedMantleTx + Clone + Eq + Debug, + Mempool::Item: MantleTxWithProofs + Clone + Eq + Debug, MempoolNetAdapter: MempoolNetworkAdapter, MempoolNetAdapter::Settings: Send + Sync, @@ -190,8 +193,8 @@ where Mempool::RecoveryState: Serialize + for<'de> Deserialize<'de>, Mempool::Settings: Clone + Send + Sync + 'static, Mempool::Storage: MempoolStorageAdapter + Clone + Send + Sync, - Mempool::Item: Transaction - + AuthenticatedMantleTx + Mempool::Item: Hashable + + MantleTxWithProofs + Debug + Clone + Eq @@ -507,8 +510,8 @@ where Mempool::RecoveryState: Serialize + for<'de> Deserialize<'de>, Mempool::Settings: Clone + Send + Sync + 'static, Mempool::Storage: MempoolStorageAdapter + Clone + Send + Sync, - Mempool::Item: Transaction - + AuthenticatedMantleTx + Mempool::Item: Hashable + + MantleTxWithProofs + Debug + Clone + Eq @@ -776,7 +779,7 @@ async fn should_process_block( ) -> Result<(), DoNotProcessBlock> where Cryptarchia: CryptarchiaServiceData, - Cryptarchia::Tx: AuthenticatedMantleTx + Debug + Clone + Send + Sync, + Cryptarchia::Tx: MantleTxWithProofs + Debug + Clone + Send + Sync, RuntimeServiceId: Send + Sync, { if !is_after_lib(cryptarchia, block_id, block_slot).await { @@ -808,7 +811,7 @@ async fn is_after_lib( ) -> bool where Cryptarchia: CryptarchiaServiceData, - Cryptarchia::Tx: AuthenticatedMantleTx + Debug + Clone + Send + Sync, + Cryptarchia::Tx: MantleTxWithProofs + Debug + Clone + Send + Sync, RuntimeServiceId: Send + Sync, { match cryptarchia.info().await { @@ -931,7 +934,7 @@ async fn apply_block_and_reconcile_mempool Result<(), Error> where Cryptarchia: CryptarchiaServiceData, - Cryptarchia::Tx: AuthenticatedMantleTx + Debug + Clone + Send + Sync, + Cryptarchia::Tx: MantleTxWithProofs + Debug + Clone + Send + Sync, Mempool: RecoverableMempool + Send + Sync, RuntimeServiceId: Send + Sync, @@ -956,7 +959,7 @@ where .remove_transactions( &block .transactions_iter() - .map(Transaction::hash) + .map(Hashable::hash) .collect::>(), ) .await @@ -990,7 +993,7 @@ async fn reconstruct_block_from_proposal( mempool: &MempoolAdapter, ) -> Result, Error> where - Item: AuthenticatedMantleTx + Clone + Send + Sync + 'static, + Item: MantleTxWithProofs + Clone + Send + Sync + 'static, { let mempool_hashes: Vec = proposal.mempool_transactions().to_vec(); let mempool_response = mempool diff --git a/services/chain/chain-network/src/mempool/adapter.rs b/services/chain/chain-network/src/mempool/adapter.rs index f81513f7b..b14d2636b 100644 --- a/services/chain/chain-network/src/mempool/adapter.rs +++ b/services/chain/chain-network/src/mempool/adapter.rs @@ -1,6 +1,6 @@ use lb_core::{ header::HeaderId, - mantle::{Transaction, TxHash}, + mantle::{TxHash, traits::Hashable}, }; use lb_tx_service::{MempoolMsg, TransactionsByHashesResponse}; use overwatch::services::relay::OutboundRelay; @@ -23,7 +23,7 @@ impl MempoolAdapter { #[async_trait::async_trait] impl MempoolAdapterTrait for MempoolAdapter where - Tx: Transaction + Send + Sync + 'static, + Tx: Hashable + Send + Sync + 'static, { async fn add_transaction(&self, tx: Tx) -> Result<(), overwatch::DynError> { let (reply_sender, reply_receiver) = oneshot::channel(); diff --git a/services/chain/chain-network/src/network/adapters/libp2p.rs b/services/chain/chain-network/src/network/adapters/libp2p.rs index dab6c1fc3..fb3e85f76 100644 --- a/services/chain/chain-network/src/network/adapters/libp2p.rs +++ b/services/chain/chain-network/src/network/adapters/libp2p.rs @@ -6,7 +6,7 @@ use lb_core::{ block::{Block, Proposal}, codec::DeserializeOp as _, header::HeaderId, - mantle::AuthenticatedMantleTx, + mantle::traits::MantleTxWithProofs, }; use lb_cryptarchia_sync::GetTipResponse; use lb_network_service::{ @@ -25,7 +25,6 @@ use rand::{seq::IteratorRandom as _, thread_rng}; use serde::{Deserialize, Serialize, de::DeserializeOwned}; use tokio::sync::oneshot; use tokio_stream::{StreamExt as _, wrappers::errors::BroadcastStreamRecvError}; -use tracing::debug; use crate::{ metrics, @@ -93,14 +92,7 @@ where additional_blocks: HashSet, ) -> Result, DynError> where - Tx: AuthenticatedMantleTx - + Serialize - + DeserializeOwned - + Clone - + Eq - + Send - + Sync - + 'static, + Tx: MantleTxWithProofs + Serialize + DeserializeOwned + Clone + Eq + Send + Sync + 'static, { let mut stream = self .request_blocks_from_peer( @@ -175,7 +167,7 @@ where #[async_trait::async_trait] impl NetworkAdapter for LibP2pAdapter where - Tx: AuthenticatedMantleTx + Serialize + DeserializeOwned + Clone + Eq + Send + Sync + 'static, + Tx: MantleTxWithProofs + Serialize + DeserializeOwned + Clone + Eq + Send + Sync + 'static, { type Backend = Libp2p; type Settings = LibP2pAdapterSettings; @@ -289,7 +281,7 @@ where .choose_multiple(&mut thread_rng(), max_peers); if sampled.is_empty() { - debug!("tip poll: no connected peers to sample"); + tracing::debug!("tip poll: no connected peers to sample"); return Box::new(stream::empty::()); } let result_stream = FuturesStreamExt::filter_map( @@ -306,13 +298,15 @@ where ))) .await { - debug!("tip poll: failed to send GetTip to peer {peer:?}: {e}"); + tracing::debug!("tip poll: failed to send GetTip to peer {peer:?}: {e}"); None } else { match receiver.await.ok() { None => None, Some(Err(e)) => { - debug!("tip poll: failed to send GetTip to peer {peer:?}: {e}"); + tracing::debug!( + "tip poll: failed to send GetTip to peer {peer:?}: {e}" + ); None } Some(Ok(tip)) => Some(tip), @@ -415,7 +409,7 @@ where ) .await?; - debug!("received a stream of orphan parents from peer: {peer}"); + tracing::debug!("received a stream of orphan parents from peer: {peer}"); Ok(stream) } diff --git a/services/chain/chain-network/src/relays.rs b/services/chain/chain-network/src/relays.rs index 8b66d8011..23317df1c 100644 --- a/services/chain/chain-network/src/relays.rs +++ b/services/chain/chain-network/src/relays.rs @@ -7,7 +7,7 @@ use std::{ use lb_chain_service::api::{CryptarchiaServiceApi, CryptarchiaServiceData}; use lb_core::{ header::HeaderId, - mantle::{AuthenticatedMantleTx, TxHash}, + mantle::{TxHash, traits::MantleTxWithProofs}, }; use lb_network_service::{NetworkService, message::BackendNetworkMsg}; use lb_storage_service::StorageService; @@ -61,7 +61,7 @@ where + Send + Sync + 'static - + AuthenticatedMantleTx, + + MantleTxWithProofs, Mempool::Settings: Clone + Send + Sync, Mempool::Storage: MempoolStorageAdapter + Clone + Send + Sync, MempoolNetAdapter: MempoolNetworkAdapter diff --git a/services/chain/chain-service/src/lib.rs b/services/chain/chain-service/src/lib.rs index a97fee40c..0ea53d765 100644 --- a/services/chain/chain-service/src/lib.rs +++ b/services/chain/chain-service/src/lib.rs @@ -26,7 +26,8 @@ use lb_core::{ events::Events, header::HeaderId, mantle::{ - AuthenticatedMantleTx, GenesisTx as _, PreverifiedMantleTx, gas::MainnetGasConstants, + gas::MainnetGasConstants, + traits::{GenesisTx as _, MantleTxWithProofs, PreverifiedMantleTx}, transactions::GasPrices, }, sdp::{Declaration, DeclarationId}, @@ -373,7 +374,7 @@ impl Cryptarchia { current_slot: Slot, ) -> Result<(PrunedBlocks, ReorgedBlocks, Events), Error> where - Tx: PreverifiedMantleTx + 'tx + AuthenticatedMantleTx + Clone, + Tx: PreverifiedMantleTx + 'tx + MantleTxWithProofs, { let header = block.header(); let id = header.id(); @@ -559,7 +560,7 @@ impl ServiceCore for CryptarchiaConsensus where Tx: PreverifiedMantleTx - + AuthenticatedMantleTx + + MantleTxWithProofs + Debug + Clone + Eq @@ -830,7 +831,7 @@ impl CryptarchiaConsensus where Tx: PreverifiedMantleTx - + AuthenticatedMantleTx + + MantleTxWithProofs + Debug + Clone + Eq diff --git a/services/chain/chain-service/src/relays.rs b/services/chain/chain-service/src/relays.rs index 4704b9247..d1cb3c0b5 100644 --- a/services/chain/chain-service/src/relays.rs +++ b/services/chain/chain-service/src/relays.rs @@ -2,11 +2,7 @@ use std::fmt::{Debug, Display}; use bytes::Bytes; use lb_chain_broadcast_service::{BlockBroadcastMsg, BlockBroadcastService}; -use lb_core::{ - block::Block, - events::Events, - mantle::{AuthenticatedMantleTx, PreverifiedMantleTx}, -}; +use lb_core::{block::Block, events::Events, mantle::traits::PreverifiedMantleTx}; use lb_storage_service::{ StorageMsg, StorageService, api::chain::StorageChainApi, backends::StorageBackend, }; @@ -41,7 +37,6 @@ where impl CryptarchiaConsensusRelays where Tx: PreverifiedMantleTx - + AuthenticatedMantleTx + Debug + Clone + Eq diff --git a/services/chain/chain-service/src/states.rs b/services/chain/chain-service/src/states.rs index 683c08494..066871d8a 100644 --- a/services/chain/chain-service/src/states.rs +++ b/services/chain/chain-service/src/states.rs @@ -1,6 +1,6 @@ use std::{collections::HashSet, time::SystemTime}; -use lb_core::{header::HeaderId, mantle::GenesisTx as _}; +use lb_core::{header::HeaderId, mantle::traits::GenesisTx as _}; use lb_ledger::LedgerState; use overwatch::{DynError, services::state::ServiceState}; use serde::{Deserialize, Serialize}; diff --git a/services/chain/chain-service/src/storage/adapters/storage.rs b/services/chain/chain-service/src/storage/adapters/storage.rs index 6f3dfcfb3..ca998cf40 100644 --- a/services/chain/chain-service/src/storage/adapters/storage.rs +++ b/services/chain/chain-service/src/storage/adapters/storage.rs @@ -11,7 +11,7 @@ use lb_core::{ codec::{DeserializeOp as _, SerializeOp as _}, events::Events, header::HeaderId, - mantle::{Transaction, TxHash}, + mantle::{TxHash, traits::Hashable}, }; use lb_cryptarchia_engine::Slot; use lb_storage_service::{ @@ -52,14 +52,7 @@ where ::Block: TryFrom> + TryInto>, ::Tx: From + AsRef<[u8]>, ::Events: TryFrom + TryInto, - Tx: Clone - + Eq - + Serialize - + DeserializeOwned - + Send - + Sync - + 'static - + Transaction, + Tx: Clone + Eq + Serialize + DeserializeOwned + Send + Sync + 'static + Hashable, { type Backend = Storage; type Block = Block; diff --git a/services/tx-service/src/tx/service.rs b/services/tx-service/src/tx/service.rs index 7aa99754f..3552a0545 100644 --- a/services/tx-service/src/tx/service.rs +++ b/services/tx-service/src/tx/service.rs @@ -15,7 +15,7 @@ use std::{ use futures::StreamExt as _; use lb_core::{ block::MAX_BLOCK_TRANSACTIONS_SIZE, - mantle::{StorageSize, Transaction}, + mantle::traits::{Hashable, StorageSize}, }; use lb_log_targets::mempool; use lb_network_service::{NetworkService, message::BackendNetworkMsg}; @@ -163,7 +163,7 @@ where Pool: MemPoolTrait + RecoverableMempool + Send + Sync, StorageAdapter: MempoolStorageAdapter + Clone + Send + Sync, ::RecoveryState: Debug + Send + Sync, - Pool::Item: Transaction + StorageSize + Clone + Send + 'static, + Pool::Item: Hashable + StorageSize + Clone + Send + 'static, Pool::Settings: Clone + Sync + Send, NetworkAdapter: NetworkAdapterTrait + Send + Sync, @@ -264,7 +264,7 @@ impl where Pool: MemPoolTrait + RecoverableMempool + Send + Sync, StorageAdapter: MempoolStorageAdapter + Clone + Send + Sync, - Pool::Item: Transaction + StorageSize + Clone + Send + 'static, + Pool::Item: Hashable + StorageSize + Clone + Send + 'static, Pool::Settings: Clone, NetworkAdapter: NetworkAdapterTrait + Send + Sync, NetworkAdapter::Settings: Clone + Send + 'static, @@ -459,7 +459,7 @@ where })?; let mut fetched_by_hash = items_stream - .map(|tx| (Transaction::hash(&tx), tx)) + .map(|tx| (Hashable::hash(&tx), tx)) .collect::>() .await; diff --git a/services/wallet/src/lib.rs b/services/wallet/src/lib.rs index 0aa7fca85..d6d824a07 100644 --- a/services/wallet/src/lib.rs +++ b/services/wallet/src/lib.rs @@ -16,8 +16,7 @@ use lb_core::{ events::Events, header::HeaderId, mantle::{ - AuthenticatedMantleTx, NoteId, Op, OpProof, SignedMantleTx, Transaction as _, TxHash, Utxo, - Value, VerificationError, + NoteId, Op, OpProof, SignedMantleTx, TxHash, Utxo, Value, VerificationError, gas::{GasCost, GasOverflow, MainnetGasConstants}, ledger::Inputs, ops::{ @@ -27,6 +26,7 @@ use lb_core::{ }, sdp::{SDPActiveOp, SDPDeclareOp, SDPWithdrawOp}, }, + traits::{Hashable as _, MantleTxWithProofs}, transactions::{ MantleTxBuilder, MantleTxContext, TxBuilderError, states::Preverified, tx::OpsProofs, }, @@ -306,7 +306,7 @@ impl ServiceCore where Kms: KmsServiceData + Send + Sync, - Tx: AuthenticatedMantleTx + Send + Sync + Clone + Eq + Serialize + DeserializeOwned + 'static, + Tx: MantleTxWithProofs + Send + Sync + Clone + Eq + Serialize + DeserializeOwned + 'static, Cryptarchia: CryptarchiaServiceData, Storage: StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, @@ -463,7 +463,7 @@ impl WalletService where Kms: KmsServiceData, - Tx: AuthenticatedMantleTx + Send + Sync + Clone + Eq + Serialize + DeserializeOwned + 'static, + Tx: MantleTxWithProofs + Send + Sync + Clone + Eq + Serialize + DeserializeOwned + 'static, Cryptarchia: CryptarchiaServiceData + Send + 'static, Storage: StorageBackend + Send + Sync + 'static, ::Block: TryFrom> + TryInto>, diff --git a/tests/src/common/chain.rs b/tests/src/common/chain.rs index e9c3dd715..fde24f3e5 100644 --- a/tests/src/common/chain.rs +++ b/tests/src/common/chain.rs @@ -3,7 +3,7 @@ use std::{collections::HashSet, hash::BuildHasher, time::Duration}; use lb_common_http_client::ApiBlock; use lb_core::{ header::HeaderId, - mantle::{Transaction as _, TxHash}, + mantle::{TxHash, traits::Hashable as _}, }; use lb_testing_framework::NodeHttpClient; use tokio::time::{sleep, timeout}; diff --git a/tests/src/common/manual_cluster.rs b/tests/src/common/manual_cluster.rs index 6c2ce9a59..f0a57ee3a 100644 --- a/tests/src/common/manual_cluster.rs +++ b/tests/src/common/manual_cluster.rs @@ -5,7 +5,7 @@ use std::{ time::Duration, }; -use lb_core::mantle::{GenesisTx as _, Utxo}; +use lb_core::mantle::{Utxo, traits::GenesisTx as _}; use lb_key_management_system_service::keys::ZkPublicKey; use lb_libp2p::Multiaddr; use lb_node::{UserConfig, config::RunConfig}; diff --git a/tests/src/common/wallet/funding_from_chain.rs b/tests/src/common/wallet/funding_from_chain.rs index b77453000..64f4b87d2 100644 --- a/tests/src/common/wallet/funding_from_chain.rs +++ b/tests/src/common/wallet/funding_from_chain.rs @@ -2,9 +2,10 @@ use std::collections::{HashMap, HashSet}; use lb_common_http_client::{ApiBlock, Error as HttpClientError}; use lb_core::mantle::{ - Op, OpProof, SignedMantleTx, Transaction as _, TxHash, Utxo, + Op, OpProof, SignedMantleTx, TxHash, Utxo, gas::MainnetGasConstants, ops::channel::{ChannelId, ChannelKeyIndex}, + traits::Hashable as _, transactions::{ GasPrices, MantleTxBuilder, MantleTxContext, MantleTxGasContext, states::Unverified, tx::OpsProofs, @@ -156,7 +157,7 @@ where let mut transactions_hashes = HashSet::new(); for block in tail_blocks { apply_block_transactions(&mut chain_state, &block); - transactions_hashes.extend(block.transactions.iter().map(lb_node::Transaction::hash)); + transactions_hashes.extend(block.transactions.iter().map(lb_node::Hashable::hash)); } Ok(( diff --git a/tests/src/common/wallet/scanner/accounting.rs b/tests/src/common/wallet/scanner/accounting.rs index 0aafbab9d..8b0bc7de6 100644 --- a/tests/src/common/wallet/scanner/accounting.rs +++ b/tests/src/common/wallet/scanner/accounting.rs @@ -2,7 +2,7 @@ use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; use lb_common_http_client::ApiBlock; use lb_core::mantle::{ - NoteId, SignedMantleTx, Transaction as _, TxHash, Utxo, ops::Op, + NoteId, SignedMantleTx, TxHash, Utxo, ops::Op, traits::Hashable as _, transactions::states::Unverified, }; use lb_key_management_system_service::keys::ZkPublicKey; @@ -211,13 +211,14 @@ mod tests { use lb_core::{ header::{ContentId, HeaderId}, mantle::{ - MantleTx, Note, SignedMantleTx, Transaction as _, Utxo, + MantleTx, Note, SignedMantleTx, Utxo, ledger::{Inputs, Outputs}, ops::{ Op, channel::{ChannelId, deposit::DepositOp}, transfer::TransferOp, }, + traits::Hashable as _, transactions::{states::Unverified, tx::OpsProofs}, }, proofs::leader_proof::Groth16LeaderProof, diff --git a/tests/src/common/wallet/transaction/prepare.rs b/tests/src/common/wallet/transaction/prepare.rs index 3cc6dc7fc..448e469b2 100644 --- a/tests/src/common/wallet/transaction/prepare.rs +++ b/tests/src/common/wallet/transaction/prepare.rs @@ -3,7 +3,8 @@ use std::collections::HashMap; use lb_core::mantle::{ - MantleTx, NoteId, Op, Transaction as _, TxHash, Utxo, + MantleTx, NoteId, Op, TxHash, Utxo, + traits::Hashable as _, transactions::{MantleTxBuilder, MantleTxContext}, }; use lb_key_management_system_service::keys::ZkPublicKey; diff --git a/tests/src/common/wallet/transaction/signing.rs b/tests/src/common/wallet/transaction/signing.rs index 8595e9ccf..8ebba93c7 100644 --- a/tests/src/common/wallet/transaction/signing.rs +++ b/tests/src/common/wallet/transaction/signing.rs @@ -3,9 +3,9 @@ use std::collections::HashMap; use lb_core::mantle::{ - AuthenticatedMantleTx as _, MantleTx, NoteId, Op, OpProof, SignedMantleTx, Transaction as _, - TxHash, + GasCalculator as _, MantleTx, NoteId, Op, OpProof, SignedMantleTx, TxHash, gas::MainnetGasConstants, + traits::Hashable as _, transactions::{MantleTxBuilder, MantleTxContext, tx::OpsProofs}, }; use lb_key_management_system_service::keys::ZkKey; @@ -32,7 +32,7 @@ pub(super) fn sign_prepared_wallet_transaction( let signed_tx = SignedMantleTx::new(mantle_tx, op_proofs).preverify()?; let spent_fee = signed_tx - .total_gas_cost::(gas_prices)? + .total_gas_cost::(&gas_prices)? .into_inner(); Ok(SignedWalletTransaction::new( diff --git a/tests/src/cucumber/steps/manual_mempool/actions.rs b/tests/src/cucumber/steps/manual_mempool/actions.rs index 161db4df2..5a486b0db 100644 --- a/tests/src/cucumber/steps/manual_mempool/actions.rs +++ b/tests/src/cucumber/steps/manual_mempool/actions.rs @@ -3,7 +3,8 @@ use std::{collections::BTreeSet, time::Duration}; use lb_core::{ codec::DeserializeOp as _, mantle::{ - SignedMantleTx, Transaction as _, TxHash, + SignedMantleTx, TxHash, + traits::Hashable as _, transactions::{states::Preverified, tx::OpsProofs}, }, }; diff --git a/tests/src/cucumber/steps/manual_nodes/utils.rs b/tests/src/cucumber/steps/manual_nodes/utils.rs index 8c62ee3a6..98b107f02 100644 --- a/tests/src/cucumber/steps/manual_nodes/utils.rs +++ b/tests/src/cucumber/steps/manual_nodes/utils.rs @@ -10,7 +10,7 @@ use cucumber::gherkin::Table; use futures::future::try_join_all; use hex::ToHex as _; use lb_chain_service::{ChainServiceInfo, ChainServiceMode, CryptarchiaInfo, State}; -use lb_core::mantle::{GenesisTx as _, Utxo, ops::OpId as _}; +use lb_core::mantle::{Utxo, ops::OpId as _, traits::GenesisTx as _}; use lb_http_api_common::paths::CRYPTARCHIA_INFO; use lb_libp2p::PeerId; use lb_node::config::{ diff --git a/tests/src/cucumber/steps/manual_transactions/tracked_transactions.rs b/tests/src/cucumber/steps/manual_transactions/tracked_transactions.rs index f9c9f02c0..3c7f9d1b2 100644 --- a/tests/src/cucumber/steps/manual_transactions/tracked_transactions.rs +++ b/tests/src/cucumber/steps/manual_transactions/tracked_transactions.rs @@ -2,9 +2,10 @@ use std::{collections::HashSet, time::Duration}; use lb_common_http_client::ApiBlock; use lb_core::mantle::{ - MantleTx, Note, Op, OpProof, SignedMantleTx, Transaction as _, TxHash, + MantleTx, Note, Op, OpProof, SignedMantleTx, TxHash, ledger::{Inputs, Outputs}, ops::transfer::TransferOp, + traits::Hashable as _, transactions::states::Unverified, }; use lb_key_management_system_service::keys::{ZkKey, ZkPublicKey}; diff --git a/tests/src/cucumber/steps/manual_zone/support.rs b/tests/src/cucumber/steps/manual_zone/support.rs index b0d879650..d7bd99324 100644 --- a/tests/src/cucumber/steps/manual_zone/support.rs +++ b/tests/src/cucumber/steps/manual_zone/support.rs @@ -14,7 +14,7 @@ use std::{ use futures::StreamExt as _; use lb_common_http_client::{CommonHttpClient, Slot}; use lb_core::mantle::{ - MantleTx, Note, Op, OpProof, Transaction as _, Utxo, Value, + MantleTx, Note, Op, OpProof, Utxo, Value, gas::GasCost, ledger::{Inputs, Outputs, OutputsError}, ops::{ @@ -26,6 +26,7 @@ use lb_core::mantle::{ }, transfer::TransferOp, }, + traits::Hashable as _, transactions::{builder::MantleTxBuilder, states::Unverified, tx::OpsProofs}, }; use lb_http_api_common::bodies::{ diff --git a/tests/src/cucumber/steps/wallet_fund.rs b/tests/src/cucumber/steps/wallet_fund.rs index 108ff9417..9d3e5f1da 100644 --- a/tests/src/cucumber/steps/wallet_fund.rs +++ b/tests/src/cucumber/steps/wallet_fund.rs @@ -4,12 +4,13 @@ use cucumber::{gherkin::Step, when}; use lb_core::mantle::{ - Note, Op, OpProof, SignedMantleTx, Transaction as _, + Note, Op, OpProof, SignedMantleTx, gas::GasCost, ops::channel::{ ChannelId, MsgId, inscribe::{Inscription, InscriptionOp}, }, + traits::Hashable as _, transactions::builder::MantleTxBuilder, }; use lb_http_api_common::bodies::wallet::fund::{WalletFundRequestBody, WalletFundResponseBody}; diff --git a/tests/src/tests/mantle/chain_start.rs b/tests/src/tests/mantle/chain_start.rs index 549932553..081dc1315 100644 --- a/tests/src/tests/mantle/chain_start.rs +++ b/tests/src/tests/mantle/chain_start.rs @@ -4,9 +4,10 @@ use lb_chain_service::{ChainServiceMode, State}; use lb_core::{ block::genesis::GenesisBlockBuilder, mantle::{ - GenesisTime, GenesisTx as _, + GenesisTime, nom::NomEncode as _, ops::channel::inscribe::{Inscription, InscriptionOp}, + traits::GenesisTx as _, }, }; use lb_node::config::{RunConfig, cryptarchia::deployment::EpochConfig}; diff --git a/tests/src/tests/mantle/channel.rs b/tests/src/tests/mantle/channel.rs index a3f253598..9cb1d22fb 100644 --- a/tests/src/tests/mantle/channel.rs +++ b/tests/src/tests/mantle/channel.rs @@ -6,10 +6,11 @@ use lb_core::{ events::{Event, Events, TxEvent, TxEventPayload}, header::HeaderId, mantle::{ - GenesisTx as _, NoteId, Transaction as _, TxHash, + NoteId, TxHash, gas::GasCost, ledger::Inputs, ops::channel::{ChannelId, deposit::DepositOp}, + traits::{GenesisTx as _, Hashable as _}, }, }; use lb_http_api_common::bodies::{ diff --git a/tests/src/tests/mantle/leader.rs b/tests/src/tests/mantle/leader.rs index 400f8238a..631fd6faf 100644 --- a/tests/src/tests/mantle/leader.rs +++ b/tests/src/tests/mantle/leader.rs @@ -9,7 +9,7 @@ use lb_http_api_common::bodies::wallet::{ }; use lb_key_management_system_service::keys::ZkPublicKey; use lb_node::{ - Transaction as _, TxHash, + Hashable as _, TxHash, config::{RunConfig, cryptarchia::deployment::EpochConfig}, }; use lb_testing_framework::{ diff --git a/tests/src/tests/mantle/sdp/ops.rs b/tests/src/tests/mantle/sdp/ops.rs index 87ca15394..acbf349d1 100644 --- a/tests/src/tests/mantle/sdp/ops.rs +++ b/tests/src/tests/mantle/sdp/ops.rs @@ -12,7 +12,7 @@ use std::{ use lb_chain_service::Epoch; use lb_common_http_client::Error; use lb_core::{ - mantle::{NoteId, OpProof, Transaction as _, Utxo, ops::Op}, + mantle::{NoteId, OpProof, Utxo, ops::Op, traits::Hashable as _}, sdp::{ Declaration, DeclarationId, DeclarationMessage, Locator, ProviderId, ServiceType, WithdrawMessage, diff --git a/tests/src/topology/mod.rs b/tests/src/topology/mod.rs index c7acf0256..6747aac02 100644 --- a/tests/src/topology/mod.rs +++ b/tests/src/topology/mod.rs @@ -10,7 +10,7 @@ pub use lb_config as configs; use lb_config::kms::key_id_for_preload_backend; use lb_core::{ block::genesis::GenesisBlock, - mantle::{GenesisTx as _, Note, NoteId}, + mantle::{traits::GenesisTx as _, Note, NoteId}, sdp::{Locator, ServiceType}, }; use lb_key_management_system_service::keys::ZkKey; diff --git a/tests/testing_framework/src/framework/deployment_artifacts.rs b/tests/testing_framework/src/framework/deployment_artifacts.rs index 2865caf67..55676c642 100644 --- a/tests/testing_framework/src/framework/deployment_artifacts.rs +++ b/tests/testing_framework/src/framework/deployment_artifacts.rs @@ -3,7 +3,7 @@ use cfgsync_adapter::MaterializedArtifacts; use cfgsync_artifacts::ArtifactFile; use lb_core::{ block::genesis::GenesisBlock, - mantle::GenesisTx as _, + mantle::traits::GenesisTx as _, sdp::{Locator, ServiceType}, }; use lb_libp2p::{Multiaddr, Protocol}; diff --git a/tests/testing_framework/src/node/configs/postprocess.rs b/tests/testing_framework/src/node/configs/postprocess.rs index 53ab21952..aaa45476a 100644 --- a/tests/testing_framework/src/node/configs/postprocess.rs +++ b/tests/testing_framework/src/node/configs/postprocess.rs @@ -2,7 +2,7 @@ use std::collections::HashSet; use lb_core::{ block::genesis::GenesisBlock, - mantle::{GenesisTx as _, Note}, + mantle::{Note, traits::GenesisTx as _}, sdp::{Locator, ServiceType}, }; use lb_key_management_system_service::keys::{Key, ZkKey}; diff --git a/tests/testing_framework/src/workloads/inscription/workload.rs b/tests/testing_framework/src/workloads/inscription/workload.rs index 60729b528..af0627e8f 100644 --- a/tests/testing_framework/src/workloads/inscription/workload.rs +++ b/tests/testing_framework/src/workloads/inscription/workload.rs @@ -8,7 +8,7 @@ use std::{ use async_trait::async_trait; use lb_core::mantle::{ - MantleTx, SignedMantleTx, Transaction as _, + MantleTx, SignedMantleTx, ops::{ Op, OpProof, channel::{ @@ -16,6 +16,7 @@ use lb_core::mantle::{ inscribe::{Inscription, InscriptionOp}, }, }, + traits::Hashable as _, transactions::{TxHash, states::Preverified}, }; use lb_key_management_system_service::keys::Ed25519Key; diff --git a/tests/testing_framework/src/workloads/transaction/workload.rs b/tests/testing_framework/src/workloads/transaction/workload.rs index 19f9c457b..269347b1b 100644 --- a/tests/testing_framework/src/workloads/transaction/workload.rs +++ b/tests/testing_framework/src/workloads/transaction/workload.rs @@ -9,9 +9,10 @@ use std::{ use async_trait::async_trait; use lb_core::mantle::{ - GasCalculator as _, GenesisTx as _, Note, OpProof, SignedMantleTx, Transaction as _, Utxo, + GasCalculator as _, Note, OpProof, SignedMantleTx, Utxo, gas::MainnetGasConstants, ops::OpId as _, + traits::{GenesisTx as _, Hashable as _}, transactions::{GasPrices, MantleTxBuilder, MantleTxGasContext, states::Preverified}, }; use lb_key_management_system_service::keys::{ZkKey, ZkPublicKey}; diff --git a/tools/config/src/consensus.rs b/tools/config/src/consensus.rs index 61df021ff..a2e60ace1 100644 --- a/tools/config/src/consensus.rs +++ b/tools/config/src/consensus.rs @@ -22,7 +22,7 @@ use lb_groth16::{AdditiveGroup as _, CompressedGroth16Proof, Fr}; use lb_key_management_system_service::keys::{ Ed25519Key, Ed25519Signature, ZkKey, ZkPublicKey, ZkSignature, }; -use lb_node::{SignedMantleTx, Transaction as _}; +use lb_node::{Hashable as _, SignedMantleTx}; use num_bigint::BigUint; use time::OffsetDateTime; diff --git a/tools/config/src/lib.rs b/tools/config/src/lib.rs index f9c52dcdc..33c2b8bc4 100644 --- a/tools/config/src/lib.rs +++ b/tools/config/src/lib.rs @@ -17,7 +17,7 @@ use std::sync::LazyLock; use blend::GeneralBlendConfig; use lb_core::{ block::genesis::GenesisBlock, - mantle::GenesisTx as _, + mantle::traits::GenesisTx as _, sdp::{Locator, ServiceType}, }; use lb_node::config::KmsConfig; diff --git a/tools/config/src/sdp.rs b/tools/config/src/sdp.rs index 5f3e6b6af..87733971f 100644 --- a/tools/config/src/sdp.rs +++ b/tools/config/src/sdp.rs @@ -1,7 +1,7 @@ use std::iter::repeat_n; use lb_core::{ - mantle::{GenesisTx as _, Op, transactions::GenesisTx}, + mantle::{Op, traits::GenesisTx as _, transactions::GenesisTx}, sdp::DeclarationId, }; diff --git a/wallet/src/lib.rs b/wallet/src/lib.rs index 2d5acb41e..e40e1a307 100644 --- a/wallet/src/lib.rs +++ b/wallet/src/lib.rs @@ -15,13 +15,14 @@ use lb_core::{ events::{Event, Events, HeaderEvent, TxEvent, TxEventPayload}, header::HeaderId, mantle::{ - AuthenticatedMantleTx, GasConstants, NoteId, TxHash, Utxo, Value, + GasConstants, NoteId, TxHash, Utxo, Value, ops::{ Op, OpId as _, channel::{channel_transfer::ChannelTransferOp, withdraw::ChannelWithdrawOp}, leader_claim::{VoucherCm, VoucherNullifier}, transfer::TransferOp, }, + traits::MantleTxWithProofs, transactions::{MantleTxContext, builder::MantleTxBuilder}, }, proofs::leader_proof::LeaderProof as _, @@ -106,7 +107,7 @@ impl WalletBlock { #[must_use] pub fn from_block(block: &Block, epoch: Epoch, events: &Events) -> Self where - Tx: AuthenticatedMantleTx + Clone, + Tx: MantleTxWithProofs + Clone, { // TODO: devise a better way to mirror ledger's execution always correctly: https://github.com/logos-blockchain/logos-blockchain/issues/2627 let (header_events, tx_events) = group_events(events); @@ -509,7 +510,7 @@ fn transform_txs<'t, Tx>( mut events_by_tx: HashMap>, ) -> impl Iterator + 't where - Tx: AuthenticatedMantleTx + 't, + Tx: MantleTxWithProofs + 't, { txs.map(move |tx| { let mut events_by_op = events_by_tx.remove(&tx.hash()).unwrap_or_default(); diff --git a/zone-sdk/src/adapter.rs b/zone-sdk/src/adapter.rs index a7cc020fc..85bf85a0b 100644 --- a/zone-sdk/src/adapter.rs +++ b/zone-sdk/src/adapter.rs @@ -11,9 +11,10 @@ use lb_core::{ events::TxEvent, header::HeaderId, mantle::{ - Op, SignedMantleTx, Transaction as _, TxHash, Value, + Op, SignedMantleTx, TxHash, Value, channel::ChannelState, ops::{OpId as _, channel::ChannelId}, + traits::Hashable as _, transactions::states::{Unverified, VerificationState}, }, }; diff --git a/zone-sdk/src/sequencer/actor.rs b/zone-sdk/src/sequencer/actor.rs index d3259786c..b460949f7 100644 --- a/zone-sdk/src/sequencer/actor.rs +++ b/zone-sdk/src/sequencer/actor.rs @@ -595,7 +595,7 @@ mod tests { use lb_core::{ header::HeaderId, mantle::{ - MantleTx, Note, Op, SignedMantleTx, Transaction as _, Utxo, + MantleTx, Note, Op, SignedMantleTx, Utxo, ledger::Inputs, ops::{ OpProof, @@ -606,6 +606,7 @@ mod tests { withdraw::ChannelWithdrawOp, }, }, + traits::Hashable as _, transactions::{Ops, tx::OpsProofs}, }, }; diff --git a/zone-sdk/src/sequencer/block_fetch.rs b/zone-sdk/src/sequencer/block_fetch.rs index c0af3173f..36753f92b 100644 --- a/zone-sdk/src/sequencer/block_fetch.rs +++ b/zone-sdk/src/sequencer/block_fetch.rs @@ -5,11 +5,12 @@ use lb_core::{ crypto::Hash, header::HeaderId, mantle::{ - SignedMantleTx, Transaction as _, Value, + SignedMantleTx, Value, ops::{ Op, OpId as _, channel::{ChannelId, MsgId, inscribe::Inscription}, }, + traits::Hashable as _, transactions::{ TxHash, states::{Unverified, VerificationState}, diff --git a/zone-sdk/src/sequencer/state.rs b/zone-sdk/src/sequencer/state.rs index addbab3e4..46c0b7d7a 100644 --- a/zone-sdk/src/sequencer/state.rs +++ b/zone-sdk/src/sequencer/state.rs @@ -3,11 +3,12 @@ use std::collections::{BTreeMap, HashMap, HashSet, VecDeque}; use lb_core::{ header::HeaderId, mantle::{ - SignedMantleTx, Transaction as _, + SignedMantleTx, ops::{ Op, channel::{ChannelId, MsgId, inscribe::Inscription}, }, + traits::Hashable as _, transactions::{TxHash, states::Unverified}, }, }; @@ -973,8 +974,8 @@ impl TxState { #[cfg(test)] mod tests { use lb_core::mantle::{ - MantleTx, Op::ChannelInscribe, Transaction as _, ops::channel::inscribe::InscriptionOp, - transactions::tx::OpsProofs, + MantleTx, Op::ChannelInscribe, ops::channel::inscribe::InscriptionOp, + traits::Hashable as _, transactions::tx::OpsProofs, }; use lb_key_management_system_service::keys::Ed25519PublicKey; diff --git a/zone-sdk/src/sequencer/tx_builder.rs b/zone-sdk/src/sequencer/tx_builder.rs index 92d8e2464..c04f07011 100644 --- a/zone-sdk/src/sequencer/tx_builder.rs +++ b/zone-sdk/src/sequencer/tx_builder.rs @@ -1,6 +1,6 @@ use lb_core::{ mantle::{ - MantleTx, SignedMantleTx, Transaction as _, Value, + MantleTx, SignedMantleTx, Value, channel::{ChannelState, SlotTimeframe, SlotTimeout}, ops::{ Op, OpProof, @@ -10,6 +10,7 @@ use lb_core::{ inscribe::{Inscription, InscriptionOp}, }, }, + traits::Hashable as _, transactions::{MantleTxBuilder, Ops, TxHash, states::Unverified, tx::OpsProofs}, }, proofs::channel_multi_sig_proof::{ChannelMultiSigProof, IndexedSignature}, diff --git a/zone-sdk/src/sequencer/types.rs b/zone-sdk/src/sequencer/types.rs index d8396a357..dd165f462 100644 --- a/zone-sdk/src/sequencer/types.rs +++ b/zone-sdk/src/sequencer/types.rs @@ -5,13 +5,14 @@ use lb_core::{ crypto::Hash, header::HeaderId, mantle::{ - SignedMantleTx, Transaction as _, Value, + SignedMantleTx, Value, channel::ChannelState, gas::GasCost, ledger::{Inputs, Outputs}, ops::channel::{ ChannelId, MsgId, deposit::Metadata, inscribe::Inscription, withdraw::ChannelWithdrawOp, }, + traits::Hashable as _, transactions::{TxHash, states::Unverified}, }, }; diff --git a/zone-sdk/src/sequencer/zone_sequencer.rs b/zone-sdk/src/sequencer/zone_sequencer.rs index 504e4b106..c00cb1f8d 100644 --- a/zone-sdk/src/sequencer/zone_sequencer.rs +++ b/zone-sdk/src/sequencer/zone_sequencer.rs @@ -11,9 +11,10 @@ use lb_common_http_client::{ProcessedBlockEvent, Slot}; use lb_core::{ header::HeaderId, mantle::{ - MantleTx, Op, SignedMantleTx, Transaction as _, + MantleTx, Op, SignedMantleTx, channel::{ChannelState, SlotTimeframe, SlotTimeout}, ops::channel::{ChannelId, MsgId, config::Keys, inscribe::Inscription}, + traits::Hashable as _, transactions::{Ops, TxHash, states::Unverified}, }, };