diff --git a/electron-react/src/assets/css/App.css b/electron-react/src/assets/css/App.css index 0352ffdac1..9b8323a1f4 100644 --- a/electron-react/src/assets/css/App.css +++ b/electron-react/src/assets/css/App.css @@ -27,5 +27,20 @@ html, body, #wrapper-id, #root, #app, #app>div, #provider-wrap { margin: 0px; padding: 0; top: 0px; - overflow: hidden; + overflow: hidden; +} +@font-face { + font-family: Roboto; + src: url("../fonts/Roboto-Medium.ttf"); + font-weight: 500; +} +@font-face { + font-family: Roboto; + src: url("../fonts/Roboto-Regular.ttf"); + font-weight: 400; +} +@font-face { + font-family: Roboto; + src: url("../fonts/Roboto-Light.ttf"); + font-weight: 300; } \ No newline at end of file diff --git a/electron-react/src/assets/fonts/Roboto-Light.ttf b/electron-react/src/assets/fonts/Roboto-Light.ttf new file mode 100644 index 0000000000..35267989de Binary files /dev/null and b/electron-react/src/assets/fonts/Roboto-Light.ttf differ diff --git a/electron-react/src/assets/fonts/Roboto-Medium.ttf b/electron-react/src/assets/fonts/Roboto-Medium.ttf new file mode 100644 index 0000000000..f714a514d9 Binary files /dev/null and b/electron-react/src/assets/fonts/Roboto-Medium.ttf differ diff --git a/electron-react/src/assets/fonts/Roboto-Regular.ttf b/electron-react/src/assets/fonts/Roboto-Regular.ttf new file mode 100644 index 0000000000..2b6392ffe8 Binary files /dev/null and b/electron-react/src/assets/fonts/Roboto-Regular.ttf differ diff --git a/electron-react/src/assets/img/farm_sidebar.svg b/electron-react/src/assets/img/farm_sidebar.svg new file mode 100644 index 0000000000..fdb40a616a --- /dev/null +++ b/electron-react/src/assets/img/farm_sidebar.svg @@ -0,0 +1,3 @@ + + + diff --git a/electron-react/src/assets/img/help_sidebar.svg b/electron-react/src/assets/img/help_sidebar.svg new file mode 100644 index 0000000000..32b7506f3d --- /dev/null +++ b/electron-react/src/assets/img/help_sidebar.svg @@ -0,0 +1,3 @@ + + + diff --git a/electron-react/src/assets/img/home_sidebar.svg b/electron-react/src/assets/img/home_sidebar.svg new file mode 100644 index 0000000000..4d62f56f58 --- /dev/null +++ b/electron-react/src/assets/img/home_sidebar.svg @@ -0,0 +1,3 @@ + + + diff --git a/electron-react/src/assets/img/plot_sidebar.svg b/electron-react/src/assets/img/plot_sidebar.svg new file mode 100644 index 0000000000..9426f2ed0a --- /dev/null +++ b/electron-react/src/assets/img/plot_sidebar.svg @@ -0,0 +1,3 @@ + + + diff --git a/electron-react/src/assets/img/pool_sidebar.svg b/electron-react/src/assets/img/pool_sidebar.svg new file mode 100644 index 0000000000..303dabc42c --- /dev/null +++ b/electron-react/src/assets/img/pool_sidebar.svg @@ -0,0 +1,3 @@ + + + diff --git a/electron-react/src/assets/img/wallet_sidebar.svg b/electron-react/src/assets/img/wallet_sidebar.svg new file mode 100644 index 0000000000..9c4930c2b6 --- /dev/null +++ b/electron-react/src/assets/img/wallet_sidebar.svg @@ -0,0 +1,3 @@ + + + diff --git a/electron-react/src/modules/farmer_menu.js b/electron-react/src/modules/farmer_menu.js index d87226200d..ebfb461877 100644 --- a/electron-react/src/modules/farmer_menu.js +++ b/electron-react/src/modules/farmer_menu.js @@ -1,20 +1,9 @@ -export const presentFarmer = "FARMER"; -export const presentPlotter = "PLOTTER"; -export const presentHarvester = "HARVESTER"; - -export const changeFarmerMenu = item => ({ type: "FARMER_MENU", item: item }); - -const initial_state = { - view: presentFarmer -}; +const initial_state = {}; export const farmerMenuReducer = (state = { ...initial_state }, action) => { switch (action.type) { case "LOG_OUT": return { ...initial_state }; - case "FARMER_MENU": - var item = action.item; - return { ...state, view: item }; default: return state; } diff --git a/electron-react/src/modules/mainMenu.js b/electron-react/src/modules/mainMenu.js index c3ed5e4ddb..dcd91e057a 100644 --- a/electron-react/src/modules/mainMenu.js +++ b/electron-react/src/modules/mainMenu.js @@ -1,6 +1,7 @@ export const presentWallet = "WALLET"; export const presentNode = "NODE"; export const presentFarmer = "FARMER"; +export const presentPlotter = "PLOTTER"; export const presentTrading = "TRADING"; export const changeMainMenu = item => ({ type: "MAIN_MENU", item: item }); diff --git a/electron-react/src/pages/Dashboard.js b/electron-react/src/pages/Dashboard.js index 636651712f..5c86a29f6a 100644 --- a/electron-react/src/pages/Dashboard.js +++ b/electron-react/src/pages/Dashboard.js @@ -7,24 +7,24 @@ import AppBar from "@material-ui/core/AppBar"; import Toolbar from "@material-ui/core/Toolbar"; import Typography from "@material-ui/core/Typography"; import Divider from "@material-ui/core/Divider"; -import IconButton from "@material-ui/core/IconButton"; import Container from "@material-ui/core/Container"; -import ChevronLeftIcon from "@material-ui/icons/ChevronLeft"; +import logo from "../assets/img/chia_logo.svg"; // Tell webpack this JS file uses this image import Wallets from "./Wallets"; -import MenuIcon from "@material-ui/icons/Menu"; import { SideBar } from "./sidebar"; import { useSelector } from "react-redux"; +import Plotter from "./Plotter"; import { presentWallet, presentNode, presentFarmer, - presentTrading + presentTrading, + presentPlotter } from "../modules/mainMenu"; import FullNode from "./FullNode"; import Farmer from "./Farmer"; import { TradeManger } from "./trading/TradeManager"; -const drawerWidth = 200; +const drawerWidth = 100; const useStyles = makeStyles(theme => ({ root: { @@ -73,17 +73,6 @@ const useStyles = makeStyles(theme => ({ duration: theme.transitions.duration.enteringScreen }) }, - drawerPaperClose: { - overflowX: "hidden", - transition: theme.transitions.create("width", { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.leavingScreen - }), - width: theme.spacing(7), - [theme.breakpoints.up("sm")]: { - width: theme.spacing(9) - } - }, appBarSpacer: theme.mixins.toolbar, content: { flexGrow: 1, @@ -112,6 +101,13 @@ const useStyles = makeStyles(theme => ({ easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.enteringScreen }) + }, + logo: { + marginTop: theme.spacing(2), + marginBottom: theme.spacing(2), + marginLeft: theme.spacing(2), + marginRight: theme.spacing(2), + width: "62px" } })); @@ -124,6 +120,8 @@ const ComopnentSwitch = () => { return ; } else if (toPresent === presentFarmer) { return ; + } else if (toPresent === presentPlotter) { + return ; } else if (toPresent === presentTrading) { return ; } @@ -132,14 +130,8 @@ const ComopnentSwitch = () => { export default function Dashboard() { const classes = useStyles(); - const [open, setOpen] = React.useState(true); + const [open] = React.useState(true); const toPresent = useSelector(state => state.main_menu.view); - const handleDrawerOpen = () => { - setOpen(true); - }; - const handleDrawerClose = () => { - setOpen(false); - }; let title; if (toPresent === presentWallet) { title = "Wallets"; @@ -147,6 +139,10 @@ export default function Dashboard() { title = "Full Node"; } else if (toPresent === presentFarmer) { title = "Farming"; + } else if (toPresent === presentPlotter) { + title = "Plotting"; + } else if (toPresent === presentTrading) { + title = "Trading"; } return ( @@ -157,18 +153,6 @@ export default function Dashboard() { className={clsx(classes.appBar, open && classes.appBarShift)} > - - -
- - - + Logo
diff --git a/electron-react/src/pages/Farmer.js b/electron-react/src/pages/Farmer.js index a7b7a63548..2cb6b1463f 100644 --- a/electron-react/src/pages/Farmer.js +++ b/electron-react/src/pages/Farmer.js @@ -1,5 +1,4 @@ import React, { Component } from "react"; -import CssBaseline from "@material-ui/core/CssBaseline"; import Grid from "@material-ui/core/Grid"; import { makeStyles, withStyles } from "@material-ui/core/styles"; import Container from "@material-ui/core/Container"; @@ -9,8 +8,6 @@ import Box from "@material-ui/core/Box"; import { Paper, TableRow, - Drawer, - Divider, List, ListItem, ListItemText, @@ -37,9 +34,6 @@ import TablePagination from "@material-ui/core/TablePagination"; import RefreshIcon from "@material-ui/icons/Refresh"; import Connections from "./Connections"; -import Plotter from "./Plotter"; -import { presentFarmer } from "../modules/farmer_menu"; -import { presentPlotter, changeFarmerMenu } from "../modules/farmer_menu"; import { big_int_to_array, arr_to_hex, sha256 } from "../util/utils"; import { mojo_to_chia_string } from "../util/chia"; import HelpIcon from "@material-ui/icons/Help"; @@ -535,74 +529,35 @@ const FarmerContent = props => { const closeConnectionCallback = node_id => { dispatch(closeConnection(node_id)); }; - - const to_present = useSelector(state => state.farmer_menu.view); - - if (to_present === presentFarmer) { - return ( - - - {/* Chart */} - - - - - - - - - - - - + return ( + + + {/* Chart */} + + - - ); - } else { - return ; - } -}; - -const FarmerListItem = props => { - const dispatch = useDispatch(); - const label = props.label; - const type = props.type; - function present() { - if (type === presentFarmer) { - dispatch(changeFarmerMenu(presentFarmer)); - } else if (type === presentPlotter) { - dispatch(changeFarmerMenu(presentPlotter)); - } - } - - return ( - - - + + + + + + + + + + + ); }; -const FarmerMenuList = () => { - return ( - - - - - - - ); -}; class Farmer extends Component { constructor(props) { super(props); @@ -671,19 +626,8 @@ class Farmer extends Component { render() { const classes = this.props.classes; - var open = true; return (
- - - -
({ marginTop: theme.spacing(2), marginBottom: theme.spacing(1) }, + bottomButtonRed: { + width: 400, + height: 45, + marginTop: theme.spacing(2), + marginBottom: theme.spacing(1), + color: "red" + }, logo: { marginTop: theme.spacing(8), marginBottom: theme.spacing(3) @@ -82,6 +95,8 @@ const SelectKey = () => { state => state.wallet_state.public_key_fingerprints ); + const [open, setOpen] = React.useState(false); + const handleClick = fingerprint => { return () => dispatch(log_in(fingerprint)); }; @@ -94,6 +109,20 @@ const SelectKey = () => { dispatch(delete_key(fingerprint)); }; }; + + const handleClickOpen = () => { + setOpen(true); + }; + + const handleClose = () => { + setOpen(false); + }; + + const handleCloseDelete = () => { + handleClose(); + dispatch(delete_all_keys()); + }; + const goToMnemonics = () => { dispatch(changeEntranceMenu(presentOldWallet)); }; @@ -187,8 +216,42 @@ const SelectKey = () => { Create a new private key + + +
+ + {"Delete all keys"} + + + Deleting all keys will permanatly remove the keys from your + computer, make sure you have backups. Are you sure you want to + continue? + + + + + + + ); }; diff --git a/electron-react/src/pages/sidebar.js b/electron-react/src/pages/sidebar.js index acdac92b4f..9844c93c40 100644 --- a/electron-react/src/pages/sidebar.js +++ b/electron-react/src/pages/sidebar.js @@ -1,137 +1,111 @@ import React from "react"; -import ListItem from "@material-ui/core/ListItem"; -import ListItemIcon from "@material-ui/core/ListItemIcon"; -import ListItemText from "@material-ui/core/ListItemText"; import { presentWallet, presentNode, presentFarmer, changeMainMenu, - presentTrading + presentTrading, + presentPlotter } from "../modules/mainMenu"; -import { delete_all_keys, logOut } from "../modules/message"; +import { useSelector } from "react-redux"; +import { logOut } from "../modules/message"; import { useDispatch } from "react-redux"; import List from "@material-ui/core/List"; import Divider from "@material-ui/core/Divider"; -import AccountBalanceWalletIcon from "@material-ui/icons/AccountBalanceWallet"; -import AccountTreeIcon from "@material-ui/icons/AccountTree"; -import DonutLargeIcon from "@material-ui/icons/DonutLarge"; -import LockIcon from "@material-ui/icons/Lock"; -import DeleteForeverIcon from "@material-ui/icons/DeleteForever"; -import Button from "@material-ui/core/Button"; -import Dialog from "@material-ui/core/Dialog"; -import DialogActions from "@material-ui/core/DialogActions"; -import DialogContent from "@material-ui/core/DialogContent"; -import DialogContentText from "@material-ui/core/DialogContentText"; -import DialogTitle from "@material-ui/core/DialogTitle"; + import { changeEntranceMenu, presentSelectKeys } from "../modules/entranceMenu"; -import ImportExportIcon from "@material-ui/icons/ImportExport"; +import walletSidebarLogo from "../assets/img/wallet_sidebar.svg"; // Tell webpack this JS file uses this image +import farmSidebarLogo from "../assets/img/farm_sidebar.svg"; +import helpSidebarLogo from "../assets/img/help_sidebar.svg"; +import homeSidebarLogo from "../assets/img/home_sidebar.svg"; +import plotSidebarLogo from "../assets/img/plot_sidebar.svg"; +import poolSidebarLogo from "../assets/img/pool_sidebar.svg"; +import { makeStyles } from "@material-ui/core/styles"; + +const useStyles = makeStyles(theme => ({ + div: { + textAlign: "center", + cursor: "pointer" + }, + label: { + fontFamily: "Roboto", + fontWeight: "300", + fontSize: "16px", + fontStyle: "normal", + marginTop: "5px" + }, + labelChosen: { + fontFamily: "Roboto", + fontWeight: "500", + fontSize: "16px", + fontStyle: "normal", + marginTop: "5px" + } +})); const menuItems = [ - { - label: "Wallet", - present: presentWallet, - icon: - }, { label: "Full Node", present: presentNode, - icon: + icon: Logo }, { - label: "Farming", + label: "Wallet", + present: presentWallet, + icon: Logo + }, + { + label: "Plot", + present: presentPlotter, + icon: Logo + }, + { + label: "Farm", present: presentFarmer, - icon: + icon: Logo }, { - label: "Trading", + label: "Trade", present: presentTrading, - icon: + icon: Logo + }, + { + label: "Keys", + changeKeys: true, + icon: Logo } ]; -const MenuItem = menuItem => { +const MenuItem = (menuItem, currentView) => { + const classes = useStyles(); const dispatch = useDispatch(); const item = menuItem; function presentMe() { - dispatch(changeMainMenu(item.present)); + if (item.changeKeys) { + dispatch(logOut("log_out", {})); + dispatch(changeEntranceMenu(presentSelectKeys)); + } else { + dispatch(changeMainMenu(item.present)); + } } + const labelClass = + currentView === item.present ? classes.labelChosen : classes.label; return ( - - {item.icon} - - +
+ {item.icon} +

{item.label}

+
); }; export const SideBar = () => { - const [open, setOpen] = React.useState(false); - const dispatch = useDispatch(); - - const handleClickOpen = () => { - setOpen(true); - }; - - const handleClose = () => { - setOpen(false); - }; - - const handleCloseDelete = () => { - handleClose(); - dispatch(delete_all_keys()); - }; - - function changeKey() { - // console.log("Changing key"); - dispatch(logOut("log_out", {})); - dispatch(changeEntranceMenu(presentSelectKeys)); - } - + const currentView = useSelector(state => state.main_menu.view); return (
- {menuItems.map(item => MenuItem(item))} + {menuItems.map(item => MenuItem(item, currentView))} - -
- - - - - - - - - - - - -
-
- - {"Delete all keys"} - - - Deleting all keys will permanatly remove the keys from your - computer, make sure you have backups. Are you sure you want to - continue? - - - - - - -
); }; diff --git a/electron-react/src/pages/trading/CreateOffer.js b/electron-react/src/pages/trading/CreateOffer.js index 425c71ed92..b85885523c 100644 --- a/electron-react/src/pages/trading/CreateOffer.js +++ b/electron-react/src/pages/trading/CreateOffer.js @@ -209,7 +209,7 @@ export const CreateOffer = () => { return; } let mojo = chia_to_mojo(amount_input.value); - if (wallets[wallet_id.value].type == "COLOURED_COIN") { + if (wallets[wallet_id.value].type === "COLOURED_COIN") { mojo = colouredcoin_to_mojo(amount_input.value); } var trade = null; diff --git a/src/wallet/wallet_node.py b/src/wallet/wallet_node.py index 719a667c1d..b1fbaed052 100644 --- a/src/wallet/wallet_node.py +++ b/src/wallet/wallet_node.py @@ -5,6 +5,7 @@ from typing import Dict, Optional, Tuple, List, AsyncGenerator, Callable import concurrent from pathlib import Path import random +import socket import logging import traceback from blspy import PrivateKey @@ -271,12 +272,18 @@ class WalletNode: c.get_peer_info() for c in self.global_connections.get_full_node_connections() ] - if full_node_peer in peers: + full_node_resolved = PeerInfo( + socket.gethostbyname(full_node_peer.host), full_node_peer.port + ) + if full_node_peer in peers or full_node_resolved in peers: self.log.info( f"Will not attempt to connect to other nodes, already connected to {full_node_peer}" ) for connection in self.global_connections.get_full_node_connections(): - if connection.get_peer_info() != full_node_peer: + if ( + connection.get_peer_info() != full_node_peer + and connection.get_peer_info() != full_node_resolved + ): self.log.info( f"Closing unnecessary connection to {connection.get_peer_info()}." )