Skip to content

Commit

Permalink
issue #161: improve place order when sell 100%
Browse files Browse the repository at this point in the history
  • Loading branch information
thanhvk authored and thanhson1085 committed Nov 20, 2019
1 parent 005d0e2 commit 0556b64
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 12 deletions.
6 changes: 3 additions & 3 deletions src/store/domains/accountBalances.js
Expand Up @@ -41,6 +41,7 @@ export function updated(accountBalances: AccountBalances) {
availableBalance: parseBalance(availableBalance, decimals),
symbol,
address: key,
decimals,
}
newState[symbol] = tokenBalance
}
Expand Down Expand Up @@ -128,16 +129,15 @@ export default function accountBalancesDomain(state: AccountBalancesState) {
//The precision multiplier allows for rounding a decimal balance to a "point" number that
//can be converted into a bignumber. After the bignumber balance is computed, we divide by
//the precisionMultiplier to offset the initial multiplication by the precision multiplier
const precisionMultiplier = 1e4
const precisionMultiplier = Math.pow(10, pricePrecision)
const numericBalance = Number(state[symbol].balance)
const balancePoints = round(numericBalance * precisionMultiplier, 0)

const etherMultiplier = utils.bigNumberify('1000000000000000000')
const etherMultiplier = utils.bigNumberify(10).pow(state[symbol].decimals)
const balance = utils
.bigNumberify(toDecimalFormString(balancePoints))
.mul(etherMultiplier)
.div(utils.bigNumberify(precisionMultiplier))

return balance
},
get(symbol: string): ?string {
Expand Down
2 changes: 2 additions & 0 deletions src/store/models/orderForm.js
Expand Up @@ -2,6 +2,7 @@
import * as notifierActionCreators from '../actions/app'
import * as ordersActionCreators from '../actions/orders'
import * as actionCreators from '../actions/orderForm'
import * as orderActionsCreators from '../actions/orders'

import {
getTokenPairsDomain,
Expand Down Expand Up @@ -135,6 +136,7 @@ export const sendNewOrder = (side: Side, type: OrderType,amount: number, price:
// }

if (sellTokenBalance.lt(totalSellAmount)) {
dispatch(orderActionsCreators.ordersUpdatedStatus(false))
return dispatch(notifierActionCreators.addErrorNotification({ message: `Insufficient ${sellTokenSymbol} balance` }))
}

Expand Down
8 changes: 5 additions & 3 deletions src/store/services/signer/methods.js
Expand Up @@ -9,6 +9,7 @@ import type {
OrderCancel,
} from '../../../types/orders'
import type { Trade } from '../../../types/trades'
import { amountPrecision, pricePrecision } from '../../../config/tokens'

// The amountPrecisionMultiplier and pricePrecisionMultiplier are temporary multipliers
// that are used to turn decimal values into rounded integers that can be converted into
Expand All @@ -24,13 +25,14 @@ export const createRawOrder = async function (params: any) {
const { quoteTokenSymbol, baseTokenAddress, quoteTokenAddress, baseTokenSymbol, baseTokenDecimals, quoteTokenDecimals } = pair


const precisionMultiplier = utils.bigNumberify(10).pow(9)
const pricePrecisionMultiplier = utils.bigNumberify(10).pow(pricePrecision)
const amountPrecisionMultiplier = utils.bigNumberify(10).pow(amountPrecision)
// const priceMultiplier = utils.bigNumberify(10).pow(18)
const baseMultiplier = utils.bigNumberify(10).pow(baseTokenDecimals)
const quoteMultiplier = utils.bigNumberify(10).pow(quoteTokenDecimals)
// const pricepoint = computePricepoint({ price, priceMultiplier, quoteMultiplier, precisionMultiplier })
const pricepoint = computePricepoint({ price, quoteMultiplier, precisionMultiplier })
const amountPoints = computeAmountPoints({ amount, baseMultiplier, precisionMultiplier })
const pricepoint = computePricepoint({ price, quoteMultiplier, pricePrecisionMultiplier })
const amountPoints = computeAmountPoints({ amount, baseMultiplier, amountPrecisionMultiplier })

order.baseTokenSymbol = baseTokenSymbol
order.quoteTokenSymbol = quoteTokenSymbol
Expand Down
12 changes: 6 additions & 6 deletions src/utils/helpers.js
Expand Up @@ -137,28 +137,28 @@ export const computePricepoint = ({
price,
// priceMultiplier,
quoteMultiplier,
precisionMultiplier,
pricePrecisionMultiplier,
}: *) => {
const a = price * precisionMultiplier
const a = price * pricePrecisionMultiplier
const b = a.toFixed(0)
const c = utils.bigNumberify(b)
const d = c
// .mul(priceMultiplier)
.mul(quoteMultiplier)
.div(precisionMultiplier)
.div(pricePrecisionMultiplier)

return d
}

export const computeAmountPoints = ({
amount,
baseMultiplier,
precisionMultiplier,
amountPrecisionMultiplier,
}: *) => {
const a = amount * precisionMultiplier
const a = amount * amountPrecisionMultiplier
const b = a.toFixed(0)
const c = utils.bigNumberify(b)
const d = c.mul(baseMultiplier).div(precisionMultiplier)
const d = c.mul(baseMultiplier).div(amountPrecisionMultiplier)

return d
}
Expand Down

0 comments on commit 0556b64

Please sign in to comment.