Skip to content

Commit dc363ae

Browse files
committed
Merge branch 'main' of github.com:frequency-chain/frequency into feat/eth-bridging-development
2 parents 8ae1e22 + 3102201 commit dc363ae

File tree

6 files changed

+342
-91
lines changed

6 files changed

+342
-91
lines changed

pallets/msa/src/benchmarking.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,22 @@ mod benchmarks {
353353
Ok(())
354354
}
355355

356+
#[benchmark]
357+
fn reindex_offchain() -> Result<(), BenchmarkError> {
358+
let key = create_account::<T>("account", 0);
359+
let caller = whitelisted_caller();
360+
let msa_id = 1u64;
361+
let event = OffchainReplayEvent::MsaPallet(MsaOffchainReplayEvent::KeyReIndex {
362+
msa_id,
363+
index_key: Some(key),
364+
});
365+
366+
#[extrinsic_call]
367+
_(RawOrigin::Signed(caller), event);
368+
369+
Ok(())
370+
}
371+
356372
impl_benchmark_test_suite!(
357373
Msa,
358374
crate::tests::mock::new_test_ext_keystore(),

pallets/msa/src/lib.rs

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ pub mod pallet {
427427
Self::create_account(public_key, |_| -> DispatchResult { Ok(()) })?;
428428

429429
let event = Event::MsaCreated { msa_id: new_msa_id, key: new_public_key };
430-
offchain_index_event::<T>(&event, new_msa_id);
430+
offchain_index_event::<T>(Some(&event), new_msa_id);
431431
Self::deposit_event(event);
432432
Ok(())
433433
}
@@ -496,7 +496,7 @@ pub mod pallet {
496496

497497
let event =
498498
Event::MsaCreated { msa_id: new_delegator_msa_id, key: new_delegator_public_key };
499-
offchain_index_event::<T>(&event, new_delegator_msa_id);
499+
offchain_index_event::<T>(Some(&event), new_delegator_msa_id);
500500
Self::deposit_event(event);
501501
Self::deposit_event(Event::DelegationGranted {
502502
delegator_id: DelegatorId(new_delegator_msa_id),
@@ -688,7 +688,7 @@ pub mod pallet {
688688
msa_id,
689689
key: add_key_payload.new_public_key.clone(),
690690
};
691-
offchain_index_event::<T>(&event, msa_id);
691+
offchain_index_event::<T>(Some(&event), msa_id);
692692
Self::deposit_event(event);
693693
Ok(())
694694
},
@@ -725,7 +725,7 @@ pub mod pallet {
725725

726726
// Deposit the event
727727
let event = Event::PublicKeyDeleted { key: public_key_to_delete };
728-
offchain_index_event::<T>(&event, who_msa_id);
728+
offchain_index_event::<T>(Some(&event), who_msa_id);
729729
Self::deposit_event(event);
730730
},
731731
None => {
@@ -811,7 +811,7 @@ pub mod pallet {
811811
Some(msa_id) => {
812812
Self::delete_key_for_msa(msa_id, &who)?;
813813
let event = Event::PublicKeyDeleted { key: who };
814-
offchain_index_event::<T>(&event, msa_id);
814+
offchain_index_event::<T>(Some(&event), msa_id);
815815
Self::deposit_event(event);
816816
Self::deposit_event(Event::MsaRetired { msa_id });
817817
},
@@ -877,6 +877,35 @@ pub mod pallet {
877877
});
878878
Ok(())
879879
}
880+
881+
/// A generic endpoint to replay any offchain related event to fix any potential issues
882+
#[pallet::call_index(13)]
883+
#[pallet::weight(T::WeightInfo::reindex_offchain())]
884+
pub fn reindex_offchain(
885+
origin: OriginFor<T>,
886+
event: OffchainReplayEvent<T>,
887+
) -> DispatchResult {
888+
let _ = ensure_signed(origin)?;
889+
match event {
890+
OffchainReplayEvent::MsaPallet(MsaOffchainReplayEvent::KeyReIndex {
891+
msa_id,
892+
index_key,
893+
}) => {
894+
// don't need to check existence of msa_id since it would get checked on offchain side
895+
match index_key {
896+
Some(key) => {
897+
let event = Event::PublicKeyAdded { msa_id, key };
898+
offchain_index_event::<T>(Some(&event), msa_id);
899+
},
900+
None => {
901+
offchain_index_event::<T>(None, msa_id);
902+
},
903+
}
904+
},
905+
}
906+
907+
Ok(())
908+
}
880909
}
881910
}
882911

0 commit comments

Comments
 (0)