1
0
mirror of https://github.com/trezor/trezor-wallet synced 2024-11-24 01:08:27 +00:00

backend not working

This commit is contained in:
Szymon Lesisz 2018-05-07 13:25:46 +02:00
parent c3bcc5fe91
commit 12ab43ef41
8 changed files with 101 additions and 26 deletions

View File

@ -35,7 +35,7 @@ export type DiscoveryStartAction = {
}
export type DiscoveryWaitingAction = {
type: typeof DISCOVERY.WAITING,
type: typeof DISCOVERY.WAITING_FOR_DEVICE | typeof DISCOVERY.WAITING_FOR_BACKEND,
device: TrezorDevice,
network: string
}
@ -69,13 +69,31 @@ export const start = (device: TrezorDevice, network: string, ignoreCompleted?: b
console.warn("Start discovery: Selected device is unavailable...")
return;
}
const web3 = getState().web3.find(w3 => w3.network === network);
if (!web3) {
console.error("Start discovery: Web3 does not exist", network)
return;
}
if (!web3.web3.currentProvider.isConnected()) {
console.error("Start discovery: Web3 is not connected", network)
dispatch({
type: DISCOVERY.WAITING_FOR_BACKEND,
device,
network
});
return;
}
const discovery: State = getState().discovery;
let discoveryProcess: ?Discovery = discovery.find(d => d.deviceState === device.state && d.network === network);
if (!selected.connected && (!discoveryProcess || !discoveryProcess.completed)) {
dispatch({
type: DISCOVERY.WAITING,
type: DISCOVERY.WAITING_FOR_DEVICE,
device,
network
});
@ -111,7 +129,7 @@ const begin = (device: TrezorDevice, network: string): AsyncAction => {
if (!coinToDiscover) return;
dispatch({
type: DISCOVERY.WAITING,
type: DISCOVERY.WAITING_FOR_DEVICE,
device,
network
});

View File

@ -18,6 +18,7 @@ import type {
Action,
AsyncAction,
} from '../flowtype';
import type { ContractFactory } from 'web3';
import type { Account } from '../reducers/AccountsReducer';
import type { PendingTx } from '../reducers/PendingTxReducer';
@ -32,15 +33,15 @@ export type Web3Action = {
export type Web3CreateAction = {
type: typeof WEB3.CREATE,
network: string,
web3: Web3, //(web3instance)
erc20: any,
web3: Web3,
erc20: ContractFactory,
chainId: string;
};
export type Web3UpdateBlockAction = {
type: typeof WEB3.BLOCK_UPDATED,
network: string,
blockHash: any
blockHash: string
};
export type Web3UpdateGasPriceAction = {
@ -76,9 +77,18 @@ export function init(web3: ?Web3, coinIndex: number = 0): AsyncAction {
if (currentHostIndex + 1 < urls.length) {
web3host = urls[currentHostIndex + 1];
} else {
console.error("TODO: Backend " + network + " not working");
console.error("TODO: Backend " + network + " not working", web3.currentProvider );
dispatch({
type: WEB3.CREATE,
network,
web3,
erc20: web3.eth.contract(ERC20Abi),
chainId: '0'
});
// try next coin
dispatch( init(web3, coinIndex + 1) );
dispatch( init(null, coinIndex + 1) );
return;
}
}

View File

@ -4,5 +4,6 @@
export const START: 'discovery__start' = 'discovery__start';
export const STOP: 'discovery__stop' = 'discovery__stop';
export const COMPLETE: 'discovery__complete' = 'discovery__complete';
export const WAITING: 'discovery__waiting' = 'discovery__waiting';
export const WAITING_FOR_DEVICE: 'discovery__waiting_for_device' = 'discovery__waiting_for_device';
export const WAITING_FOR_BACKEND: 'discovery__waiting_for_backend' = 'discovery__waiting_for_backend';
export const FROM_STORAGE: 'discovery__from_storage' = 'discovery__from_storage';

View File

@ -58,7 +58,7 @@ export default class AbstractAccount<P> extends Component<Props & P, AccountStat
const device = findDevice(props.devices, currentState.deviceState, currentState.deviceId, currentState.deviceInstance);
if (!device) return;
const discovery = props.discovery.find(d => d.deviceState === device.state && d.network === currentState.network);
if (!discovery) return;
// if (!discovery) return;
const account = props.accounts.find(a => a.deviceState === currentState.deviceState && a.index === currentState.index && a.network === currentState.network);
@ -68,10 +68,13 @@ export default class AbstractAccount<P> extends Component<Props & P, AccountStat
deviceStatusNotification = <Notification className="info" title={ `Device ${ device.instanceLabel } is disconnected` } />;
} else if (!device.available) {
deviceStatusNotification = <Notification className="info" title={ `Device ${ device.instanceLabel } is unavailable` } message="Change passphrase settings to use this device" />;
} else if (!discovery.completed) {
deviceStatusNotification = <Notification className="info" title="Loading accounts" />;
}
}
if (discovery && !discovery.completed && !deviceStatusNotification) {
deviceStatusNotification = <Notification className="info" title="Loading accounts" />;
}
this.setState({
device,
discovery,
@ -112,7 +115,7 @@ export default class AbstractAccount<P> extends Component<Props & P, AccountStat
if (device.available) {
return (
<section>
<Notification className="info" title="Loading accounts" />
<Notification className="info" title="Loading accounts..." />
</section>
);
} else {
@ -137,6 +140,12 @@ export default class AbstractAccount<P> extends Component<Props & P, AccountStat
</section>
);
}
} else if (discovery.waitingForBackend) {
return (
<section>
<Notification className="warning" title="Backend not working" />
</section>
);
} else if (discovery.completed) {
return (
<section>

View File

@ -2,11 +2,17 @@ import type BigNumber from 'bignumber.js';
import type { EthereumUnitT, EthereumAddressT } from 'ethereum-types';
declare module 'web3' {
declare type ProviderT = Object;
declare type ProviderT = {
host: string;
timeout: number;
isConnected: () => boolean;
send: (payload: any) => any;
sendAsync: (payload: any, callback: (error: Error, result: any) => void) => any;
};
declare class Web3T {
static providers: {
HttpProvider: (url: string) => ProviderT;
HttpProvider: (host: string, timeout?: number) => ProviderT;
};
constructor(ProviderT): Web3T;
@ -54,7 +60,7 @@ declare module 'web3' {
// constructor(abi: Array<Object>);
eth: Eth;
abi: Array<Object>;
at: (address: string, callback: (error: Error, contract: Contract) => void) => Contract;
at: (address: string, callback: ?(error: Error, contract: Contract) => void) => Contract; // TODO
}
declare export class Contract {

View File

@ -29,7 +29,7 @@ export type Discovery = {
interrupted: boolean;
completed: boolean;
waitingForDevice: boolean;
waitingForAuth?: boolean;
waitingForBackend: boolean;
}
export type State = Array<Discovery>;
@ -50,7 +50,8 @@ const start = (state: State, action: DiscoveryStartAction): State => {
accountIndex: 0,
interrupted: false,
completed: false,
waitingForDevice: false
waitingForDevice: false,
waitingForBackend: false,
}
const newState: State = [ ...state ];
@ -92,7 +93,7 @@ const stop = (state: State, action: DiscoveryStopAction): State => {
});
}
const waiting = (state: State, action: DiscoveryWaitingAction): State => {
const waitingForDevice = (state: State, action: DiscoveryWaitingAction): State => {
const deviceState: string = action.device.state || '0';
const instance: Discovery = {
@ -104,7 +105,34 @@ const waiting = (state: State, action: DiscoveryWaitingAction): State => {
accountIndex: 0,
interrupted: false,
completed: false,
waitingForDevice: true
waitingForDevice: true,
waitingForBackend: false,
}
const index: number = findIndex(state, action.network, deviceState);
const newState: State = [ ...state ];
if (index >= 0) {
newState[index] = instance;
} else {
newState.push(instance);
}
return newState;
}
const waitingForBackend = (state: State, action: DiscoveryWaitingAction): State => {
const deviceState: string = action.device.state || '0';
const instance: Discovery = {
network: action.network,
deviceState,
xpub: '',
hdKey: null,
basePath: [],
accountIndex: 0,
interrupted: false,
completed: false,
waitingForDevice: false,
waitingForBackend: true
}
const index: number = findIndex(state, action.network, deviceState);
@ -129,14 +157,17 @@ export default function discovery(state: State = initialState, action: Action):
return stop(state, action);
case DISCOVERY.COMPLETE :
return complete(state, action);
case DISCOVERY.WAITING :
return waiting(state, action)
case DISCOVERY.WAITING_FOR_DEVICE :
return waitingForDevice(state, action);
case DISCOVERY.WAITING_FOR_BACKEND :
return waitingForBackend(state, action);
case DISCOVERY.FROM_STORAGE :
return action.payload.map(d => {
return {
...d,
interrupted: false,
waitingForDevice: false
waitingForDevice: false,
waitingForBackend: false,
}
})
case CONNECT.FORGET :

View File

@ -12,14 +12,15 @@ import type {
Web3UpdateBlockAction,
Web3UpdateGasPriceAction
} from '../actions/Web3Actions';
import type { ContractFactory } from 'web3';
export type Web3Instance = {
network: string;
web3: Web3;
chainId: number;
latestBlock: any;
gasPrice: string; //BigNumber
erc20: any; //ContractFactory
gasPrice: string;
erc20: ContractFactory;
}
export type State = Array<Web3Instance>;

View File

@ -118,7 +118,6 @@ const LocalStorageService: Middleware = (api: MiddlewareAPI) => (next: Middlewar
case DISCOVERY.START :
case DISCOVERY.STOP :
case DISCOVERY.COMPLETE :
// case DISCOVERY.WAITING :
save(api.dispatch, api.getState);
break;