mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-23 08:31:16 +00:00
Don't allow bids for a ParaId where there is an overlapping lease period (#3361)
* add already leased Co-Authored-By: parity-processbot <> * add unit test Co-Authored-By: parity-processbot <> * add integration test and fix Co-Authored-By: parity-processbot <> * better doc Co-Authored-By: parity-processbot <> * Update runtime/common/src/slots.rs * Update runtime/common/src/slots.rs * Apply suggestions from code review Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Update runtime/common/src/integration_tests.rs * Update runtime/common/src/integration_tests.rs * cargo run --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_common::auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_common_auctions.rs * cargo run --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_common::auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_common_auctions.rs * cargo run --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_common::crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_common_crowdloan.rs * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_common::auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_common_auctions.rs * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_common::crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_common_crowdloan.rs * cargo run --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_common::slots --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_common_slots.rs * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_common::slots --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_common_slots.rs Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Parity Bot <admin@parity.io>
This commit is contained in:
@@ -149,6 +149,8 @@ pub mod pallet {
|
||||
NotAuction,
|
||||
/// Auction has already ended.
|
||||
AuctionEnded,
|
||||
/// The para is already leased out for part of this range.
|
||||
AlreadyLeasedOut,
|
||||
}
|
||||
|
||||
/// Number of auctions started so far.
|
||||
@@ -413,6 +415,9 @@ impl<T: Config> Pallet<T> {
|
||||
AuctionStatus::VrfDelay(_) => return Err(Error::<T>::AuctionEnded.into()),
|
||||
};
|
||||
|
||||
// We also make sure that the bid is not for any existing leases the para already has.
|
||||
ensure!(!T::Leaser::already_leased(para, first_slot, last_slot), Error::<T>::AlreadyLeasedOut);
|
||||
|
||||
// Our range.
|
||||
let range = SlotRange::new_bounded(first_lease_period, first_slot, last_slot)?;
|
||||
// Range as an array index.
|
||||
@@ -746,6 +751,18 @@ mod tests {
|
||||
fn lease_period_index() -> Self::LeasePeriod {
|
||||
(System::block_number() / Self::lease_period()).into()
|
||||
}
|
||||
|
||||
fn already_leased(
|
||||
para_id: ParaId,
|
||||
first_period: Self::LeasePeriod,
|
||||
last_period: Self::LeasePeriod
|
||||
) -> bool {
|
||||
leases().into_iter().any(|((para, period), _data)| {
|
||||
para == para_id &&
|
||||
first_period <= period &&
|
||||
period <= last_period
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
ord_parameter_types!{
|
||||
@@ -1306,6 +1323,42 @@ mod tests {
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn handle_bid_checks_existing_lease_periods() {
|
||||
new_test_ext().execute_with(|| {
|
||||
run_to_block(1);
|
||||
assert_ok!(Auctions::new_auction(Origin::signed(6), 5, 1));
|
||||
assert_ok!(Auctions::bid(Origin::signed(1), 0.into(), 1, 2, 3, 1));
|
||||
assert_eq!(Balances::reserved_balance(1), 1);
|
||||
assert_eq!(Balances::free_balance(1), 9);
|
||||
run_to_block(9);
|
||||
|
||||
assert_eq!(leases(), vec![
|
||||
((0.into(), 2), LeaseData { leaser: 1, amount: 1 }),
|
||||
((0.into(), 3), LeaseData { leaser: 1, amount: 1 }),
|
||||
]);
|
||||
assert_eq!(TestLeaser::deposit_held(0.into(), &1), 1);
|
||||
|
||||
// Para 1 just won an auction above and won some lease periods.
|
||||
// No bids can work which overlap these periods.
|
||||
assert_ok!(Auctions::new_auction(Origin::signed(6), 5, 1));
|
||||
assert_noop!(
|
||||
Auctions::bid(Origin::signed(1), 0.into(), 2, 1, 4, 1),
|
||||
Error::<Test>::AlreadyLeasedOut,
|
||||
);
|
||||
assert_noop!(
|
||||
Auctions::bid(Origin::signed(1), 0.into(), 2, 1, 2, 1),
|
||||
Error::<Test>::AlreadyLeasedOut,
|
||||
);
|
||||
assert_noop!(
|
||||
Auctions::bid(Origin::signed(1), 0.into(), 2, 3, 4, 1),
|
||||
Error::<Test>::AlreadyLeasedOut,
|
||||
);
|
||||
// This is okay, not an overlapping bid.
|
||||
assert_ok!(Auctions::bid(Origin::signed(1), 0.into(), 2, 1, 1, 1));
|
||||
});
|
||||
}
|
||||
|
||||
// Here we will test that taking only 10 samples during the ending period works as expected.
|
||||
#[test]
|
||||
fn less_winning_samples_work() {
|
||||
|
||||
Reference in New Issue
Block a user