mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-20 03:31:03 +00:00
Make Multisig Pallet Bounded (#12457)
* Bounded multisig * just use u32 Co-authored-by: parity-processbot <>
This commit is contained in:
@@ -51,7 +51,7 @@ pub mod migrations;
|
||||
mod tests;
|
||||
pub mod weights;
|
||||
|
||||
use codec::{Decode, Encode};
|
||||
use codec::{Decode, Encode, MaxEncodedLen};
|
||||
use frame_support::{
|
||||
dispatch::{
|
||||
DispatchErrorWithPostInfo, DispatchResult, DispatchResultWithPostInfo, GetDispatchInfo,
|
||||
@@ -60,7 +60,7 @@ use frame_support::{
|
||||
ensure,
|
||||
traits::{Currency, Get, ReservableCurrency},
|
||||
weights::Weight,
|
||||
RuntimeDebug,
|
||||
BoundedVec, RuntimeDebug,
|
||||
};
|
||||
use frame_system::{self as system, RawOrigin};
|
||||
use scale_info::TypeInfo;
|
||||
@@ -94,7 +94,9 @@ type BalanceOf<T> =
|
||||
/// A global extrinsic index, formed as the extrinsic index within a block, together with that
|
||||
/// block's height. This allows a transaction in which a multisig operation of a particular
|
||||
/// composite was created to be uniquely identified.
|
||||
#[derive(Copy, Clone, Eq, PartialEq, Encode, Decode, Default, RuntimeDebug, TypeInfo)]
|
||||
#[derive(
|
||||
Copy, Clone, Eq, PartialEq, Encode, Decode, Default, RuntimeDebug, TypeInfo, MaxEncodedLen,
|
||||
)]
|
||||
pub struct Timepoint<BlockNumber> {
|
||||
/// The height of the chain at the point in time.
|
||||
height: BlockNumber,
|
||||
@@ -103,8 +105,12 @@ pub struct Timepoint<BlockNumber> {
|
||||
}
|
||||
|
||||
/// An open multisig operation.
|
||||
#[derive(Clone, Eq, PartialEq, Encode, Decode, Default, RuntimeDebug, TypeInfo)]
|
||||
pub struct Multisig<BlockNumber, Balance, AccountId> {
|
||||
#[derive(Clone, Eq, PartialEq, Encode, Decode, Default, RuntimeDebug, TypeInfo, MaxEncodedLen)]
|
||||
#[scale_info(skip_type_params(MaxApprovals))]
|
||||
pub struct Multisig<BlockNumber, Balance, AccountId, MaxApprovals>
|
||||
where
|
||||
MaxApprovals: Get<u32>,
|
||||
{
|
||||
/// The extrinsic when the multisig operation was opened.
|
||||
when: Timepoint<BlockNumber>,
|
||||
/// The amount held in reserve of the `depositor`, to be returned once the operation ends.
|
||||
@@ -112,7 +118,7 @@ pub struct Multisig<BlockNumber, Balance, AccountId> {
|
||||
/// The account who opened it (i.e. the first to approve it).
|
||||
depositor: AccountId,
|
||||
/// The approvals achieved so far, including the depositor. Always sorted.
|
||||
approvals: Vec<AccountId>,
|
||||
approvals: BoundedVec<AccountId, MaxApprovals>,
|
||||
}
|
||||
|
||||
type CallHash = [u8; 32];
|
||||
@@ -159,7 +165,7 @@ pub mod pallet {
|
||||
|
||||
/// The maximum amount of signatories allowed in the multisig.
|
||||
#[pallet::constant]
|
||||
type MaxSignatories: Get<u16>;
|
||||
type MaxSignatories: Get<u32>;
|
||||
|
||||
/// Weight information for extrinsics in this pallet.
|
||||
type WeightInfo: WeightInfo;
|
||||
@@ -170,7 +176,6 @@ pub mod pallet {
|
||||
|
||||
#[pallet::pallet]
|
||||
#[pallet::generate_store(pub(super) trait Store)]
|
||||
#[pallet::without_storage_info]
|
||||
#[pallet::storage_version(STORAGE_VERSION)]
|
||||
pub struct Pallet<T>(_);
|
||||
|
||||
@@ -182,7 +187,7 @@ pub mod pallet {
|
||||
T::AccountId,
|
||||
Blake2_128Concat,
|
||||
[u8; 32],
|
||||
Multisig<T::BlockNumber, BalanceOf<T>, T::AccountId>,
|
||||
Multisig<T::BlockNumber, BalanceOf<T>, T::AccountId, T::MaxSignatories>,
|
||||
>;
|
||||
|
||||
#[pallet::error]
|
||||
@@ -601,7 +606,9 @@ impl<T: Config> Pallet<T> {
|
||||
|
||||
if let Some(pos) = maybe_pos {
|
||||
// Record approval.
|
||||
m.approvals.insert(pos, who.clone());
|
||||
m.approvals
|
||||
.try_insert(pos, who.clone())
|
||||
.map_err(|_| Error::<T>::TooManySignatories)?;
|
||||
<Multisigs<T>>::insert(&id, call_hash, m);
|
||||
Self::deposit_event(Event::MultisigApproval {
|
||||
approving: who,
|
||||
@@ -629,6 +636,9 @@ impl<T: Config> Pallet<T> {
|
||||
|
||||
T::Currency::reserve(&who, deposit)?;
|
||||
|
||||
let initial_approvals =
|
||||
vec![who.clone()].try_into().map_err(|_| Error::<T>::TooManySignatories)?;
|
||||
|
||||
<Multisigs<T>>::insert(
|
||||
&id,
|
||||
call_hash,
|
||||
@@ -636,7 +646,7 @@ impl<T: Config> Pallet<T> {
|
||||
when: Self::timepoint(),
|
||||
deposit,
|
||||
depositor: who.clone(),
|
||||
approvals: vec![who.clone()],
|
||||
approvals: initial_approvals,
|
||||
},
|
||||
);
|
||||
Self::deposit_event(Event::NewMultisig { approving: who, multisig: id, call_hash });
|
||||
|
||||
Reference in New Issue
Block a user