B3 Withdrawal User-Flow and TX Optimizations

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:

  1. Leave rewards.
  2. Spending Approval for BnTKN on initiating withdrawal.
  3. Initiate withdrawal (begin cooldown).
  4. 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:

  1. Leave Rewards (if they joined rewards, whether they’re running isn’t really relevant)
  2. Approval
  3. Withdraw

For follow-up withdrawals we’d have:

  1. Leave Rewards (if in)
  2. 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.


From what I have gathered, there are two things that are being brought up in this post:

  1. Workflow for withdrawing
  2. Gas cost

On the following:

I commented in the telegram chat but will add some information here so that we have a single place to have it all. Essentially v2.1 used to be quite expensive until we disabled the liquidity mining rewards on 5/8-5/9. After that happened, the gas on v2.1 dropped for many operations performed on that version of the protocol.

On the gas cost, I understand that this is painful at times due to Ethereum congestion and that is an inherent problem with the blockchain that we operate on until it can scale in the future. I think this will be less of a concern if we go to another L1 or L2 but as we are still bringing online components of B3 (think auto compounding rewards) then I think our focus at the moment is to finalize the core components.

I would like to hear what other people think about using the reserves from the security withdrawal fee for gas reimbursements. It is essentially there for the protocol to minimize BNT printing for insurance payouts and I am not sure it makes sense to divert some of these funds for gas reimbursements.


for bnt, please allow us to use bnVBNT or vbnt to withdraw

1 Like

I think our focus at the moment is to finalize the core components.

Absolutely hard agree. I set up this thread at Jen’s request to capture the points. I don’t think any proposals should come out of it till everyone’s comfortably down the roadmap and we can get data to see what’s feasible.

I am not sure it makes sense to divert some of these funds for gas reimbursements.

I see this as separate to the security fee, taken at the point of the cooldown initiation to pay for the drop. However, with drops rolled up the cost should be lower so we may be able to build a withdrawal pool of funds and lower the airdrop fee over time.

1 Like