mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 01:11:10 +00:00
Fixes for pallets (#4595)
* Move rebond to the end * Fix identity module * Fix order of things in tresury * Fixes * Fix. * Fix test * Fix test
This commit is contained in:
@@ -323,7 +323,7 @@ pub struct IdentityInfo {
|
|||||||
///
|
///
|
||||||
/// NOTE: This is stored separately primarily to facilitate the addition of extra fields in a
|
/// NOTE: This is stored separately primarily to facilitate the addition of extra fields in a
|
||||||
/// backwards compatible way through a specialized `Decode` impl.
|
/// backwards compatible way through a specialized `Decode` impl.
|
||||||
#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug)]
|
#[derive(Clone, Encode, Eq, PartialEq, RuntimeDebug)]
|
||||||
pub struct Registration<
|
pub struct Registration<
|
||||||
Balance: Encode + Decode + Copy + Clone + Debug + Eq + PartialEq
|
Balance: Encode + Decode + Copy + Clone + Debug + Eq + PartialEq
|
||||||
> {
|
> {
|
||||||
@@ -348,8 +348,17 @@ impl <
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<
|
||||||
|
Balance: Encode + Decode + Copy + Clone + Debug + Eq + PartialEq,
|
||||||
|
> Decode for Registration<Balance> {
|
||||||
|
fn decode<I: codec::Input>(input: &mut I) -> sp_std::result::Result<Self, codec::Error> {
|
||||||
|
let (judgements, deposit, info) = Decode::decode(&mut AppendZerosInput::new(input))?;
|
||||||
|
Ok(Self { judgements, deposit, info })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Information concerning a registrar.
|
/// Information concerning a registrar.
|
||||||
#[derive(Clone, Encode, Eq, PartialEq, RuntimeDebug)]
|
#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug)]
|
||||||
pub struct RegistrarInfo<
|
pub struct RegistrarInfo<
|
||||||
Balance: Encode + Decode + Clone + Debug + Eq + PartialEq,
|
Balance: Encode + Decode + Clone + Debug + Eq + PartialEq,
|
||||||
AccountId: Encode + Decode + Clone + Debug + Eq + PartialEq
|
AccountId: Encode + Decode + Clone + Debug + Eq + PartialEq
|
||||||
@@ -365,16 +374,6 @@ pub struct RegistrarInfo<
|
|||||||
pub fields: IdentityFields,
|
pub fields: IdentityFields,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<
|
|
||||||
Balance: Encode + Decode + Clone + Debug + Eq + PartialEq,
|
|
||||||
AccountId: Encode + Decode + Clone + Debug + Eq + PartialEq
|
|
||||||
> Decode for RegistrarInfo<Balance, AccountId> {
|
|
||||||
fn decode<I: codec::Input>(input: &mut I) -> sp_std::result::Result<Self, codec::Error> {
|
|
||||||
let (account, fee, fields) = Decode::decode(&mut AppendZerosInput::new(input))?;
|
|
||||||
Ok(Self { account, fee, fields })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
decl_storage! {
|
decl_storage! {
|
||||||
trait Store for Module<T: Trait> as Sudo {
|
trait Store for Module<T: Trait> as Sudo {
|
||||||
/// Information that is pertinent to identify the entity behind an account.
|
/// Information that is pertinent to identify the entity behind an account.
|
||||||
|
|||||||
@@ -985,26 +985,6 @@ decl_module! {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Rebond a portion of the stash scheduled to be unlocked.
|
|
||||||
///
|
|
||||||
/// # <weight>
|
|
||||||
/// - Time complexity: O(1). Bounded by `MAX_UNLOCKING_CHUNKS`.
|
|
||||||
/// - Storage changes: Can't increase storage, only decrease it.
|
|
||||||
/// # </weight>
|
|
||||||
#[weight = SimpleDispatchInfo::FixedNormal(500_000)]
|
|
||||||
fn rebond(origin, #[compact] value: BalanceOf<T>) {
|
|
||||||
let controller = ensure_signed(origin)?;
|
|
||||||
let ledger = Self::ledger(&controller).ok_or(Error::<T>::NotController)?;
|
|
||||||
ensure!(
|
|
||||||
ledger.unlocking.len() > 0,
|
|
||||||
Error::<T>::NoUnlockChunk,
|
|
||||||
);
|
|
||||||
|
|
||||||
let ledger = ledger.rebond(value);
|
|
||||||
|
|
||||||
Self::update_ledger(&controller, &ledger);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Remove any unlocked chunks from the `unlocking` queue from our management.
|
/// Remove any unlocked chunks from the `unlocking` queue from our management.
|
||||||
///
|
///
|
||||||
/// This essentially frees up that balance to be used by the stash account to do
|
/// This essentially frees up that balance to be used by the stash account to do
|
||||||
@@ -1256,6 +1236,26 @@ decl_module! {
|
|||||||
|
|
||||||
<Self as Store>::UnappliedSlashes::insert(&era, &unapplied);
|
<Self as Store>::UnappliedSlashes::insert(&era, &unapplied);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Rebond a portion of the stash scheduled to be unlocked.
|
||||||
|
///
|
||||||
|
/// # <weight>
|
||||||
|
/// - Time complexity: O(1). Bounded by `MAX_UNLOCKING_CHUNKS`.
|
||||||
|
/// - Storage changes: Can't increase storage, only decrease it.
|
||||||
|
/// # </weight>
|
||||||
|
#[weight = SimpleDispatchInfo::FixedNormal(500_000)]
|
||||||
|
fn rebond(origin, #[compact] value: BalanceOf<T>) {
|
||||||
|
let controller = ensure_signed(origin)?;
|
||||||
|
let ledger = Self::ledger(&controller).ok_or(Error::<T>::NotController)?;
|
||||||
|
ensure!(
|
||||||
|
ledger.unlocking.len() > 0,
|
||||||
|
Error::<T>::NoUnlockChunk,
|
||||||
|
);
|
||||||
|
|
||||||
|
let ledger = ledger.rebond(value);
|
||||||
|
|
||||||
|
Self::update_ledger(&controller, &ledger);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -311,6 +311,71 @@ decl_module! {
|
|||||||
|
|
||||||
fn deposit_event() = default;
|
fn deposit_event() = default;
|
||||||
|
|
||||||
|
/// Put forward a suggestion for spending. A deposit proportional to the value
|
||||||
|
/// is reserved and slashed if the proposal is rejected. It is returned once the
|
||||||
|
/// proposal is awarded.
|
||||||
|
///
|
||||||
|
/// # <weight>
|
||||||
|
/// - O(1).
|
||||||
|
/// - Limited storage reads.
|
||||||
|
/// - One DB change, one extra DB entry.
|
||||||
|
/// # </weight>
|
||||||
|
#[weight = SimpleDispatchInfo::FixedNormal(500_000)]
|
||||||
|
fn propose_spend(
|
||||||
|
origin,
|
||||||
|
#[compact] value: BalanceOf<T>,
|
||||||
|
beneficiary: <T::Lookup as StaticLookup>::Source
|
||||||
|
) {
|
||||||
|
let proposer = ensure_signed(origin)?;
|
||||||
|
let beneficiary = T::Lookup::lookup(beneficiary)?;
|
||||||
|
|
||||||
|
let bond = Self::calculate_bond(value);
|
||||||
|
T::Currency::reserve(&proposer, bond)
|
||||||
|
.map_err(|_| Error::<T>::InsufficientProposersBalance)?;
|
||||||
|
|
||||||
|
let c = Self::proposal_count();
|
||||||
|
ProposalCount::put(c + 1);
|
||||||
|
<Proposals<T>>::insert(c, Proposal { proposer, value, beneficiary, bond });
|
||||||
|
|
||||||
|
Self::deposit_event(RawEvent::Proposed(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Reject a proposed spend. The original deposit will be slashed.
|
||||||
|
///
|
||||||
|
/// # <weight>
|
||||||
|
/// - O(1).
|
||||||
|
/// - Limited storage reads.
|
||||||
|
/// - One DB clear.
|
||||||
|
/// # </weight>
|
||||||
|
#[weight = SimpleDispatchInfo::FixedOperational(100_000)]
|
||||||
|
fn reject_proposal(origin, #[compact] proposal_id: ProposalIndex) {
|
||||||
|
T::RejectOrigin::ensure_origin(origin)?;
|
||||||
|
let proposal = <Proposals<T>>::take(&proposal_id).ok_or(Error::<T>::InvalidProposalIndex)?;
|
||||||
|
|
||||||
|
let value = proposal.bond;
|
||||||
|
let imbalance = T::Currency::slash_reserved(&proposal.proposer, value).0;
|
||||||
|
T::ProposalRejection::on_unbalanced(imbalance);
|
||||||
|
|
||||||
|
Self::deposit_event(Event::<T>::Rejected(proposal_id, value));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Approve a proposal. At a later time, the proposal will be allocated to the beneficiary
|
||||||
|
/// and the original deposit will be returned.
|
||||||
|
///
|
||||||
|
/// # <weight>
|
||||||
|
/// - O(1).
|
||||||
|
/// - Limited storage reads.
|
||||||
|
/// - One DB change.
|
||||||
|
/// # </weight>
|
||||||
|
#[weight = SimpleDispatchInfo::FixedOperational(100_000)]
|
||||||
|
fn approve_proposal(origin, #[compact] proposal_id: ProposalIndex) {
|
||||||
|
T::ApproveOrigin::ensure_origin(origin)?;
|
||||||
|
|
||||||
|
ensure!(<Proposals<T>>::exists(proposal_id), Error::<T>::InvalidProposalIndex);
|
||||||
|
|
||||||
|
Approvals::mutate(|v| v.push(proposal_id));
|
||||||
|
}
|
||||||
|
|
||||||
/// Report something `reason` that deserves a tip and claim any eventual the finder's fee.
|
/// Report something `reason` that deserves a tip and claim any eventual the finder's fee.
|
||||||
///
|
///
|
||||||
/// The dispatch origin for this call must be _Signed_.
|
/// The dispatch origin for this call must be _Signed_.
|
||||||
@@ -477,71 +542,6 @@ decl_module! {
|
|||||||
Self::payout_tip(tip);
|
Self::payout_tip(tip);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Put forward a suggestion for spending. A deposit proportional to the value
|
|
||||||
/// is reserved and slashed if the proposal is rejected. It is returned once the
|
|
||||||
/// proposal is awarded.
|
|
||||||
///
|
|
||||||
/// # <weight>
|
|
||||||
/// - O(1).
|
|
||||||
/// - Limited storage reads.
|
|
||||||
/// - One DB change, one extra DB entry.
|
|
||||||
/// # </weight>
|
|
||||||
#[weight = SimpleDispatchInfo::FixedNormal(500_000)]
|
|
||||||
fn propose_spend(
|
|
||||||
origin,
|
|
||||||
#[compact] value: BalanceOf<T>,
|
|
||||||
beneficiary: <T::Lookup as StaticLookup>::Source
|
|
||||||
) {
|
|
||||||
let proposer = ensure_signed(origin)?;
|
|
||||||
let beneficiary = T::Lookup::lookup(beneficiary)?;
|
|
||||||
|
|
||||||
let bond = Self::calculate_bond(value);
|
|
||||||
T::Currency::reserve(&proposer, bond)
|
|
||||||
.map_err(|_| Error::<T>::InsufficientProposersBalance)?;
|
|
||||||
|
|
||||||
let c = Self::proposal_count();
|
|
||||||
ProposalCount::put(c + 1);
|
|
||||||
<Proposals<T>>::insert(c, Proposal { proposer, value, beneficiary, bond });
|
|
||||||
|
|
||||||
Self::deposit_event(RawEvent::Proposed(c));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Reject a proposed spend. The original deposit will be slashed.
|
|
||||||
///
|
|
||||||
/// # <weight>
|
|
||||||
/// - O(1).
|
|
||||||
/// - Limited storage reads.
|
|
||||||
/// - One DB clear.
|
|
||||||
/// # </weight>
|
|
||||||
#[weight = SimpleDispatchInfo::FixedOperational(100_000)]
|
|
||||||
fn reject_proposal(origin, #[compact] proposal_id: ProposalIndex) {
|
|
||||||
T::RejectOrigin::ensure_origin(origin)?;
|
|
||||||
let proposal = <Proposals<T>>::take(&proposal_id).ok_or(Error::<T>::InvalidProposalIndex)?;
|
|
||||||
|
|
||||||
let value = proposal.bond;
|
|
||||||
let imbalance = T::Currency::slash_reserved(&proposal.proposer, value).0;
|
|
||||||
T::ProposalRejection::on_unbalanced(imbalance);
|
|
||||||
|
|
||||||
Self::deposit_event(Event::<T>::Rejected(proposal_id, value));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Approve a proposal. At a later time, the proposal will be allocated to the beneficiary
|
|
||||||
/// and the original deposit will be returned.
|
|
||||||
///
|
|
||||||
/// # <weight>
|
|
||||||
/// - O(1).
|
|
||||||
/// - Limited storage reads.
|
|
||||||
/// - One DB change.
|
|
||||||
/// # </weight>
|
|
||||||
#[weight = SimpleDispatchInfo::FixedOperational(100_000)]
|
|
||||||
fn approve_proposal(origin, #[compact] proposal_id: ProposalIndex) {
|
|
||||||
T::ApproveOrigin::ensure_origin(origin)?;
|
|
||||||
|
|
||||||
ensure!(<Proposals<T>>::exists(proposal_id), Error::<T>::InvalidProposalIndex);
|
|
||||||
|
|
||||||
Approvals::mutate(|v| v.push(proposal_id));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn on_finalize(n: T::BlockNumber) {
|
fn on_finalize(n: T::BlockNumber) {
|
||||||
// Check to see if we should spend some funds!
|
// Check to see if we should spend some funds!
|
||||||
if (n % T::SpendPeriod::get()).is_zero() {
|
if (n % T::SpendPeriod::get()).is_zero() {
|
||||||
|
|||||||
Reference in New Issue
Block a user