I’m currently withdrawing various positions from B3 due to market conditions with a plan to DCA back in later. I’ve found the withdrawal process to be heavy compared to similar withdrawals I’ve recently made on v2.1.
Although each individual tx is lighter, I’ve had to go through 3 Txes so far to withdraw LINK and expect one more when due (I’ll update this post once it goes through). At this point, 3 txes in the fees are similar to what I had from 1 withdrawal tx on v2.1. I expect by the conclusion of the 4th tx I will have paid more to wind down my LINK on B3 than my wNXM on v2.1. There are a lot of factors behind this and I’m not looking to blame or attack anyone. I do think we should look at optimizing this process down the line as there’s a lot of unnecessary friction and an opaque cost structure for the withdrawoor.
The 4 txes in a withdrawal seem to be:
- Leave rewards.
- Spending Approval for BnTKN on initiating withdrawal.
- Initiate withdrawal (begin cooldown).
- Complete withdrawal (not done yet)
Leave Rewards
The first tx probably won’t matter for TKNs as we’ve ended rewards, but will still be present on the BNT pool. I don’t know if this might come back for dual rewards. Should we issue rewards in bnTKNs this will become an issue down the line. This tx is new to B3.
Spending Approval
The second tx is also new to B3 and exists because B3 requires returning the BnTKNs as part of the withdrawal. I’m not sure if it’s possible (or preferable) to combine an approval tx with the withdrawal. I suspect there’s probably not going to be much difference in gas if there was, just one less TX.
Initiate Withdrawal (Begin Cooldown)
At the time of writing the terms used for withdrawal haven’t been fully finalized. This tx obviously needs to happen, and is the equivalent to the single heavy withdrawal tx on v2.1.
Complete Withdrawal
I haven’t got to this point yet, but will update once I have. Chatting to Sruly we discussed the possibility of removing this tx entirely. From a user experience perspective having to come back a week later to complete a withdrawal is sub-optimal. I had some discussions with Sruly and SylentBNT and I think we could potentially remove/replace this transaction.
One possible solution is to look at keepers to batch up a day’s withdrawal and airdrop them to the withdrawoor. This lets them ‘lock-in’ a withdrawal cost at initiation. If gas goes up when it’s due, that’s good for them. If it goes down they’re at least protected from the gas risk. If we batch up the withdrawals for a day and run them at the same time it should cost less per account than processing individual withdrawals. We can use the withdrawal fee as a mechanism to extract projected gas fees based on tests at different levels.
By removing the final tx we then get to a point where for first-time withdrawals we have:
- Leave Rewards (if they joined rewards, whether they’re running isn’t really relevant)
- Approval
- Withdraw
For follow-up withdrawals we’d have:
- Leave Rewards (if in)
- Withdraw
I’m interested in exploring how people think we could optimize this process. Withdrawing on B3 has been quite painful compared to v2.1 and I think we can do better. Yes there is a risk that the protocol could end up eating gas costs, but if properly managed I think it should come out ahead enough of the time to compensate. I’m under no illusions that this is an issue that should be tackled quickly, but if B3 elements on the roadmap could support this I think it’s worth seeing if the stars might align.