[beta] Backporting (#6676)
* Fix wallet view (#6597) * Add safe fail for empty logs * Filter transactions * Add more logging * Fix Wallet Creation and wallet tx list * Remove logs * Prevent selecting twice same wallet owner * Fix tests * Remove unused props * Remove unused props * Disallow pasting recovery phrases on first run (#6602) * Fix disallowing paste of recovery phrase on first run, ref #6581 * Allow the leader of CATS pasting recovery phrases. * Updated systemd files for linux (#6592) Previous version put $BASE directory in root directory. This version clearly explains how to run as root or as specific user. Additional configuration: * send SIGHUP for clean exit, * restart on fail. Tested on Ubuntu 16.04.3 LTS with 4.10.0-33-generic x86_64 kernel * Don't expose port 80 for parity anymore (#6633)
This commit is contained in:
@@ -35,6 +35,7 @@ export default class Store {
|
||||
@observable gethAddresses = [];
|
||||
@observable gethImported = [];
|
||||
@observable isBusy = false;
|
||||
@observable isTest = false;
|
||||
@observable isWindowsPhrase = false;
|
||||
@observable name = '';
|
||||
@observable nameError = ERRORS.noName;
|
||||
@@ -310,6 +311,10 @@ export default class Store {
|
||||
this.stage--;
|
||||
}
|
||||
|
||||
@action setIsTest = isTest => {
|
||||
this.isTest = isTest;
|
||||
}
|
||||
|
||||
createAccount = (vaultStore) => {
|
||||
if (!this.canCreate) {
|
||||
return false;
|
||||
|
||||
@@ -16,18 +16,21 @@
|
||||
|
||||
import React, { Component, PropTypes } from 'react';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { Form, TypedInput, Input, AddressSelect, InputAddress } from '~/ui';
|
||||
|
||||
import styles from '../createWallet.css';
|
||||
|
||||
export default class WalletDetails extends Component {
|
||||
class WalletDetails extends Component {
|
||||
static propTypes = {
|
||||
accounts: PropTypes.object.isRequired,
|
||||
wallet: PropTypes.object.isRequired,
|
||||
errors: PropTypes.object.isRequired,
|
||||
onChange: PropTypes.func.isRequired,
|
||||
walletType: PropTypes.string.isRequired
|
||||
walletType: PropTypes.string.isRequired,
|
||||
|
||||
knownAddresses: PropTypes.array
|
||||
};
|
||||
|
||||
render () {
|
||||
@@ -103,7 +106,10 @@ export default class WalletDetails extends Component {
|
||||
}
|
||||
|
||||
renderMultisigDetails () {
|
||||
const { accounts, wallet, errors } = this.props;
|
||||
const { accounts, knownAddresses, wallet, errors } = this.props;
|
||||
const allowedOwners = knownAddresses
|
||||
// Exclude sender and already owners of the wallet
|
||||
.filter((address) => !wallet.owners.includes(address) && address !== wallet.account);
|
||||
|
||||
return (
|
||||
<Form>
|
||||
@@ -163,7 +169,7 @@ export default class WalletDetails extends Component {
|
||||
/>
|
||||
|
||||
<TypedInput
|
||||
accounts={ accounts }
|
||||
allowedValues={ allowedOwners }
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='createWallet.details.ownersMulti.label'
|
||||
@@ -249,3 +255,21 @@ export default class WalletDetails extends Component {
|
||||
this.props.onChange({ daylimit });
|
||||
}
|
||||
}
|
||||
|
||||
function mapStateToProps (initState) {
|
||||
const { accounts, contacts, contracts } = initState.personal;
|
||||
const knownAddresses = [].concat(
|
||||
Object.keys(accounts),
|
||||
Object.keys(contacts),
|
||||
Object.keys(contracts)
|
||||
);
|
||||
|
||||
return () => ({
|
||||
knownAddresses
|
||||
});
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
null
|
||||
)(WalletDetails);
|
||||
|
||||
@@ -25,6 +25,22 @@ import { ACCOUNTS } from '../createWallet.test.js';
|
||||
let component;
|
||||
let onChange;
|
||||
|
||||
function createRedux () {
|
||||
return {
|
||||
dispatch: sinon.stub(),
|
||||
subscribe: sinon.stub(),
|
||||
getState: () => {
|
||||
return {
|
||||
personal: {
|
||||
accounts: {},
|
||||
contacts: {},
|
||||
contracts: {}
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function render (walletType = 'MULTISIG') {
|
||||
onChange = sinon.stub();
|
||||
component = shallow(
|
||||
@@ -36,7 +52,12 @@ function render (walletType = 'MULTISIG') {
|
||||
owners: []
|
||||
} }
|
||||
walletType={ walletType }
|
||||
/>
|
||||
/>,
|
||||
{
|
||||
context: {
|
||||
store: createRedux()
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
return component;
|
||||
|
||||
@@ -283,7 +283,8 @@ export default class CreateWalletStore {
|
||||
|
||||
const owners = _wallet.owners.filter((owner) => !/^(0x)?0*$/.test(owner));
|
||||
|
||||
if (_wallet.required > owners.length) {
|
||||
// Real number of owners is owners + creator
|
||||
if (_wallet.required > owners.length + 1) {
|
||||
requiredValidation.valueError = 'the number of required validators should be lower or equal the number of owners';
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,6 @@ export default class ParametersStep extends Component {
|
||||
};
|
||||
|
||||
static propTypes = {
|
||||
accounts: PropTypes.object.isRequired,
|
||||
onParamsChange: PropTypes.func.isRequired,
|
||||
|
||||
inputs: PropTypes.array,
|
||||
@@ -60,7 +59,7 @@ export default class ParametersStep extends Component {
|
||||
}
|
||||
|
||||
renderConstructorInputs () {
|
||||
const { accounts, params, paramsError } = this.props;
|
||||
const { params, paramsError } = this.props;
|
||||
const { inputs } = this.props;
|
||||
|
||||
if (!inputs || !inputs.length) {
|
||||
@@ -78,7 +77,6 @@ export default class ParametersStep extends Component {
|
||||
return (
|
||||
<div key={ index } className={ styles.funcparams }>
|
||||
<TypedInput
|
||||
accounts={ accounts }
|
||||
error={ error }
|
||||
isEth={ false }
|
||||
label={ label }
|
||||
|
||||
@@ -313,7 +313,6 @@ class DeployContract extends Component {
|
||||
return (
|
||||
<ParametersStep
|
||||
{ ...this.state }
|
||||
accounts={ accounts }
|
||||
onParamsChange={ this.onParamsChange }
|
||||
readOnly={ readOnly }
|
||||
/>
|
||||
|
||||
@@ -177,7 +177,7 @@ export default class DetailsStep extends Component {
|
||||
}
|
||||
|
||||
renderParameters () {
|
||||
const { accounts, func, values, valuesError, onValueChange } = this.props;
|
||||
const { func, values, valuesError, onValueChange } = this.props;
|
||||
|
||||
if (!func) {
|
||||
return null;
|
||||
@@ -197,7 +197,6 @@ export default class DetailsStep extends Component {
|
||||
value={ values[index] }
|
||||
error={ valuesError[index] }
|
||||
onChange={ onChange }
|
||||
accounts={ accounts }
|
||||
param={ input.type }
|
||||
isEth={ false }
|
||||
/>
|
||||
|
||||
@@ -78,16 +78,23 @@ class FirstRun extends Component {
|
||||
hasAccounts: PropTypes.bool.isRequired,
|
||||
newError: PropTypes.func.isRequired,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
visible: PropTypes.bool.isRequired
|
||||
visible: PropTypes.bool.isRequired,
|
||||
isTest: PropTypes.bool.isRequired
|
||||
}
|
||||
|
||||
createStore = new CreateStore(this.context.api, {}, true, false);
|
||||
createStore = new CreateStore(this.context.api, {}, this.props.isTest, false);
|
||||
|
||||
state = {
|
||||
stage: 0,
|
||||
hasAcceptedTnc: false
|
||||
}
|
||||
|
||||
componentWillReceiveProps (nextProps) {
|
||||
if (nextProps.isTest !== this.props.isTest) {
|
||||
this.createStore.setIsTest(nextProps.isTest);
|
||||
}
|
||||
}
|
||||
|
||||
render () {
|
||||
const { visible } = this.props;
|
||||
const { stage } = this.state;
|
||||
@@ -348,9 +355,10 @@ class FirstRun extends Component {
|
||||
|
||||
function mapStateToProps (state) {
|
||||
const { hasAccounts } = state.personal;
|
||||
const { isTest } = state.nodeStatus;
|
||||
|
||||
return {
|
||||
hasAccounts
|
||||
hasAccounts, isTest
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,9 @@ function createRedux () {
|
||||
return {
|
||||
personal: {
|
||||
hasAccounts: false
|
||||
},
|
||||
nodeStatus: {
|
||||
isTest: false
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@ class WalletSettings extends Component {
|
||||
};
|
||||
|
||||
static propTypes = {
|
||||
accountsInfo: PropTypes.object.isRequired,
|
||||
wallet: PropTypes.object.isRequired,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
senders: PropTypes.object.isRequired
|
||||
@@ -74,7 +73,7 @@ class WalletSettings extends Component {
|
||||
default:
|
||||
case 'EDIT':
|
||||
const { errors, fromString, wallet } = this.store;
|
||||
const { accountsInfo, senders } = this.props;
|
||||
const { senders } = this.props;
|
||||
|
||||
return (
|
||||
<Form>
|
||||
@@ -143,7 +142,6 @@ class WalletSettings extends Component {
|
||||
}
|
||||
value={ wallet.owners.slice() }
|
||||
onChange={ this.store.onOwnersChange }
|
||||
accounts={ accountsInfo }
|
||||
param='address[]'
|
||||
/>
|
||||
|
||||
@@ -443,13 +441,13 @@ class WalletSettings extends Component {
|
||||
}
|
||||
|
||||
function mapStateToProps (initState, initProps) {
|
||||
const { accountsInfo, accounts } = initState.personal;
|
||||
const { accounts } = initState.personal;
|
||||
const { owners } = initProps.wallet;
|
||||
|
||||
const senders = pick(accounts, owners);
|
||||
|
||||
return () => {
|
||||
return { accountsInfo, senders };
|
||||
return { senders };
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user