Improve call, and usage in pallet utility (#9418)

* WIP

* WIP

* WIP

* add some tests and limit

* remove wip test

* fmt

* Update bin/node/runtime/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* fmt

* use primitives allocation limit

Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
Guillaume Thiolliere
2021-08-07 11:34:25 +02:00
committed by GitHub
parent 27d4177f93
commit 38db14089b
17 changed files with 197 additions and 92 deletions
+2 -1
View File
@@ -164,7 +164,8 @@ where
) -> DispatchResult {
use frame_system::offchain::SubmitTransaction;
let call = Call::report_equivocation_unsigned(equivocation_proof, key_owner_proof);
let call =
Call::report_equivocation_unsigned(Box::new(equivocation_proof), key_owner_proof);
match SubmitTransaction::<T, Call<T>>::submit_unsigned_transaction(call.into()) {
Ok(()) => log::info!(
+4 -4
View File
@@ -190,12 +190,12 @@ pub mod pallet {
#[pallet::weight(T::WeightInfo::report_equivocation(key_owner_proof.validator_count()))]
pub fn report_equivocation(
origin: OriginFor<T>,
equivocation_proof: EquivocationProof<T::Hash, T::BlockNumber>,
equivocation_proof: Box<EquivocationProof<T::Hash, T::BlockNumber>>,
key_owner_proof: T::KeyOwnerProof,
) -> DispatchResultWithPostInfo {
let reporter = ensure_signed(origin)?;
Self::do_report_equivocation(Some(reporter), equivocation_proof, key_owner_proof)
Self::do_report_equivocation(Some(reporter), *equivocation_proof, key_owner_proof)
}
/// Report voter equivocation/misbehavior. This method will verify the
@@ -210,14 +210,14 @@ pub mod pallet {
#[pallet::weight(T::WeightInfo::report_equivocation(key_owner_proof.validator_count()))]
pub fn report_equivocation_unsigned(
origin: OriginFor<T>,
equivocation_proof: EquivocationProof<T::Hash, T::BlockNumber>,
equivocation_proof: Box<EquivocationProof<T::Hash, T::BlockNumber>>,
key_owner_proof: T::KeyOwnerProof,
) -> DispatchResultWithPostInfo {
ensure_none(origin)?;
Self::do_report_equivocation(
T::HandleEquivocation::block_author(),
equivocation_proof,
*equivocation_proof,
key_owner_proof,
)
}
+19 -13
View File
@@ -354,7 +354,7 @@ fn report_equivocation_current_set_works() {
// report the equivocation and the tx should be dispatched successfully
assert_ok!(Grandpa::report_equivocation_unsigned(
Origin::none(),
equivocation_proof,
Box::new(equivocation_proof),
key_owner_proof,
),);
@@ -432,7 +432,7 @@ fn report_equivocation_old_set_works() {
// the old set, the tx should be dispatched successfully
assert_ok!(Grandpa::report_equivocation_unsigned(
Origin::none(),
equivocation_proof,
Box::new(equivocation_proof),
key_owner_proof,
),);
@@ -495,7 +495,7 @@ fn report_equivocation_invalid_set_id() {
assert_err!(
Grandpa::report_equivocation_unsigned(
Origin::none(),
equivocation_proof,
Box::new(equivocation_proof),
key_owner_proof,
),
Error::<Test>::InvalidEquivocationProof,
@@ -536,7 +536,7 @@ fn report_equivocation_invalid_session() {
assert_err!(
Grandpa::report_equivocation_unsigned(
Origin::none(),
equivocation_proof,
Box::new(equivocation_proof),
key_owner_proof,
),
Error::<Test>::InvalidEquivocationProof,
@@ -581,7 +581,7 @@ fn report_equivocation_invalid_key_owner_proof() {
assert_err!(
Grandpa::report_equivocation_unsigned(
Origin::none(),
equivocation_proof,
Box::new(equivocation_proof),
invalid_key_owner_proof,
),
Error::<Test>::InvalidKeyOwnershipProof,
@@ -612,7 +612,7 @@ fn report_equivocation_invalid_equivocation_proof() {
assert_err!(
Grandpa::report_equivocation_unsigned(
Origin::none(),
equivocation_proof,
Box::new(equivocation_proof),
key_owner_proof.clone(),
),
Error::<Test>::InvalidEquivocationProof,
@@ -681,8 +681,10 @@ fn report_equivocation_validate_unsigned_prevents_duplicates() {
let key_owner_proof =
Historical::prove((sp_finality_grandpa::KEY_TYPE, &equivocation_key)).unwrap();
let call =
Call::report_equivocation_unsigned(equivocation_proof.clone(), key_owner_proof.clone());
let call = Call::report_equivocation_unsigned(
Box::new(equivocation_proof.clone()),
key_owner_proof.clone(),
);
// only local/inblock reports are allowed
assert_eq!(
@@ -714,8 +716,12 @@ fn report_equivocation_validate_unsigned_prevents_duplicates() {
assert_ok!(<Grandpa as sp_runtime::traits::ValidateUnsigned>::pre_dispatch(&call));
// we submit the report
Grandpa::report_equivocation_unsigned(Origin::none(), equivocation_proof, key_owner_proof)
.unwrap();
Grandpa::report_equivocation_unsigned(
Origin::none(),
Box::new(equivocation_proof),
key_owner_proof,
)
.unwrap();
// the report should now be considered stale and the transaction is invalid
// the check for staleness should be done on both `validate_unsigned` and on `pre_dispatch`
@@ -838,7 +844,7 @@ fn valid_equivocation_reports_dont_pay_fees() {
// check the dispatch info for the call.
let info = Call::<Test>::report_equivocation_unsigned(
equivocation_proof.clone(),
Box::new(equivocation_proof.clone()),
key_owner_proof.clone(),
)
.get_dispatch_info();
@@ -850,7 +856,7 @@ fn valid_equivocation_reports_dont_pay_fees() {
// report the equivocation.
let post_info = Grandpa::report_equivocation_unsigned(
Origin::none(),
equivocation_proof.clone(),
Box::new(equivocation_proof.clone()),
key_owner_proof.clone(),
)
.unwrap();
@@ -864,7 +870,7 @@ fn valid_equivocation_reports_dont_pay_fees() {
// duplicate.
let post_info = Grandpa::report_equivocation_unsigned(
Origin::none(),
equivocation_proof,
Box::new(equivocation_proof),
key_owner_proof,
)
.err()