mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 19:21:13 +00:00
Events to track extrinsic success (#640)
* Initial draft * Fixes * Extrinsic success events
This commit is contained in:
@@ -83,7 +83,7 @@ pub trait Trait: Eq + Clone {
|
||||
Hash = Self::Hash,
|
||||
Digest = Self::Digest
|
||||
>;
|
||||
type Event: Parameter + Member;
|
||||
type Event: Parameter + Member + From<Event>;
|
||||
}
|
||||
|
||||
decl_module! {
|
||||
@@ -110,6 +110,20 @@ pub struct EventRecord<E: Parameter + Member> {
|
||||
pub event: E,
|
||||
}
|
||||
|
||||
/// Event for the system module.
|
||||
#[derive(Encode, Decode, PartialEq, Eq, Clone)]
|
||||
#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))]
|
||||
pub enum Event {
|
||||
/// An extrinsic completed successfully.
|
||||
ExtrinsicSuccess,
|
||||
/// An extrinsic failed.
|
||||
ExtrinsicFailed,
|
||||
}
|
||||
|
||||
impl From<Event> for () {
|
||||
fn from(_: Event) -> () { () }
|
||||
}
|
||||
|
||||
decl_storage! {
|
||||
trait Store for Module<T: Trait> as System {
|
||||
|
||||
@@ -230,7 +244,11 @@ impl<T: Trait> Module<T> {
|
||||
}
|
||||
|
||||
/// To be called immediately after an extrinsic has been applied.
|
||||
pub fn note_applied_extrinsic() {
|
||||
pub fn note_applied_extrinsic(r: &Result<(), &'static str>) {
|
||||
Self::deposit_event(match r {
|
||||
Ok(_) => Event::ExtrinsicSuccess,
|
||||
Err(_) => Event::ExtrinsicFailed,
|
||||
}.into());
|
||||
<ExtrinsicIndex<T>>::put(<ExtrinsicIndex<T>>::get().unwrap_or_default() + 1u32);
|
||||
}
|
||||
|
||||
@@ -301,6 +319,15 @@ mod tests {
|
||||
type Event = u16;
|
||||
}
|
||||
|
||||
impl From<Event> for u16 {
|
||||
fn from(e: Event) -> u16 {
|
||||
match e {
|
||||
Event::ExtrinsicSuccess => 100,
|
||||
Event::ExtrinsicFailed => 101,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type System = Module<Test>;
|
||||
|
||||
fn new_test_ext() -> runtime_io::TestExternalities<KeccakHasher> {
|
||||
@@ -318,15 +345,15 @@ mod tests {
|
||||
|
||||
System::initialise(&2, &[0u8; 32].into(), &[0u8; 32].into());
|
||||
System::deposit_event(42u16);
|
||||
System::note_applied_extrinsic();
|
||||
System::deposit_event(69u16);
|
||||
System::note_applied_extrinsic();
|
||||
System::note_applied_extrinsic(&Ok(()));
|
||||
System::note_applied_extrinsic(&Err(""));
|
||||
System::note_finished_extrinsics();
|
||||
System::deposit_event(3u16);
|
||||
System::finalise();
|
||||
assert_eq!(System::events(), vec![
|
||||
EventRecord { phase: Phase::ApplyExtrinsic(0), event: 42u16 },
|
||||
EventRecord { phase: Phase::ApplyExtrinsic(1), event: 69u16 },
|
||||
EventRecord { phase: Phase::ApplyExtrinsic(0), event: 100u16 },
|
||||
EventRecord { phase: Phase::ApplyExtrinsic(1), event: 101u16 },
|
||||
EventRecord { phase: Phase::Finalization, event: 3u16 }
|
||||
]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user