Skip to content

Commit 036c804

Browse files
Merge branch 'main' into snap-sync-refactoring
2 parents 57c7ef6 + 18dd43a commit 036c804

File tree

57 files changed

+3494
-1504
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+3494
-1504
lines changed

Cargo.lock

Lines changed: 50 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/pallet-domains/src/benchmarking.rs

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ use frame_system::{Pallet as System, RawOrigin};
2828
use sp_core::crypto::{Ss58Codec, UncheckedFrom};
2929
use sp_core::ByteArray;
3030
use sp_domains::{
31-
dummy_opaque_bundle, ConfirmedDomainBlock, DomainId, ExecutionReceipt, OperatorAllowList,
32-
OperatorId, OperatorPublicKey, OperatorSignature, PermissionedActionAllowedBy, RuntimeType,
31+
dummy_opaque_bundle, BlockFees, DomainId, ExecutionReceipt, OperatorAllowList, OperatorId,
32+
OperatorPublicKey, OperatorSignature, PermissionedActionAllowedBy, RuntimeType, Transfers,
3333
};
3434
use sp_domains_fraud_proof::fraud_proof::FraudProof;
3535
use sp_runtime::traits::{CheckedAdd, One, Zero};
@@ -189,7 +189,7 @@ mod benchmarks {
189189

190190
/// Benchmark prune bad ER and slash the submitter based on the number of submitter
191191
#[benchmark]
192-
fn handle_bad_receipt(n: Linear<1, MAX_BUNLDE_PER_BLOCK>) {
192+
fn handle_bad_receipt(n: Linear<1, MAX_BUNDLE_PER_BLOCK>) {
193193
let minimum_nominator_stake = T::MinNominatorStake::get();
194194
let domain_id = register_domain::<T>();
195195
let mut operator_ids = Vec::new();
@@ -246,8 +246,8 @@ mod benchmarks {
246246
/// in this block
247247
#[benchmark]
248248
fn confirm_domain_block(
249-
n: Linear<1, MAX_BUNLDE_PER_BLOCK>,
250-
s: Linear<0, MAX_BUNLDE_PER_BLOCK>,
249+
n: Linear<1, MAX_BUNDLE_PER_BLOCK>,
250+
s: Linear<0, MAX_BUNDLE_PER_BLOCK>,
251251
) {
252252
let minimum_nominator_stake = T::MinNominatorStake::get();
253253
let operator_rewards =
@@ -314,7 +314,7 @@ mod benchmarks {
314314
/// Benchmark `operator_take_reward_tax_and_stake` based on the number of operator who has reward
315315
/// in the current epoch
316316
#[benchmark]
317-
fn operator_reward_tax_and_restake(n: Linear<1, MAX_BUNLDE_PER_BLOCK>) {
317+
fn operator_reward_tax_and_restake(n: Linear<1, MAX_BUNDLE_PER_BLOCK>) {
318318
let minimum_nominator_stake = T::MinNominatorStake::get();
319319
let operator_rewards =
320320
T::Currency::minimum_balance().saturating_mul(BalanceOf::<T>::from(1000u32));
@@ -753,19 +753,26 @@ mod benchmarks {
753753
do_finalize_domain_epoch_staking::<T>(domain_id)
754754
.expect("finalize domain staking should success");
755755

756-
// Update the `LatestConfirmedDomainBlock` so unlock can success
756+
// Update the `LatestConfirmedDomainExecutionReceipt` so unlock can success
757757
let confirmed_domain_block_number =
758758
Pallet::<T>::latest_confirmed_domain_block_number(domain_id)
759759
+ T::StakeWithdrawalLockingPeriod::get()
760760
+ One::one();
761-
LatestConfirmedDomainBlock::<T>::insert(
761+
LatestConfirmedDomainExecutionReceipt::<T>::insert(
762762
domain_id,
763-
ConfirmedDomainBlock {
764-
block_number: confirmed_domain_block_number,
765-
block_hash: Default::default(),
766-
parent_block_receipt_hash: Default::default(),
767-
state_root: Default::default(),
768-
extrinsics_root: Default::default(),
763+
ExecutionReceiptOf::<T> {
764+
domain_block_number: confirmed_domain_block_number,
765+
domain_block_hash: Default::default(),
766+
domain_block_extrinsic_root: Default::default(),
767+
parent_domain_block_receipt_hash: Default::default(),
768+
consensus_block_number: Default::default(),
769+
consensus_block_hash: Default::default(),
770+
inboxed_bundles: vec![],
771+
final_state_root: Default::default(),
772+
execution_trace: vec![],
773+
execution_trace_root: Default::default(),
774+
block_fees: BlockFees::default(),
775+
transfers: Transfers::default(),
769776
},
770777
);
771778

@@ -797,19 +804,26 @@ mod benchmarks {
797804
operator_id,
798805
));
799806

800-
// Update the `LatestConfirmedDomainBlock` so unlock can success
807+
// Update the `LatestConfirmedDomainExecutionReceipt` so unlock can success
801808
let confirmed_domain_block_number =
802809
Pallet::<T>::latest_confirmed_domain_block_number(domain_id)
803810
+ T::StakeWithdrawalLockingPeriod::get()
804811
+ One::one();
805-
LatestConfirmedDomainBlock::<T>::insert(
812+
LatestConfirmedDomainExecutionReceipt::<T>::insert(
806813
domain_id,
807-
ConfirmedDomainBlock {
808-
block_number: confirmed_domain_block_number,
809-
block_hash: Default::default(),
810-
parent_block_receipt_hash: Default::default(),
811-
state_root: Default::default(),
812-
extrinsics_root: Default::default(),
814+
ExecutionReceiptOf::<T> {
815+
domain_block_number: confirmed_domain_block_number,
816+
domain_block_hash: Default::default(),
817+
domain_block_extrinsic_root: Default::default(),
818+
parent_domain_block_receipt_hash: Default::default(),
819+
consensus_block_number: Default::default(),
820+
consensus_block_hash: Default::default(),
821+
inboxed_bundles: vec![],
822+
final_state_root: Default::default(),
823+
execution_trace: vec![],
824+
execution_trace_root: Default::default(),
825+
block_fees: BlockFees::default(),
826+
transfers: Transfers::default(),
813827
},
814828
);
815829

crates/pallet-domains/src/block_tree.rs

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::{
77
BalanceOf, BlockTree, BlockTreeNodeFor, BlockTreeNodes, Config, ConsensusBlockHash,
88
DomainBlockNumberFor, DomainHashingFor, DomainRuntimeUpgradeRecords, ExecutionInbox,
99
ExecutionReceiptOf, HeadReceiptExtended, HeadReceiptNumber, InboxedBundleAuthor,
10-
LatestConfirmedDomainBlock, LatestSubmittedER, Pallet, ReceiptHashFor,
10+
LatestConfirmedDomainExecutionReceipt, LatestSubmittedER, Pallet, ReceiptHashFor,
1111
};
1212
#[cfg(not(feature = "std"))]
1313
use alloc::vec::Vec;
@@ -18,8 +18,8 @@ use scale_info::TypeInfo;
1818
use sp_core::Get;
1919
use sp_domains::merkle_tree::MerkleTree;
2020
use sp_domains::{
21-
ChainId, ConfirmedDomainBlock, DomainId, DomainsTransfersTracker, ExecutionReceipt,
22-
OnChainRewards, OperatorId, Transfers,
21+
ChainId, DomainId, DomainsTransfersTracker, ExecutionReceipt, OnChainRewards, OperatorId,
22+
Transfers,
2323
};
2424
use sp_runtime::traits::{BlockNumberProvider, CheckedSub, One, Saturating, Zero};
2525
use sp_std::cmp::Ordering;
@@ -371,6 +371,11 @@ pub(crate) fn process_execution_receipt<T: Config>(
371371
// its receipt's `extrinsics_root` anymore.
372372
let _ = ExecutionInbox::<T>::clear_prefix((domain_id, to_prune), u32::MAX, None);
373373

374+
LatestConfirmedDomainExecutionReceipt::<T>::insert(
375+
domain_id,
376+
execution_receipt.clone(),
377+
);
378+
374379
ConsensusBlockHash::<T>::remove(
375380
domain_id,
376381
execution_receipt.consensus_block_number,
@@ -405,18 +410,6 @@ pub(crate) fn process_execution_receipt<T: Config>(
405410
T::OnChainRewards::on_chain_rewards(chain_id, reward)
406411
});
407412

408-
LatestConfirmedDomainBlock::<T>::insert(
409-
domain_id,
410-
ConfirmedDomainBlock {
411-
block_number: to_prune,
412-
block_hash: execution_receipt.domain_block_hash,
413-
parent_block_receipt_hash: execution_receipt
414-
.parent_domain_block_receipt_hash,
415-
state_root: execution_receipt.final_state_root,
416-
extrinsics_root: execution_receipt.domain_block_extrinsic_root,
417-
},
418-
);
419-
420413
return Ok(Some(ConfirmedDomainBlockInfo {
421414
domain_block_number: to_prune,
422415
operator_ids,
@@ -559,16 +552,7 @@ pub(crate) fn import_genesis_receipt<T: Config>(
559552
let er_hash = genesis_receipt.hash::<DomainHashingFor<T>>();
560553
let domain_block_number = genesis_receipt.domain_block_number;
561554

562-
LatestConfirmedDomainBlock::<T>::insert(
563-
domain_id,
564-
ConfirmedDomainBlock {
565-
block_number: domain_block_number,
566-
block_hash: genesis_receipt.domain_block_hash,
567-
parent_block_receipt_hash: Default::default(),
568-
state_root: genesis_receipt.final_state_root,
569-
extrinsics_root: genesis_receipt.domain_block_extrinsic_root,
570-
},
571-
);
555+
LatestConfirmedDomainExecutionReceipt::<T>::insert(domain_id, genesis_receipt.clone());
572556

573557
let block_tree_node = BlockTreeNode {
574558
execution_receipt: genesis_receipt,
@@ -616,10 +600,12 @@ mod tests {
616600
use crate::tests::{
617601
create_dummy_bundle_with_receipts, create_dummy_receipt, extend_block_tree,
618602
extend_block_tree_from_zero, get_block_tree_node_at, new_test_ext_with_extensions,
619-
register_genesis_domain, run_to_block, BlockTreePruningDepth, Test,
603+
register_genesis_domain, run_to_block, BlockTreePruningDepth, Domains, Test,
620604
};
605+
use crate::FrozenDomains;
621606
use frame_support::dispatch::RawOrigin;
622607
use frame_support::{assert_err, assert_ok};
608+
use frame_system::Origin;
623609
use sp_core::H256;
624610
use sp_domains::{BundleDigest, InboxedBundle, InvalidBundleType};
625611

@@ -971,6 +957,40 @@ mod tests {
971957
});
972958
}
973959

960+
#[test]
961+
fn test_prune_domain_execution_receipt() {
962+
let creator = 0u128;
963+
let operator_id = 1u64;
964+
let mut ext = new_test_ext_with_extensions();
965+
ext.execute_with(|| {
966+
let domain_id = register_genesis_domain(creator, vec![operator_id]);
967+
let _next_receipt = extend_block_tree_from_zero(domain_id, operator_id, 3);
968+
let head_receipt_number = HeadReceiptNumber::<Test>::get(domain_id);
969+
970+
// freeze domain
971+
assert!(!FrozenDomains::<Test>::get().contains(&domain_id));
972+
Domains::freeze_domain(Origin::<Test>::Root.into(), domain_id).unwrap();
973+
assert!(FrozenDomains::<Test>::get().contains(&domain_id));
974+
975+
// prune execution recept
976+
let head_receipt_hash = BlockTree::<Test>::get(domain_id, head_receipt_number).unwrap();
977+
Domains::prune_domain_execution_receipt(
978+
Origin::<Test>::Root.into(),
979+
domain_id,
980+
head_receipt_hash,
981+
)
982+
.unwrap();
983+
assert_eq!(
984+
HeadReceiptNumber::<Test>::get(domain_id),
985+
head_receipt_number - 1
986+
);
987+
988+
// unfreeze domain
989+
Domains::unfreeze_domain(Origin::<Test>::Root.into(), domain_id).unwrap();
990+
assert!(!FrozenDomains::<Test>::get().contains(&domain_id));
991+
})
992+
}
993+
974994
#[test]
975995
fn test_invalid_receipt() {
976996
let creator = 0u128;

0 commit comments

Comments
 (0)