From da3898f6cf967b900c93d39d077c5c30c3ede3fe Mon Sep 17 00:00:00 2001 From: Joshua Levine Date: Fri, 10 May 2019 17:00:42 -0400 Subject: [PATCH 01/18] fix compilier warnings --- src/components/CDPList.js | 2 +- src/reducers/cdps.js | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/CDPList.js b/src/components/CDPList.js index a61e80b1b..6239544ca 100644 --- a/src/components/CDPList.js +++ b/src/components/CDPList.js @@ -1,4 +1,4 @@ -import React, { memo, Fragment, useState, useEffect } from 'react'; +import React, { memo, Fragment, useEffect } from 'react'; import styled from 'styled-components'; // import { ReactComponent as MakerSmall } from '../images/maker-small.svg'; import { ReactComponent as Plus } from '../images/plus.svg'; diff --git a/src/reducers/cdps.js b/src/reducers/cdps.js index 4cb02666d..5cd1f4654 100644 --- a/src/reducers/cdps.js +++ b/src/reducers/cdps.js @@ -1,7 +1,5 @@ import produce from 'immer'; -import { getMaker } from '../maker'; - const FETCHED_CDPS = 'cdps/FETCHED_CDPS'; export const initialState = { From d1f15a550af8a724ec91f47ccccad42cd016a38b Mon Sep 17 00:00:00 2001 From: Tyler Sorensen Date: Fri, 10 May 2019 20:33:28 -0400 Subject: [PATCH 02/18] fix typo --- src/reducers/multicall/system.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/reducers/multicall/system.js b/src/reducers/multicall/system.js index c9a05713c..5d04aa61b 100644 --- a/src/reducers/multicall/system.js +++ b/src/reducers/multicall/system.js @@ -27,7 +27,7 @@ const globalDebtCeiling = addresses => ({ returns: [[GLOBAL_DEBT_CEILING, val => fromRad(val)]] }); -const debtAuctionLotSzie = addresses => ({ +const debtAuctionLotSize = addresses => ({ target: addresses.MCD_VOW, call: ['sump()(uint256)'], returns: [[DEBT_AUCTION_LOT_SIZE, val => DAI.rad(val)]] @@ -50,7 +50,7 @@ export function createCDPSystemModel(addresses) { totalDebt, baseRate, globalDebtCeiling, - debtAuctionLotSzie, + debtAuctionLotSize, surplusAuctionLotSize, numberOfLiquidations ].map(f => f(addresses)); From 04bfac1a31a47fbdf045fba1a8d7c636b4b4d545 Mon Sep 17 00:00:00 2001 From: Tyler Sorensen Date: Tue, 14 May 2019 14:53:15 -0400 Subject: [PATCH 03/18] CDP 289 - copy change --- src/components/CDPCreateScreens/CDPCreateDeposit.js | 1 - src/languages/_english.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/CDPCreateScreens/CDPCreateDeposit.js b/src/components/CDPCreateScreens/CDPCreateDeposit.js index 5867b909a..fd4df2592 100644 --- a/src/components/CDPCreateScreens/CDPCreateDeposit.js +++ b/src/components/CDPCreateScreens/CDPCreateDeposit.js @@ -90,7 +90,6 @@ function OpenCDPForm({ {lang.cdp_create.deposit_form_field3_after2}{' '} - {selectedIlk.data.liquidationRatio}{' '} Date: Tue, 14 May 2019 22:57:18 -0400 Subject: [PATCH 04/18] allow users to progress after setting max cdp draw & lock values CDP-286 --- src/components/CDPCreateScreens/CDPCreateDeposit.js | 10 +++++++--- src/utils/ui.js | 8 ++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/components/CDPCreateScreens/CDPCreateDeposit.js b/src/components/CDPCreateScreens/CDPCreateDeposit.js index fd4df2592..62ce22dd6 100644 --- a/src/components/CDPCreateScreens/CDPCreateDeposit.js +++ b/src/components/CDPCreateScreens/CDPCreateDeposit.js @@ -3,7 +3,11 @@ import { Box, Grid, Text, Input, Card } from '@makerdao/ui-components-core'; import { greaterThanOrEqual } from 'utils/bignumber'; import { TextBlock } from 'components/Typography'; import { getUsdPrice, calcCDPParams } from 'utils/cdp'; -import { cdpParamsAreValid, formatCollateralizationRatio } from 'utils/ui'; +import { + cdpParamsAreValid, + formatCollateralizationRatio, + prettifyNumber +} from 'utils/ui'; import lang from 'languages'; import ScreenFooter from './ScreenFooter'; @@ -67,7 +71,7 @@ function OpenCDPForm({ }); }} > - {selectedIlk.userGemBalance} {selectedIlk.data.gem} + {prettifyNumber(selectedIlk.userGemBalance)} {selectedIlk.data.gem} ], @@ -105,7 +109,7 @@ function OpenCDPForm({ }); }} > - {daiAvailable} DAI + {prettifyNumber(daiAvailable)} DAI diff --git a/src/utils/ui.js b/src/utils/ui.js index 43d1cf43b..43cd56a86 100644 --- a/src/utils/ui.js +++ b/src/utils/ui.js @@ -1,4 +1,4 @@ -import { greaterThanOrEqual } from './bignumber'; +import { greaterThan } from './bignumber'; import { calcDaiAvailable, getUsdPrice } from './cdp'; export function formatCollateralizationRatio(ratio) { @@ -61,15 +61,15 @@ export function cdpParamsAreValid( // must be positive if (parseFloat(daiToDraw) < 0 || parseFloat(gemsToLock) < 0) return false; // must have enough tokens - if (greaterThanOrEqual(gemsToLock, userGemBalance)) return false; + if (greaterThan(gemsToLock, userGemBalance)) return false; const daiAvailable = calcDaiAvailable({ - gemsToLock: parseFloat(gemsToLock), + deposited: parseFloat(gemsToLock), price: getUsdPrice(ilkData), liquidationRatio: parseFloat(ilkData.liquidationRatio) }); // must open a cdp above the liquidation threshold - if (greaterThanOrEqual(daiAvailable, daiToDraw)) return false; + if (greaterThan(daiToDraw, daiAvailable)) return false; return true; } From 5d6e51731eadbf106d7fa0944d91711d5755c19c Mon Sep 17 00:00:00 2001 From: Andrea Law Date: Thu, 16 May 2019 13:56:52 +0900 Subject: [PATCH 05/18] Deploy proxy and set allowance as part of create CDP --- src/components/CDPCreate.js | 2 + .../CDPCreateScreens/CDPCreateConfirmCDP.js | 29 +--- .../CDPCreateScreens/CDPCreateSetAllowance.js | 124 ++++++++++++++++++ src/components/CDPCreateScreens/index.js | 8 +- src/images/checkmark.svg | 3 + 5 files changed, 137 insertions(+), 29 deletions(-) create mode 100644 src/components/CDPCreateScreens/CDPCreateSetAllowance.js create mode 100644 src/images/checkmark.svg diff --git a/src/components/CDPCreate.js b/src/components/CDPCreate.js index 31f1f915e..918702529 100644 --- a/src/components/CDPCreate.js +++ b/src/components/CDPCreate.js @@ -4,12 +4,14 @@ import StepperUI from 'components/StepperUI'; import StepperHeader from 'components/StepperHeader'; import { CDPCreateSelectCollateral, + CDPCreateSetAllowance, CDPCreateConfirmCDP, CDPCreateDeposit } from 'components/CDPCreateScreens'; const screens = [ ['Select Collateral', props => ], + ['Deploy Proxy', props => ], ['Generate Dai', props => ], ['Confirmation', props => ] ]; diff --git a/src/components/CDPCreateScreens/CDPCreateConfirmCDP.js b/src/components/CDPCreateScreens/CDPCreateConfirmCDP.js index aa3eef3c1..074314bfe 100644 --- a/src/components/CDPCreateScreens/CDPCreateConfirmCDP.js +++ b/src/components/CDPCreateScreens/CDPCreateConfirmCDP.js @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState } from 'react'; import { Box, Grid, @@ -9,11 +9,9 @@ import { Button, Link } from '@makerdao/ui-components-core'; -import LoadingLayout from 'layouts/LoadingLayout'; import useMaker from 'hooks/useMaker'; import useStore from 'hooks/useStore'; import lang from 'languages'; -import { MAX_UINT_BN } from 'utils/units'; import { calcCDPParams } from 'utils/cdp'; import { formatCollateralizationRatio } from 'utils/ui'; import { etherscanLink } from 'utils/ethereum'; @@ -167,7 +165,6 @@ const CDPCreateConfirmCDP = ({ dispatch, cdpParams, selectedIlk, onClose }) => { const { gemsToLock, daiToDraw } = cdpParams; - const [canCreateCDP, setCanCreateCDP] = useState(false); const [openCDPTxHash, setOpenCDPTxHash] = useState(null); async function capturedDispatch(payload) { @@ -192,30 +189,6 @@ const CDPCreateConfirmCDP = ({ dispatch, cdpParams, selectedIlk, onClose }) => { }); } - async function ensureProxyWithGemApprovals() { - try { - const proxyAddress = await maker.service('proxy').ensureProxy(); - if (selectedIlk.currency.symbol !== 'ETH') { - const gemToken = maker.getToken(selectedIlk.currency.symbol); - const gemAllowanceSet = (await gemToken.allowance( - maker.currentAddress(), - proxyAddress - )).eq(MAX_UINT_BN); - - if (!gemAllowanceSet) await gemToken.approveUnlimited(proxyAddress); - } - setCanCreateCDP(true); - } catch (err) { - console.error(err); - } - } - - useEffect(() => { - ensureProxyWithGemApprovals(); - }, []); - - if (!canCreateCDP) return ; - if (openCDPTxHash) return ; diff --git a/src/components/CDPCreateScreens/CDPCreateSetAllowance.js b/src/components/CDPCreateScreens/CDPCreateSetAllowance.js new file mode 100644 index 000000000..2310f35dd --- /dev/null +++ b/src/components/CDPCreateScreens/CDPCreateSetAllowance.js @@ -0,0 +1,124 @@ +import React, { useEffect, useState } from 'react'; +import { Box, Text, Card, Button, Grid } from '@makerdao/ui-components-core'; + +import ScreenFooter from './ScreenFooter'; +import useMaker from 'hooks/useMaker'; +import { MAX_UINT_BN } from 'utils/units'; + +import { ReactComponent as Checkmark } from 'images/checkmark.svg'; + +const SuccessButton = () => { + return ( + + ); +}; + +const CDPCreateSetAllowance = ({ selectedIlk, dispatch }) => { + const { maker, account } = useMaker(); + const [loading, setLoading] = useState(true); + const [isDeployingProxy, setIsDeployingProxy] = useState(false); + const [isSettingAllowance, setIsSettingAllowance] = useState(false); + const [proxyAddress, setProxyAddress] = useState(''); + const [hasAllowance, setHasAllowance] = useState(false); + + useEffect(() => { + const checkProxyAndAllowance = async () => { + setLoading(true); + try { + const proxyAddress = await maker.service('proxy').currentProxy(); + setProxyAddress(proxyAddress); + if (selectedIlk.currency.symbol !== 'ETH') { + const gemToken = maker.getToken(selectedIlk.currency.symbol); + const gemAllowanceSet = (await gemToken.allowance( + maker.currentAddress(), + proxyAddress + )).eq(MAX_UINT_BN); + setHasAllowance(gemAllowanceSet); + } else { + setHasAllowance(true); + } + } catch (err) {} + setLoading(false); + }; + + checkProxyAndAllowance(); + }, [maker, account]); + + async function deployProxy() { + setIsDeployingProxy(true); + try { + const proxyAddress = await maker.service('proxy').ensureProxy(); + setProxyAddress(proxyAddress); + } catch (err) {} + setIsDeployingProxy(false); + } + + async function setAllowance() { + setIsSettingAllowance(true); + try { + const gemToken = maker.getToken(selectedIlk.currency.symbol); + await gemToken.approveUnlimited(proxyAddress); + setHasAllowance(true); + } catch (err) {} + setIsSettingAllowance(false); + } + + return ( + + + Deploy Proxy and Set Allowance + + + + Deploy proxy + + Proxies are used in the CDP Portal to bundle multiple transactions + into one, saving transaction time and gas costs. This only has to be + done once. + + {proxyAddress ? ( + + ) : ( + + )} + + + Set allowance + + This permission allows Maker smart contracts to interact with your + ETH. This has to be done once for each new collateral type. + + {hasAllowance ? ( + + ) : ( + + )} + + + + + ); +}; + +export default CDPCreateSetAllowance; diff --git a/src/components/CDPCreateScreens/index.js b/src/components/CDPCreateScreens/index.js index 90abde029..d5890ca1d 100644 --- a/src/components/CDPCreateScreens/index.js +++ b/src/components/CDPCreateScreens/index.js @@ -1,5 +1,11 @@ import CDPCreateDeposit from './CDPCreateDeposit'; import CDPCreateSelectCollateral from './CDPCreateSelectCollateral'; +import CDPCreateSetAllowance from './CDPCreateSetAllowance'; import CDPCreateConfirmCDP from './CDPCreateConfirmCDP'; -export { CDPCreateSelectCollateral, CDPCreateConfirmCDP, CDPCreateDeposit }; +export { + CDPCreateSelectCollateral, + CDPCreateSetAllowance, + CDPCreateConfirmCDP, + CDPCreateDeposit +}; diff --git a/src/images/checkmark.svg b/src/images/checkmark.svg new file mode 100644 index 000000000..5f482aed9 --- /dev/null +++ b/src/images/checkmark.svg @@ -0,0 +1,3 @@ + + + From 8c7e80beaf193f003bbc9319e98bafd5cb8a9529 Mon Sep 17 00:00:00 2001 From: Andrea Law Date: Fri, 17 May 2019 12:42:21 +0900 Subject: [PATCH 06/18] CDP-283 Show other wallets on landing page --- src/components/BrowserProviderConnect.js | 73 +++++++++++++++++++++++ src/components/MetaMaskConnect.js | 47 --------------- src/components/SidebarAccountConnect.js | 4 +- src/hooks/useMaker.js | 14 ++--- src/images/alpha-wallet-logo.png | Bin 0 -> 3929 bytes src/images/coinbase-wallet.png | Bin 0 -> 61095 bytes src/images/imtoken-logo.svg | 27 +++++++++ src/images/trust-logo.svg | 8 +++ src/languages/_english.json | 4 ++ src/pages/Landing.js | 27 ++++----- src/utils/web3.js | 50 ++++++++++++++++ 11 files changed, 183 insertions(+), 71 deletions(-) create mode 100644 src/components/BrowserProviderConnect.js delete mode 100644 src/components/MetaMaskConnect.js create mode 100644 src/images/alpha-wallet-logo.png create mode 100644 src/images/coinbase-wallet.png create mode 100644 src/images/imtoken-logo.svg create mode 100644 src/images/trust-logo.svg create mode 100644 src/utils/web3.js diff --git a/src/components/BrowserProviderConnect.js b/src/components/BrowserProviderConnect.js new file mode 100644 index 000000000..c48333d37 --- /dev/null +++ b/src/components/BrowserProviderConnect.js @@ -0,0 +1,73 @@ +import React from 'react'; + +import lang from 'languages'; +import styled from 'styled-components'; + +import { useNavigation } from 'react-navi'; +import { Button, Flex } from '@makerdao/ui-components-core'; +import { ReactComponent as MetaMaskLogo } from 'images/metamask.svg'; +import { ReactComponent as TrustLogo } from 'images/trust-logo.svg'; +import { ReactComponent as ImTokenLogo } from 'images/imtoken-logo.svg'; +import coinbaseWalletLogo from 'images/coinbase-wallet.png'; +import alphaWalletLogo from 'images/alpha-wallet-logo.png'; +import useMaker from 'hooks/useMaker'; +import { wallets } from 'utils/web3'; + +// hack to get around button padding for now +const MMLogo = styled(MetaMaskLogo)` + margin-top: -5px; + margin-bottom: -5px; +`; + +export default function BrowserProviderConnect({ provider }) { + const { + authenticated: makerAuthenticated, + connectBrowserProvider + } = useMaker(); + const navigation = useNavigation(); + + return ( + + ); +} diff --git a/src/components/MetaMaskConnect.js b/src/components/MetaMaskConnect.js deleted file mode 100644 index 1f3d85bad..000000000 --- a/src/components/MetaMaskConnect.js +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react'; - -import lang from 'languages'; -import styled from 'styled-components'; - -import { useNavigation } from 'react-navi'; -import { Button, Flex } from '@makerdao/ui-components-core'; -import { ReactComponent as MetaMaskLogo } from 'images/metamask.svg'; -import useMaker from 'hooks/useMaker'; - -// hack to get around button padding for now -const MMLogo = styled(MetaMaskLogo)` - margin-top: -5px; - margin-bottom: -5px; -`; - -export default function MetaMaskConnect() { - const { authenticated: makerAuthenticated, connectMetamask } = useMaker(); - const navigation = useNavigation(); - - return ( - - ); -} diff --git a/src/components/SidebarAccountConnect.js b/src/components/SidebarAccountConnect.js index 3e0142872..e14fbcbca 100644 --- a/src/components/SidebarAccountConnect.js +++ b/src/components/SidebarAccountConnect.js @@ -4,11 +4,11 @@ import { Button, Text } from '@makerdao/ui-components-core'; import useMaker from 'hooks/useMaker'; export default function AccountConnect() { - const { connectMetamask } = useMaker(); + const { connectBrowserProvider } = useMaker(); const connectOnClick = async () => { try { - await connectMetamask(); + await connectBrowserProvider(); } catch (err) { window.alert(err); } diff --git a/src/hooks/useMaker.js b/src/hooks/useMaker.js index 6486659ce..e23f86fba 100644 --- a/src/hooks/useMaker.js +++ b/src/hooks/useMaker.js @@ -41,7 +41,7 @@ function useMaker() { .listAccounts() .find(acc => acc.address.toUpperCase() === address.toUpperCase()); - const connectMetamask = async () => { + const connectBrowserProvider = async () => { const networkId = maker.service('web3').networkId(); const browserProvider = await checkEthereumProvider(); @@ -56,25 +56,25 @@ function useMaker() { 'browser ethereum provider providing incorrect or non-existent address' ); - let metaMaskAccount; + let account; if (maker.service('accounts').hasAccount) { const matchedAccount = _getMatchedAccount(browserProvider.address); if (!matchedAccount) { - metaMaskAccount = await maker.addAccount({ + account = await maker.addAccount({ type: 'browser', autoSwitch: true }); } else { - metaMaskAccount = matchedAccount; + account = matchedAccount; } } else { - metaMaskAccount = await maker.addAccount({ + account = await maker.addAccount({ type: 'browser', autoSwitch: true }); } - maker.useAccountWithAddress(metaMaskAccount.address); + maker.useAccountWithAddress(account.address); const connectedAddress = maker.currentAddress(); return connectedAddress; }; @@ -83,7 +83,7 @@ function useMaker() { maker, authenticated, isConnectedToProvider, - connectMetamask, + connectBrowserProvider, account, transactions, newTxListener, diff --git a/src/images/alpha-wallet-logo.png b/src/images/alpha-wallet-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d25e68d8dc3dccd29c0788b506091f5baf7e300c GIT binary patch literal 3929 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 literal 0 HcmV?d00001 diff --git a/src/images/coinbase-wallet.png b/src/images/coinbase-wallet.png new file mode 100644 index 0000000000000000000000000000000000000000..f565e818b0c84e3511adbab9c312129c336e9e87 GIT binary patch literal 61095 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%0DhBDlCyGHN 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 literal 0 HcmV?d00001 diff --git a/src/images/imtoken-logo.svg b/src/images/imtoken-logo.svg new file mode 100644 index 000000000..d14a03e2e --- /dev/null +++ b/src/images/imtoken-logo.svg @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/src/images/trust-logo.svg b/src/images/trust-logo.svg new file mode 100644 index 000000000..38a9e335a --- /dev/null +++ b/src/images/trust-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/languages/_english.json b/src/languages/_english.json index b4fca780e..a27151300 100644 --- a/src/languages/_english.json +++ b/src/languages/_english.json @@ -22,6 +22,10 @@ "title": "Spend crypto without leaving your position.", "subtitle": "Leverage your crypto assets to generate Dai, a decentralized cryptocurrency pegged at the value of 1 US dollar.", "metamask": "MetaMask", + "trust": "Trust", + "coinbase": "Coinbase Wallet", + "imtoken": "ImToken", + "alphawallet": "Alpha Wallet", "ledger_nano": "Ledger Nano", "trezor": "Trezor", "read_only": "Read-Only", diff --git a/src/pages/Landing.js b/src/pages/Landing.js index 1f67c5a91..e4005662f 100644 --- a/src/pages/Landing.js +++ b/src/pages/Landing.js @@ -2,10 +2,10 @@ import React from 'react'; import { hot } from 'react-hot-loader/root'; import Footer from '@makerdao/ui-components-footer'; import Header from '@makerdao/ui-components-header'; -import { Box } from '@makerdao/ui-components-core'; +import { Box, Grid } from '@makerdao/ui-components-core'; import lang from 'languages'; -import MetaMaskConnect from 'components/MetaMaskConnect'; +import BrowserProviderConnect from 'components/BrowserProviderConnect'; import ReadOnlyConnect from 'components/ReadOnlyConnect'; import HardwareWalletConnect from 'components/HardwareWalletConnect'; @@ -14,8 +14,11 @@ import WalletConnect from 'components/WalletConnect'; import { AccountTypes } from '../utils/constants'; import LandingHeroLayout from 'layouts/LandingHeroLayout'; import { Title, Subtitle } from 'components/Typography'; +import { getWebClientProviderName } from 'utils/web3'; function Landing() { + const providerName = getWebClientProviderName(); + return (
@@ -32,19 +35,13 @@ function Landing() { {lang.landing_page.subtitle} - - {[ - , - , - , - , - - ].map(comp => ( - - {comp} - - ))} - + + + + + + +