Restore claim_deallocation call to validator-sets pallet

This commit is contained in:
Luke Parker
2025-09-15 21:32:01 -04:00
parent 55e845fe12
commit c0a4d85ae6
2 changed files with 37 additions and 17 deletions

View File

@@ -725,7 +725,7 @@ mod pallet {
impl<T: Config> Pallet<T> {
/*
#[pallet::call_index(0)]
#[pallet::weight(0)] // TODO
#[pallet::weight((0, DispatchClass::Operational))] // TODO
pub fn set_keys(
origin: OriginFor<T>,
network: ExternalNetworkId,
@@ -758,7 +758,7 @@ mod pallet {
}
#[pallet::call_index(1)]
#[pallet::weight(0)] // TODO
#[pallet::weight((0, DispatchClass::Operational))] // TODO
pub fn report_slashes(
origin: OriginFor<T>,
network: ExternalNetworkId,
@@ -787,7 +787,7 @@ mod pallet {
*/
#[pallet::call_index(2)]
#[pallet::weight(0)] // TODO
#[pallet::weight((0, DispatchClass::Normal))] // TODO
pub fn set_embedded_elliptic_curve_keys(
origin: OriginFor<T>,
keys: serai_primitives::crypto::SignedEmbeddedEllipticCurveKeys,
@@ -801,7 +801,7 @@ mod pallet {
}
#[pallet::call_index(3)]
#[pallet::weight(0)] // TODO
#[pallet::weight((0, DispatchClass::Normal))] // TODO
pub fn allocate(origin: OriginFor<T>, network: NetworkId, amount: Amount) -> DispatchResult {
let validator = ensure_signed(origin)?;
Coins::<T>::transfer_fn(validator, Self::account(), Balance { coin: Coin::Serai, amount })?;
@@ -811,7 +811,7 @@ mod pallet {
}
#[pallet::call_index(4)]
#[pallet::weight(0)] // TODO
#[pallet::weight((0, DispatchClass::Normal))] // TODO
pub fn deallocate(origin: OriginFor<T>, network: NetworkId, amount: Amount) -> DispatchResult {
let account = ensure_signed(origin)?;
@@ -824,27 +824,19 @@ mod pallet {
Ok(())
}
/*
#[pallet::call_index(5)]
#[pallet::weight((0, DispatchClass::Operational))] // TODO
#[pallet::weight((0, DispatchClass::Normal))] // TODO
pub fn claim_deallocation(
origin: OriginFor<T>,
network: NetworkId,
session: Session,
) -> DispatchResult {
let account = ensure_signed(origin)?;
let Some(amount) = Self::take_deallocatable_amount(network, session, account) else {
Err(Error::<T>::NonExistentDeallocation)?
};
Coins::<T>::transfer_fn(
Self::account(),
account,
Balance { coin: Coin::Serai, amount },
)?;
Self::deposit_event(Event::DeallocationClaimed { validator: account, network, session });
let amount = Abstractions::<T>::claim_delayed_deallocation(account, network, session)
.map_err(Error::<T>::DeallocationError)?;
Coins::<T>::transfer_fn(Self::account(), account, Balance { coin: Coin::Serai, amount })?;
Ok(())
}
*/
}
/*

View File

@@ -123,6 +123,10 @@ pub enum DeallocationError {
NotEnoughAllocated,
/// The remaining allocation was non-zero and would be less than a key share.
RemainingAllocationLessThanKeyShare,
/// The delay has yet to be satisfied.
DelayNotSatisfied,
/// No delayed deallocation was present.
NoDelayedDeallocation,
}
pub(crate) trait Sessions {
@@ -164,6 +168,16 @@ pub(crate) trait Sessions {
validator: Public,
amount: Amount,
) -> Result<DeallocationTimeline, DeallocationError>;
/// Claim a delayed allocation.
///
/// This does not perform any transfers of any coins/tokens. It solely performs the book-keeping
/// of it.
fn claim_delayed_deallocation(
validator: Public,
network: NetworkId,
session: Session,
) -> Result<Amount, DeallocationError>;
}
impl<Storage: SessionsStorage> Sessions for Storage {
@@ -432,4 +446,18 @@ impl<Storage: SessionsStorage> Sessions for Storage {
// immediately handle the deallocation
Ok(DeallocationTimeline::Immediate)
}
fn claim_delayed_deallocation(
validator: Public,
network: NetworkId,
session: Session,
) -> Result<Amount, DeallocationError> {
if Storage::CurrentSession::get(network).map(|session| session.0) <
Some(session).map(|session| session.0)
{
Err(DeallocationError::DelayNotSatisfied)?;
}
Storage::DelayedDeallocations::take(validator, session)
.ok_or(DeallocationError::NoDelayedDeallocation)
}
}