Referendum proposal's metadata (#12568)

* referenda metadata

* todo comment

* remove TODO, update rustdocs

* referenda clear_metadata origin signed or root

* referenda metadata unit tests

* drop schema type for referenda metadata

* remove metadata type

* referenda metadata benches

* note different preimages

* metadata for democracy pallet

* metadata democracy pallet tests and benches

* fix cargo clippy

* update docs

* ".git/.scripts/bench-bot.sh" pallet dev pallet_democracy

* ".git/.scripts/bench-bot.sh" pallet dev pallet_referenda

* Update the doc frame/democracy/src/lib.rs

Co-authored-by: Roman Useinov <roman.useinov@gmail.com>

* Update the doc frame/democracy/src/lib.rs

Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com>

* reference instead clone for take

Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com>

* error rename BadMetadata to PreimageNotExist

* clear metadata within internal_cancel_referendum fn

* remove redundant clone

* collapse metadata api into one set_metadata method

* fmt

* review fixes

* not request preimage on set_metadata

* rename events and update docs

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_democracy

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_referenda

* rename reset_metadata to transfer_metadata

---------

Co-authored-by: command-bot <>
Co-authored-by: Roman Useinov <roman.useinov@gmail.com>
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com>
This commit is contained in:
Muharem Ismailov
2023-02-08 09:33:34 +01:00
committed by GitHub
parent 45f7f5b572
commit cc766cc1c5
13 changed files with 1367 additions and 350 deletions
+72
View File
@@ -578,3 +578,75 @@ fn curve_handles_all_inputs() {
let threshold = test_curve.threshold(Perbill::one());
assert_eq!(threshold, Perbill::zero());
}
#[test]
fn set_metadata_works() {
new_test_ext().execute_with(|| {
use frame_support::traits::Hash as PreimageHash;
// invalid preimage hash.
let invalid_hash: PreimageHash = [1u8; 32].into();
// fails to set metadata for a finished referendum.
assert_ok!(Referenda::submit(
RuntimeOrigin::signed(1),
Box::new(RawOrigin::Root.into()),
set_balance_proposal_bounded(1),
DispatchTime::At(1),
));
let index = ReferendumCount::<Test>::get() - 1;
assert_ok!(Referenda::kill(RuntimeOrigin::root(), index));
assert_noop!(
Referenda::set_metadata(RuntimeOrigin::signed(1), index, Some(invalid_hash)),
Error::<Test>::NotOngoing,
);
// no permission to set metadata.
assert_ok!(Referenda::submit(
RuntimeOrigin::signed(1),
Box::new(RawOrigin::Root.into()),
set_balance_proposal_bounded(1),
DispatchTime::At(1),
));
let index = ReferendumCount::<Test>::get() - 1;
assert_noop!(
Referenda::set_metadata(RuntimeOrigin::signed(2), index, Some(invalid_hash)),
Error::<Test>::NoPermission,
);
// preimage does not exist.
let index = ReferendumCount::<Test>::get() - 1;
assert_noop!(
Referenda::set_metadata(RuntimeOrigin::signed(1), index, Some(invalid_hash)),
Error::<Test>::PreimageNotExist,
);
// metadata set.
let index = ReferendumCount::<Test>::get() - 1;
let hash = note_preimage(1);
assert_ok!(Referenda::set_metadata(RuntimeOrigin::signed(1), index, Some(hash)));
System::assert_last_event(RuntimeEvent::Referenda(crate::Event::MetadataSet {
index,
hash,
}));
});
}
#[test]
fn clear_metadata_works() {
new_test_ext().execute_with(|| {
let hash = note_preimage(1);
assert_ok!(Referenda::submit(
RuntimeOrigin::signed(1),
Box::new(RawOrigin::Root.into()),
set_balance_proposal_bounded(1),
DispatchTime::At(1),
));
let index = ReferendumCount::<Test>::get() - 1;
assert_ok!(Referenda::set_metadata(RuntimeOrigin::signed(1), index, Some(hash)));
assert_noop!(
Referenda::set_metadata(RuntimeOrigin::signed(2), index, None),
Error::<Test>::NoPermission,
);
assert_ok!(Referenda::set_metadata(RuntimeOrigin::signed(1), index, None),);
System::assert_last_event(RuntimeEvent::Referenda(crate::Event::MetadataCleared {
index,
hash,
}));
});
}