Commit 7608485f authored by Kenny Tran's avatar Kenny Tran Committed by Chi Kei Chan

Retry deadline if undefined (#134)

* Retry deadline if undefined

* Remove console logs
parent 6c57d782
export function retry(func, retryCount=5) {
return new Promise((resolve, reject) => {
func().then((...args) => {
resolve(...args);
}, () => {
if (retryCount === 0) {
return reject();
}
setTimeout(() => retry(func, retryCount - 1).then(resolve, reject), 50);
});
});
}
import promisify from "./web3-promisfy";
export function getBlockDeadline(web3, deadline) {
return new Promise(async (resolve, reject) => {
const blockNumber = await promisify(web3, 'getBlockNumber');
if (!blockNumber && blockNumber !== 0) {
return reject();
}
const block = await promisify(web3, 'getBlock', blockNumber);
if (!block) {
return reject();
}
resolve(block.timestamp + deadline);
});
}
......@@ -11,11 +11,12 @@ import PlusBlue from '../../assets/images/plus-blue.svg';
import PlusGrey from '../../assets/images/plus-grey.svg';
import DropdownBlue from "../../assets/images/dropdown-blue.svg";
import DropupBlue from "../../assets/images/dropup-blue.svg";
import { getBlockDeadline } from '../../helpers/web3-utils';
import { retry } from '../../helpers/promise-utils';
import ModeSelector from './ModeSelector';
import {BigNumber as BN} from 'bignumber.js';
import EXCHANGE_ABI from '../../abi/exchange';
import "./pool.scss";
import promisify from "../../helpers/web3-promisfy";
import ReactGA from "react-ga";
const INPUT = 0;
......@@ -152,9 +153,14 @@ class AddLiquidity extends Component {
const { value: ethReserve } = selectors().getBalance(fromToken[outputCurrency]);
const totalLiquidity = await exchange.methods.totalSupply().call();
const liquidityMinted = BN(totalLiquidity).multipliedBy(ethAmount.dividedBy(ethReserve));
const blockNumber = await promisify(web3, 'getBlockNumber');
const block = await promisify(web3, 'getBlock', blockNumber);
const deadline = block.timestamp + 300;
let deadline;
try {
deadline = await retry(() => getBlockDeadline(web3, 300));
} catch(e) {
// TODO: Handle error.
return;
}
const MAX_LIQUIDITY_SLIPPAGE = 0.025;
const minLiquidity = this.isNewExchange() ? BN(0) : liquidityMinted.multipliedBy(1 - MAX_LIQUIDITY_SLIPPAGE);
const maxTokens = this.isNewExchange() ? tokenAmount : tokenAmount.multipliedBy(1 + MAX_LIQUIDITY_SLIPPAGE);
......
......@@ -11,8 +11,9 @@ import ContextualInfo from "../../components/ContextualInfo";
import OversizedPanel from "../../components/OversizedPanel";
import ArrowDownBlue from "../../assets/images/arrow-down-blue.svg";
import ArrowDownGrey from "../../assets/images/arrow-down-grey.svg";
import { getBlockDeadline } from '../../helpers/web3-utils';
import { retry } from '../../helpers/promise-utils';
import EXCHANGE_ABI from "../../abi/exchange";
import promisify from "../../helpers/web3-promisfy";
import ReactGA from "react-ga";
class RemoveLiquidity extends Component {
......@@ -105,9 +106,13 @@ class RemoveLiquidity extends Component {
const ownership = amount.dividedBy(totalSupply);
const ethWithdrawn = ethReserve.multipliedBy(ownership);
const tokenWithdrawn = tokenReserve.multipliedBy(ownership);
const blockNumber = await promisify(web3, 'getBlockNumber');
const block = await promisify(web3, 'getBlock', blockNumber);
const deadline = block.timestamp + 300;
let deadline;
try {
deadline = await retry(() => getBlockDeadline(web3, 300));
} catch(e) {
// TODO: Handle error.
return;
}
exchange.methods.removeLiquidity(
amount.toFixed(0),
......
......@@ -14,10 +14,11 @@ import DropdownBlue from "../../assets/images/dropdown-blue.svg";
import DropupBlue from "../../assets/images/dropup-blue.svg";
import ArrowDownBlue from '../../assets/images/arrow-down-blue.svg';
import ArrowDownGrey from '../../assets/images/arrow-down-grey.svg';
import { getBlockDeadline } from '../../helpers/web3-utils';
import { retry } from '../../helpers/promise-utils';
import EXCHANGE_ABI from '../../abi/exchange';
import "./send.scss";
import promisify from "../../helpers/web3-promisfy";
import MediaQuery from "react-responsive";
import ReactGA from "react-ga";
......@@ -374,9 +375,13 @@ class Send extends Component {
const type = getSendType(inputCurrency, outputCurrency);
const { decimals: inputDecimals } = selectors().getBalance(account, inputCurrency);
const { decimals: outputDecimals } = selectors().getBalance(account, outputCurrency);
const blockNumber = await promisify(web3, 'getBlockNumber');
const block = await promisify(web3, 'getBlock', blockNumber);
const deadline = block.timestamp + 300;
let deadline;
try {
deadline = await retry(() => getBlockDeadline(web3, 300));
} catch(e) {
// TODO: Handle error.
return;
}
if (lastEditedField === INPUT) {
ReactGA.event({
......
......@@ -15,10 +15,11 @@ import DropdownBlue from "../../assets/images/dropdown-blue.svg";
import DropupBlue from "../../assets/images/dropup-blue.svg";
import ArrowDownBlue from '../../assets/images/arrow-down-blue.svg';
import ArrowDownGrey from '../../assets/images/arrow-down-grey.svg';
import { getBlockDeadline } from '../../helpers/web3-utils';
import { retry } from '../../helpers/promise-utils';
import EXCHANGE_ABI from '../../abi/exchange';
import "./swap.scss";
import promisify from "../../helpers/web3-promisfy";
const INPUT = 0;
const OUTPUT = 1;
......@@ -370,9 +371,13 @@ class Swap extends Component {
const type = getSwapType(inputCurrency, outputCurrency);
const { decimals: inputDecimals } = selectors().getBalance(account, inputCurrency);
const { decimals: outputDecimals } = selectors().getBalance(account, outputCurrency);
const blockNumber = await promisify(web3, 'getBlockNumber');
const block = await promisify(web3, 'getBlock', blockNumber);
const deadline = block.timestamp + 300;
let deadline;
try {
deadline = await retry(() => getBlockDeadline(web3, 300));
} catch(e) {
// TODO: Handle error.
return;
}
if (lastEditedField === INPUT) {
// swap input
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment