minter-go-node icon indicating copy to clipboard operation
minter-go-node copied to clipboard

Convert coin with same gasCoin produce strange behavior

Open shrpne opened this issue 6 years ago • 0 comments

What I do I have on the balance: 30685.413253185071200896 BANANATEST For the 0.1 MNT fee I plan to spend 38.956518155931433038 BANANATEST So I will sell only 30646.456735029139767858, to leave enough for comission

I send TX: { nonce: '129', chainId: '2', gasPrice: '1', gasCoin: 'BANANATEST', type: '0x02', data: { coinToSell: 'BANANATEST', valueToSell: '30646.456735029139767858', coinToBuy: 'MNT', minimumValueToBuy: '0' }, payload: '', } https://minter-node-1.testnet.minter.network/send_transaction?tx=0xf87e818102018a42414e414e415445535402a3e28a42414e414e41544553548a067d59060c9f4d7282328a4d4e540000000000000080808001b845f8431ca01d568386460de1dd40a7c73084a84be68bbf4696aea0208530d3bae2ccf47e4ba059cb6cbfb12e56d7f5f4f8c367a76a867aff09afca15e8d61a7ef4cf7e0d26be The error occurs: 30685.4691828209 BANANATEST required to proceed such TX

It is 0.055929635828799104 BANANATEST more than I have (0.000143569521334670 MNT equivalent)

What happens Such calculation occurs in the blockchain:

  1. Sell 30646.456735029139767858 BANANATEST, write down new coin parameters
  2. Sell BANANATEST to pay fee taking into account new coin price

What's wrong with it

  • Tx fee estimation method doesn't take into account this behavior and returns the wrong estimation https://minter-node-1.testnet.minter.network/estimate_tx_commission?tx=0xf87e818102018a42414e414e415445535402a3e28a42414e414e41544553548a067d59060c9f4d7282328a4d4e540000000000000080808001b845f8431ca01d568386460de1dd40a7c73084a84be68bbf4696aea0208530d3bae2ccf47e4ba059cb6cbfb12e56d7f5f4f8c367a76a867aff09afca15e8d61a7ef4cf7e0d26be
  • No way to actually estimate fee, because its value depends on the coin price, which depends on the value we plan to sell, which depends on the fee value we should keep from my balance and so on.
  • Even if we try to estimate, we need to do two convert operations and will get inaccurate value. So we can try to do such estimation a few times with adjusted values to get more precision.

What we can do Sell COIN first to calculate fee, than sell COIN to calculate resulting amount

  • It looks more intuitive
  • Calculating fee will be easy
  • No need to fix estimation API method (though I'm not sure it is fixable with current behavior)
  • Calculating fee first will produce very little coin price change, so we can even ignore such price change in the UI when calculating estimation of received coins

shrpne avatar Feb 19 '20 13:02 shrpne