Why is manual cashout disabled?

The issues described here affect all pools running MPOS. At the time of writing, this is every VRM pool.

On 21 August 2017 I disabled manual payouts with the following message:

Due to issues with MPOS assessment of network transaction fees, manual payouts have been disabled for the time being. You can still set your auto payment threshold as low as 0.3 or as high as 20 VRM. Be aware that all withdrawals are subject to a network imposed 0.2 VRM fee, effectively converting the automatic payouts to 0.1-19.80 VRM.

I would like to take some time to explain why I took this action and what’s being done about it going forward.

How does MPOS handle payouts?

When a payout is triggered (either manually or through automatic threshold) MPOS adds the transaction to a queue. The number of simultaneous transactions is limited to avoid destabilizing the coin daemon. MPOS then takes a static value, set in the config, out of a users balance and sets it aside to pay the network transaction fee. MPOS performs the transaction, pays the network using the fee, and the user receive the payment in their wallet.

What’s the problem?

At around 20-25 VRM the network transaction fee increases from 0.2 VRM to 0.4 VRM, and keeps increasing thereafter in increments of 0.2 VRM. The network transaction fee assessed on the user by MPOS, however, never exceeds 0.2 VRM. The remaining fee necessary to complete the transaction is taken from the pool’s liquid assets (donations and fees).

As MPOS pays out users in increments greater than 20 VRM the pool’s liquid assets are drained. When the liquid assets hit zero, the pool will not be able to pay network transaction fees and payouts of more than 20 VRM will fail. This effectively hard caps transactions at 20 VRM.

What are the options?

I had several options to address this situation:

  1. With large transactions the network fees averages out to be roughly between 0.5% and 1%. I could increase the pool fees from 1% to 1.5%-2%, increasing liquid assets and preventing failed transactions. This wasn’t a good option for several reasons, and I don’t think anyone wants more fees anyway.
  2. Change the network fees from a static value to a formula based approach. This is something that is being worked on by Seion (admin of bloxstor) and should be implemented in the future. The formula for network fees is not as simple as 0.2 VRM per 20 VRM transacted and is taking time to work out. This wasn’t viable as an immediate fix.
  3. Limit automatic and manual payments to 20 VRM maximum. Since most user balances are below this amount, this seemed like the best option.

What was done?

Setting the limit for automatic payments was simple. Unfortunately MPOS doesn’t have a maximum transaction limit for manual payments by default and will require some backend rewrites. In the meantime, I had to disable manual payouts entirely.

The good news is if you set the automatic payout threshold to be lower than the amount currently in your balance, it should immediately trigger a payment. You can use this as a workaround for manual payments for now, until a better solution is implemented.