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'; ...@@ -11,11 +11,12 @@ import PlusBlue from '../../assets/images/plus-blue.svg';
import PlusGrey from '../../assets/images/plus-grey.svg'; import PlusGrey from '../../assets/images/plus-grey.svg';
import DropdownBlue from "../../assets/images/dropdown-blue.svg"; import DropdownBlue from "../../assets/images/dropdown-blue.svg";
import DropupBlue from "../../assets/images/dropup-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 ModeSelector from './ModeSelector';
import {BigNumber as BN} from 'bignumber.js'; import {BigNumber as BN} from 'bignumber.js';
import EXCHANGE_ABI from '../../abi/exchange'; import EXCHANGE_ABI from '../../abi/exchange';
import "./pool.scss"; import "./pool.scss";
import promisify from "../../helpers/web3-promisfy";
import ReactGA from "react-ga"; import ReactGA from "react-ga";
const INPUT = 0; const INPUT = 0;
...@@ -152,9 +153,14 @@ class AddLiquidity extends Component { ...@@ -152,9 +153,14 @@ class AddLiquidity extends Component {
const { value: ethReserve } = selectors().getBalance(fromToken[outputCurrency]); const { value: ethReserve } = selectors().getBalance(fromToken[outputCurrency]);
const totalLiquidity = await exchange.methods.totalSupply().call(); const totalLiquidity = await exchange.methods.totalSupply().call();
const liquidityMinted = BN(totalLiquidity).multipliedBy(ethAmount.dividedBy(ethReserve)); const liquidityMinted = BN(totalLiquidity).multipliedBy(ethAmount.dividedBy(ethReserve));
const blockNumber = await promisify(web3, 'getBlockNumber'); let deadline;
const block = await promisify(web3, 'getBlock', blockNumber); try {
const deadline = block.timestamp + 300; deadline = await retry(() => getBlockDeadline(web3, 300));
} catch(e) {
// TODO: Handle error.
return;
}
const MAX_LIQUIDITY_SLIPPAGE = 0.025; const MAX_LIQUIDITY_SLIPPAGE = 0.025;
const minLiquidity = this.isNewExchange() ? BN(0) : liquidityMinted.multipliedBy(1 - MAX_LIQUIDITY_SLIPPAGE); const minLiquidity = this.isNewExchange() ? BN(0) : liquidityMinted.multipliedBy(1 - MAX_LIQUIDITY_SLIPPAGE);
const maxTokens = this.isNewExchange() ? tokenAmount : tokenAmount.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"; ...@@ -11,8 +11,9 @@ import ContextualInfo from "../../components/ContextualInfo";
import OversizedPanel from "../../components/OversizedPanel"; import OversizedPanel from "../../components/OversizedPanel";
import ArrowDownBlue from "../../assets/images/arrow-down-blue.svg"; import ArrowDownBlue from "../../assets/images/arrow-down-blue.svg";
import ArrowDownGrey from "../../assets/images/arrow-down-grey.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 EXCHANGE_ABI from "../../abi/exchange";
import promisify from "../../helpers/web3-promisfy";
import ReactGA from "react-ga"; import ReactGA from "react-ga";
class RemoveLiquidity extends Component { class RemoveLiquidity extends Component {
...@@ -105,9 +106,13 @@ class RemoveLiquidity extends Component { ...@@ -105,9 +106,13 @@ class RemoveLiquidity extends Component {
const ownership = amount.dividedBy(totalSupply); const ownership = amount.dividedBy(totalSupply);
const ethWithdrawn = ethReserve.multipliedBy(ownership); const ethWithdrawn = ethReserve.multipliedBy(ownership);
const tokenWithdrawn = tokenReserve.multipliedBy(ownership); const tokenWithdrawn = tokenReserve.multipliedBy(ownership);
const blockNumber = await promisify(web3, 'getBlockNumber'); let deadline;
const block = await promisify(web3, 'getBlock', blockNumber); try {
const deadline = block.timestamp + 300; deadline = await retry(() => getBlockDeadline(web3, 300));
} catch(e) {
// TODO: Handle error.
return;
}
exchange.methods.removeLiquidity( exchange.methods.removeLiquidity(
amount.toFixed(0), amount.toFixed(0),
......
...@@ -14,10 +14,11 @@ import DropdownBlue from "../../assets/images/dropdown-blue.svg"; ...@@ -14,10 +14,11 @@ import DropdownBlue from "../../assets/images/dropdown-blue.svg";
import DropupBlue from "../../assets/images/dropup-blue.svg"; import DropupBlue from "../../assets/images/dropup-blue.svg";
import ArrowDownBlue from '../../assets/images/arrow-down-blue.svg'; import ArrowDownBlue from '../../assets/images/arrow-down-blue.svg';
import ArrowDownGrey from '../../assets/images/arrow-down-grey.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 EXCHANGE_ABI from '../../abi/exchange';
import "./send.scss"; import "./send.scss";
import promisify from "../../helpers/web3-promisfy";
import MediaQuery from "react-responsive"; import MediaQuery from "react-responsive";
import ReactGA from "react-ga"; import ReactGA from "react-ga";
...@@ -374,9 +375,13 @@ class Send extends Component { ...@@ -374,9 +375,13 @@ class Send extends Component {
const type = getSendType(inputCurrency, outputCurrency); const type = getSendType(inputCurrency, outputCurrency);
const { decimals: inputDecimals } = selectors().getBalance(account, inputCurrency); const { decimals: inputDecimals } = selectors().getBalance(account, inputCurrency);
const { decimals: outputDecimals } = selectors().getBalance(account, outputCurrency); const { decimals: outputDecimals } = selectors().getBalance(account, outputCurrency);
const blockNumber = await promisify(web3, 'getBlockNumber'); let deadline;
const block = await promisify(web3, 'getBlock', blockNumber); try {
const deadline = block.timestamp + 300; deadline = await retry(() => getBlockDeadline(web3, 300));
} catch(e) {
// TODO: Handle error.
return;
}
if (lastEditedField === INPUT) { if (lastEditedField === INPUT) {
ReactGA.event({ ReactGA.event({
......
...@@ -15,10 +15,11 @@ import DropdownBlue from "../../assets/images/dropdown-blue.svg"; ...@@ -15,10 +15,11 @@ import DropdownBlue from "../../assets/images/dropdown-blue.svg";
import DropupBlue from "../../assets/images/dropup-blue.svg"; import DropupBlue from "../../assets/images/dropup-blue.svg";
import ArrowDownBlue from '../../assets/images/arrow-down-blue.svg'; import ArrowDownBlue from '../../assets/images/arrow-down-blue.svg';
import ArrowDownGrey from '../../assets/images/arrow-down-grey.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 EXCHANGE_ABI from '../../abi/exchange';
import "./swap.scss"; import "./swap.scss";
import promisify from "../../helpers/web3-promisfy";
const INPUT = 0; const INPUT = 0;
const OUTPUT = 1; const OUTPUT = 1;
...@@ -370,9 +371,13 @@ class Swap extends Component { ...@@ -370,9 +371,13 @@ class Swap extends Component {
const type = getSwapType(inputCurrency, outputCurrency); const type = getSwapType(inputCurrency, outputCurrency);
const { decimals: inputDecimals } = selectors().getBalance(account, inputCurrency); const { decimals: inputDecimals } = selectors().getBalance(account, inputCurrency);
const { decimals: outputDecimals } = selectors().getBalance(account, outputCurrency); const { decimals: outputDecimals } = selectors().getBalance(account, outputCurrency);
const blockNumber = await promisify(web3, 'getBlockNumber'); let deadline;
const block = await promisify(web3, 'getBlock', blockNumber); try {
const deadline = block.timestamp + 300; deadline = await retry(() => getBlockDeadline(web3, 300));
} catch(e) {
// TODO: Handle error.
return;
}
if (lastEditedField === INPUT) { if (lastEditedField === INPUT) {
// swap 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