Skip to content
This repository was archived by the owner on Dec 7, 2022. It is now read-only.

Commit

Permalink
fix: adjust vault negative amounts
Browse files Browse the repository at this point in the history
  • Loading branch information
samsiegart committed Feb 9, 2022
1 parent 03a2ed0 commit 03ac0e3
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 19 deletions.
12 changes: 6 additions & 6 deletions ui/src/components/Swap.jsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { React, useState, useEffect } from 'react';
import { E } from '@endo/captp';
import {
divideBy,
floorDivideBy,
invertRatio,
makeRatio,
makeRatioFromAmounts,
multiplyBy,
floorMultiplyBy,
} from '@agoric/zoe/src/contractSupport';
import { Nat } from '@endo/nat';
import { stringifyAmountValue } from '@agoric/ui-components';
Expand Down Expand Up @@ -69,7 +69,7 @@ const useStyles = makeStyles(theme => ({

const makeInverseFromAmounts = (x, y) => makeRatioFromAmounts(y, x);
const composeRatio = (x, y) =>
makeRatioFromAmounts(multiplyBy(x.numerator, y), x.denominator);
makeRatioFromAmounts(floorMultiplyBy(x.numerator, y), x.denominator);

/* eslint-disable complexity */
export default function Swap() {
Expand Down Expand Up @@ -278,7 +278,7 @@ export default function Swap() {
const giveInfo = getInfoForBrand(brandToInfo, inputRate.brand);
const wantInfo = getInfoForBrand(brandToInfo, outputRate.brand);
const oneDisplayUnit = 10n ** Nat(wantInfo.decimalPlaces);
const wantPrice = divideBy(
const wantPrice = floorDivideBy(
AmountMath.make(outputRate.brand, oneDisplayUnit),
marketRate,
);
Expand All @@ -305,11 +305,11 @@ export default function Swap() {
// and so depends on whether the user entered the In or
// the Out amount most recently
if (quote.rate && sameStructure(source, quote.amount)) {
const value = multiplyBy(source, quote.rate).value;
const value = floorMultiplyBy(source, quote.rate).value;
return { amount: value, label: `Quoted ${label}` };
}
if (marketRatio) {
const value = multiplyBy(source, marketRatio).value;
const value = floorMultiplyBy(source, marketRatio).value;
return { amount: value, label: `Estimated ${label}` };
}
}
Expand Down
40 changes: 27 additions & 13 deletions ui/src/components/vault/VaultManagement/AdjustVaultForm.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import Paper from '@material-ui/core/Paper';
import Typography from '@material-ui/core/Typography';
import Button from '@material-ui/core/Button';

import DeleteIcon from '@material-ui/icons/Delete';
import SendIcon from '@material-ui/icons/Send';

import { Grid } from '@material-ui/core';
Expand Down Expand Up @@ -100,6 +99,9 @@ const AdjustVaultForm = ({
// borrow, repay, noaction
const [debtAction, setDebtAction] = React.useState('noaction');

const [lockedInputError, setLockedInputError] = useState(null);
const [debtInputError, setDebtInputError] = useState(null);

const [collateralPurseSelected, setCollateralPurseSelected] = useState(null);
const [runPurseSelected, setRunPurseSelected] = useState(null);

Expand Down Expand Up @@ -179,19 +181,37 @@ const AdjustVaultForm = ({

const updateLockedDelta = (collAction, collDelta) => {
if (collAction === 'deposit') {
setLockedInputError(null);
onLockedDeltaChange(AmountMath.add(locked, collDelta));
}
if (collAction === 'withdraw') {
onLockedDeltaChange(AmountMath.subtract(locked, collDelta));
let newAmount;
try {
newAmount = AmountMath.subtract(locked, collDelta);
} catch {
setLockedInputError('Insufficient locked balance');
return;
}
setLockedInputError(null);
onLockedDeltaChange(newAmount);
}
};

const updateDebtDelta = (dAction, dDelta) => {
if (dAction === 'borrow') {
setDebtInputError(null);
onDebtDeltaChange(AmountMath.add(debt, dDelta));
}
if (dAction === 'repay') {
onDebtDeltaChange(AmountMath.subtract(debt, dDelta));
let newAmount;
try {
newAmount = AmountMath.subtract(debt, dDelta);
} catch {
setDebtInputError('Insufficient debt balance');
return;
}
setDebtInputError(null);
onDebtDeltaChange(newAmount);
}
};

Expand Down Expand Up @@ -246,6 +266,7 @@ const AdjustVaultForm = ({
setCollateralAction={handleCollateralAction}
/>
<NatPurseAmountInput
error={lockedInputError}
purses={purses}
purseSelected={collateralPurseSelected}
amountValue={lockedDelta && lockedDelta.value}
Expand All @@ -272,6 +293,7 @@ const AdjustVaultForm = ({
setDebtAction={handleDebtAction}
/>
<NatPurseAmountInput
error={debtInputError}
purses={purses}
purseSelected={runPurseSelected}
amountValue={debtDelta && debtDelta.value}
Expand All @@ -291,22 +313,14 @@ const AdjustVaultForm = ({
justify="flex-end"
>
<Grid item>
<Button
className={classes.button}
variant="contained"
color="primary"
startIcon={<DeleteIcon />}
onClick={() => setRedirect('/treasury')}
>
Cancel
</Button>
<Button onClick={() => setRedirect('/treasury')}>Cancel</Button>
</Grid>
<Grid item>
<Button
className={classes.button}
variant="contained"
color="primary"
disabled={invalidOffer}
disabled={invalidOffer || debtInputError || lockedInputError}
startIcon={<SendIcon />}
onClick={handleSubmission}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ const PurseAmountInput = ({
onAmountChange,
brandToFilter,
brandToInfo,
error,
purseSelectorDisabled = false,
amountInputDisabled = false,
}) => {
Expand Down Expand Up @@ -75,6 +76,8 @@ const PurseAmountInput = ({
decimalPlaces={decimalPlaces}
placesToShow={placesToShow}
disabled={amountInputDisabled}
error={error}
helperText={error ?? ' '}
/>
</Grid>
</Grid>
Expand Down

0 comments on commit 03ac0e3

Please sign in to comment.