From e2fa2cc604aa7d874ed089104f08a272bba4acea Mon Sep 17 00:00:00 2001 From: Barry Gitarts Date: Wed, 15 Aug 2018 15:11:55 -0400 Subject: [PATCH] add toggle approved helper function --- app/components/ens/registerSubDomain.js | 1 + app/utils/web3Helpers.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/app/components/ens/registerSubDomain.js b/app/components/ens/registerSubDomain.js index 5b59a05..ca82db0 100644 --- a/app/components/ens/registerSubDomain.js +++ b/app/components/ens/registerSubDomain.js @@ -1,5 +1,6 @@ import web3 from "Embark/web3" import ENSSubdomainRegistry from 'Embark/contracts/ENSSubdomainRegistry'; +import TestToken from 'Embark/contracts/TestToken'; import React from 'react'; import { connect } from 'react-redux'; import Hidden from '@material-ui/core/Hidden'; diff --git a/app/utils/web3Helpers.js b/app/utils/web3Helpers.js index fabebaa..ae234aa 100644 --- a/app/utils/web3Helpers.js +++ b/app/utils/web3Helpers.js @@ -1,3 +1,17 @@ import web3 from "Embark/web3" +import BigNumber from 'bignumber.js'; +// By default BigNumber's `toString` method converts to exponential notation if the value has +// more then 20 digits. We want to avoid this behavior, so we set EXPONENTIAL_AT to a high number +BigNumber.config({ + EXPONENTIAL_AT: 1000, +}); +const unlimitedAllowance = new BigNumber(2).pow(256).sub(1); export const getDefaultAccount = () => web3.eth.defaultAccount; +export const toggleApproved = (token, spender, approved, onlyApprove = false) => { + const isApproved = !!Number(approved); + if (isApproved && onlyApprove) return; + const { approve } = token.methods; + const amountToApprove = isApproved ? 0 : unlimitedAllowance; + return approve(spender,amountToApprove).send(); +}