Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
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
8 changes: 7 additions & 1 deletion bridges/snowbridge/pallets/inbound-queue-v2/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,13 @@ pub mod pallet {
})?;

// Pay relayer reward
T::RewardPayment::register_reward(&relayer, T::DefaultRewardKind::get(), relayer_fee);
if !relayer_fee.is_zero() {
T::RewardPayment::register_reward(
&relayer,
T::DefaultRewardKind::get(),
relayer_fee,
);
}

// Mark message as received
Nonce::<T>::set(nonce.into());
Expand Down
10 changes: 10 additions & 0 deletions bridges/snowbridge/pallets/inbound-queue-v2/src/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,12 +161,22 @@ pub enum BridgeReward {
Snowbridge,
}

use std::cell::Cell;

thread_local! {
pub static REWARD_ALLOCATED: Cell<u128> = Cell::new(0);
}

impl RewardLedger<<mock::Test as frame_system::Config>::AccountId, BridgeReward, u128> for () {
fn register_reward(
_relayer: &<mock::Test as frame_system::Config>::AccountId,
_reward: BridgeReward,
_reward_balance: u128,
) {
REWARD_ALLOCATED.with(|counter| {
let current = counter.get();
counter.set(current + 1);
});
}
}

Expand Down
30 changes: 29 additions & 1 deletion bridges/snowbridge/pallets/inbound-queue-v2/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use super::*;
use crate::{mock::*, Error};
use codec::Encode;
use frame_support::{assert_noop, assert_ok};
use snowbridge_inbound_queue_primitives::{EventProof, Proof};
use snowbridge_inbound_queue_primitives::{v2::XcmPayload, EventProof, Proof};
use snowbridge_test_utils::mock_xcm::{set_charge_fees_override, set_sender_override};
use sp_keyring::sr25519::Keyring;
use sp_runtime::DispatchError;
Expand Down Expand Up @@ -44,6 +44,9 @@ fn test_submit_happy_path() {
)),
"no fees paid event emitted."
);

let final_value = REWARD_ALLOCATED.with(|counter| counter.get());
assert_eq!(final_value, 1, "Relayer reward should have been registered");
});
}

Expand Down Expand Up @@ -325,3 +328,28 @@ fn test_switch_operating_mode() {
assert_ok!(InboundQueue::submit(origin, Box::new(event)));
});
}

#[test]
fn zero_reward_does_not_register_reward() {
new_tester().execute_with(|| {
let relayer: AccountId = Keyring::Bob.into();
let origin = H160::random();
assert_ok!(InboundQueue::process_message(
relayer,
Message {
nonce: 0,
assets: vec![],
xcm: XcmPayload::Raw(vec![]),
claimer: None,
execution_fee: 1_000_000_000,
relayer_fee: 0,
gateway: GatewayAddress::get(),
origin,
value: 3_000_000_000,
}
));

let final_value = REWARD_ALLOCATED.with(|counter| counter.get());
assert_eq!(final_value, 0, "Zero relayer reward should not be registered");
});
}
Loading