I’ve encountered an issue with DOT delegation that needs to be addressed.
When I buy more DOT, I have to undelegate all my tokens from every track and then re-delegate everything, including the new tokens.
This results in unnecessary fees, which, while not breaking the bank, do add up over time. Polkadot Support has confirmed this issue, and I believe it needs to be changed.
We need a more efficient way to update delegations without incurring these extra costs.
How can I bring this to the developers’ attention?
(Assuming you’re referring to governance delegation)
I’ve asked people about delegation fees before, and my understanding is that they’re quite high because the action is costly on-chain; that is, many extrinsics are required to perform delegation/undelegation tasks.
As for this, while it is a reasonable concern, I would guess that the fee difference between updating one validator and 16 is such a small fraction that it will not be noticed. Moreover, once the staking system moves to AH as a part of RFC32, the fees will be even lower.
At the moment, we only have:
fn nomiate(nominees: Vec<AccountId>)
And we can have:
fn nomiate(nominees: Vec<AccountId>)
fn add_nominations(added: Vec<AccountId>)
fn remove_nominations(removed: Vec<AccountId>)
Although, I would first like to see someone explore the difference in the Weight of these calls and demonstrate that the amount saved in weight/fee is actually worthy anyone’s while.
Even if a wallet created a single batch call for user convenience, wouldn’t it still group the undelegation and delegation calls for the new amount on every track? Wouldn’t the fees be similar in a single batch call compared to multiple independent calls?
If you try to delegate on a track where you already have an active delegation, the delegate extrinsic will return an alreadyDelegating error, even if you’re trying to delegate a new amount to the same account.
Wouldn’t the fees be similar in a single batch call compared to multiple independent calls?
Indeed, the fees for batch should be the same as the fee for a call that combines the two operations.
A UI can easily already implement a update_delegation, should they wish, by batching an undelegate and delegate and in effect it should have a very very small extra fee on it.
You would perhaps save a truthfully negligible amount by constructing a smaller transaction by not repeating the tracks, otherwise the batch should have near-zero overhead.