Compare commits

...

4 Commits

Author SHA1 Message Date
bee-worker 463622c297 chore(master): release 0.20.1 (#549) 2022-09-15 05:46:11 -07:00
Adam Uhlíř e2dd077118 fix: rpc endpoint setting ultra-light mode logic (#547) 2022-09-15 14:42:53 +02:00
Adam Uhlíř 5295bd5b01 fix: revert bee env. variable names and add default rpc var (#545) 2022-09-15 14:29:19 +02:00
dependabot[bot] 0592995564 build(deps-dev): bump typescript from 4.8.2 to 4.8.3 (#532)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-14 12:44:55 +02:00
19 changed files with 113 additions and 108 deletions
+1 -7
View File
@@ -1,7 +1 @@
PORT=3001 PORT=3002
REACT_APP_BEE_HOST=http://localhost:1633
REACT_APP_BEE_DEBUG_HOST=http://localhost:1635
REACT_APP_BEE_DOCS_HOST=https://docs.ethswarm.org/docs/
REACT_APP_BEE_DISCORD_HOST=https://discord.gg/eKr9XPv7
REACT_APP_BLOCKCHAIN_EXPLORER_URL=https://blockscout.com/xdai/mainnet
REACT_APP_BEE_GITHUB_REPO_URL=https://api.github.com/repos/ethersphere/bee
-6
View File
@@ -1,6 +0,0 @@
REACT_APP_BEE_HOST=http://localhost:1633
REACT_APP_BEE_DEBUG_HOST=http://localhost:1635
REACT_APP_BEE_DOCS_HOST=https://docs.ethswarm.org/docs/
REACT_APP_BEE_DISCORD_HOST=https://discord.gg/eKr9XPv7
REACT_APP_BLOCKCHAIN_EXPLORER_URL=https://blockscout.com/xdai/mainnet
REACT_APP_BEE_GITHUB_REPO_URL=https://api.github.com/repos/ethersphere/bee
+8
View File
@@ -1,5 +1,13 @@
# Changelog # Changelog
## [0.20.1](https://github.com/ethersphere/bee-dashboard/compare/v0.20.0...v0.20.1) (2022-09-15)
### Bug Fixes
* revert bee env. variable names and add default rpc var ([#545](https://github.com/ethersphere/bee-dashboard/issues/545)) ([5295bd5](https://github.com/ethersphere/bee-dashboard/commit/5295bd5b012962846aa15ff12ca4234f0c8b37f7))
* rpc endpoint setting ultra-light mode logic ([#547](https://github.com/ethersphere/bee-dashboard/issues/547)) ([e2dd077](https://github.com/ethersphere/bee-dashboard/commit/e2dd077118faf3b6071fc8327e37e317e0174975))
## [0.20.0](https://github.com/ethersphere/bee-dashboard/compare/v0.19.3...v0.20.0) (2022-09-14) ## [0.20.0](https://github.com/ethersphere/bee-dashboard/compare/v0.19.3...v0.20.0) (2022-09-14)
+3 -2
View File
@@ -101,8 +101,9 @@ We support following variables:
- `REACT_APP_BEE_DESKTOP_ENABLED` (`boolean`) that toggles if the Dashboard is in Desktop mode or not. - `REACT_APP_BEE_DESKTOP_ENABLED` (`boolean`) that toggles if the Dashboard is in Desktop mode or not.
- `REACT_APP_BEE_DESKTOP_URL` (`string`) defines custom URL where the Desktop API is expected. By default, it is same origin under which the Dashboard is served. - `REACT_APP_BEE_DESKTOP_URL` (`string`) defines custom URL where the Desktop API is expected. By default, it is same origin under which the Dashboard is served.
- `REACT_APP_BEE_API_URL` (`string`) defines custom Bee API URL to be used as default one. By default, the `http://localhost:1633` is used. - `REACT_APP_BEE_HOST` (`string`) defines custom Bee API URL to be used as default one. By default, the `http://localhost:1633` is used.
- `REACT_APP_BEE_DEBUG_API_URL` (`string`) defines custom Bee Debug API URL to be used as default one. By default, the `http://localhost:1635` is used. - `REACT_APP_BEE_DEBUG_HOST` (`string`) defines custom Bee Debug API URL to be used as default one. By default, the `http://localhost:1635` is used.
- `REACT_APP_DEFAULT_RPC_URL` (`string`) defines the default RPC provider URL. Be aware, that his only configures the default value. The user can override this in Settings, which is then persisted in local store and has priority over the value set in this env. variable. By default `https://xdai.fairdatasociety.org` is used.
#### Swarm Desktop development #### Swarm Desktop development
+9 -9
View File
@@ -1,12 +1,12 @@
{ {
"name": "@ethersphere/bee-dashboard", "name": "@ethersphere/bee-dashboard",
"version": "0.20.0", "version": "0.20.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@ethersphere/bee-dashboard", "name": "@ethersphere/bee-dashboard",
"version": "0.20.0", "version": "0.20.1",
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"dependencies": { "dependencies": {
"@ethersphere/bee-js": "^5.0.0", "@ethersphere/bee-js": "^5.0.0",
@@ -99,7 +99,7 @@
"react-scripts": "^5.0.1", "react-scripts": "^5.0.1",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"ts-node": "^10.8.1", "ts-node": "^10.8.1",
"typescript": "4.8.2", "typescript": "4.8.3",
"web-vitals": "2.1.2", "web-vitals": "2.1.2",
"webpack": "^5.73.0", "webpack": "^5.73.0",
"webpack-cli": "^4.10.0" "webpack-cli": "^4.10.0"
@@ -19410,9 +19410,9 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "4.8.2", "version": "4.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
"integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
"dev": true, "dev": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
@@ -34910,9 +34910,9 @@
} }
}, },
"typescript": { "typescript": {
"version": "4.8.2", "version": "4.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
"integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
"dev": true "dev": true
}, },
"unbox-primitive": { "unbox-primitive": {
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@ethersphere/bee-dashboard", "name": "@ethersphere/bee-dashboard",
"version": "0.20.0", "version": "0.20.1",
"description": "An app which helps users to setup their Bee node and do actions like cash out cheques", "description": "An app which helps users to setup their Bee node and do actions like cash out cheques",
"keywords": [ "keywords": [
"bee", "bee",
@@ -113,7 +113,7 @@
"react-scripts": "^5.0.1", "react-scripts": "^5.0.1",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"ts-node": "^10.8.1", "ts-node": "^10.8.1",
"typescript": "4.8.2", "typescript": "4.8.3",
"web-vitals": "2.1.2", "web-vitals": "2.1.2",
"webpack": "^5.73.0", "webpack": "^5.73.0",
"webpack-cli": "^4.10.0" "webpack-cli": "^4.10.0"
+3
View File
@@ -19,6 +19,7 @@ import { theme } from './theme'
interface Props { interface Props {
beeApiUrl?: string beeApiUrl?: string
beeDebugApiUrl?: string beeDebugApiUrl?: string
defaultRpcUrl?: string
lockedApiSettings?: boolean lockedApiSettings?: boolean
isDesktop?: boolean isDesktop?: boolean
desktopUrl?: string desktopUrl?: string
@@ -28,6 +29,7 @@ interface Props {
const App = ({ const App = ({
beeApiUrl, beeApiUrl,
beeDebugApiUrl, beeDebugApiUrl,
defaultRpcUrl,
lockedApiSettings, lockedApiSettings,
isDesktop, isDesktop,
desktopUrl, desktopUrl,
@@ -39,6 +41,7 @@ const App = ({
<SettingsProvider <SettingsProvider
beeApiUrl={beeApiUrl} beeApiUrl={beeApiUrl}
beeDebugApiUrl={beeDebugApiUrl} beeDebugApiUrl={beeDebugApiUrl}
defaultRpcUrl={defaultRpcUrl}
lockedApiSettings={lockedApiSettings} lockedApiSettings={lockedApiSettings}
isDesktop={isDesktop} isDesktop={isDesktop}
desktopUrl={desktopUrl} desktopUrl={desktopUrl}
-3
View File
@@ -94,13 +94,10 @@ export interface BeeConfig {
'swap-initial-deposit': bigint 'swap-initial-deposit': bigint
mainnet: boolean mainnet: boolean
'full-node': boolean 'full-node': boolean
'chain-enable': boolean
'cors-allowed-origins': string 'cors-allowed-origins': string
'resolver-options': string 'resolver-options': string
'use-postage-snapshot': boolean 'use-postage-snapshot': boolean
'data-dir': string 'data-dir': string
transaction: string
'block-hash': string
'swap-endpoint'?: string 'swap-endpoint'?: string
} }
+10 -3
View File
@@ -6,12 +6,19 @@ import reportWebVitals from './reportWebVitals'
const desktopEnabled = Boolean(process.env.REACT_APP_BEE_DESKTOP_ENABLED) const desktopEnabled = Boolean(process.env.REACT_APP_BEE_DESKTOP_ENABLED)
const desktopUrl = process.env.REACT_APP_BEE_DESKTOP_URL const desktopUrl = process.env.REACT_APP_BEE_DESKTOP_URL
const beeApiUrl = process.env.REACT_APP_BEE_API_URL const beeApiUrl = process.env.REACT_APP_BEE_HOST
const beeDebugApiUrl = process.env.REACT_APP_BEE_DEBUG_API_URL const beeDebugApiUrl = process.env.REACT_APP_BEE_DEBUG_HOST
const defaultRpcUrl = process.env.REACT_APP_DEFAULT_RPC_URL
ReactDOM.render( ReactDOM.render(
<React.StrictMode> <React.StrictMode>
<App isDesktop={desktopEnabled} desktopUrl={desktopUrl} beeApiUrl={beeApiUrl} beeDebugApiUrl={beeDebugApiUrl} /> <App
isDesktop={desktopEnabled}
desktopUrl={desktopUrl}
beeApiUrl={beeApiUrl}
beeDebugApiUrl={beeDebugApiUrl}
defaultRpcUrl={defaultRpcUrl}
/>
</React.StrictMode>, </React.StrictMode>,
document.getElementById('root'), document.getElementById('root'),
) )
+3 -3
View File
@@ -23,7 +23,7 @@ const GIFT_WALLET_FUND_BZZ_AMOUNT = Token.fromDecimal('0.5', 16)
export default function Index(): ReactElement { export default function Index(): ReactElement {
const { giftWallets, addGiftWallet } = useContext(TopUpContext) const { giftWallets, addGiftWallet } = useContext(TopUpContext)
const { provider, desktopUrl } = useContext(SettingsContext) const { rpcProvider, desktopUrl } = useContext(SettingsContext)
const { balance } = useContext(BalanceProvider) const { balance } = useContext(BalanceProvider)
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
@@ -33,13 +33,13 @@ export default function Index(): ReactElement {
async function mapGiftWallets() { async function mapGiftWallets() {
const results = [] const results = []
for (const giftWallet of giftWallets) { for (const giftWallet of giftWallets) {
results.push(await ResolvedWallet.make(giftWallet, provider)) results.push(await ResolvedWallet.make(giftWallet, rpcProvider))
} }
setBalances(results) setBalances(results)
} }
mapGiftWallets() mapGiftWallets()
}, [giftWallets, provider]) }, [giftWallets, rpcProvider])
const { enqueueSnackbar } = useSnackbar() const { enqueueSnackbar } = useSnackbar()
const navigate = useNavigate() const navigate = useNavigate()
+33 -15
View File
@@ -5,6 +5,8 @@ import ExpandableListItemInput from '../../components/ExpandableListItemInput'
import { Context as BeeContext } from '../../providers/Bee' import { Context as BeeContext } from '../../providers/Bee'
import { Context as SettingsContext } from '../../providers/Settings' import { Context as SettingsContext } from '../../providers/Settings'
import { useSnackbar } from 'notistack' import { useSnackbar } from 'notistack'
import { restartBeeNode, setJsonRpcInDesktop } from '../../utils/desktop'
import { BeeModes } from '@ethersphere/bee-js'
export default function SettingsPage(): ReactElement { export default function SettingsPage(): ReactElement {
const { const {
@@ -16,13 +18,39 @@ export default function SettingsPage(): ReactElement {
cors, cors,
dataDir, dataDir,
ensResolver, ensResolver,
providerUrl, rpcProviderUrl,
isLoading, isLoading,
isDesktop, isDesktop,
desktopUrl,
setAndPersistJsonRpcProvider, setAndPersistJsonRpcProvider,
} = useContext(SettingsContext) } = useContext(SettingsContext)
const { refresh } = useContext(BeeContext) const { refresh, nodeInfo } = useContext(BeeContext)
const { enqueueSnackbar } = useSnackbar() const { enqueueSnackbar, closeSnackbar } = useSnackbar()
async function handleSetRpcUrl(value: string) {
try {
setAndPersistJsonRpcProvider(value)
// We can't set the RPC URL to the `swap-endpoint` Bee config value unless the Bee node is already in
// light mode as setting this config value, basically upgrades the node to light mode.
if (isDesktop && nodeInfo?.beeMode === BeeModes.LIGHT) {
await setJsonRpcInDesktop(desktopUrl, rpcProviderUrl)
const snackKey = enqueueSnackbar('RPC endpoint successfully changed, restarting Bee node...', {
variant: 'success',
})
await restartBeeNode(desktopUrl)
closeSnackbar(snackKey)
enqueueSnackbar('Bee node restarted', { variant: 'success' })
} else {
enqueueSnackbar('RPC endpoint successfully changed', { variant: 'success' })
}
await refresh()
} catch (e) {
console.error(e) //eslint-disable-line
enqueueSnackbar(`Failed to change RPC endpoint. Error: ${e}`, { variant: 'error' })
}
}
if (isLoading) { if (isLoading) {
return ( return (
@@ -49,20 +77,10 @@ export default function SettingsPage(): ReactElement {
/> />
<ExpandableListItemInput <ExpandableListItemInput
label="Blockchain RPC URL" label="Blockchain RPC URL"
value={providerUrl} value={rpcProviderUrl}
helperText="Changing the value will restart your bee node." helperText="Changing the value will restart your bee node."
confirmLabel="Save and restart" confirmLabel="Save and restart"
onConfirm={value => { onConfirm={handleSetRpcUrl}
setAndPersistJsonRpcProvider(value)
.then(() => {
refresh()
enqueueSnackbar('Settings changed, restarting bee node...', { variant: 'success' })
})
.catch(error => {
console.log(error) //eslint-disable-line
enqueueSnackbar(`Failed to change RPC endpoint. Error: ${error}`, { variant: 'success' })
})
}}
/> />
</ExpandableList> </ExpandableList>
{isDesktop && ( {isDesktop && (
+7 -7
View File
@@ -22,7 +22,7 @@ import { BeeModes } from '@ethersphere/bee-js'
export function GiftCardFund(): ReactElement { export function GiftCardFund(): ReactElement {
const { nodeAddresses, nodeInfo } = useContext(BeeContext) const { nodeAddresses, nodeInfo } = useContext(BeeContext)
const { isDesktop, desktopUrl, provider, providerUrl } = useContext(SettingsContext) const { isDesktop, desktopUrl, rpcProvider, rpcProviderUrl } = useContext(SettingsContext)
const { balance } = useContext(BalanceProvider) const { balance } = useContext(BalanceProvider)
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
@@ -34,12 +34,12 @@ export function GiftCardFund(): ReactElement {
const navigate = useNavigate() const navigate = useNavigate()
useEffect(() => { useEffect(() => {
if (!privateKeyString || !provider) { if (!privateKeyString || !rpcProvider) {
return return
} }
ResolvedWallet.make(privateKeyString, provider).then(setWallet) ResolvedWallet.make(privateKeyString, rpcProvider).then(setWallet)
}, [privateKeyString, provider]) }, [privateKeyString, rpcProvider])
if (!wallet || !balance) { if (!wallet || !balance) {
return <Loading /> return <Loading />
@@ -50,7 +50,7 @@ export function GiftCardFund(): ReactElement {
async function restart() { async function restart() {
try { try {
await sleepMs(5_000) await sleepMs(5_000)
await upgradeToLightNode(desktopUrl, providerUrl) await upgradeToLightNode(desktopUrl, rpcProviderUrl)
await restartBeeNode(desktopUrl) await restartBeeNode(desktopUrl)
enqueueSnackbar('Upgraded to light node', { variant: 'success' }) enqueueSnackbar('Upgraded to light node', { variant: 'success' })
navigate(ROUTES.RESTART_LIGHT) navigate(ROUTES.RESTART_LIGHT)
@@ -61,14 +61,14 @@ export function GiftCardFund(): ReactElement {
} }
async function onFund() { async function onFund() {
if (!wallet || !nodeAddresses || !providerUrl) { if (!wallet || !nodeAddresses || !rpcProviderUrl) {
return return
} }
setLoading(true) setLoading(true)
try { try {
await wallet.transfer(nodeAddresses.ethereum, providerUrl) await wallet.transfer(nodeAddresses.ethereum, rpcProviderUrl)
enqueueSnackbar('Successfully funded node', { variant: 'success' }) enqueueSnackbar('Successfully funded node', { variant: 'success' })
if (canUpgradeToLightNode) await restart() if (canUpgradeToLightNode) await restart()
+5 -5
View File
@@ -16,7 +16,7 @@ import { ROUTES } from '../../routes'
import { Rpc } from '../../utils/rpc' import { Rpc } from '../../utils/rpc'
export function GiftCardTopUpIndex(): ReactElement { export function GiftCardTopUpIndex(): ReactElement {
const { provider } = useContext(SettingsContext) const { rpcProvider } = useContext(SettingsContext)
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
const [giftCode, setGiftCode] = useState('') const [giftCode, setGiftCode] = useState('')
@@ -24,13 +24,13 @@ export function GiftCardTopUpIndex(): ReactElement {
const navigate = useNavigate() const navigate = useNavigate()
async function onProceed() { async function onProceed() {
if (!provider) return if (!rpcProvider) return
setLoading(true) setLoading(true)
try { try {
const wallet = new Wallet(giftCode, provider) const wallet = new Wallet(giftCode, rpcProvider)
const dai = new DaiToken(await Rpc._eth_getBalance(wallet.address, provider)) const dai = new DaiToken(await Rpc._eth_getBalance(wallet.address, rpcProvider))
const bzz = new BzzToken(await Rpc._eth_getBalanceERC20(wallet.address, provider)) const bzz = new BzzToken(await Rpc._eth_getBalanceERC20(wallet.address, rpcProvider))
if (dai.toDecimal.lt(0.001) || bzz.toDecimal.lt(0.001)) { if (dai.toDecimal.lt(0.001) || bzz.toDecimal.lt(0.001)) {
throw Error('Gift wallet does not have enough funds') throw Error('Gift wallet does not have enough funds')
+2 -2
View File
@@ -45,7 +45,7 @@ export function Swap({ header }: Props): ReactElement {
const [userInputSwap, setUserInputSwap] = useState<string | null>(null) const [userInputSwap, setUserInputSwap] = useState<string | null>(null)
const [price, setPrice] = useState(DaiToken.fromDecimal('0.6', 18)) const [price, setPrice] = useState(DaiToken.fromDecimal('0.6', 18))
const { providerUrl, isDesktop, desktopUrl } = useContext(SettingsContext) const { rpcProviderUrl, isDesktop, desktopUrl } = useContext(SettingsContext)
const { nodeAddresses, nodeInfo } = useContext(BeeContext) const { nodeAddresses, nodeInfo } = useContext(BeeContext)
const { balance } = useContext(BalanceProvider) const { balance } = useContext(BalanceProvider)
@@ -80,7 +80,7 @@ export function Swap({ header }: Props): ReactElement {
async function restart() { async function restart() {
try { try {
await sleepMs(5_000) await sleepMs(5_000)
await upgradeToLightNode(desktopUrl, providerUrl) await upgradeToLightNode(desktopUrl, rpcProviderUrl)
await restartBeeNode(desktopUrl) await restartBeeNode(desktopUrl)
enqueueSnackbar('Upgraded to light node', { variant: 'success' }) enqueueSnackbar('Upgraded to light node', { variant: 'success' })
+2 -2
View File
@@ -42,7 +42,7 @@ export default function TopUp(): ReactElement {
const { isDesktop, desktopUrl } = useContext(SettingsContext) const { isDesktop, desktopUrl } = useContext(SettingsContext)
const { nodeInfo, status } = useContext(BeeContext) const { nodeInfo, status } = useContext(BeeContext)
const { balance } = useContext(BalanceProvider) const { balance } = useContext(BalanceProvider)
const { providerUrl } = useContext(SettingsContext) const { rpcProviderUrl } = useContext(SettingsContext)
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
const { enqueueSnackbar } = useSnackbar() const { enqueueSnackbar } = useSnackbar()
@@ -55,7 +55,7 @@ export default function TopUp(): ReactElement {
async function restart() { async function restart() {
setLoading(true) setLoading(true)
try { try {
await upgradeToLightNode(desktopUrl, providerUrl) await upgradeToLightNode(desktopUrl, rpcProviderUrl)
await restartBeeNode(desktopUrl) await restartBeeNode(desktopUrl)
enqueueSnackbar('Upgraded to light node', { variant: 'success' }) enqueueSnackbar('Upgraded to light node', { variant: 'success' })
navigate(ROUTES.RESTART_LIGHT) navigate(ROUTES.RESTART_LIGHT)
+17 -33
View File
@@ -2,15 +2,12 @@ import { Bee, BeeDebug } from '@ethersphere/bee-js'
import { providers } from 'ethers' import { providers } from 'ethers'
import { createContext, ReactNode, ReactElement, useEffect, useState } from 'react' import { createContext, ReactNode, ReactElement, useEffect, useState } from 'react'
import { useGetBeeConfig } from '../hooks/apiHooks' import { useGetBeeConfig } from '../hooks/apiHooks'
import { restartBeeNode, setJsonRpcInDesktop } from '../utils/desktop'
import { DEFAULT_BEE_API_HOST, DEFAULT_BEE_DEBUG_API_HOST, DEFAULT_RPC_URL } from '../constants' import { DEFAULT_BEE_API_HOST, DEFAULT_BEE_DEBUG_API_HOST, DEFAULT_RPC_URL } from '../constants'
const LocalStorageKeys = { const LocalStorageKeys = {
providerUrl: 'json-rpc-provider', providerUrl: 'json-rpc-provider',
} }
const providerUrl = localStorage.getItem('json-rpc-provider') || DEFAULT_RPC_URL
interface ContextInterface { interface ContextInterface {
apiUrl: string apiUrl: string
apiDebugUrl: string apiDebugUrl: string
@@ -20,14 +17,14 @@ interface ContextInterface {
desktopApiKey: string desktopApiKey: string
isDesktop: boolean isDesktop: boolean
desktopUrl: string desktopUrl: string
providerUrl: string rpcProviderUrl: string
provider: providers.JsonRpcProvider rpcProvider: providers.JsonRpcProvider
cors: string | null cors: string | null
dataDir: string | null dataDir: string | null
ensResolver: string | null ensResolver: string | null
setApiUrl: (url: string) => void setApiUrl: (url: string) => void
setDebugApiUrl: (url: string) => void setDebugApiUrl: (url: string) => void
setAndPersistJsonRpcProvider: (url: string) => Promise<void> setAndPersistJsonRpcProvider: (url: string) => void
isLoading: boolean isLoading: boolean
error: Error | null error: Error | null
} }
@@ -44,8 +41,8 @@ const initialValues: ContextInterface = {
desktopApiKey: '', desktopApiKey: '',
desktopUrl: window.location.origin, desktopUrl: window.location.origin,
setAndPersistJsonRpcProvider: async () => {}, // eslint-disable-line setAndPersistJsonRpcProvider: async () => {}, // eslint-disable-line
providerUrl, rpcProviderUrl: '',
provider: new providers.JsonRpcProvider(providerUrl), rpcProvider: new providers.JsonRpcProvider(''),
cors: null, cors: null,
dataDir: null, dataDir: null,
ensResolver: null, ensResolver: null,
@@ -62,6 +59,7 @@ interface InitialSettings {
lockedApiSettings?: boolean lockedApiSettings?: boolean
isDesktop?: boolean isDesktop?: boolean
desktopUrl?: string desktopUrl?: string
defaultRpcUrl?: string
} }
interface Props extends InitialSettings { interface Props extends InitialSettings {
@@ -71,14 +69,16 @@ interface Props extends InitialSettings {
export function Provider({ children, ...propsSettings }: Props): ReactElement { export function Provider({ children, ...propsSettings }: Props): ReactElement {
const desktopUrl = propsSettings.desktopUrl ?? initialValues.desktopUrl const desktopUrl = propsSettings.desktopUrl ?? initialValues.desktopUrl
const isDesktop = Boolean(propsSettings.isDesktop) const isDesktop = Boolean(propsSettings.isDesktop)
const propsProviderUrl =
localStorage.getItem(LocalStorageKeys.providerUrl) || propsSettings.defaultRpcUrl || DEFAULT_RPC_URL
const [apiUrl, setApiUrl] = useState<string>(initialValues.apiUrl) const [apiUrl, setApiUrl] = useState<string>(initialValues.apiUrl)
const [apiDebugUrl, setDebugApiUrl] = useState<string>(initialValues.apiDebugUrl) const [apiDebugUrl, setDebugApiUrl] = useState<string>(initialValues.apiDebugUrl)
const [beeApi, setBeeApi] = useState<Bee | null>(null) const [beeApi, setBeeApi] = useState<Bee | null>(null)
const [beeDebugApi, setBeeDebugApi] = useState<BeeDebug | null>(null) const [beeDebugApi, setBeeDebugApi] = useState<BeeDebug | null>(null)
const [desktopApiKey, setDesktopApiKey] = useState<string>(initialValues.desktopApiKey) const [desktopApiKey, setDesktopApiKey] = useState<string>(initialValues.desktopApiKey)
const [providerUrl, setProviderUrl] = useState(initialValues.providerUrl) const [rpcProviderUrl, setRpcProviderUrl] = useState(propsProviderUrl)
const [provider, setProvider] = useState(initialValues.provider) const [rpcProvider, setRpcProvider] = useState(new providers.JsonRpcProvider(propsProviderUrl))
const { config, isLoading, error } = useGetBeeConfig(desktopUrl) const { config, isLoading, error } = useGetBeeConfig(desktopUrl)
const url = makeHttpUrl( const url = makeHttpUrl(
@@ -133,17 +133,12 @@ export function Provider({ children, ...propsSettings }: Props): ReactElement {
desktopApiKey, desktopApiKey,
isDesktop, isDesktop,
desktopUrl, desktopUrl,
provider, rpcProvider,
providerUrl, rpcProviderUrl,
cors: config?.['cors-allowed-origins'] ?? null, cors: config?.['cors-allowed-origins'] ?? null,
dataDir: config?.['data-dir'] ?? null, dataDir: config?.['data-dir'] ?? null,
ensResolver: config?.['resolver-options'] ?? null, ensResolver: config?.['resolver-options'] ?? null,
setAndPersistJsonRpcProvider: setAndPersistJsonRpcProviderClosure( setAndPersistJsonRpcProvider: setAndPersistJsonRpcProviderClosure(setRpcProviderUrl, setRpcProvider),
isDesktop,
desktopUrl,
setProviderUrl,
setProvider,
),
isLoading, isLoading,
error, error,
}} }}
@@ -162,23 +157,12 @@ function makeHttpUrl(string: string): string {
} }
function setAndPersistJsonRpcProviderClosure( function setAndPersistJsonRpcProviderClosure(
isDesktop: boolean,
desktopUrl: string,
setProviderUrl: (url: string) => void, setProviderUrl: (url: string) => void,
setProvider: (prov: providers.JsonRpcProvider) => void, setProvider: (prov: providers.JsonRpcProvider) => void,
) { ) {
return async (providerUrl: string) => { return (providerUrl: string) => {
try { localStorage.setItem(LocalStorageKeys.providerUrl, providerUrl)
localStorage.setItem(LocalStorageKeys.providerUrl, providerUrl) setProviderUrl(providerUrl)
setProviderUrl(providerUrl) setProvider(new providers.JsonRpcProvider(providerUrl))
setProvider(new providers.JsonRpcProvider(providerUrl))
if (isDesktop) {
await setJsonRpcInDesktop(desktopUrl, providerUrl)
await restartBeeNode(desktopUrl)
}
} catch (error) {
console.error(error) // eslint-disable-line
}
} }
} }
+4 -4
View File
@@ -27,17 +27,17 @@ interface Props {
export function Provider({ children }: Props): ReactElement { export function Provider({ children }: Props): ReactElement {
const [giftWallets, setGiftWallets] = useState(initialValues.giftWallets) const [giftWallets, setGiftWallets] = useState(initialValues.giftWallets)
const { provider } = useContext(SettingsContext) const { rpcProvider } = useContext(SettingsContext)
useEffect(() => { useEffect(() => {
if (provider === null) return if (rpcProvider === null) return
const existingGiftWallets = localStorage.getItem(LocalStorageKeys.giftWallets) const existingGiftWallets = localStorage.getItem(LocalStorageKeys.giftWallets)
if (existingGiftWallets) { if (existingGiftWallets) {
setGiftWallets(JSON.parse(existingGiftWallets).map((privateKey: string) => new Wallet(privateKey, provider))) setGiftWallets(JSON.parse(existingGiftWallets).map((privateKey: string) => new Wallet(privateKey, rpcProvider)))
} }
}, [provider]) }, [rpcProvider])
function addGiftWallet(wallet: Wallet) { function addGiftWallet(wallet: Wallet) {
const newArray = [...giftWallets, wallet] const newArray = [...giftWallets, wallet]
+4 -4
View File
@@ -31,7 +31,7 @@ interface Props {
} }
export function Provider({ children }: Props): ReactElement { export function Provider({ children }: Props): ReactElement {
const { provider } = useContext(SettingsContext) const { rpcProvider } = useContext(SettingsContext)
const { nodeAddresses } = useContext(BeeContext) const { nodeAddresses } = useContext(BeeContext)
const [balance, setBalance] = useState<WalletAddress | null>(initialValues.balance) const [balance, setBalance] = useState<WalletAddress | null>(initialValues.balance)
const [error, setError] = useState<Error | null>(initialValues.error) const [error, setError] = useState<Error | null>(initialValues.error)
@@ -40,12 +40,12 @@ export function Provider({ children }: Props): ReactElement {
const [frequency, setFrequency] = useState<number | null>(null) const [frequency, setFrequency] = useState<number | null>(null)
useEffect(() => { useEffect(() => {
if (nodeAddresses?.ethereum && provider) { if (nodeAddresses?.ethereum && rpcProvider) {
WalletAddress.make(nodeAddresses.ethereum, provider).then(setBalance) WalletAddress.make(nodeAddresses.ethereum, rpcProvider).then(setBalance)
} else { } else {
setBalance(null) setBalance(null)
} }
}, [nodeAddresses, provider]) }, [nodeAddresses, rpcProvider])
const refresh = async () => { const refresh = async () => {
// Don't want to refresh when already refreshing // Don't want to refresh when already refreshing
-1
View File
@@ -12,7 +12,6 @@ export async function getBzzPriceAsDai(desktopUrl: string): Promise<Token> {
export async function upgradeToLightNode(desktopUrl: string, rpcProvider: string): Promise<void> { export async function upgradeToLightNode(desktopUrl: string, rpcProvider: string): Promise<void> {
await updateDesktopConfiguration(desktopUrl, { await updateDesktopConfiguration(desktopUrl, {
'chain-enable': true,
'swap-enable': true, 'swap-enable': true,
'swap-endpoint': rpcProvider, 'swap-endpoint': rpcProvider,
}) })