1
0
mirror of https://github.com/trezor/trezor-wallet synced 2024-11-15 12:59:09 +00:00
trezor-wallet/src/actions/ripple/DiscoveryActions.js

81 lines
2.5 KiB
JavaScript
Raw Normal View History

2018-11-23 12:07:22 +00:00
/* @flow */
import TrezorConnect from 'trezor-connect';
import * as DISCOVERY from 'actions/constants/discovery';
import { toDecimalAmount } from 'utils/formatUtils';
2018-11-23 12:07:22 +00:00
2019-03-04 12:33:02 +00:00
import type { PromiseAction, GetState, Dispatch, TrezorDevice, Network, Account } from 'flowtype';
import type { Discovery } from 'reducers/DiscoveryReducer';
2018-11-23 12:07:22 +00:00
export type DiscoveryStartAction = {
type: typeof DISCOVERY.START,
networkType: 'ripple',
2018-11-23 12:07:22 +00:00
network: Network,
device: TrezorDevice,
};
2019-03-04 12:33:02 +00:00
export const begin = (
device: TrezorDevice,
network: Network
): PromiseAction<DiscoveryStartAction> => async (): Promise<DiscoveryStartAction> => ({
type: DISCOVERY.START,
networkType: 'ripple',
network,
device,
});
2018-11-23 12:07:22 +00:00
2019-03-04 12:33:02 +00:00
export const discoverAccount = (
device: TrezorDevice,
discoveryProcess: Discovery
): PromiseAction<Account> => async (dispatch: Dispatch, getState: GetState): Promise<Account> => {
2018-11-23 12:07:22 +00:00
const { config } = getState().localStorage;
const network = config.networks.find(c => c.shortcut === discoveryProcess.network);
if (!network) throw new Error('Discovery network not found');
2018-11-23 12:07:22 +00:00
const { accountIndex } = discoveryProcess;
2018-11-23 12:07:22 +00:00
const path = network.bip44.slice(0).replace('a', accountIndex.toString());
const response = await TrezorConnect.rippleGetAccountInfo({
device: {
path: device.path,
instance: device.instance,
state: device.state,
},
account: {
path,
block: 0,
},
keepSession: true, // acquire and hold session
useEmptyPassphrase: device.useEmptyPassphrase,
coin: network.shortcut,
2018-11-23 12:07:22 +00:00
});
// handle TREZOR response error
2018-11-23 12:07:22 +00:00
if (!response.success) {
throw new Error(response.payload.error);
2018-11-23 12:07:22 +00:00
}
const account = response.payload;
const empty = account.sequence <= 0 && account.balance === '0';
return {
imported: false,
index: discoveryProcess.accountIndex,
network: network.shortcut,
deviceID: device.features ? device.features.device_id : '0',
deviceState: device.state || '0',
accountPath: account.path || [],
descriptor: account.descriptor,
balance: toDecimalAmount(account.balance, network.decimals),
availableBalance: toDecimalAmount(account.availableBalance, network.decimals),
block: account.block,
transactions: account.transactions,
empty,
networkType: 'ripple',
sequence: account.sequence,
2019-01-09 13:32:57 +00:00
reserve: toDecimalAmount(account.reserve, network.decimals),
};
2019-03-04 12:33:02 +00:00
};