opentensor / subtensor

Bittensor Blockchain Layer
The Unlicense
130 stars 144 forks source link

Convert to using balance locks in staking #353

Open gztensor opened 4 months ago

gztensor commented 4 months ago

Describe the bug

Currently staking is affected by existential deposit because it is using Currency::withdraw (and Currency::deposit for unstaking). Pallet balances has the locking mechanism for this, which does not affect the total balance of the account, but effectively locks the currency.

The staking/unstaking logic of working with balances is located in remove_balance_from_coldkey_account and add_balance_to_coldkey_account

To Reproduce

Stake full amount less transaction fees. Result: Staked amount is less by ED (or account is wiped, unsure).

Expected behavior

Staked amount can be full balance and account does not get dust-collected.

Screenshots

No response

Environment

Any

Additional context

No response

distributedstatemachine commented 4 months ago

It is not possible to stake the full amount , as this deducts the freebalance. the Preservation ensures that the account is not reaped

/// The mode by which we describe whether an operation should keep an account alive.
#[derive(Copy, Clone, RuntimeDebug, Eq, PartialEq)]
pub enum Preservation {
    /// We don't care if the account gets killed by this operation.
    Expendable,
    /// The account may not be killed, but we don't care if the balance gets dusted.
    Protect,
    /// The account may not be killed and our provider reference must remain (in the context of
    /// tokens, this means that the account may not be dusted).
    Preserve,
}