Skip to content

Commit df4fba5

Browse files
pepyakinMTDK1
authored andcommitted
Light client friendly events (paritytech#2491)
* Sketch of indexed events. * Get EventIndex by holding another variable. * Add some docs. * Use DoubleMap to store reverse topic index * Implement StorageDoubleMap::append * Use append for EventTopics. * Refactor. * Avoid `mutate` * Docs. * Add topics to EventRecord * Update tests. * Rebuild. * Bump version. * Event topics test. * Mix in BlockNumber to distinguish updates * Fix srml-system test. * Post merge fixes. * Comments/TODO.
1 parent de72caa commit df4fba5

File tree

8 files changed

+325
-56
lines changed

8 files changed

+325
-56
lines changed

node/executor/src/lib.rs

+30-15
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,8 @@ mod tests {
490490
assert_eq!(System::events(), vec![
491491
EventRecord {
492492
phase: Phase::ApplyExtrinsic(0),
493-
event: Event::system(system::Event::ExtrinsicSuccess)
493+
event: Event::system(system::Event::ExtrinsicSuccess),
494+
topics: vec![],
494495
},
495496
EventRecord {
496497
phase: Phase::ApplyExtrinsic(1),
@@ -499,23 +500,28 @@ mod tests {
499500
bob().into(),
500501
69,
501502
0
502-
))
503+
)),
504+
topics: vec![],
503505
},
504506
EventRecord {
505507
phase: Phase::ApplyExtrinsic(1),
506-
event: Event::system(system::Event::ExtrinsicSuccess)
508+
event: Event::system(system::Event::ExtrinsicSuccess),
509+
topics: vec![],
507510
},
508511
EventRecord {
509512
phase: Phase::Finalization,
510-
event: Event::treasury(treasury::RawEvent::Spending(0))
513+
event: Event::treasury(treasury::RawEvent::Spending(0)),
514+
topics: vec![],
511515
},
512516
EventRecord {
513517
phase: Phase::Finalization,
514-
event: Event::treasury(treasury::RawEvent::Burnt(0))
518+
event: Event::treasury(treasury::RawEvent::Burnt(0)),
519+
topics: vec![],
515520
},
516521
EventRecord {
517522
phase: Phase::Finalization,
518-
event: Event::treasury(treasury::RawEvent::Rollover(0))
523+
event: Event::treasury(treasury::RawEvent::Rollover(0)),
524+
topics: vec![],
519525
},
520526
]);
521527
});
@@ -537,7 +543,8 @@ mod tests {
537543
assert_eq!(System::events(), vec![
538544
EventRecord {
539545
phase: Phase::ApplyExtrinsic(0),
540-
event: Event::system(system::Event::ExtrinsicSuccess)
546+
event: Event::system(system::Event::ExtrinsicSuccess),
547+
topics: vec![],
541548
},
542549
EventRecord {
543550
phase: Phase::ApplyExtrinsic(1),
@@ -548,11 +555,13 @@ mod tests {
548555
5,
549556
0
550557
)
551-
)
558+
),
559+
topics: vec![],
552560
},
553561
EventRecord {
554562
phase: Phase::ApplyExtrinsic(1),
555-
event: Event::system(system::Event::ExtrinsicSuccess)
563+
event: Event::system(system::Event::ExtrinsicSuccess),
564+
topics: vec![],
556565
},
557566
EventRecord {
558567
phase: Phase::ApplyExtrinsic(2),
@@ -563,27 +572,33 @@ mod tests {
563572
15,
564573
0
565574
)
566-
)
575+
),
576+
topics: vec![],
567577
},
568578
EventRecord {
569579
phase: Phase::ApplyExtrinsic(2),
570-
event: Event::system(system::Event::ExtrinsicSuccess)
580+
event: Event::system(system::Event::ExtrinsicSuccess),
581+
topics: vec![],
571582
},
572583
EventRecord {
573584
phase: Phase::Finalization,
574-
event: Event::treasury(treasury::RawEvent::Spending(0))
585+
event: Event::treasury(treasury::RawEvent::Spending(0)),
586+
topics: vec![],
575587
},
576588
EventRecord {
577589
phase: Phase::Finalization,
578-
event: Event::treasury(treasury::RawEvent::Burnt(0))
590+
event: Event::treasury(treasury::RawEvent::Burnt(0)),
591+
topics: vec![],
579592
},
580593
EventRecord {
581594
phase: Phase::Finalization,
582-
event: Event::treasury(treasury::RawEvent::Rollover(0))
595+
event: Event::treasury(treasury::RawEvent::Rollover(0)),
596+
topics: vec![],
583597
},
584598
EventRecord {
585599
phase: Phase::Finalization,
586-
event: Event::session(session::RawEvent::NewSession(1))
600+
event: Event::session(session::RawEvent::NewSession(1)),
601+
topics: vec![],
587602
},
588603
]);
589604
});

srml/contract/src/tests.rs

+28-10
Original file line numberDiff line numberDiff line change
@@ -363,28 +363,34 @@ fn instantiate_and_call_and_deposit_event() {
363363
EventRecord {
364364
phase: Phase::ApplyExtrinsic(0),
365365
event: MetaEvent::balances(balances::RawEvent::NewAccount(1, 1_000_000)),
366+
topics: vec![],
366367
},
367368
EventRecord {
368369
phase: Phase::ApplyExtrinsic(0),
369370
event: MetaEvent::contract(RawEvent::CodeStored(HASH_RETURN_FROM_START_FN.into())),
371+
topics: vec![],
370372
},
371373
EventRecord {
372374
phase: Phase::ApplyExtrinsic(0),
373375
event: MetaEvent::balances(
374376
balances::RawEvent::NewAccount(BOB, 100)
375-
)
377+
),
378+
topics: vec![],
376379
},
377380
EventRecord {
378381
phase: Phase::ApplyExtrinsic(0),
379-
event: MetaEvent::contract(RawEvent::Transfer(ALICE, BOB, 100))
382+
event: MetaEvent::contract(RawEvent::Transfer(ALICE, BOB, 100)),
383+
topics: vec![],
380384
},
381385
EventRecord {
382386
phase: Phase::ApplyExtrinsic(0),
383-
event: MetaEvent::contract(RawEvent::Contract(BOB, vec![1, 2, 3, 4]))
387+
event: MetaEvent::contract(RawEvent::Contract(BOB, vec![1, 2, 3, 4])),
388+
topics: vec![],
384389
},
385390
EventRecord {
386391
phase: Phase::ApplyExtrinsic(0),
387-
event: MetaEvent::contract(RawEvent::Instantiated(ALICE, BOB))
392+
event: MetaEvent::contract(RawEvent::Instantiated(ALICE, BOB)),
393+
topics: vec![],
388394
}
389395
]);
390396

@@ -434,10 +440,12 @@ fn dispatch_call() {
434440
EventRecord {
435441
phase: Phase::ApplyExtrinsic(0),
436442
event: MetaEvent::balances(balances::RawEvent::NewAccount(1, 1_000_000)),
443+
topics: vec![],
437444
},
438445
EventRecord {
439446
phase: Phase::ApplyExtrinsic(0),
440447
event: MetaEvent::contract(RawEvent::CodeStored(HASH_DISPATCH_CALL.into())),
448+
topics: vec![],
441449
},
442450
]);
443451

@@ -461,44 +469,52 @@ fn dispatch_call() {
461469
EventRecord {
462470
phase: Phase::ApplyExtrinsic(0),
463471
event: MetaEvent::balances(balances::RawEvent::NewAccount(1, 1_000_000)),
472+
topics: vec![],
464473
},
465474
EventRecord {
466475
phase: Phase::ApplyExtrinsic(0),
467476
event: MetaEvent::contract(RawEvent::CodeStored(HASH_DISPATCH_CALL.into())),
477+
topics: vec![],
468478
},
469479
EventRecord {
470480
phase: Phase::ApplyExtrinsic(0),
471481
event: MetaEvent::balances(
472482
balances::RawEvent::NewAccount(BOB, 100)
473-
)
483+
),
484+
topics: vec![],
474485
},
475486
EventRecord {
476487
phase: Phase::ApplyExtrinsic(0),
477-
event: MetaEvent::contract(RawEvent::Transfer(ALICE, BOB, 100))
488+
event: MetaEvent::contract(RawEvent::Transfer(ALICE, BOB, 100)),
489+
topics: vec![],
478490
},
479491
EventRecord {
480492
phase: Phase::ApplyExtrinsic(0),
481-
event: MetaEvent::contract(RawEvent::Instantiated(ALICE, BOB))
493+
event: MetaEvent::contract(RawEvent::Instantiated(ALICE, BOB)),
494+
topics: vec![],
482495
},
483496

484497
// Dispatching the call.
485498
EventRecord {
486499
phase: Phase::ApplyExtrinsic(0),
487500
event: MetaEvent::balances(
488501
balances::RawEvent::NewAccount(CHARLIE, 50)
489-
)
502+
),
503+
topics: vec![],
490504
},
491505
EventRecord {
492506
phase: Phase::ApplyExtrinsic(0),
493507
event: MetaEvent::balances(
494508
balances::RawEvent::Transfer(BOB, CHARLIE, 50, 0)
495-
)
509+
),
510+
topics: vec![],
496511
},
497512

498513
// Event emited as a result of dispatch.
499514
EventRecord {
500515
phase: Phase::ApplyExtrinsic(0),
501-
event: MetaEvent::contract(RawEvent::Dispatched(BOB, true))
516+
event: MetaEvent::contract(RawEvent::Dispatched(BOB, true)),
517+
topics: vec![],
502518
}
503519
]);
504520
},
@@ -644,10 +660,12 @@ fn set_rent_hash_and_code() {
644660
EventRecord {
645661
phase: Phase::ApplyExtrinsic(0),
646662
event: MetaEvent::balances(balances::RawEvent::NewAccount(1, 1_000_000)),
663+
topics: vec![],
647664
},
648665
EventRecord {
649666
phase: Phase::ApplyExtrinsic(0),
650667
event: MetaEvent::contract(RawEvent::CodeStored(HASH_SET_RENT.into())),
668+
topics: vec![],
651669
},
652670
]);
653671
}

srml/council/src/motions.rs

+20-10
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ mod tests {
234234
assert_eq!(System::events(), vec![
235235
EventRecord {
236236
phase: Phase::ApplyExtrinsic(0),
237-
event: OuterEvent::motions(RawEvent::Proposed(1, 0, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), 3))
237+
event: OuterEvent::motions(RawEvent::Proposed(1, 0, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), 3)),
238+
topics: vec![],
238239
}
239240
]);
240241
});
@@ -287,11 +288,13 @@ mod tests {
287288
assert_eq!(System::events(), vec![
288289
EventRecord {
289290
phase: Phase::ApplyExtrinsic(0),
290-
event: OuterEvent::motions(RawEvent::Proposed(1, 0, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), 2))
291+
event: OuterEvent::motions(RawEvent::Proposed(1, 0, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), 2)),
292+
topics: vec![],
291293
},
292294
EventRecord {
293295
phase: Phase::ApplyExtrinsic(0),
294-
event: OuterEvent::motions(RawEvent::Voted(1, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), false, 0, 1))
296+
event: OuterEvent::motions(RawEvent::Voted(1, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), false, 0, 1)),
297+
topics: vec![],
295298
}
296299
]);
297300
});
@@ -309,15 +312,18 @@ mod tests {
309312
assert_eq!(System::events(), vec![
310313
EventRecord {
311314
phase: Phase::ApplyExtrinsic(0),
312-
event: OuterEvent::motions(RawEvent::Proposed(1, 0, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), 3))
315+
event: OuterEvent::motions(RawEvent::Proposed(1, 0, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), 3)),
316+
topics: vec![],
313317
},
314318
EventRecord {
315319
phase: Phase::ApplyExtrinsic(0),
316-
event: OuterEvent::motions(RawEvent::Voted(2, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), false, 1, 1))
320+
event: OuterEvent::motions(RawEvent::Voted(2, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), false, 1, 1)),
321+
topics: vec![],
317322
},
318323
EventRecord {
319324
phase: Phase::ApplyExtrinsic(0),
320-
event: OuterEvent::motions(RawEvent::Disapproved(hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into()))
325+
event: OuterEvent::motions(RawEvent::Disapproved(hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into())),
326+
topics: vec![],
321327
}
322328
]);
323329
});
@@ -335,19 +341,23 @@ mod tests {
335341
assert_eq!(System::events(), vec![
336342
EventRecord {
337343
phase: Phase::ApplyExtrinsic(0),
338-
event: OuterEvent::motions(RawEvent::Proposed(1, 0, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), 2))
344+
event: OuterEvent::motions(RawEvent::Proposed(1, 0, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), 2)),
345+
topics: vec![],
339346
},
340347
EventRecord {
341348
phase: Phase::ApplyExtrinsic(0),
342-
event: OuterEvent::motions(RawEvent::Voted(2, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), true, 2, 0))
349+
event: OuterEvent::motions(RawEvent::Voted(2, hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), true, 2, 0)),
350+
topics: vec![],
343351
},
344352
EventRecord {
345353
phase: Phase::ApplyExtrinsic(0),
346-
event: OuterEvent::motions(RawEvent::Approved(hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into()))
354+
event: OuterEvent::motions(RawEvent::Approved(hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into())),
355+
topics: vec![],
347356
},
348357
EventRecord {
349358
phase: Phase::ApplyExtrinsic(0),
350-
event: OuterEvent::motions(RawEvent::Executed(hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), false))
359+
event: OuterEvent::motions(RawEvent::Executed(hex!["cd0b662a49f004093b80600415cf4126399af0d27ed6c185abeb1469c17eb5bf"].into(), false)),
360+
topics: vec![],
351361
}
352362
]);
353363
});

srml/grandpa/src/tests.rs

+2
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ fn authorities_change_logged() {
4747
EventRecord {
4848
phase: Phase::Finalization,
4949
event: RawEvent::NewAuthorities(vec![(4, 1), (5, 1), (6, 1)]).into(),
50+
topics: vec![],
5051
},
5152
]);
5253
});
@@ -77,6 +78,7 @@ fn authorities_change_logged_after_delay() {
7778
EventRecord {
7879
phase: Phase::Finalization,
7980
event: RawEvent::NewAuthorities(vec![(4, 1), (5, 1), (6, 1)]).into(),
81+
topics: vec![],
8082
},
8183
]);
8284
});

srml/support/src/lib.rs

+31
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ mod tests {
238238
pub DataDM config(test_config) build(|_| vec![(15u32, 16u32, 42u64)]): double_map hasher(twox_64_concat) u32, blake2_256(u32) => u64;
239239
pub GenericDataDM: double_map T::BlockNumber, twox_128(T::BlockNumber) => T::BlockNumber;
240240
pub GenericData2DM: double_map T::BlockNumber, twox_256(T::BlockNumber) => Option<T::BlockNumber>;
241+
pub AppendableDM: double_map u32, blake2_256(T::BlockNumber) => Vec<u32>;
241242
}
242243
}
243244

@@ -367,6 +368,21 @@ mod tests {
367368
assert_eq!(DoubleMap::get(key1, key2+1), 0u64);
368369
assert_eq!(DoubleMap::get(key1+1, key2), 4u64);
369370
assert_eq!(DoubleMap::get(key1+1, key2+1), 4u64);
371+
372+
});
373+
}
374+
375+
#[test]
376+
fn double_map_append_should_work() {
377+
with_externalities(&mut new_test_ext(), || {
378+
type DoubleMap = AppendableDM<Test>;
379+
380+
let key1 = 17u32;
381+
let key2 = 18u32;
382+
383+
DoubleMap::insert(key1, key2, vec![1]);
384+
DoubleMap::append(key1, key2, &[2, 3]);
385+
assert_eq!(DoubleMap::get(key1, key2), vec![1, 2, 3]);
370386
});
371387
}
372388

@@ -453,6 +469,21 @@ mod tests {
453469
),
454470
documentation: DecodeDifferent::Encode(&[]),
455471
},
472+
StorageFunctionMetadata {
473+
name: DecodeDifferent::Encode("AppendableDM"),
474+
modifier: StorageFunctionModifier::Default,
475+
ty: StorageFunctionType::DoubleMap{
476+
hasher: StorageHasher::Blake2_256,
477+
key1: DecodeDifferent::Encode("u32"),
478+
key2: DecodeDifferent::Encode("T::BlockNumber"),
479+
value: DecodeDifferent::Encode("Vec<u32>"),
480+
key2_hasher: DecodeDifferent::Encode("blake2_256"),
481+
},
482+
default: DecodeDifferent::Encode(
483+
DefaultByteGetter(&__GetByteStructGenericData2DM(PhantomData::<Test>))
484+
),
485+
documentation: DecodeDifferent::Encode(&[]),
486+
},
456487
])
457488
};
458489

0 commit comments

Comments
 (0)