Skip to content

Commit 80d684c

Browse files
fix: all wallet flows to use ethers (#395)
* fix: all wallet flows to use only ethers libraries * feat: remove ethereumjs-wallet * fix: remove the buggy `/wallet` bee call and use provider
1 parent caea5ae commit 80d684c

File tree

15 files changed

+121
-519
lines changed

15 files changed

+121
-519
lines changed

package-lock.json

Lines changed: 3 additions & 369 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
"buffer": "^6.0.3",
4141
"crypto": "npm:crypto-browserify",
4242
"crypto-browserify": "^3.12.0",
43-
"ethereumjs-wallet": "^1.0.2",
4443
"ethers": "^5.6.4",
4544
"file-saver": "^2.0.5",
4645
"formik": "2.2.9",

src/App.tsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ const App = ({ beeApiUrl, beeDebugApiUrl, lockedApiSettings }: Props): ReactElem
5858
<div className="App">
5959
<ThemeProvider theme={theme}>
6060
<SettingsProvider beeApiUrl={beeApiUrl} beeDebugApiUrl={beeDebugApiUrl} lockedApiSettings={lockedApiSettings}>
61-
<BeeProvider>
62-
<StampsProvider>
63-
<FileProvider>
64-
<FeedsProvider>
65-
<PlatformProvider>
66-
<TopUpProvider>
61+
<TopUpProvider>
62+
<BeeProvider>
63+
<StampsProvider>
64+
<FileProvider>
65+
<FeedsProvider>
66+
<PlatformProvider>
6767
<SnackbarProvider>
6868
<Router>
6969
<>
@@ -74,12 +74,12 @@ const App = ({ beeApiUrl, beeDebugApiUrl, lockedApiSettings }: Props): ReactElem
7474
</>
7575
</Router>
7676
</SnackbarProvider>
77-
</TopUpProvider>
78-
</PlatformProvider>
79-
</FeedsProvider>
80-
</FileProvider>
81-
</StampsProvider>
82-
</BeeProvider>
77+
</PlatformProvider>
78+
</FeedsProvider>
79+
</FileProvider>
80+
</StampsProvider>
81+
</BeeProvider>
82+
</TopUpProvider>
8383
</SettingsProvider>
8484
</ThemeProvider>
8585
</div>

src/pages/account/wallet/AccountWallet.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ import { AccountNavigation } from '../AccountNavigation'
1313
import { Header } from '../Header'
1414

1515
export function AccountWallet(): ReactElement {
16-
const { balance } = useContext(Context)
16+
const { balance, nodeAddresses } = useContext(Context)
1717

1818
const navigate = useNavigate()
1919

20-
if (!balance) {
20+
if (!balance || !nodeAddresses) {
2121
return <Loading />
2222
}
2323

2424
function onCheckTransactions() {
25-
window.open(`https://blockscout.com/xdai/mainnet/address/${balance?.address}/transactions`, '_blank')
25+
window.open(`https://blockscout.com/xdai/mainnet/address/${nodeAddresses?.ethereum}/transactions`, '_blank')
2626
}
2727

2828
function onInvite() {
@@ -46,7 +46,7 @@ export function AccountWallet(): ReactElement {
4646
</Grid>
4747
</Box>
4848
<Box mb={0.25}>
49-
<ExpandableListItemKey label="Node wallet address" value={balance.address} expanded />
49+
<ExpandableListItemKey label="Node wallet address" value={nodeAddresses.ethereum} expanded />
5050
</Box>
5151
<Box mb={0.25}>
5252
<ExpandableListItem label="XDAI balance" value={`${balance.dai.toSignificantDigits(4)} XDAI`} />

src/pages/gift-code/index.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { useSnackbar } from 'notistack'
33
import { ReactElement, useContext, useEffect, useState } from 'react'
44
import { Check, X } from 'react-feather'
55
import { useNavigate } from 'react-router'
6+
import { Wallet } from 'ethers'
67
import ExpandableListItem from '../../components/ExpandableListItem'
78
import ExpandableListItemActions from '../../components/ExpandableListItemActions'
89
import ExpandableListItemKey from '../../components/ExpandableListItemKey'
@@ -12,11 +13,10 @@ import { SwarmButton } from '../../components/SwarmButton'
1213
import { Context as BeeContext } from '../../providers/Bee'
1314
import { Context as TopUpContext } from '../../providers/TopUp'
1415
import { createGiftWallet } from '../../utils/desktop'
15-
import { generateWallet } from '../../utils/identity'
1616
import { ResolvedWallet } from '../../utils/wallet'
1717

1818
export default function Index(): ReactElement {
19-
const { giftWallets, addGiftWallet } = useContext(TopUpContext)
19+
const { giftWallets, addGiftWallet, provider } = useContext(TopUpContext)
2020
const { balance } = useContext(BeeContext)
2121

2222
const [loading, setLoading] = useState(false)
@@ -26,13 +26,13 @@ export default function Index(): ReactElement {
2626
async function mapGiftWallets() {
2727
const results = []
2828
for (const giftWallet of giftWallets) {
29-
results.push(await ResolvedWallet.make(giftWallet))
29+
results.push(await ResolvedWallet.make(giftWallet, provider))
3030
}
3131
setBalances(results)
3232
}
3333

3434
mapGiftWallets()
35-
}, [giftWallets])
35+
}, [giftWallets, provider])
3636

3737
const { enqueueSnackbar } = useSnackbar()
3838
const navigate = useNavigate()
@@ -41,9 +41,9 @@ export default function Index(): ReactElement {
4141
enqueueSnackbar('Sending funds to gift wallet...')
4242
setLoading(true)
4343
try {
44-
const wallet = generateWallet()
44+
const wallet = Wallet.createRandom()
4545
addGiftWallet(wallet)
46-
await createGiftWallet(wallet.getAddressString())
46+
await createGiftWallet(wallet.address)
4747
enqueueSnackbar('Succesfully funded gift wallet', { variant: 'success' })
4848
} catch (error) {
4949
enqueueSnackbar(`Failed to fund gift wallet: ${error}`, { variant: 'error' })

src/pages/rpc/index.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { useSnackbar } from 'notistack'
33
import { ReactElement, useContext, useState } from 'react'
44
import { Check } from 'react-feather'
55
import { useNavigate } from 'react-router'
6+
import { providers } from 'ethers'
67
import { HistoryHeader } from '../../components/HistoryHeader'
78
import { SwarmButton } from '../../components/SwarmButton'
89
import { SwarmTextInput } from '../../components/SwarmTextInput'
@@ -11,18 +12,17 @@ import { ROUTES } from '../../routes'
1112
import { Rpc } from '../../utils/rpc'
1213

1314
export default function Index(): ReactElement {
14-
const { jsonRpcProvider, setJsonRpcProvider } = useContext(Context)
15-
16-
const [provider, setProvider] = useState(jsonRpcProvider)
15+
const { providerUrl, setProviderUrl } = useContext(Context)
16+
const [localProviderUrl, setLocalProviderUrl] = useState(providerUrl)
1717

1818
const { enqueueSnackbar } = useSnackbar()
1919
const navigate = useNavigate()
2020

2121
async function onSubmit() {
2222
try {
23-
await Rpc.eth_getBlockByNumber(provider)
23+
await Rpc.eth_getBlockByNumber(new providers.JsonRpcProvider(localProviderUrl))
2424
enqueueSnackbar('Connected to RPC provider successfully.', { variant: 'success' })
25-
setJsonRpcProvider(provider)
25+
setProviderUrl(localProviderUrl)
2626
navigate(ROUTES.CONFIRMATION)
2727
} catch (error) {
2828
enqueueSnackbar('Could not connect to RPC provider.', { variant: 'error' })
@@ -49,8 +49,8 @@ export default function Index(): ReactElement {
4949
<SwarmTextInput
5050
name="rpc-endpoint"
5151
label="RPC Endpoint"
52-
onChange={event => setProvider(event.target.value)}
53-
defaultValue={jsonRpcProvider}
52+
onChange={event => setLocalProviderUrl(event.target.value)}
53+
defaultValue={providerUrl}
5454
/>
5555
</Box>
5656
<SwarmButton iconType={Check} onClick={onSubmit}>

src/pages/top-up/GiftCardFund.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { ResolvedWallet } from '../../utils/wallet'
1919

2020
export function GiftCardFund(): ReactElement {
2121
const { nodeAddresses, balance } = useContext(BeeContext)
22-
const { jsonRpcProvider } = useContext(TopUpContext)
22+
const { provider, providerUrl } = useContext(TopUpContext)
2323

2424
const [loading, setLoading] = useState(false)
2525
const [wallet, setWallet] = useState<ResolvedWallet | null>(null)
@@ -34,8 +34,8 @@ export function GiftCardFund(): ReactElement {
3434
return
3535
}
3636

37-
ResolvedWallet.make(privateKeyString).then(setWallet)
38-
}, [privateKeyString])
37+
ResolvedWallet.make(privateKeyString, provider).then(setWallet)
38+
}, [privateKeyString, provider])
3939

4040
if (!wallet || !balance) {
4141
return <Loading />
@@ -49,10 +49,10 @@ export function GiftCardFund(): ReactElement {
4949
setLoading(true)
5050

5151
try {
52-
await wallet.transfer(nodeAddresses.ethereum)
52+
await wallet.transfer(nodeAddresses.ethereum, providerUrl)
5353
enqueueSnackbar('Successfully funded node, restarting...', { variant: 'success' })
5454
await sleepMs(5_000)
55-
await upgradeToLightNode(jsonRpcProvider)
55+
await upgradeToLightNode(providerUrl)
5656
await restartBeeNode()
5757
navigate(ROUTES.RESTART_LIGHT)
5858
} catch (error) {

src/pages/top-up/GiftCardTopUpIndex.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { Box, Typography } from '@material-ui/core'
2+
import { Wallet } from 'ethers'
23
import { useSnackbar } from 'notistack'
3-
import { ReactElement, useState } from 'react'
4+
import { ReactElement, useContext, useState } from 'react'
45
import { ArrowRight } from 'react-feather'
56
import { useNavigate } from 'react-router'
7+
import { Context as TopUpContext } from '../../providers/TopUp'
68
import { HistoryHeader } from '../../components/HistoryHeader'
79
import { ProgressIndicator } from '../../components/ProgressIndicator'
810
import { SwarmButton } from '../../components/SwarmButton'
@@ -11,10 +13,10 @@ import { SwarmTextInput } from '../../components/SwarmTextInput'
1113
import { BzzToken } from '../../models/BzzToken'
1214
import { DaiToken } from '../../models/DaiToken'
1315
import { ROUTES } from '../../routes'
14-
import { getWalletFromPrivateKeyString } from '../../utils/identity'
1516
import { Rpc } from '../../utils/rpc'
1617

1718
export function GiftCardTopUpIndex(): ReactElement {
19+
const { provider } = useContext(TopUpContext)
1820
const [loading, setLoading] = useState(false)
1921
const [giftCode, setGiftCode] = useState('')
2022

@@ -24,9 +26,9 @@ export function GiftCardTopUpIndex(): ReactElement {
2426
async function onProceed() {
2527
setLoading(true)
2628
try {
27-
const wallet = getWalletFromPrivateKeyString(giftCode)
28-
const dai = new DaiToken(await Rpc._eth_getBalance(wallet.getAddressString()))
29-
const bzz = new BzzToken(await Rpc._eth_getBalanceERC20(wallet.getAddressString()))
29+
const wallet = new Wallet(giftCode, provider)
30+
const dai = new DaiToken(await Rpc._eth_getBalance(wallet.address, provider))
31+
const bzz = new BzzToken(await Rpc._eth_getBalanceERC20(wallet.address, provider))
3032

3133
if (dai.toDecimal.lt(0.001) || bzz.toDecimal.lt(0.001)) {
3234
throw Error('Gift wallet does not have enough funds')

src/pages/top-up/Swap.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ export function Swap({ header }: Props): ReactElement {
2828
const [loading, setLoading] = useState(false)
2929
const [hasSwapped, setSwapped] = useState(false)
3030

31-
const { jsonRpcProvider } = useContext(TopUpContext)
32-
const { balance } = useContext(BeeContext)
31+
const { providerUrl } = useContext(TopUpContext)
32+
const { balance, nodeAddresses } = useContext(BeeContext)
3333

3434
const navigate = useNavigate()
3535
const { enqueueSnackbar } = useSnackbar()
3636

37-
if (!balance) {
37+
if (!balance || !nodeAddresses) {
3838
return <Loading />
3939
}
4040

@@ -53,7 +53,7 @@ export function Swap({ header }: Props): ReactElement {
5353
await performSwap(daiToSwap.toString)
5454
enqueueSnackbar('Successfully swapped, restarting...', { variant: 'success' })
5555
await sleepMs(5_000)
56-
await upgradeToLightNode(jsonRpcProvider)
56+
await upgradeToLightNode(providerUrl)
5757
await restartBeeNode()
5858
navigate(ROUTES.RESTART_LIGHT)
5959
enqueueSnackbar('Upgraded to light node', { variant: 'success' })
@@ -98,7 +98,7 @@ export function Swap({ header }: Props): ReactElement {
9898
<ArrowDown size={24} color="#aaaaaa" />
9999
</Box>
100100
<Box mb={0.25}>
101-
<ExpandableListItemKey label="Funding wallet address" value={balance.address} expanded />
101+
<ExpandableListItemKey label="Funding wallet address" value={nodeAddresses.ethereum} expanded />
102102
</Box>
103103
<Box mb={0.25}>
104104
<ExpandableListItem

src/pages/top-up/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export default function Index({ header, title, p, next }: Props): ReactElement {
4040
<Box mb={4}>{p}</Box>
4141
<SwarmDivider mb={4} />
4242
<Box mb={0.25}>
43-
<ExpandableListItemKey label="Funding wallet address" value={balance.address} expanded />
43+
<ExpandableListItemKey label="Funding wallet address" value={nodeAddresses.ethereum} expanded />
4444
</Box>
4545
<Box mb={4}>
4646
<ExpandableListItem label="xDAI balance" value={balance.dai.toSignificantDigits(4)} />

0 commit comments

Comments
 (0)