From ff1ef294ccdd334e0b1a9184575beb4c643593c1 Mon Sep 17 00:00:00 2001 From: "Supernovahs.eth" <91280922+supernovahs@users.noreply.github.com> Date: Fri, 4 Aug 2023 19:27:14 +0530 Subject: [PATCH] (feat):add private variant in tx origin (#4059) Co-authored-by: Matthias Seitz --- crates/transaction-pool/src/noop.rs | 6 +++++- crates/transaction-pool/src/traits.rs | 5 +++++ crates/transaction-pool/src/validate/eth.rs | 7 +++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/crates/transaction-pool/src/noop.rs b/crates/transaction-pool/src/noop.rs index 37005019da..920a98b0d6 100644 --- a/crates/transaction-pool/src/noop.rs +++ b/crates/transaction-pool/src/noop.rs @@ -188,7 +188,11 @@ impl TransactionValidator for MockTransactionValidator { balance: Default::default(), state_nonce: 0, transaction, - propagate: if origin.is_local() { self.propagate_local } else { true }, + propagate: match origin { + TransactionOrigin::External => true, + TransactionOrigin::Local => self.propagate_local, + TransactionOrigin::Private => false, + }, } } } diff --git a/crates/transaction-pool/src/traits.rs b/crates/transaction-pool/src/traits.rs index fe5dcddc15..9bcda6ec40 100644 --- a/crates/transaction-pool/src/traits.rs +++ b/crates/transaction-pool/src/traits.rs @@ -404,6 +404,11 @@ pub enum TransactionOrigin { /// This is usually considered an "untrusted" source, for example received from another in the /// network. External, + /// Transaction is originated locally and is intended to remain private. + /// + /// This type of transaction should not be propagated to the network. It's meant for + /// private usage within the local node only. + Private, } // === impl TransactionOrigin === diff --git a/crates/transaction-pool/src/validate/eth.rs b/crates/transaction-pool/src/validate/eth.rs index bfcf04028a..168546a71a 100644 --- a/crates/transaction-pool/src/validate/eth.rs +++ b/crates/transaction-pool/src/validate/eth.rs @@ -461,8 +461,11 @@ where state_nonce: account.nonce, transaction, // by this point assume all external transactions should be propagated - propagate: matches!(origin, TransactionOrigin::External) || - self.propagate_local_transactions, + propagate: match origin { + TransactionOrigin::External => true, + TransactionOrigin::Local => self.propagate_local_transactions, + TransactionOrigin::Private => false, + }, } } }