Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Decrease reputation on bad transactions
  • Loading branch information
arkpar committed Nov 6, 2019
commit d8214899c57a7ab3126c1ba8fa26d2ae75dc8bd6
7 changes: 5 additions & 2 deletions core/network/src/protocol.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,9 @@ const UNEXPECTED_STATUS_REPUTATION_CHANGE: i32 = -(1 << 20);
/// Reputation change when we are a light client and a peer is behind us.
const PEER_BEHIND_US_LIGHT_REPUTATION_CHANGE: i32 = -(1 << 8);
/// Reputation change when a peer sends us an extrinsic that we didn't know about.
const NEW_EXTRINSIC_REPUTATION_CHANGE: i32 = 1 << 7;
const GOOD_EXTRINSIC_REPUTATION_CHANGE: i32 = 1 << 7;
/// Reputation change when a peer sends us a bad extrinsic.
const BAD_EXTRINSIC_REPUTATION_CHANGE: i32 = -(1 << 12);
/// We sent an RPC query to the given node, but it failed.
const RPC_FAILED_REPUTATION_CHANGE: i32 = -(1 << 12);
/// We received a message that failed to decode.
Expand Down Expand Up @@ -1019,7 +1021,8 @@ impl<B: BlockT, S: NetworkSpecialization<B>, H: ExHashT> Protocol<B, S, H> {
self.transaction_pool.import(
self.peerset_handle.clone().into(),
who.clone(),
NEW_EXTRINSIC_REPUTATION_CHANGE,
GOOD_EXTRINSIC_REPUTATION_CHANGE,
BAD_EXTRINSIC_REPUTATION_CHANGE,
t,
);
}
Expand Down
3 changes: 2 additions & 1 deletion core/network/src/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ pub trait TransactionPool<H: ExHashT, B: BlockT>: Send + Sync {
&self,
report_handle: ReportHandle,
who: PeerId,
reputation_change: i32,
reputation_change_good: i32,
reputation_change_bad: i32,
transaction: B::Extrinsic,
);
/// Notify the pool about transactions broadcast.
Expand Down
9 changes: 8 additions & 1 deletion core/network/src/test/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,14 @@ impl TransactionPool<Hash, Block> for EmptyTransactionPool {
Hash::default()
}

fn import(&self, _report_handle: ReportHandle, _who: PeerId, _rep_change: i32, _transaction: Extrinsic) {}
fn import(
&self,
_report_handle: ReportHandle,
_who: PeerId,
_rep_change_good: i32,
_rep_change_bad: i32,
_transaction: Extrinsic
) {}

fn on_broadcasted(&self, _: HashMap<Hash, Vec<String>>) {}
}
Expand Down
22 changes: 16 additions & 6 deletions core/service/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -615,7 +615,14 @@ where
self.pool.hash_of(transaction)
}

fn import(&self, report_handle: ReportHandle, who: PeerId, reputation_change: i32, transaction: B::Extrinsic) {
fn import(
&self,
report_handle: ReportHandle,
who: PeerId,
reputation_change_good: i32,
reputation_change_bad: i32,
transaction: B::Extrinsic
) {
if !self.imports_external_transactions {
debug!("Transaction rejected");
return;
Expand All @@ -629,11 +636,14 @@ where
let import_future = import_future
.then(move |import_result| {
match import_result {
Ok(_) => report_handle.report_peer(who, reputation_change),
Err(e) => match e.into_pool_error() {
Ok(txpool::error::Error::AlreadyImported(_)) => (),
Ok(e) => debug!("Error adding transaction to the pool: {:?}", e),
Err(e) => debug!("Error converting pool error: {:?}", e),
Ok(_) => report_handle.report_peer(who, reputation_change_good),
Err(e) => {
report_handle.report_peer(who, reputation_change_bad);
match e.into_pool_error() {
Ok(txpool::error::Error::AlreadyImported(_)) => (),
Ok(e) => debug!("Error adding transaction to the pool: {:?}", e),
Err(e) => debug!("Error converting pool error: {:?}", e),
}
}
}
ready(Ok(()))
Expand Down