mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-01-07 15:53:14 +00:00
remove unnecessary mempoolitem trait
This commit is contained in:
parent
22c16c1ec9
commit
13cc82e3ed
@ -1,14 +1,10 @@
|
|||||||
use std::collections::VecDeque;
|
use std::collections::VecDeque;
|
||||||
|
|
||||||
use mempoolitem::MemPoolItem;
|
|
||||||
|
|
||||||
pub mod mempoolitem;
|
|
||||||
|
|
||||||
pub struct MemPool<Item> {
|
pub struct MemPool<Item> {
|
||||||
items: VecDeque<Item>,
|
items: VecDeque<Item>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Item: MemPoolItem> MemPool<Item> {
|
impl<Item> MemPool<Item> {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
items: VecDeque::new(),
|
items: VecDeque::new(),
|
||||||
@ -55,7 +51,7 @@ impl<Item: MemPoolItem> MemPool<Item> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Item: MemPoolItem> Default for MemPool<Item> {
|
impl<Item> Default for MemPool<Item> {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self::new()
|
Self::new()
|
||||||
}
|
}
|
||||||
@ -74,14 +70,6 @@ mod tests {
|
|||||||
id: ItemId,
|
id: ItemId,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MemPoolItem for TestItem {
|
|
||||||
type Identifier = ItemId;
|
|
||||||
|
|
||||||
fn identifier(&self) -> Self::Identifier {
|
|
||||||
self.id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn test_item_with_id(id: u64) -> TestItem {
|
fn test_item_with_id(id: u64) -> TestItem {
|
||||||
TestItem { id }
|
TestItem { id }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +0,0 @@
|
|||||||
pub trait MemPoolItem {
|
|
||||||
type Identifier;
|
|
||||||
fn identifier(&self) -> Self::Identifier;
|
|
||||||
}
|
|
||||||
@ -12,17 +12,15 @@ use common::{
|
|||||||
};
|
};
|
||||||
use config::SequencerConfig;
|
use config::SequencerConfig;
|
||||||
use mempool::MemPool;
|
use mempool::MemPool;
|
||||||
use mempool_transaction::MempoolTransaction;
|
|
||||||
use sequencer_store::SequecerChainStore;
|
use sequencer_store::SequecerChainStore;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
pub mod config;
|
pub mod config;
|
||||||
pub mod mempool_transaction;
|
|
||||||
pub mod sequencer_store;
|
pub mod sequencer_store;
|
||||||
|
|
||||||
pub struct SequencerCore {
|
pub struct SequencerCore {
|
||||||
pub store: SequecerChainStore,
|
pub store: SequecerChainStore,
|
||||||
pub mempool: MemPool<MempoolTransaction>,
|
pub mempool: MemPool<nssa::PublicTransaction>,
|
||||||
pub sequencer_config: SequencerConfig,
|
pub sequencer_config: SequencerConfig,
|
||||||
pub chain_height: u64,
|
pub chain_height: u64,
|
||||||
}
|
}
|
||||||
@ -61,7 +59,7 @@ impl SequencerCore {
|
|||||||
config.is_genesis_random,
|
config.is_genesis_random,
|
||||||
&config.initial_accounts,
|
&config.initial_accounts,
|
||||||
),
|
),
|
||||||
mempool: MemPool::<MempoolTransaction>::default(),
|
mempool: MemPool::default(),
|
||||||
chain_height: config.genesis_id,
|
chain_height: config.genesis_id,
|
||||||
sequencer_config: config,
|
sequencer_config: config,
|
||||||
}
|
}
|
||||||
@ -95,10 +93,8 @@ impl SequencerCore {
|
|||||||
|
|
||||||
fn execute_check_transaction_on_state(
|
fn execute_check_transaction_on_state(
|
||||||
&mut self,
|
&mut self,
|
||||||
mempool_tx: MempoolTransaction,
|
tx: nssa::PublicTransaction,
|
||||||
) -> Result<nssa::PublicTransaction, ()> {
|
) -> Result<nssa::PublicTransaction, ()> {
|
||||||
let tx = mempool_tx.auth_tx;
|
|
||||||
|
|
||||||
self.store.state.transition_from_public_transaction(&tx)?;
|
self.store.state.transition_from_public_transaction(&tx)?;
|
||||||
|
|
||||||
// self.store.pub_tx_store.add_tx(mempool_tx.auth_tx);
|
// self.store.pub_tx_store.add_tx(mempool_tx.auth_tx);
|
||||||
@ -116,7 +112,7 @@ impl SequencerCore {
|
|||||||
|
|
||||||
let valid_transactions = transactions
|
let valid_transactions = transactions
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|mempool_tx| self.execute_check_transaction_on_state(mempool_tx).ok())
|
.filter_map(|tx| self.execute_check_transaction_on_state(tx).ok())
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let prev_block_hash = self
|
let prev_block_hash = self
|
||||||
@ -151,7 +147,6 @@ mod tests {
|
|||||||
|
|
||||||
use common::transaction::{SignaturePrivateKey, Transaction, TransactionBody, TxKind};
|
use common::transaction::{SignaturePrivateKey, Transaction, TransactionBody, TxKind};
|
||||||
use k256::{ecdsa::SigningKey, FieldBytes};
|
use k256::{ecdsa::SigningKey, FieldBytes};
|
||||||
use mempool_transaction::MempoolTransaction;
|
|
||||||
use nssa::Program;
|
use nssa::Program;
|
||||||
use secp256k1_zkp::Tweak;
|
use secp256k1_zkp::Tweak;
|
||||||
|
|
||||||
@ -255,8 +250,7 @@ mod tests {
|
|||||||
|
|
||||||
fn common_setup(sequencer: &mut SequencerCore) {
|
fn common_setup(sequencer: &mut SequencerCore) {
|
||||||
let tx = create_dummy_transaction();
|
let tx = create_dummy_transaction();
|
||||||
let mempool_tx = MempoolTransaction { auth_tx: tx };
|
sequencer.mempool.push_item(tx);
|
||||||
sequencer.mempool.push_item(mempool_tx);
|
|
||||||
|
|
||||||
sequencer
|
sequencer
|
||||||
.produce_new_block_with_mempool_transactions()
|
.produce_new_block_with_mempool_transactions()
|
||||||
@ -281,17 +275,19 @@ mod tests {
|
|||||||
.try_into()
|
.try_into()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let balance_acc_1 = sequencer.store.state.get_account_by_address(&nssa::Address::new(acc1_addr)).balance;
|
let balance_acc_1 = sequencer
|
||||||
let balance_acc_2 = sequencer.store.state.get_account_by_address(&nssa::Address::new(acc2_addr)).balance;
|
.store
|
||||||
|
.state
|
||||||
|
.get_account_by_address(&nssa::Address::new(acc1_addr))
|
||||||
|
.balance;
|
||||||
|
let balance_acc_2 = sequencer
|
||||||
|
.store
|
||||||
|
.state
|
||||||
|
.get_account_by_address(&nssa::Address::new(acc2_addr))
|
||||||
|
.balance;
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(10000, balance_acc_1);
|
||||||
10000,
|
assert_eq!(20000, balance_acc_2);
|
||||||
balance_acc_1
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
20000,
|
|
||||||
balance_acc_2
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -334,11 +330,19 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
10000,
|
10000,
|
||||||
sequencer.store.state.get_account_by_address(&nssa::Address::new(acc1_addr)).balance
|
sequencer
|
||||||
|
.store
|
||||||
|
.state
|
||||||
|
.get_account_by_address(&nssa::Address::new(acc1_addr))
|
||||||
|
.balance
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
20000,
|
20000,
|
||||||
sequencer.store.state.get_account_by_address(&nssa::Address::new(acc2_addr)).balance
|
sequencer
|
||||||
|
.store
|
||||||
|
.state
|
||||||
|
.get_account_by_address(&nssa::Address::new(acc2_addr))
|
||||||
|
.balance
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -402,8 +406,7 @@ mod tests {
|
|||||||
// let tx_roots = sequencer.get_tree_roots();
|
// let tx_roots = sequencer.get_tree_roots();
|
||||||
let tx = sequencer.transaction_pre_check(tx).unwrap();
|
let tx = sequencer.transaction_pre_check(tx).unwrap();
|
||||||
|
|
||||||
let result =
|
let result = sequencer.execute_check_transaction_on_state(tx);
|
||||||
sequencer.execute_check_transaction_on_state(MempoolTransaction { auth_tx: tx });
|
|
||||||
|
|
||||||
assert_eq!(result.err().unwrap(), ());
|
assert_eq!(result.err().unwrap(), ());
|
||||||
}
|
}
|
||||||
@ -433,9 +436,7 @@ mod tests {
|
|||||||
//Passed pre-check
|
//Passed pre-check
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
|
|
||||||
let result = sequencer.execute_check_transaction_on_state(MempoolTransaction {
|
let result = sequencer.execute_check_transaction_on_state(result.unwrap());
|
||||||
auth_tx: result.unwrap(),
|
|
||||||
});
|
|
||||||
let is_failed_at_balance_mismatch = matches!(
|
let is_failed_at_balance_mismatch = matches!(
|
||||||
result.err().unwrap(),
|
result.err().unwrap(),
|
||||||
// TransactionMalformationErrorKind::BalanceMismatch { tx: _ }
|
// TransactionMalformationErrorKind::BalanceMismatch { tx: _ }
|
||||||
@ -465,12 +466,18 @@ mod tests {
|
|||||||
|
|
||||||
let tx = create_dummy_transaction_native_token_transfer(acc1, 0, acc2, 100, sign_key1);
|
let tx = create_dummy_transaction_native_token_transfer(acc1, 0, acc2, 100, sign_key1);
|
||||||
|
|
||||||
sequencer
|
sequencer.execute_check_transaction_on_state(tx).unwrap();
|
||||||
.execute_check_transaction_on_state(MempoolTransaction { auth_tx: tx })
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let bal_from = sequencer.store.state.get_account_by_address(&nssa::Address::new(acc1)).balance;
|
let bal_from = sequencer
|
||||||
let bal_to = sequencer.store.state.get_account_by_address(&nssa::Address::new(acc2)).balance;
|
.store
|
||||||
|
.state
|
||||||
|
.get_account_by_address(&nssa::Address::new(acc1))
|
||||||
|
.balance;
|
||||||
|
let bal_to = sequencer
|
||||||
|
.store
|
||||||
|
.state
|
||||||
|
.get_account_by_address(&nssa::Address::new(acc2))
|
||||||
|
.balance;
|
||||||
|
|
||||||
assert_eq!(bal_from, 9900);
|
assert_eq!(bal_from, 9900);
|
||||||
assert_eq!(bal_to, 20100);
|
assert_eq!(bal_to, 20100);
|
||||||
@ -490,10 +497,7 @@ mod tests {
|
|||||||
// let tx_roots = sequencer.get_tree_roots();
|
// let tx_roots = sequencer.get_tree_roots();
|
||||||
|
|
||||||
// Fill the mempool
|
// Fill the mempool
|
||||||
let dummy_tx = MempoolTransaction {
|
sequencer.mempool.push_item(tx.clone());
|
||||||
auth_tx: tx.clone(),
|
|
||||||
};
|
|
||||||
sequencer.mempool.push_item(dummy_tx);
|
|
||||||
|
|
||||||
let result = sequencer.push_tx_into_mempool_pre_check(tx);
|
let result = sequencer.push_tx_into_mempool_pre_check(tx);
|
||||||
|
|
||||||
@ -525,8 +529,7 @@ mod tests {
|
|||||||
let genesis_height = sequencer.chain_height;
|
let genesis_height = sequencer.chain_height;
|
||||||
|
|
||||||
let tx = create_dummy_transaction();
|
let tx = create_dummy_transaction();
|
||||||
let tx_mempool = MempoolTransaction { auth_tx: tx };
|
sequencer.mempool.push_item(tx);
|
||||||
sequencer.mempool.push_item(tx_mempool);
|
|
||||||
|
|
||||||
let block_id = sequencer.produce_new_block_with_mempool_transactions();
|
let block_id = sequencer.produce_new_block_with_mempool_transactions();
|
||||||
assert!(block_id.is_ok());
|
assert!(block_id.is_ok());
|
||||||
@ -553,16 +556,11 @@ mod tests {
|
|||||||
|
|
||||||
let tx = create_dummy_transaction_native_token_transfer(acc1, 0, acc2, 100, sign_key1);
|
let tx = create_dummy_transaction_native_token_transfer(acc1, 0, acc2, 100, sign_key1);
|
||||||
|
|
||||||
let tx_mempool_original = MempoolTransaction {
|
let tx_original = tx.clone();
|
||||||
auth_tx: tx.clone(),
|
let tx_replay = tx.clone();
|
||||||
};
|
|
||||||
let tx_mempool_replay = MempoolTransaction {
|
|
||||||
auth_tx: tx.clone(),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Pushing two copies of the same tx to the mempool
|
// Pushing two copies of the same tx to the mempool
|
||||||
sequencer.mempool.push_item(tx_mempool_original);
|
sequencer.mempool.push_item(tx_original);
|
||||||
sequencer.mempool.push_item(tx_mempool_replay);
|
sequencer.mempool.push_item(tx_replay);
|
||||||
|
|
||||||
// Create block
|
// Create block
|
||||||
let current_height = sequencer
|
let current_height = sequencer
|
||||||
@ -599,10 +597,7 @@ mod tests {
|
|||||||
let tx = create_dummy_transaction_native_token_transfer(acc1, 0, acc2, 100, sign_key1);
|
let tx = create_dummy_transaction_native_token_transfer(acc1, 0, acc2, 100, sign_key1);
|
||||||
|
|
||||||
// The transaction should be included the first time
|
// The transaction should be included the first time
|
||||||
let tx_mempool_original = MempoolTransaction {
|
sequencer.mempool.push_item(tx.clone());
|
||||||
auth_tx: tx.clone(),
|
|
||||||
};
|
|
||||||
sequencer.mempool.push_item(tx_mempool_original);
|
|
||||||
let current_height = sequencer
|
let current_height = sequencer
|
||||||
.produce_new_block_with_mempool_transactions()
|
.produce_new_block_with_mempool_transactions()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -614,8 +609,7 @@ mod tests {
|
|||||||
assert_eq!(block.transactions, vec![tx.clone()]);
|
assert_eq!(block.transactions, vec![tx.clone()]);
|
||||||
|
|
||||||
// Add same transaction should fail
|
// Add same transaction should fail
|
||||||
let tx_mempool_replay = MempoolTransaction { auth_tx: tx };
|
sequencer.mempool.push_item(tx);
|
||||||
sequencer.mempool.push_item(tx_mempool_replay);
|
|
||||||
let current_height = sequencer
|
let current_height = sequencer
|
||||||
.produce_new_block_with_mempool_transactions()
|
.produce_new_block_with_mempool_transactions()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|||||||
@ -1,20 +0,0 @@
|
|||||||
use common::merkle_tree_public::TreeHashType;
|
|
||||||
use mempool::mempoolitem::MemPoolItem;
|
|
||||||
|
|
||||||
pub struct MempoolTransaction {
|
|
||||||
pub auth_tx: nssa::PublicTransaction,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<nssa::PublicTransaction> for MempoolTransaction {
|
|
||||||
fn from(auth_tx: nssa::PublicTransaction) -> Self {
|
|
||||||
Self { auth_tx }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MemPoolItem for MempoolTransaction {
|
|
||||||
type Identifier = TreeHashType;
|
|
||||||
|
|
||||||
fn identifier(&self) -> Self::Identifier {
|
|
||||||
self.auth_tx.hash()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user