@onekeyfe/hd-core 1.1.4-alpha.0 → 1.1.4-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/BaseMethod.d.ts +0 -2
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddress.d.ts +28 -4
- package/dist/api/allnetwork/AllNetworkGetAddress.d.ts.map +1 -1
- package/dist/api/btc/BTCGetPublicKey.d.ts.map +1 -1
- package/dist/api/cosmos/CosmosGetPublicKey.d.ts +1 -1
- package/dist/api/cosmos/CosmosGetPublicKey.d.ts.map +1 -1
- package/dist/api/device/DeviceUnlock.d.ts +2 -0
- package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
- package/dist/api/evm/EVMGetPublicKey.d.ts +0 -1
- package/dist/api/evm/EVMGetPublicKey.d.ts.map +1 -1
- package/dist/api/index.d.ts +0 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/core/RequestQueue.d.ts +0 -4
- package/dist/core/RequestQueue.d.ts.map +1 -1
- package/dist/core/index.d.ts +2 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/device/Device.d.ts +1 -4
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/events/call.d.ts +0 -9
- package/dist/events/call.d.ts.map +1 -1
- package/dist/events/core.d.ts +2 -2
- package/dist/events/core.d.ts.map +1 -1
- package/dist/events/iframe.d.ts +1 -11
- package/dist/events/iframe.d.ts.map +1 -1
- package/dist/index.d.ts +10 -38
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +193 -402
- package/dist/inject.d.ts +0 -3
- package/dist/inject.d.ts.map +1 -1
- package/dist/types/api/allNetworkGetAddress.d.ts +2 -9
- package/dist/types/api/allNetworkGetAddress.d.ts.map +1 -1
- package/dist/types/api/evmGetPublicKey.d.ts +0 -1
- package/dist/types/api/evmGetPublicKey.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +1 -2
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/utils/findDefectiveBatchDevice.d.ts +5 -0
- package/dist/utils/findDefectiveBatchDevice.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/BaseMethod.ts +0 -3
- package/src/api/allnetwork/AllNetworkGetAddress.ts +407 -14
- package/src/api/btc/BTCGetPublicKey.ts +0 -13
- package/src/api/cosmos/CosmosGetPublicKey.ts +1 -1
- package/src/api/device/DeviceUnlock.ts +48 -1
- package/src/api/evm/EVMGetPublicKey.ts +3 -9
- package/src/api/index.ts +0 -1
- package/src/core/RequestQueue.ts +0 -26
- package/src/core/index.ts +82 -41
- package/src/device/Device.ts +0 -66
- package/src/events/call.ts +0 -10
- package/src/events/core.ts +1 -7
- package/src/events/iframe.ts +1 -12
- package/src/index.ts +1 -2
- package/src/inject.ts +0 -47
- package/src/types/api/allNetworkGetAddress.ts +2 -16
- package/src/types/api/evmGetPublicKey.ts +0 -1
- package/src/types/api/index.ts +1 -2
- package/src/utils/findDefectiveBatchDevice.ts +29 -0
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts +0 -47
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +0 -1
- package/dist/api/allnetwork/AllNetworkGetAddressByLoop.d.ts +0 -8
- package/dist/api/allnetwork/AllNetworkGetAddressByLoop.d.ts.map +0 -1
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +0 -477
- package/src/api/allnetwork/AllNetworkGetAddressByLoop.ts +0 -151
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CommonParams, Response
|
|
1
|
+
import type { CommonParams, Response } from '../params';
|
|
2
2
|
import type { CardanoAddressParameters } from './cardano';
|
|
3
3
|
|
|
4
4
|
export type INetwork =
|
|
@@ -91,7 +91,7 @@ type AllNetworkAddressPayload =
|
|
|
91
91
|
xpubSegwit: string;
|
|
92
92
|
};
|
|
93
93
|
|
|
94
|
-
export type AllNetworkAddress =
|
|
94
|
+
export type AllNetworkAddress = CommonResponseParams & {
|
|
95
95
|
success: boolean;
|
|
96
96
|
payload?:
|
|
97
97
|
| AllNetworkAddressPayload
|
|
@@ -108,22 +108,8 @@ export type AllNetworkGetAddressParams = {
|
|
|
108
108
|
bundle: AllNetworkAddressParams[];
|
|
109
109
|
};
|
|
110
110
|
|
|
111
|
-
export type AllNetworkGetAddressParamsByLoop = AllNetworkGetAddressParams & {
|
|
112
|
-
callbackId?: string;
|
|
113
|
-
callbackIdFinish?: string;
|
|
114
|
-
onLoopItemResponse: (data?: AllNetworkAddress) => void;
|
|
115
|
-
onAllItemsResponse: (data?: AllNetworkAddress[], error?: Unsuccessful) => void;
|
|
116
|
-
};
|
|
117
|
-
|
|
118
111
|
export declare function allNetworkGetAddress(
|
|
119
112
|
connectId: string,
|
|
120
113
|
deviceId: string,
|
|
121
114
|
params: CommonParams & AllNetworkGetAddressParams
|
|
122
115
|
): Response<AllNetworkAddress[]>;
|
|
123
|
-
|
|
124
|
-
export declare function allNetworkGetAddressByLoop(
|
|
125
|
-
connectId: string,
|
|
126
|
-
deviceId: string,
|
|
127
|
-
params: CommonParams & AllNetworkGetAddressParamsByLoop
|
|
128
|
-
// only return empty array
|
|
129
|
-
): Response<AllNetworkAddress[]>;
|
package/src/types/api/index.ts
CHANGED
|
@@ -43,7 +43,7 @@ import { setU2FCounter } from './setU2FCounter';
|
|
|
43
43
|
|
|
44
44
|
import { cipherKeyValue } from './cipherKeyValue';
|
|
45
45
|
|
|
46
|
-
import { allNetworkGetAddress
|
|
46
|
+
import { allNetworkGetAddress } from './allNetworkGetAddress';
|
|
47
47
|
|
|
48
48
|
import { evmGetAddress } from './evmGetAddress';
|
|
49
49
|
import { evmGetPublicKey } from './evmGetPublicKey';
|
|
@@ -230,7 +230,6 @@ export type CoreApi = {
|
|
|
230
230
|
* All network function
|
|
231
231
|
*/
|
|
232
232
|
allNetworkGetAddress: typeof allNetworkGetAddress;
|
|
233
|
-
allNetworkGetAddressByLoop: typeof allNetworkGetAddressByLoop;
|
|
234
233
|
|
|
235
234
|
/**
|
|
236
235
|
* EVM function
|
|
@@ -1,10 +1,39 @@
|
|
|
1
|
+
import { EDeviceType } from '@onekeyfe/hd-shared';
|
|
1
2
|
import type { Features } from '../types';
|
|
3
|
+
import { getDeviceUUID, getDeviceType } from './deviceInfoUtils';
|
|
2
4
|
|
|
5
|
+
/**
|
|
6
|
+
* 检测故障固件设备
|
|
7
|
+
* 检测规则:
|
|
8
|
+
* - 序列号范围:21032200001 到 21032201500 (从 onekey_serial 字段提取)
|
|
9
|
+
* - SE版本为 1.1.0.2
|
|
10
|
+
*
|
|
11
|
+
* 对齐之前版本的检测逻辑
|
|
12
|
+
*/
|
|
3
13
|
export const findDefectiveBatchDevice = (features: Features) => {
|
|
4
14
|
if (!features) return;
|
|
15
|
+
|
|
5
16
|
const { onekey_serial: onekeySerial, se_ver: seVer } = features;
|
|
6
17
|
if (!onekeySerial) return;
|
|
18
|
+
|
|
7
19
|
const versionNum = +onekeySerial.slice(5);
|
|
8
20
|
if (Number.isNaN(versionNum)) return;
|
|
21
|
+
|
|
9
22
|
return versionNum >= 21032200001 && versionNum <= 21032201500 && seVer === '1.1.0.2';
|
|
10
23
|
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 获取故障设备的详细信息
|
|
27
|
+
*/
|
|
28
|
+
export const getDefectiveDeviceInfo = (features: Features) => {
|
|
29
|
+
if (!findDefectiveBatchDevice(features)) return null;
|
|
30
|
+
const serialNo = getDeviceUUID(features);
|
|
31
|
+
const deviceType = getDeviceType(features);
|
|
32
|
+
const seVersion = features.se_ver;
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
serialNo,
|
|
36
|
+
seVersion,
|
|
37
|
+
deviceType: deviceType || 'Unknown',
|
|
38
|
+
};
|
|
39
|
+
};
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { BaseMethod } from '../BaseMethod';
|
|
2
|
-
import { CoreApi } from '../../types';
|
|
3
|
-
import type { AllNetworkAddressParams, INetwork, AllNetworkAddress, CommonResponseParams } from '../../types/api/allNetworkGetAddress';
|
|
4
|
-
export type NetworkConfig = {
|
|
5
|
-
methodName: keyof CoreApi;
|
|
6
|
-
getParams?: (baseParams: AllNetworkAddressParams, chainName?: string, methodName?: string) => any;
|
|
7
|
-
dependOnMethodName?: (keyof CoreApi)[];
|
|
8
|
-
};
|
|
9
|
-
export type INetworkReal = Exclude<INetwork, 'tbtc' | 'bch' | 'doge' | 'ltc' | 'neurai'>;
|
|
10
|
-
export type NetworkConfigMap = {
|
|
11
|
-
[K in INetworkReal]: NetworkConfig;
|
|
12
|
-
};
|
|
13
|
-
export declare const networkAliases: {
|
|
14
|
-
[key: string]: {
|
|
15
|
-
name: INetworkReal;
|
|
16
|
-
coin: string;
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
type MethodParams = {
|
|
20
|
-
methodName: keyof CoreApi;
|
|
21
|
-
params: Parameters<CoreApi[keyof CoreApi]>[0];
|
|
22
|
-
_originRequestParams: AllNetworkAddressParams;
|
|
23
|
-
_originalIndex: number;
|
|
24
|
-
};
|
|
25
|
-
export default abstract class AllNetworkGetAddressBase extends BaseMethod<{
|
|
26
|
-
address_n: number[];
|
|
27
|
-
show_display: boolean;
|
|
28
|
-
network: string;
|
|
29
|
-
chain_name?: string;
|
|
30
|
-
}[]> {
|
|
31
|
-
abortController: AbortController | null;
|
|
32
|
-
init(): void;
|
|
33
|
-
generateMethodName({ network, payload, originalIndex, }: {
|
|
34
|
-
network: INetwork;
|
|
35
|
-
payload: AllNetworkAddressParams;
|
|
36
|
-
originalIndex: number;
|
|
37
|
-
}): MethodParams;
|
|
38
|
-
callMethod(methodName: keyof CoreApi, params: any & {
|
|
39
|
-
bundle: (any & {
|
|
40
|
-
_originRequestParams: CommonResponseParams;
|
|
41
|
-
})[];
|
|
42
|
-
}): Promise<AllNetworkAddress[]>;
|
|
43
|
-
abstract getAllNetworkAddress(): Promise<AllNetworkAddress[]>;
|
|
44
|
-
run(): Promise<AllNetworkAddress[]>;
|
|
45
|
-
}
|
|
46
|
-
export {};
|
|
47
|
-
//# sourceMappingURL=AllNetworkGetAddressBase.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AllNetworkGetAddressBase.d.ts","sourceRoot":"","sources":["../../../src/api/allnetwork/AllNetworkGetAddressBase.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EACV,uBAAuB,EACvB,QAAQ,EACR,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAa9C,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,uBAAuB,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;IAClG,kBAAkB,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,EAAE,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC;AAEzF,MAAM,MAAM,gBAAgB,GAAG;KAC5B,CAAC,IAAI,YAAY,GAAG,aAAa;CACnC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAOrD,CAAC;AA8LF,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,oBAAoB,EAAE,uBAAuB,CAAC;IAC9C,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,wBAAyB,SAAQ,UAAU,CACvE;IACE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,EAAE,CACJ;IACC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAQ;IAE/C,IAAI;IAkBJ,kBAAkB,CAAC,EACjB,OAAO,EACP,OAAO,EACP,aAAa,GACd,EAAE;QACD,OAAO,EAAE,QAAQ,CAAC;QAClB,OAAO,EAAE,uBAAuB,CAAC;QACjC,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,YAAY;IAqBV,UAAU,CACd,UAAU,EAAE,MAAM,OAAO,EACzB,MAAM,EAAE,GAAG,GAAG;QACZ,MAAM,EAAE,CAAC,GAAG,GAAG;YAAE,oBAAoB,EAAE,oBAAoB,CAAA;SAAE,CAAC,EAAE,CAAC;KAClE;IAgFH,QAAQ,CAAC,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAEvD,GAAG;CAuBV"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import AllNetworkGetAddressBase from './AllNetworkGetAddressBase';
|
|
2
|
-
export default class AllNetworkGetAddressByLoop extends AllNetworkGetAddressBase {
|
|
3
|
-
getAllNetworkAddress(): Promise<never[]>;
|
|
4
|
-
private processCallbacksInBackground;
|
|
5
|
-
private sendFinishCallback;
|
|
6
|
-
private sendItemCallback;
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=AllNetworkGetAddressByLoop.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AllNetworkGetAddressByLoop.d.ts","sourceRoot":"","sources":["../../../src/api/allnetwork/AllNetworkGetAddressByLoop.ts"],"names":[],"mappings":"AAaA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAGlE,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,wBAAwB;IACxE,oBAAoB;YAwBZ,4BAA4B;IA4E1C,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,gBAAgB;CAazB"}
|
|
@@ -1,477 +0,0 @@
|
|
|
1
|
-
import semver from 'semver';
|
|
2
|
-
import {
|
|
3
|
-
ERRORS,
|
|
4
|
-
HardwareError,
|
|
5
|
-
HardwareErrorCode,
|
|
6
|
-
HardwareErrorCodeMessage,
|
|
7
|
-
} from '@onekeyfe/hd-shared';
|
|
8
|
-
|
|
9
|
-
import { serializedPath } from '../helpers/pathUtils';
|
|
10
|
-
import { BaseMethod } from '../BaseMethod';
|
|
11
|
-
import { validateParams } from '../helpers/paramsValidator';
|
|
12
|
-
import { CoreApi } from '../../types';
|
|
13
|
-
import type {
|
|
14
|
-
AllNetworkAddressParams,
|
|
15
|
-
INetwork,
|
|
16
|
-
AllNetworkAddress,
|
|
17
|
-
CommonResponseParams,
|
|
18
|
-
} from '../../types/api/allNetworkGetAddress';
|
|
19
|
-
import { PROTO } from '../../constants';
|
|
20
|
-
|
|
21
|
-
import { findMethod } from '../utils';
|
|
22
|
-
import { createUiMessage, DEVICE, IFRAME } from '../../events';
|
|
23
|
-
import { getDeviceFirmwareVersion, getMethodVersionRange } from '../../utils';
|
|
24
|
-
import { Device, DeviceEvents } from '../../device/Device';
|
|
25
|
-
import { UI_REQUEST } from '../../constants/ui-request';
|
|
26
|
-
import { onDeviceButtonHandler } from '../../core';
|
|
27
|
-
import { DevicePool } from '../../device/DevicePool';
|
|
28
|
-
|
|
29
|
-
const Mainnet = 'mainnet';
|
|
30
|
-
|
|
31
|
-
export type NetworkConfig = {
|
|
32
|
-
methodName: keyof CoreApi;
|
|
33
|
-
getParams?: (baseParams: AllNetworkAddressParams, chainName?: string, methodName?: string) => any;
|
|
34
|
-
dependOnMethodName?: (keyof CoreApi)[];
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export type INetworkReal = Exclude<INetwork, 'tbtc' | 'bch' | 'doge' | 'ltc' | 'neurai'>;
|
|
38
|
-
|
|
39
|
-
export type NetworkConfigMap = {
|
|
40
|
-
[K in INetworkReal]: NetworkConfig;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export const networkAliases: {
|
|
44
|
-
[key: string]: { name: INetworkReal; coin: string };
|
|
45
|
-
} = {
|
|
46
|
-
tbtc: { name: 'btc', coin: 'Testnet' },
|
|
47
|
-
bch: { name: 'btc', coin: 'Bcash' },
|
|
48
|
-
doge: { name: 'btc', coin: 'Dogecoin' },
|
|
49
|
-
ltc: { name: 'btc', coin: 'Litecoin' },
|
|
50
|
-
neurai: { name: 'btc', coin: 'Neurai' },
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const networkConfigMap: NetworkConfigMap = {
|
|
54
|
-
btc: {
|
|
55
|
-
methodName: 'btcGetPublicKey',
|
|
56
|
-
getParams: (baseParams: AllNetworkAddressParams, chainName?: string) => ({
|
|
57
|
-
coin: chainName,
|
|
58
|
-
...baseParams,
|
|
59
|
-
}),
|
|
60
|
-
},
|
|
61
|
-
evm: {
|
|
62
|
-
methodName: 'evmGetAddress',
|
|
63
|
-
getParams: (baseParams: AllNetworkAddressParams, chainName?: string) => {
|
|
64
|
-
const { path, showOnOneKey } = baseParams;
|
|
65
|
-
let chainId;
|
|
66
|
-
if (chainName) {
|
|
67
|
-
chainId = parseInt(chainName);
|
|
68
|
-
}
|
|
69
|
-
return {
|
|
70
|
-
chainId,
|
|
71
|
-
path,
|
|
72
|
-
showOnOneKey,
|
|
73
|
-
};
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
sol: {
|
|
77
|
-
methodName: 'solGetAddress',
|
|
78
|
-
},
|
|
79
|
-
algo: {
|
|
80
|
-
methodName: 'algoGetAddress',
|
|
81
|
-
},
|
|
82
|
-
near: {
|
|
83
|
-
methodName: 'nearGetAddress',
|
|
84
|
-
},
|
|
85
|
-
stc: {
|
|
86
|
-
methodName: 'starcoinGetAddress',
|
|
87
|
-
},
|
|
88
|
-
cfx: {
|
|
89
|
-
methodName: 'confluxGetAddress',
|
|
90
|
-
getParams: (baseParams: AllNetworkAddressParams, chainName?: string) => {
|
|
91
|
-
const { path, showOnOneKey } = baseParams;
|
|
92
|
-
return {
|
|
93
|
-
chainId: parseInt(chainName ?? '1029'),
|
|
94
|
-
path,
|
|
95
|
-
showOnOneKey,
|
|
96
|
-
};
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
tron: {
|
|
100
|
-
methodName: 'tronGetAddress',
|
|
101
|
-
},
|
|
102
|
-
aptos: {
|
|
103
|
-
methodName: 'aptosGetAddress',
|
|
104
|
-
},
|
|
105
|
-
xrp: {
|
|
106
|
-
methodName: 'xrpGetAddress',
|
|
107
|
-
},
|
|
108
|
-
cosmos: {
|
|
109
|
-
methodName: 'cosmosGetPublicKey',
|
|
110
|
-
getParams: (baseParams: AllNetworkAddressParams) => {
|
|
111
|
-
const { path, prefix, showOnOneKey } = baseParams;
|
|
112
|
-
return {
|
|
113
|
-
hrp: prefix,
|
|
114
|
-
path,
|
|
115
|
-
showOnOneKey,
|
|
116
|
-
};
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
ada: {
|
|
120
|
-
methodName: 'cardanoGetAddress',
|
|
121
|
-
getParams: (baseParams: AllNetworkAddressParams, chainName?: string) => {
|
|
122
|
-
const { path, showOnOneKey } = baseParams;
|
|
123
|
-
|
|
124
|
-
const addressPath =
|
|
125
|
-
typeof path === 'string' ? `${path}/0/0` : serializedPath([...path, 0, 0]);
|
|
126
|
-
const stakingPath =
|
|
127
|
-
typeof path === 'string' ? `${path}/2/0` : serializedPath([...path, 2, 0]);
|
|
128
|
-
|
|
129
|
-
let networkId = 1;
|
|
130
|
-
if (chainName) {
|
|
131
|
-
networkId = chainName === Mainnet ? 1 : 0;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return {
|
|
135
|
-
addressParameters: {
|
|
136
|
-
addressType: PROTO.CardanoAddressType.BASE,
|
|
137
|
-
path: addressPath,
|
|
138
|
-
stakingPath,
|
|
139
|
-
},
|
|
140
|
-
protocolMagic: 764824073,
|
|
141
|
-
networkId,
|
|
142
|
-
derivationType: PROTO.CardanoDerivationType.ICARUS,
|
|
143
|
-
showOnOneKey,
|
|
144
|
-
address: '',
|
|
145
|
-
isCheck: false,
|
|
146
|
-
};
|
|
147
|
-
},
|
|
148
|
-
},
|
|
149
|
-
sui: {
|
|
150
|
-
methodName: 'suiGetAddress',
|
|
151
|
-
},
|
|
152
|
-
benfen: {
|
|
153
|
-
methodName: 'benfenGetAddress',
|
|
154
|
-
},
|
|
155
|
-
fil: {
|
|
156
|
-
methodName: 'filecoinGetAddress',
|
|
157
|
-
getParams: (baseParams: AllNetworkAddressParams, chainName?: string) => {
|
|
158
|
-
const { path, showOnOneKey } = baseParams;
|
|
159
|
-
let isTestnet = false;
|
|
160
|
-
if (chainName) {
|
|
161
|
-
isTestnet = chainName !== Mainnet;
|
|
162
|
-
}
|
|
163
|
-
return {
|
|
164
|
-
isTestnet,
|
|
165
|
-
path,
|
|
166
|
-
showOnOneKey,
|
|
167
|
-
};
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
dot: {
|
|
171
|
-
methodName: 'polkadotGetAddress',
|
|
172
|
-
getParams: (baseParams: AllNetworkAddressParams, chainName?: string) => {
|
|
173
|
-
const { path, prefix, showOnOneKey } = baseParams;
|
|
174
|
-
if (!prefix || !chainName) {
|
|
175
|
-
throw new Error('Invalid params');
|
|
176
|
-
}
|
|
177
|
-
return {
|
|
178
|
-
prefix: parseInt(prefix),
|
|
179
|
-
network: chainName,
|
|
180
|
-
path,
|
|
181
|
-
showOnOneKey,
|
|
182
|
-
};
|
|
183
|
-
},
|
|
184
|
-
},
|
|
185
|
-
kaspa: {
|
|
186
|
-
methodName: 'kaspaGetAddress',
|
|
187
|
-
getParams: (baseParams: AllNetworkAddressParams) => {
|
|
188
|
-
const { path, prefix, showOnOneKey, useTweak } = baseParams;
|
|
189
|
-
return {
|
|
190
|
-
scheme: 'schnorr',
|
|
191
|
-
prefix,
|
|
192
|
-
path,
|
|
193
|
-
showOnOneKey,
|
|
194
|
-
useTweak,
|
|
195
|
-
};
|
|
196
|
-
},
|
|
197
|
-
},
|
|
198
|
-
nexa: {
|
|
199
|
-
methodName: 'nexaGetAddress',
|
|
200
|
-
getParams: (baseParams: AllNetworkAddressParams) => {
|
|
201
|
-
const { path, prefix, showOnOneKey } = baseParams;
|
|
202
|
-
return {
|
|
203
|
-
scheme: 'Schnorr',
|
|
204
|
-
prefix,
|
|
205
|
-
path,
|
|
206
|
-
showOnOneKey,
|
|
207
|
-
};
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
dynex: {
|
|
211
|
-
methodName: 'dnxGetAddress',
|
|
212
|
-
},
|
|
213
|
-
nervos: {
|
|
214
|
-
methodName: 'nervosGetAddress',
|
|
215
|
-
getParams: (baseParams: AllNetworkAddressParams, chainName?: string) => {
|
|
216
|
-
const { path, showOnOneKey } = baseParams;
|
|
217
|
-
return {
|
|
218
|
-
network: chainName,
|
|
219
|
-
path,
|
|
220
|
-
showOnOneKey,
|
|
221
|
-
};
|
|
222
|
-
},
|
|
223
|
-
},
|
|
224
|
-
scdo: {
|
|
225
|
-
methodName: 'scdoGetAddress',
|
|
226
|
-
},
|
|
227
|
-
ton: {
|
|
228
|
-
methodName: 'tonGetAddress',
|
|
229
|
-
},
|
|
230
|
-
alph: {
|
|
231
|
-
methodName: 'alephiumGetAddress',
|
|
232
|
-
},
|
|
233
|
-
nostr: {
|
|
234
|
-
methodName: 'nostrGetPublicKey',
|
|
235
|
-
},
|
|
236
|
-
neo: {
|
|
237
|
-
methodName: 'neoGetAddress',
|
|
238
|
-
},
|
|
239
|
-
};
|
|
240
|
-
|
|
241
|
-
type MethodParams = {
|
|
242
|
-
methodName: keyof CoreApi;
|
|
243
|
-
params: Parameters<CoreApi[keyof CoreApi]>[0];
|
|
244
|
-
_originRequestParams: AllNetworkAddressParams;
|
|
245
|
-
_originalIndex: number;
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
export default abstract class AllNetworkGetAddressBase extends BaseMethod<
|
|
249
|
-
{
|
|
250
|
-
address_n: number[];
|
|
251
|
-
show_display: boolean;
|
|
252
|
-
network: string;
|
|
253
|
-
chain_name?: string;
|
|
254
|
-
}[]
|
|
255
|
-
> {
|
|
256
|
-
abortController: AbortController | null = null;
|
|
257
|
-
|
|
258
|
-
init() {
|
|
259
|
-
this.checkDeviceId = true;
|
|
260
|
-
this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.NOT_INITIALIZE];
|
|
261
|
-
|
|
262
|
-
// check payload
|
|
263
|
-
validateParams(this.payload, [{ name: 'bundle', type: 'array' }]);
|
|
264
|
-
|
|
265
|
-
// check bundle
|
|
266
|
-
this.payload?.bundle?.forEach((batch: AllNetworkAddressParams) => {
|
|
267
|
-
validateParams(batch, [
|
|
268
|
-
{ name: 'path', required: true },
|
|
269
|
-
{ name: 'network', type: 'string', required: true },
|
|
270
|
-
{ name: 'chainName', type: 'string' },
|
|
271
|
-
{ name: 'showOnOneKey', type: 'boolean' },
|
|
272
|
-
]);
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
generateMethodName({
|
|
277
|
-
network,
|
|
278
|
-
payload,
|
|
279
|
-
originalIndex,
|
|
280
|
-
}: {
|
|
281
|
-
network: INetwork;
|
|
282
|
-
payload: AllNetworkAddressParams;
|
|
283
|
-
originalIndex: number;
|
|
284
|
-
}): MethodParams {
|
|
285
|
-
const { name: networkName, coin } = networkAliases[network] || {
|
|
286
|
-
name: network,
|
|
287
|
-
coin: payload?.chainName,
|
|
288
|
-
};
|
|
289
|
-
const config = networkConfigMap[networkName];
|
|
290
|
-
if (!config) {
|
|
291
|
-
throw new Error(`Unsupported network: ${network}`);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
return {
|
|
295
|
-
methodName: config.methodName,
|
|
296
|
-
params: {
|
|
297
|
-
...(config?.getParams?.(payload, coin, config.methodName) ?? payload),
|
|
298
|
-
originPayload: payload,
|
|
299
|
-
},
|
|
300
|
-
_originRequestParams: payload,
|
|
301
|
-
_originalIndex: originalIndex,
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
async callMethod(
|
|
306
|
-
methodName: keyof CoreApi,
|
|
307
|
-
params: any & {
|
|
308
|
-
bundle: (any & { _originRequestParams: CommonResponseParams })[];
|
|
309
|
-
}
|
|
310
|
-
) {
|
|
311
|
-
const method: BaseMethod = findMethod({
|
|
312
|
-
event: IFRAME.CALL,
|
|
313
|
-
type: IFRAME.CALL,
|
|
314
|
-
payload: {
|
|
315
|
-
connectId: this.payload.connectId,
|
|
316
|
-
deviceId: this.payload.deviceId,
|
|
317
|
-
method: methodName,
|
|
318
|
-
...params,
|
|
319
|
-
},
|
|
320
|
-
});
|
|
321
|
-
|
|
322
|
-
method.connector = this.connector;
|
|
323
|
-
method.postMessage = this.postMessage;
|
|
324
|
-
|
|
325
|
-
let result: AllNetworkAddress[];
|
|
326
|
-
try {
|
|
327
|
-
method.init();
|
|
328
|
-
method.setDevice?.(this.device);
|
|
329
|
-
method.context = this.context;
|
|
330
|
-
|
|
331
|
-
const onSignalAbort = () => {
|
|
332
|
-
console.log('=====>>>>> onSignalAbort');
|
|
333
|
-
this.abortController?.abort(HardwareErrorCodeMessage[HardwareErrorCode.RepeatUnlocking]);
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
const _onDeviceButtonHandler = (...[device, request]: [...DeviceEvents['button']]) => {
|
|
337
|
-
if (
|
|
338
|
-
request.code === 'ButtonRequest_PinEntry' ||
|
|
339
|
-
request.code === 'ButtonRequest_AttachPin'
|
|
340
|
-
) {
|
|
341
|
-
onSignalAbort();
|
|
342
|
-
} else {
|
|
343
|
-
onDeviceButtonHandler(device, request);
|
|
344
|
-
}
|
|
345
|
-
};
|
|
346
|
-
|
|
347
|
-
// pro pin event
|
|
348
|
-
this.device.on(DEVICE.BUTTON, _onDeviceButtonHandler);
|
|
349
|
-
// classic pin event
|
|
350
|
-
this.device.on(DEVICE.PIN, onSignalAbort);
|
|
351
|
-
this.device.on(DEVICE.PASSPHRASE, onSignalAbort);
|
|
352
|
-
|
|
353
|
-
preCheckDeviceSupport(this.device, method);
|
|
354
|
-
|
|
355
|
-
const response = await method.run();
|
|
356
|
-
|
|
357
|
-
if (!Array.isArray(response) || response.length === 0) {
|
|
358
|
-
throw new Error('No response');
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
result = response.map((item, index) => ({
|
|
362
|
-
...params.bundle[index]._originRequestParams,
|
|
363
|
-
success: true,
|
|
364
|
-
payload: item,
|
|
365
|
-
}));
|
|
366
|
-
} catch (e: any) {
|
|
367
|
-
const error = handleSkippableHardwareError(e, this.device, method);
|
|
368
|
-
|
|
369
|
-
if (error) {
|
|
370
|
-
result = params.bundle.map((item: { _originRequestParams: any }) => ({
|
|
371
|
-
...item._originRequestParams,
|
|
372
|
-
success: false,
|
|
373
|
-
payload: {
|
|
374
|
-
error: error.message,
|
|
375
|
-
code: error.errorCode,
|
|
376
|
-
params: error.params,
|
|
377
|
-
connectId: method.connectId,
|
|
378
|
-
deviceId: method.deviceId,
|
|
379
|
-
},
|
|
380
|
-
}));
|
|
381
|
-
} else {
|
|
382
|
-
throw e;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
return result;
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
abstract getAllNetworkAddress(): Promise<AllNetworkAddress[]>;
|
|
390
|
-
|
|
391
|
-
async run() {
|
|
392
|
-
// check passphrase state
|
|
393
|
-
const passphraseStateSafety = await this.device.checkPassphraseStateSafety(
|
|
394
|
-
this.payload.passphraseState,
|
|
395
|
-
this.payload.useEmptyPassphrase
|
|
396
|
-
);
|
|
397
|
-
|
|
398
|
-
if (!passphraseStateSafety) {
|
|
399
|
-
DevicePool.clearDeviceCache(this.payload.connectId);
|
|
400
|
-
return Promise.reject(ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError));
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
this.postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW));
|
|
404
|
-
|
|
405
|
-
this.abortController = new AbortController();
|
|
406
|
-
|
|
407
|
-
return this.getAllNetworkAddress().catch(e => {
|
|
408
|
-
if (e instanceof HardwareError && e.errorCode === HardwareErrorCode.RepeatUnlocking) {
|
|
409
|
-
throw ERRORS.TypedError(HardwareErrorCode.RepeatUnlocking, e.message);
|
|
410
|
-
}
|
|
411
|
-
throw e;
|
|
412
|
-
});
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* @experiment Check if the device supports the method
|
|
418
|
-
* @param device
|
|
419
|
-
* @param method BaseMethod
|
|
420
|
-
*/
|
|
421
|
-
function preCheckDeviceSupport(device: Device, method: BaseMethod) {
|
|
422
|
-
const versionRange = getMethodVersionRange(
|
|
423
|
-
device.features,
|
|
424
|
-
type => method.getVersionRange()[type]
|
|
425
|
-
);
|
|
426
|
-
const currentVersion = getDeviceFirmwareVersion(device.features).join('.');
|
|
427
|
-
|
|
428
|
-
if (
|
|
429
|
-
versionRange &&
|
|
430
|
-
semver.valid(versionRange.min) &&
|
|
431
|
-
semver.lt(currentVersion, versionRange.min)
|
|
432
|
-
) {
|
|
433
|
-
throw ERRORS.createNeedUpgradeFirmwareHardwareError(currentVersion, versionRange.min);
|
|
434
|
-
} else if (method.strictCheckDeviceSupport && !versionRange) {
|
|
435
|
-
throw ERRORS.TypedError(HardwareErrorCode.DeviceNotSupportMethod);
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
function handleSkippableHardwareError(
|
|
440
|
-
e: any,
|
|
441
|
-
device: Device,
|
|
442
|
-
method: BaseMethod
|
|
443
|
-
): HardwareError | undefined {
|
|
444
|
-
let error: HardwareError | undefined;
|
|
445
|
-
|
|
446
|
-
if (e instanceof HardwareError && e.errorCode !== HardwareErrorCode.RuntimeError) {
|
|
447
|
-
const { errorCode } = e;
|
|
448
|
-
if (errorCode === HardwareErrorCode.CallMethodNeedUpgradeFirmware) {
|
|
449
|
-
error = e;
|
|
450
|
-
} else if (errorCode === HardwareErrorCode.DeviceNotSupportMethod) {
|
|
451
|
-
error = e;
|
|
452
|
-
}
|
|
453
|
-
} else if (e.message?.includes('Failure_UnexpectedMessage')) {
|
|
454
|
-
const versionRange = getMethodVersionRange(
|
|
455
|
-
device.features,
|
|
456
|
-
type => method.getVersionRange()[type]
|
|
457
|
-
);
|
|
458
|
-
const currentVersion = getDeviceFirmwareVersion(device.features).join('.');
|
|
459
|
-
|
|
460
|
-
if (
|
|
461
|
-
versionRange &&
|
|
462
|
-
semver.valid(versionRange.min) &&
|
|
463
|
-
semver.lt(currentVersion, versionRange.min)
|
|
464
|
-
) {
|
|
465
|
-
error = ERRORS.createNeedUpgradeFirmwareHardwareError(currentVersion, versionRange.min);
|
|
466
|
-
} else {
|
|
467
|
-
error = ERRORS.TypedError(HardwareErrorCode.DeviceNotSupportMethod, e.message);
|
|
468
|
-
}
|
|
469
|
-
} else if (
|
|
470
|
-
e.message?.toLowerCase()?.includes('forbidden key path') ||
|
|
471
|
-
e.message?.toLowerCase()?.includes('invalid path')
|
|
472
|
-
) {
|
|
473
|
-
error = ERRORS.TypedError(HardwareErrorCode.CallMethodInvalidParameter, e.message);
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
return error;
|
|
477
|
-
}
|