Skip to content

Commit

Permalink
Merge pull request #657 from e-maximus/feature/new-layout-the-last-one
Browse files Browse the repository at this point in the history
New layout final changes
  • Loading branch information
wAISw committed May 23, 2018
2 parents eacee7d + b6a5a96 commit 1edf7c5
Show file tree
Hide file tree
Showing 100 changed files with 1,045 additions and 425 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@
"react-widgets": "^3.4.6",
"recharts": "^0.19.1",
"redux": "^3.6.0",
"redux-form": "^7.1.1",
"redux-form": "^7.3.0",
"redux-form-material-ui": "^4.3.0",
"redux-immutable": "^3.0.10",
"redux-persist-immutable": "^4.3.1",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,6 @@ class AccountSelector extends PureComponent {

componentWillMount () {
this.props.loadAccounts().then(() => {
// TODO @dkchv: move to actions ?
// autoselect if only one account exists
const { accounts } = this.props
if (accounts.length === 1) {
this.props.selectAccount(accounts[ 0 ])
}
}).catch((e) => {
this.props.selectAccount(null)
this.props.addError(e.message)
Expand Down
6 changes: 3 additions & 3 deletions packages/login-ui/components/LoginForm/LoginForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ const STRATEGY_MANUAL = 'manual'
const STRATEGY_AUTOMATIC = 'automatic'

const nextStrategy = {
[ STRATEGY_AUTOMATIC ]: STRATEGY_MANUAL,
[ STRATEGY_MANUAL ]: STRATEGY_AUTOMATIC,
[STRATEGY_AUTOMATIC]: STRATEGY_MANUAL,
[STRATEGY_MANUAL]: STRATEGY_AUTOMATIC,
}

const mapStateToProps = (state) => {
Expand Down Expand Up @@ -91,7 +91,7 @@ class LoginForm extends Component {

handleToggleProvider = (isShowProvider) => this.setState({ isShowProvider })

handleSelectorSwitch = (currentStrategy) => this.setState({ strategy: nextStrategy[ currentStrategy ] })
handleSelectorSwitch = (currentStrategy) => this.setState({ strategy: nextStrategy[currentStrategy] })

renderError = (error) => (
<div styleName='error' key={MD5(error)}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import privateKeyProvider from '@chronobank/login/network/privateKeyProvider'
import { LOCAL_PRIVATE_KEYS } from '@chronobank/login/network/settings'
import trezorProvider from '@chronobank/login/network/TrezorProvider'
import walletProvider from '@chronobank/login/network/walletProvider'
import web3Provider from '@chronobank/login/network/Web3Provider'
import { loginLedger } from '@chronobank/login/redux/ledger/actions'
import { addError, clearErrors, loading } from '@chronobank/login/redux/network/actions'
import { loginTrezor } from '@chronobank/login/redux/trezor/actions'
Expand Down Expand Up @@ -116,6 +115,7 @@ class LoginOption extends PureComponent {
}

const mapStateToProps = (state) => ({
wallets: state.get('multisigWallet'),
selectedNetworkId: state.get('network').selectedNetworkId,
accounts: state.get('network').accounts,
isLocal: state.get('network').isLocal,
Expand Down Expand Up @@ -157,14 +157,16 @@ class LoginWithOptions extends PureComponent {
this.props.loading()
this.props.clearErrors()
const provider = mnemonicProvider.getMnemonicProvider(mnemonicKey, networkService.getProviderSettings())
networkService.selectAccount(provider.ethereum.getAddress())
this.setupAndLogin(provider)
}

handlePrivateKeyLogin = (privateKey) => {
this.props.loading()
this.props.clearErrors()
try {
const provider = privateKeyProvider.getPrivateKeyProvider(privateKey, networkService.getProviderSettings())
const provider = privateKeyProvider.getPrivateKeyProvider(privateKey, networkService.getProviderSettings(), this.props.wallets)
networkService.selectAccount(provider.ethereum.getAddress())
this.setupAndLogin(provider)
} catch (e) {
this.props.addError(e.message)
Expand All @@ -175,7 +177,7 @@ class LoginWithOptions extends PureComponent {
this.props.clearErrors()
try {
const index = Math.max(this.props.accounts.indexOf(account), 0)
const provider = privateKeyProvider.getPrivateKeyProvider(LOCAL_PRIVATE_KEYS[index], networkService.getProviderSettings())
const provider = privateKeyProvider.getPrivateKeyProvider(LOCAL_PRIVATE_KEYS[index], networkService.getProviderSettings(), this.props.wallets)
this.setupAndLogin(provider)
} catch (e) {
this.props.addError(e.message)
Expand Down Expand Up @@ -211,6 +213,7 @@ class LoginWithOptions extends PureComponent {
this.props.clearErrors()
try {
const provider = walletProvider.getProvider(wallet, password, networkService.getProviderSettings())
networkService.selectAccount(provider.ethereum.getAddress())
this.setupAndLogin(provider)
} catch (e) {
this.props.addError(e.message)
Expand Down Expand Up @@ -271,7 +274,7 @@ class LoginWithOptions extends PureComponent {

renderStep (step) {
const renderer = `render${pascalCase(step)}`
return this[ renderer ] ? this[ renderer ]() : null
return this[renderer] ? this[renderer]() : null
}

renderStepSelectOption () {
Expand Down
6 changes: 3 additions & 3 deletions packages/login/network/BitcoinBlockexplorerNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export default class BitcoinBlockexplorerNode extends BitcoinAbstractNode {
async getFeeRate () {
try {
const res = await this._api.get(`utils/estimatefee?nbBlocks=2`)
const rate = res.data[ '2' ]
const rate = res.data['2']
return rate > 0
? DECIMALS * rate / 1024
: 150 // default satoshis per byte for testnets
Expand All @@ -43,11 +43,11 @@ export default class BitcoinBlockexplorerNode extends BitcoinAbstractNode {

async getAddressInfo (address) {
try {
const [ confirmed, unconfirmed ] = await Promise.all([
const [confirmed, unconfirmed] = await Promise.all([
this._api.get(`addr/${address}/balance`),
this._api.get(`addr/${address}/unconfirmedBalance`),
])
const [ balanceSat, unconfirmedBalanceSat ] = [ confirmed.data, unconfirmed.data ]
const [balanceSat, unconfirmedBalanceSat] = [confirmed.data, unconfirmed.data]
return {
balance0: new BigNumber(balanceSat).plus(unconfirmedBalanceSat),
balance3: new BigNumber(balanceSat),
Expand Down
5 changes: 2 additions & 3 deletions packages/login/network/BitcoinEngine.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ export class BitcoinEngine {
vout: output.vout,
value: output.satoshis,
})), targets, Math.ceil(feeRate))
console.log('describeTransaction: ', inputs, outputs, fee)
return { inputs, outputs, fee }
}

Expand Down Expand Up @@ -116,7 +115,7 @@ export class BTGEngine extends BitcoinEngine {
const hashType = bitcoin.Transaction.SIGHASH_ALL | bitcoin.Transaction.SIGHASH_BITCOINCASHBIP143

for (let i = 0; i < inputs.length; i++) {
txb.sign(i, this._wallet.keyPair, null, hashType, inputs[ i ].value)
txb.sign(i, this._wallet.keyPair, null, hashType, inputs[i].value)
}
}
}
Expand All @@ -129,7 +128,7 @@ export class BCCEngine extends BitcoinEngine {
const hashType = bitcoin.Transaction.SIGHASH_ALL | bitcoin.Transaction.SIGHASH_BITCOINCASHBIP143

for (let i = 0; i < inputs.length; i++) {
txb.sign(i, this._wallet.keyPair, null, hashType, inputs[ i ].value)
txb.sign(i, this._wallet.keyPair, null, hashType, inputs[i].value)
}
}
}
10 changes: 4 additions & 6 deletions packages/login/network/BitcoinMiddlewareNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
*/

import BigNumber from 'bignumber.js'
import TxModel from 'models/TxModel'
import BitcoinAbstractNode, { BitcoinBalance, BitcoinTx } from './BitcoinAbstractNode'
import { DECIMALS } from './BitcoinEngine'

Expand All @@ -27,7 +26,7 @@ export default class BitcoinMiddlewareNode extends BitcoinAbstractNode {
try {
await this._api.post('addr', { address })
this.executeOrSchedule(() => {
this._subscriptions[ `balance:${address}` ] = this._client.subscribe(
this._subscriptions[`balance:${address}`] = this._client.subscribe(
`${this._socket.channels.balance}.${address}`,
// `${socket.channels.balance}.*`,
(message) => {
Expand Down Expand Up @@ -62,9 +61,9 @@ export default class BitcoinMiddlewareNode extends BitcoinAbstractNode {
try {
await this._api.delete('addr', { address })
this.executeOrSchedule(() => {
const subscription = this._subscriptions[ `balance:${address}` ]
const subscription = this._subscriptions[`balance:${address}`]
if (subscription) {
delete this._subscriptions[ `balance:${address}` ]
delete this._subscriptions[`balance:${address}`]
subscription.unsubscribe()
}
})
Expand Down Expand Up @@ -130,7 +129,6 @@ export default class BitcoinMiddlewareNode extends BitcoinAbstractNode {
async getAddressUTXOS (address) {
try {
const res = await this._api.get(`addr/${address}/utxo`)
console.log('getAddressUTXOS: ', res)
return res.data
} catch (e) {
this.trace(`getAddressInfo ${address} failed`, e)
Expand Down Expand Up @@ -169,7 +167,7 @@ export default class BitcoinMiddlewareNode extends BitcoinAbstractNode {
return new BitcoinTx({
blockHash: tx.blockHash,
blockNumber: tx.blockNumber,
txHash: tx.hash,
txHash: tx.hash || tx._id,
time: tx.timestamp,
from,
to,
Expand Down
8 changes: 8 additions & 0 deletions packages/login/network/BitcoinNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,14 @@ export const LTC_TESTNET_NODE = new BitcoinBlockexplorerNode({
baseURL: 'https://testnet.litecore.io/api',
timeout: 4000,
}),
socket: {
baseURL: 'https://rabbitmq-webstomp.chronobank.io/stomp',
user: 'rabbitmq_user',
password: '38309100024',
channels: {
balance: '/exchange/events/testnet-litecoin-middleware-chronobank-io_balance',
},
},
trace: false,
})

Expand Down
4 changes: 2 additions & 2 deletions packages/login/network/EthereumEngine.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import hdKey from 'ethereumjs-wallet/hdkey'
import { WALLET_HD_PATH } from './mnemonicProvider'

export default class EthereumEngine {
constructor (wallet, network, url, engine) {
constructor (wallet, network, url, engine, deriveNumber) {
this._wallet = wallet
this._network = network
this._engine = engine || Web3Utils.createEngine(wallet, url)
this._engine = engine || Web3Utils.createEngine(wallet, url, deriveNumber)
}

getNetwork () {
Expand Down
2 changes: 0 additions & 2 deletions packages/login/network/EthereumMiddlewareNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
* Copyright 2017–2018, LaborX PTY
* Licensed under the AGPL Version 3 license.
*/

import TxModel from 'models/TxModel'
import AbstractNode from './AbstractNode'

const eventsList = [
Expand Down
22 changes: 21 additions & 1 deletion packages/login/network/EthereumProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
* Licensed under the AGPL Version 3 license.
*/

import networkService from './NetworkService'
import AbstractProvider from './AbstractProvider'
import type EthereumEngine from './EthereumEngine'
import EthereumEngine from './EthereumEngine'
import selectEthereumNode from './EthereumNode'
import web3Provider from './Web3Provider'

export class EthereumProvider extends AbstractProvider {
constructor () {
Expand Down Expand Up @@ -70,6 +72,24 @@ export class EthereumProvider extends AbstractProvider {
const node = this._selectNode(this._engine)
node.on(event, callback)
}

getWallet () {
return this._engine ? this._engine._wallet : null
}

getNemEngine () {
return this._nemEngine
}

addNewEthWallet (num_addresses) {
const { network, url } = networkService.getProviderSettings()
const wallet = this.getWallet()
const newEngine = new EthereumEngine(wallet, network, url, null, num_addresses)

this.setEngine(newEngine, ethereumProvider.getNemEngine())

web3Provider.pushWallet(num_addresses)
}
}

export const ethereumProvider = new EthereumProvider(selectEthereumNode)
17 changes: 15 additions & 2 deletions packages/login/network/HDWalletProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,20 @@ import Web3 from 'web3'
import WalletSubprovider from './wallet'
import { WALLET_HD_PATH } from './mnemonicProvider'

ProviderEngine.prototype.changeProvider = function (source, idx) {
const self = this
self._providers[idx] = source
source.setEngine(this)
}

export default class HDWalletProvider {
constructor (wallet, provider_url, address_index = 0, num_addresses = 1) {
constructor (wallet, provider_url, address_index = 0, num_addresses = 0) {
this.hdwallet = hdkey.fromMasterSeed(wallet.getPrivateKey())
this.wallet_hdpath = WALLET_HD_PATH
this.wallets = [wallet]
this.addresses = {}

for (let i = 0; i < num_addresses; i++) {
for (let i = 0; i <= num_addresses; i++) {
this.getAddress(i + address_index)
}
this.addresses[num_addresses] = wallet.getAddressString()
Expand Down Expand Up @@ -48,6 +54,13 @@ export default class HDWalletProvider {
return this.addresses[idx]
}

pushWallet (idx) {
let wallet = this.hdwallet.derivePath(`${this.wallet_hdpath}/${idx}`).getWallet()
this.wallets.push(wallet)
this.addresses[Object.values(this.addresses).length] = wallet.getAddressString()
this.engine.changeProvider(new WalletSubprovider(this.wallets, {}), 0)
}

// returns the addresses cache
getAddresses () {
return Object.values(this.addresses)
Expand Down
9 changes: 4 additions & 5 deletions packages/login/network/NemMiddlewareNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import BigNumber from 'bignumber.js'
import nem from 'nem-sdk'
import TxModel from 'models/TxModel'
import NemAbstractNode, { NemBalance, NemTx } from './NemAbstractNode'

export default class NemMiddlewareNode extends NemAbstractNode {
Expand Down Expand Up @@ -123,14 +122,14 @@ function createTxModel (tx, account): NemTx {
from: tx.sender,
signer: tx.signer,
to: tx.recipient,
value: new BigNumber(tx.amount),
value: new BigNumber(tx.amount || 0),
fee: new BigNumber(tx.fee),
credited: tx.recipient === account,
mosaics: !(tx.mosaics && tx.mosaics.length)
? null
: tx.mosaics.reduce((t, m) => ({
...t,
[ `${m.mosaicId.namespaceId}:${m.mosaicId.name}` ]: m.quantity,
[`${m.mosaicId.namespaceId}:${m.mosaicId.name}`]: m.quantity,
}), {}),
unconfirmed: tx.unconfirmed || false,
})
Expand All @@ -146,9 +145,9 @@ function readXemBalance (balance) {
}

function readMosaicsBalances (mosaics) {
return Object.entries(mosaics || {}).reduce((t, [ k, v ]) => ({
return Object.entries(mosaics || {}).reduce((t, [k, v]) => ({
...t,
[ k ]: {
[k]: {
confirmed: v.confirmed == null ? null : new BigNumber(v.confirmed.value),
unconfirmed: v.unconfirmed == null ? null : new BigNumber(v.unconfirmed.value),
},
Expand Down
8 changes: 4 additions & 4 deletions packages/login/network/NemProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ export class NemProvider extends AbstractProvider {
const { balance, mosaics } = await node.getAddressInfo(this._engine.getAddress())
if (mosaic) {
return (mosaics && (mosaic in mosaics))
? mosaics[ mosaic ]
? mosaics[mosaic]
: { confirmed: new BigNumber(0) } // When no such mosaic specified
}
return balance
}

async getTransactionsList (address, skip, offset) {
async getTransactionsList (address, id, skip, offset) {
const node = this._selectNode(this._engine)
return node.getTransactionsList(address, this._id, skip, offset)
return node.getTransactionsList(address, id, skip, offset)
}

async estimateFee (from: string, to, amount: BigNumber, mosaicDefinition) {
const { fee } = this._engine.describeTransaction(to, amount, mosaicDefinition)
return fee
Expand Down
8 changes: 3 additions & 5 deletions packages/login/network/NetworkService.js
Original file line number Diff line number Diff line change
Expand Up @@ -171,14 +171,14 @@ class NetworkService extends EventEmitter {
}
}

async restoreLocalSession (account) {
async restoreLocalSession (account, wallets) {
this.selectProvider(LOCAL_PROVIDER_ID)
this.selectNetwork(LOCAL_ID)
const accounts = await this.loadAccounts()
this.selectAccount(account)

const index = Math.max(accounts.indexOf(account), 0)
const provider = privateKeyProvider.getPrivateKeyProvider(LOCAL_PRIVATE_KEYS[index], this.getProviderSettings())
const provider = privateKeyProvider.getPrivateKeyProvider(LOCAL_PRIVATE_KEYS[index], this.getProviderSettings(), wallets)
await this.setup(provider)
}

Expand All @@ -187,9 +187,7 @@ class NetworkService extends EventEmitter {
web3Provider.reinit(web3, ethereum.getProvider())
networkProvider.setNetworkCode(networkCode)

const accounts = await this.loadAccounts()

this.selectAccount(accounts[0])
await this.loadAccounts()
ethereumProvider.setEngine(ethereum, nem)
bccProvider.setEngine(bcc)
btcProvider.setEngine(btc)
Expand Down
Loading

0 comments on commit 1edf7c5

Please sign in to comment.