@onekeyfe/hd-core 0.2.50 → 0.2.52

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.
Files changed (51) hide show
  1. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  2. package/dist/api/index.d.ts +2 -0
  3. package/dist/api/index.d.ts.map +1 -1
  4. package/dist/api/kaspa/KaspaGetAddress.d.ts +17 -0
  5. package/dist/api/kaspa/KaspaGetAddress.d.ts.map +1 -0
  6. package/dist/api/kaspa/KaspaSignTransaction.d.ts +19 -0
  7. package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -0
  8. package/dist/api/kaspa/helpers/BufferWriter.d.ts +28 -0
  9. package/dist/api/kaspa/helpers/BufferWriter.d.ts.map +1 -0
  10. package/dist/api/kaspa/helpers/HashWriter.d.ts +22 -0
  11. package/dist/api/kaspa/helpers/HashWriter.d.ts.map +1 -0
  12. package/dist/api/kaspa/helpers/SignatureType.d.ts +8 -0
  13. package/dist/api/kaspa/helpers/SignatureType.d.ts.map +1 -0
  14. package/dist/api/kaspa/helpers/TransferSerialize.d.ts +9 -0
  15. package/dist/api/kaspa/helpers/TransferSerialize.d.ts.map +1 -0
  16. package/dist/index.d.ts +63 -5
  17. package/dist/index.js +474 -8
  18. package/dist/inject.d.ts.map +1 -1
  19. package/dist/types/api/export.d.ts +2 -0
  20. package/dist/types/api/export.d.ts.map +1 -1
  21. package/dist/types/api/index.d.ts +4 -0
  22. package/dist/types/api/index.d.ts.map +1 -1
  23. package/dist/types/api/kaspaGetAddress.d.ts +16 -0
  24. package/dist/types/api/kaspaGetAddress.d.ts.map +1 -0
  25. package/dist/types/api/kaspaSignTransaction.d.ts +35 -0
  26. package/dist/types/api/kaspaSignTransaction.d.ts.map +1 -0
  27. package/dist/types/api/suiGetAddress.d.ts +2 -2
  28. package/dist/types/api/suiGetAddress.d.ts.map +1 -1
  29. package/dist/types/settings.d.ts +1 -0
  30. package/dist/types/settings.d.ts.map +1 -1
  31. package/dist/utils/deviceFeaturesUtils.d.ts +1 -1
  32. package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
  33. package/package.json +4 -4
  34. package/src/api/FirmwareUpdateV2.ts +5 -1
  35. package/src/api/index.ts +3 -0
  36. package/src/api/kaspa/KaspaGetAddress.ts +77 -0
  37. package/src/api/kaspa/KaspaSignTransaction.ts +157 -0
  38. package/src/api/kaspa/helpers/BufferWriter.ts +177 -0
  39. package/src/api/kaspa/helpers/HashWriter.ts +72 -0
  40. package/src/api/kaspa/helpers/SignatureType.ts +7 -0
  41. package/src/api/kaspa/helpers/TransferSerialize.ts +143 -0
  42. package/src/data-manager/DataManager.ts +1 -1
  43. package/src/device/DevicePool.ts +6 -6
  44. package/src/inject.ts +5 -0
  45. package/src/types/api/export.ts +8 -0
  46. package/src/types/api/index.ts +9 -0
  47. package/src/types/api/kaspaGetAddress.ts +25 -0
  48. package/src/types/api/kaspaSignTransaction.ts +43 -0
  49. package/src/types/api/suiGetAddress.ts +2 -2
  50. package/src/types/settings.ts +1 -0
  51. package/src/utils/deviceFeaturesUtils.ts +4 -0
@@ -0,0 +1,35 @@
1
+ import { SignatureType } from '../../api/kaspa/helpers/SignatureType';
2
+ import type { CommonParams, Response } from '../params';
3
+ export declare type KaspaSignature = {
4
+ index: number;
5
+ signature: string;
6
+ };
7
+ export declare type KaspaSignInputParams = {
8
+ path: string | number[];
9
+ prevTxId: string;
10
+ outputIndex: number;
11
+ sequenceNumber: number | string;
12
+ output: {
13
+ satoshis: number | string;
14
+ script: string;
15
+ };
16
+ sigOpCount?: number;
17
+ };
18
+ export declare type KaspaSignOutputParams = {
19
+ satoshis: number | string;
20
+ script: string;
21
+ scriptVersion: number;
22
+ };
23
+ export declare type KaspaSignTransactionParams = {
24
+ version: number;
25
+ inputs: KaspaSignInputParams[];
26
+ outputs: KaspaSignOutputParams[];
27
+ lockTime: number | string;
28
+ sigHashType?: SignatureType;
29
+ sigOpCount?: number;
30
+ subNetworkID?: string;
31
+ scheme?: string;
32
+ prefix?: string;
33
+ };
34
+ export declare function kaspaSignTransaction(connectId: string, deviceId: string, params: CommonParams & KaspaSignTransactionParams): Response<KaspaSignature[]>;
35
+ //# sourceMappingURL=kaspaSignTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kaspaSignTransaction.d.ts","sourceRoot":"","sources":["../../../src/types/api/kaspaSignTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAExD,oBAAY,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,oBAAY,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,oBAAY,0BAA0B,GAAG;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GAAG,0BAA0B,GAChD,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC"}
@@ -8,8 +8,8 @@ export declare type SuiGetAddressParams = {
8
8
  path: string | number[];
9
9
  showOnOneKey?: boolean;
10
10
  };
11
- export declare function suiGetAddress(connectId: string, deviceId: string, params: CommonParams & HardwareSuiAddress): Response<SuiAddress>;
11
+ export declare function suiGetAddress(connectId: string, deviceId: string, params: CommonParams & SuiGetAddressParams): Response<SuiAddress>;
12
12
  export declare function suiGetAddress(connectId: string, deviceId: string, params: CommonParams & {
13
- bundle?: HardwareSuiAddress[];
13
+ bundle?: SuiGetAddressParams[];
14
14
  }): Response<Array<SuiAddress>>;
15
15
  //# sourceMappingURL=suiGetAddress.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"suiGetAddress.d.ts","sourceRoot":"","sources":["../../../src/types/api/suiGetAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAExD,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,kBAAkB,CAAC;AAEvB,oBAAY,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GAAG,kBAAkB,GACxC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAExB,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GAAG;IAAE,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAE,GACvD,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"suiGetAddress.d.ts","sourceRoot":"","sources":["../../../src/types/api/suiGetAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAExD,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,kBAAkB,CAAC;AAEvB,oBAAY,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GAAG,mBAAmB,GACzC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAExB,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GAAG;IAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAAE,GACxD,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC"}
@@ -51,6 +51,7 @@ export declare type IBLEFirmwareReleaseInfo = {
51
51
  export declare type DeviceTypeMap = {
52
52
  [k in IDeviceType]: {
53
53
  firmware: IFirmwareReleaseInfo[];
54
+ 'firmware-v2'?: IFirmwareReleaseInfo[];
54
55
  'firmware-v3'?: IFirmwareReleaseInfo[];
55
56
  ble: IBLEFirmwareReleaseInfo[];
56
57
  };
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/types/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,oBAAY,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,cAAc,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,CAAC;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,oBAAY,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD,oBAAY,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAGxC,oBAAY,oBAAoB,GAAG;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IAEZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,aAAa,CAAC;IAClC,gCAAgC,CAAC,EAAE,aAAa,CAAC;IACjD,mBAAmB,CAAC,EAAE;SACnB,CAAC,IAAI,OAAO,GAAG,MAAM;KACvB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE;SACR,CAAC,IAAI,OAAO,GAAG,MAAM;KACvB,CAAC;CACH,CAAC;AAGF,oBAAY,uBAAuB,GAAG;IACpC,QAAQ,EAAE,OAAO,CAAC;IAElB,GAAG,EAAE,MAAM,CAAC;IAEZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE;SACR,CAAC,IAAI,OAAO,GAAG,MAAM;KACvB,CAAC;CACH,CAAC;AAEF,oBAAY,aAAa,GAAG;KACzB,CAAC,IAAI,WAAW,GAAG;QAClB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;QACjC,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;QACvC,GAAG,EAAE,uBAAuB,EAAE,CAAC;KAChC;CACF,CAAC;AAEF,oBAAY,SAAS,GAAG;IACtB,MAAM,EAAE;QACN,OAAO,EAAE,aAAa,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE;aACR,CAAC,IAAI,OAAO,GAAG,MAAM;SACvB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IACjC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;CAC7B,GAAG,aAAa,CAAC"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/types/settings.ts"],"names":[],"mappings":"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"}
@@ -15,5 +15,5 @@ export declare const supportNewPassphrase: (features?: import("packages/hd-trans
15
15
  export declare const getPassphraseState: (features: Features, commands: DeviceCommands) => Promise<string | false>;
16
16
  export declare const supportBatchPublicKey: (features?: import("packages/hd-transport/dist").Features | undefined) => boolean;
17
17
  export declare const supportModifyHomescreen: (features?: import("packages/hd-transport/dist").Features | undefined) => SupportFeatureType;
18
- export declare const getFirmwareUpdateField: (features: Features, updateType: 'firmware' | 'ble') => "firmware" | "ble" | "firmware-v3";
18
+ export declare const getFirmwareUpdateField: (features: Features, updateType: 'firmware' | 'ble') => "firmware" | "ble" | "firmware-v2" | "firmware-v3";
19
19
  //# sourceMappingURL=deviceFeaturesUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deviceFeaturesUtils.d.ts","sourceRoot":"","sources":["../../src/utils/deviceFeaturesUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,WAAW,EACX,YAAY,EACZ,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,cAAc,4EAA0B,YAUpD,CAAC;AAEF,eAAO,MAAM,aAAa,4EAA0B,WAUnD,CAAC;AAEF,eAAO,MAAM,yBAAyB,4EAA0B,WACvC,CAAC;AAE1B,eAAO,MAAM,sBAAsB,iCAAoB,WAAW,GAAG,IAKpE,CAAC;AAEF,eAAO,MAAM,uBAAuB,qCAAwB,WAQ3D,CAAC;AAEF,eAAO,MAAM,aAAa,aAAc,QAAQ,WAM/C,CAAC;AAEF,eAAO,MAAM,cAAc,aAAc,QAAQ,WAOhD,CAAC;AAKF,eAAO,MAAM,wBAAwB,aAAc,QAAQ,GAAG,SAAS,kBAOtE,CAAC;AAKF,eAAO,MAAM,2BAA2B,aAAc,QAAQ,KAAG,aAAa,GAAG,IAQhF,CAAC;AAEF,eAAO,MAAM,0BAA0B,aAAc,QAAQ,kBAY5D,CAAC;AAEF,eAAO,MAAM,yBAAyB,aAAc,QAAQ,KAAG,kBAU9D,CAAC;AAEF,eAAO,MAAM,oBAAoB,4EAA0B,kBAW1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,aAAoB,QAAQ,YAAY,cAAc,4BAUpF,CAAC;AAEF,eAAO,MAAM,qBAAqB,4EAA0B,OAU3D,CAAC;AAEF,eAAO,MAAM,uBAAuB,4EAA0B,kBAU7D,CAAC;AAKF,eAAO,MAAM,sBAAsB,aAAc,QAAQ,cAAc,UAAU,GAAG,KAAK,uCAYxF,CAAC"}
1
+ {"version":3,"file":"deviceFeaturesUtils.d.ts","sourceRoot":"","sources":["../../src/utils/deviceFeaturesUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,WAAW,EACX,YAAY,EACZ,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,cAAc,4EAA0B,YAUpD,CAAC;AAEF,eAAO,MAAM,aAAa,4EAA0B,WAUnD,CAAC;AAEF,eAAO,MAAM,yBAAyB,4EAA0B,WACvC,CAAC;AAE1B,eAAO,MAAM,sBAAsB,iCAAoB,WAAW,GAAG,IAKpE,CAAC;AAEF,eAAO,MAAM,uBAAuB,qCAAwB,WAQ3D,CAAC;AAEF,eAAO,MAAM,aAAa,aAAc,QAAQ,WAM/C,CAAC;AAEF,eAAO,MAAM,cAAc,aAAc,QAAQ,WAOhD,CAAC;AAKF,eAAO,MAAM,wBAAwB,aAAc,QAAQ,GAAG,SAAS,kBAOtE,CAAC;AAKF,eAAO,MAAM,2BAA2B,aAAc,QAAQ,KAAG,aAAa,GAAG,IAQhF,CAAC;AAEF,eAAO,MAAM,0BAA0B,aAAc,QAAQ,kBAY5D,CAAC;AAEF,eAAO,MAAM,yBAAyB,aAAc,QAAQ,KAAG,kBAU9D,CAAC;AAEF,eAAO,MAAM,oBAAoB,4EAA0B,kBAW1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,aAAoB,QAAQ,YAAY,cAAc,4BAUpF,CAAC;AAEF,eAAO,MAAM,qBAAqB,4EAA0B,OAU3D,CAAC;AAEF,eAAO,MAAM,uBAAuB,4EAA0B,kBAU7D,CAAC;AAKF,eAAO,MAAM,sBAAsB,aAAc,QAAQ,cAAc,UAAU,GAAG,KAAK,uDAgBxF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/hd-core",
3
- "version": "0.2.50",
3
+ "version": "0.2.52",
4
4
  "description": "> TODO: description",
5
5
  "author": "OneKey",
6
6
  "homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
@@ -24,8 +24,8 @@
24
24
  "url": "https://github.com/OneKeyHQ/hardware-js-sdk/issues"
25
25
  },
26
26
  "dependencies": {
27
- "@onekeyfe/hd-shared": "^0.2.50",
28
- "@onekeyfe/hd-transport": "^0.2.50",
27
+ "@onekeyfe/hd-shared": "^0.2.52",
28
+ "@onekeyfe/hd-transport": "^0.2.52",
29
29
  "axios": "^0.27.2",
30
30
  "bignumber.js": "^9.0.2",
31
31
  "bytebuffer": "^5.0.1",
@@ -43,5 +43,5 @@
43
43
  "@types/semver": "^7.3.9",
44
44
  "ripple-keypairs": "^1.1.4"
45
45
  },
46
- "gitHead": "edbce169a20c259028bfc281dade30e75fedd826"
46
+ "gitHead": "a19c24024d7a51271cc02da3681b04f274d641c5"
47
47
  }
@@ -226,7 +226,11 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
226
226
  // auto go to bootloader mode
227
227
  try {
228
228
  this.postTipMessage('AutoRebootToBootloader');
229
- await commands.typedCall('DeviceBackToBoot', 'Success');
229
+ const bootRes = await commands.typedCall('DeviceBackToBoot', 'Success');
230
+ // @ts-expect-error
231
+ if (bootRes.type === 'CallMethodError') {
232
+ throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);
233
+ }
230
234
  this.postTipMessage('GoToBootloaderSuccess');
231
235
  this.checkDeviceToBootloader(this.payload.connectId);
232
236
 
package/src/api/index.ts CHANGED
@@ -99,3 +99,6 @@ export { default as filecoinSignTransaction } from './filecoin/FilecoinSignTrans
99
99
 
100
100
  export { default as polkadotGetAddress } from './polkadot/PolkadotGetAddress';
101
101
  export { default as polkadotSignTransaction } from './polkadot/PolkadotSignTransaction';
102
+
103
+ export { default as kaspaGetAddress } from './kaspa/KaspaGetAddress';
104
+ export { default as kaspaSignTransaction } from './kaspa/KaspaSignTransaction';
@@ -0,0 +1,77 @@
1
+ import { KaspaGetAddress as HardwareKaspaGetAddress } from '@onekeyfe/hd-transport';
2
+ import { UI_REQUEST } from '../../constants/ui-request';
3
+ import { serializedPath, validatePath } from '../helpers/pathUtils';
4
+ import { BaseMethod } from '../BaseMethod';
5
+ import { validateParams } from '../helpers/paramsValidator';
6
+ import { KaspaGetAddressParams, KaspaAddress } from '../../types';
7
+
8
+ export default class KaspaGetAddress extends BaseMethod<HardwareKaspaGetAddress[]> {
9
+ hasBundle = false;
10
+
11
+ init() {
12
+ this.checkDeviceId = true;
13
+ this.notAllowDeviceMode = [...this.notAllowDeviceMode, UI_REQUEST.INITIALIZE];
14
+
15
+ this.hasBundle = !!this.payload?.bundle;
16
+ const payload = this.hasBundle ? this.payload : { bundle: [this.payload] };
17
+
18
+ // check payload
19
+ validateParams(payload, [{ name: 'bundle', type: 'array' }]);
20
+
21
+ // init params
22
+ this.params = [];
23
+ payload.bundle.forEach((batch: KaspaGetAddressParams) => {
24
+ const addressN = validatePath(batch.path, 3);
25
+
26
+ validateParams(batch, [
27
+ { name: 'path', required: true },
28
+ { name: 'showOnOneKey', type: 'boolean' },
29
+ { name: 'prefix', type: 'string' },
30
+ { name: 'scheme', type: 'string' },
31
+ ]);
32
+
33
+ const showOnOneKey = batch.showOnOneKey ?? true;
34
+
35
+ this.params.push({
36
+ address_n: addressN,
37
+ show_display: showOnOneKey,
38
+ prefix: batch.prefix,
39
+ scheme: batch.scheme,
40
+ });
41
+ });
42
+ }
43
+
44
+ getVersionRange() {
45
+ return {
46
+ model_mini: {
47
+ min: '3.0.0',
48
+ },
49
+ model_touch: {
50
+ min: '4.3.0',
51
+ },
52
+ };
53
+ }
54
+
55
+ async run() {
56
+ const responses: KaspaAddress[] = [];
57
+
58
+ for (let i = 0; i < this.params.length; i++) {
59
+ const param = this.params[i];
60
+
61
+ const res = await this.device.commands.typedCall('KaspaGetAddress', 'KaspaAddress', {
62
+ ...param,
63
+ });
64
+
65
+ const { address } = res.message;
66
+
67
+ const result = {
68
+ path: serializedPath(param.address_n),
69
+ address,
70
+ };
71
+ responses.push(result);
72
+ this.postPreviousAddressMessage(result);
73
+ }
74
+
75
+ return Promise.resolve(this.hasBundle ? responses : responses[0]);
76
+ }
77
+ }
@@ -0,0 +1,157 @@
1
+ import { bytesToHex } from '@noble/hashes/utils';
2
+ import { TypedCall } from '@onekeyfe/hd-transport';
3
+ import { TypedResponseMessage } from '../../device/DeviceCommands';
4
+ import { UI_REQUEST } from '../../constants/ui-request';
5
+ import { validatePath } from '../helpers/pathUtils';
6
+ import { BaseMethod } from '../BaseMethod';
7
+ import { validateParams } from '../helpers/paramsValidator';
8
+ import {
9
+ KaspaSignInputParams,
10
+ KaspaSignOutputParams,
11
+ KaspaSignTransactionParams,
12
+ KaspaSignature,
13
+ } from '../../types';
14
+ import { zeroSubnetworkID, serialize } from './helpers/TransferSerialize';
15
+ import { SignatureType } from './helpers/SignatureType';
16
+
17
+ export default class KaspaSignTransaction extends BaseMethod<KaspaSignTransactionParams> {
18
+ hasBundle = false;
19
+
20
+ init() {
21
+ this.checkDeviceId = true;
22
+ this.notAllowDeviceMode = [...this.notAllowDeviceMode, UI_REQUEST.INITIALIZE];
23
+
24
+ const payload = this.payload as KaspaSignTransactionParams;
25
+
26
+ // check payload
27
+ validateParams(payload, [
28
+ { name: 'version', type: 'number' },
29
+ { name: 'sigHashType', type: 'number', required: true },
30
+ { name: 'inputs', type: 'array', required: true },
31
+ { name: 'outputs', type: 'array', required: true },
32
+ { name: 'lockTime', required: true },
33
+ { name: 'sigOpCount', type: 'number' },
34
+ { name: 'subNetworkID', type: 'string' },
35
+ ]);
36
+
37
+ // if(!payload.inputs.length) throw
38
+
39
+ const inputs: KaspaSignInputParams[] = payload.inputs.map(input => {
40
+ validateParams(input, [
41
+ { name: 'path', type: 'string', required: true },
42
+ { name: 'prevTxId', type: 'string', required: true },
43
+ { name: 'outputIndex', type: 'number', required: true },
44
+ { name: 'sequenceNumber', required: true },
45
+ ]);
46
+
47
+ const addressN = validatePath(input.path, 3);
48
+
49
+ return {
50
+ ...input,
51
+ path: addressN,
52
+ sigOpCount: input.sigOpCount ?? 1, // input.script.getSignatureOperationsCount()) //sigOpCount
53
+ };
54
+ });
55
+
56
+ const outputs: KaspaSignOutputParams[] = payload.outputs.map(output => {
57
+ validateParams(output, [
58
+ { name: 'satoshis', required: true },
59
+ { name: 'script', type: 'string', required: true },
60
+ { name: 'scriptVersion', type: 'number' },
61
+ ]);
62
+
63
+ return {
64
+ ...output,
65
+ scriptVersion: output.scriptVersion ?? 0,
66
+ };
67
+ });
68
+
69
+ this.params = {
70
+ ...payload,
71
+ inputs,
72
+ outputs,
73
+ scheme: payload.scheme ?? 'schnorr',
74
+ prefix: payload.prefix ?? 'kaspa',
75
+ // eslint-disable-next-line no-bitwise
76
+ sigHashType: payload.sigHashType ?? SignatureType.SIGHASH_ALL | SignatureType.SIGHASH_FORKID,
77
+ sigOpCount: payload.sigOpCount ?? 1,
78
+ subNetworkID: payload.subNetworkID ?? bytesToHex(zeroSubnetworkID()),
79
+ };
80
+ }
81
+
82
+ getVersionRange() {
83
+ return {
84
+ model_mini: {
85
+ min: '3.0.0',
86
+ },
87
+ model_touch: {
88
+ min: '4.3.0',
89
+ },
90
+ };
91
+ }
92
+
93
+ async processTxRequest(
94
+ typedCall: TypedCall,
95
+ res: TypedResponseMessage<'KaspaTxInputRequest'> | TypedResponseMessage<'KaspaSignedTx'>,
96
+ index: number,
97
+ signature: KaspaSignature[]
98
+ ): Promise<KaspaSignature[]> {
99
+ if (res.type === 'KaspaSignedTx') {
100
+ signature.push({
101
+ index,
102
+ signature: res.message.signature,
103
+ });
104
+
105
+ return signature;
106
+ }
107
+
108
+ if (res.type === 'KaspaTxInputRequest') {
109
+ signature.push({
110
+ index,
111
+ signature: res.message.signature ?? '',
112
+ });
113
+
114
+ const nextIndex = res.message.request_index;
115
+
116
+ const { raw: rawMessage } = serialize(this.params, nextIndex);
117
+ const input = this.params.inputs[nextIndex];
118
+
119
+ const response = await typedCall(
120
+ 'KaspaTxInputAck',
121
+ // @ts-expect-error
122
+ ['KaspaTxInputRequest', 'KaspaSignedTx'],
123
+ {
124
+ address_n: input.path,
125
+ raw_message: bytesToHex(rawMessage),
126
+ }
127
+ );
128
+
129
+ // @ts-expect-error
130
+ return this.processTxRequest(typedCall, response, nextIndex, signature);
131
+ }
132
+
133
+ return signature;
134
+ }
135
+
136
+ async run() {
137
+ const { raw: rawMessage } = serialize(this.params, 0);
138
+ const input = this.params.inputs[0];
139
+
140
+ const { device, params } = this;
141
+
142
+ // @ts-expect-error
143
+ const response = await device.commands.typedCall(
144
+ 'KaspaSignTx',
145
+ ['KaspaTxInputRequest', 'KaspaSignedTx'],
146
+ {
147
+ address_n: input.path,
148
+ raw_message: bytesToHex(rawMessage),
149
+ scheme: params.scheme,
150
+ prefix: params.prefix,
151
+ input_count: params.inputs.length,
152
+ }
153
+ );
154
+
155
+ return this.processTxRequest(device.commands.typedCall.bind(device.commands), response, 0, []);
156
+ }
157
+ }
@@ -0,0 +1,177 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { Buffer } from 'buffer';
3
+
4
+ function isBuffer(arg: any) {
5
+ return Buffer.isBuffer(arg) || arg instanceof Uint8Array;
6
+ }
7
+
8
+ function bigNumberToBuffer(bn: BigNumber, options: { size: number }): Buffer {
9
+ const hex = bn.toString(16);
10
+ const paddedHex = hex.padStart(options.size * 2, '0');
11
+ return Buffer.from(paddedHex, 'hex');
12
+ }
13
+
14
+ class BufferWriter {
15
+ bufLen: number;
16
+
17
+ // @ts-expect-error
18
+ bufs: Buffer[];
19
+
20
+ constructor(obj?: Partial<BufferWriter>) {
21
+ this.bufLen = 0;
22
+ if (obj) {
23
+ this.set(obj);
24
+ } else {
25
+ this.bufs = [];
26
+ }
27
+ }
28
+
29
+ public set(obj: Partial<BufferWriter>): this {
30
+ this.bufs = obj.bufs || this.bufs || [];
31
+ this.bufLen = this.bufs.reduce((prev, buf) => prev + buf.length, 0);
32
+ return this;
33
+ }
34
+
35
+ public toBuffer(): Buffer {
36
+ return this.concat();
37
+ }
38
+
39
+ public concat(): Buffer {
40
+ return Buffer.concat(this.bufs, this.bufLen);
41
+ }
42
+
43
+ public write(buf: Buffer): this {
44
+ if (!isBuffer(buf)) throw new Error('BufferWriter.write: Invalid type');
45
+ this.bufs.push(buf);
46
+ this.bufLen += buf.length;
47
+ return this;
48
+ }
49
+
50
+ public writeReverse(buf: Buffer): this {
51
+ if (!isBuffer(buf)) throw new Error('BufferWriter.write: Invalid type');
52
+ this.bufs.push(buf.reverse());
53
+ this.bufLen += buf.length;
54
+ return this;
55
+ }
56
+
57
+ public writeVarBytes(buf: Buffer): this {
58
+ if (!isBuffer(buf)) throw new Error('BufferWriter.write: Invalid type');
59
+ this.writeUInt64LE(new BigNumber(buf.length));
60
+ this.write(buf);
61
+ return this;
62
+ }
63
+
64
+ public writeUInt8(n: number): this {
65
+ const buf = Buffer.alloc(1);
66
+ buf.writeUInt8(n, 0);
67
+ this.write(buf);
68
+ return this;
69
+ }
70
+
71
+ public writeUInt16BE(n: number): this {
72
+ const buf = Buffer.alloc(2);
73
+ buf.writeUInt16BE(n, 0);
74
+ this.write(buf);
75
+ return this;
76
+ }
77
+
78
+ public writeUInt16LE(n: number): this {
79
+ const buf = Buffer.alloc(2);
80
+ buf.writeUInt16LE(n, 0);
81
+ this.write(buf);
82
+ return this;
83
+ }
84
+
85
+ public writeUInt32BE(n: number): this {
86
+ const buf = Buffer.alloc(4);
87
+ buf.writeUInt32BE(n, 0);
88
+ this.write(buf);
89
+ return this;
90
+ }
91
+
92
+ public writeInt32LE(n: number): this {
93
+ const buf = Buffer.alloc(4);
94
+ buf.writeInt32LE(n, 0);
95
+ this.write(buf);
96
+ return this;
97
+ }
98
+
99
+ public writeUInt32LE(n: number): this {
100
+ const buf = Buffer.alloc(4);
101
+ buf.writeUInt32LE(n, 0);
102
+ this.write(buf);
103
+ return this;
104
+ }
105
+
106
+ public writeUInt64BEBN(bn: BigNumber): this {
107
+ const buf = bigNumberToBuffer(bn, { size: 8 });
108
+ this.write(buf);
109
+ return this;
110
+ }
111
+
112
+ public writeUInt64LE(bn: BigNumber): this {
113
+ const buf = bigNumberToBuffer(bn, { size: 8 });
114
+ this.writeReverse(buf);
115
+ return this;
116
+ }
117
+
118
+ public writeVarintNum(n: number): this {
119
+ const buf = BufferWriter.varintBufNum(n);
120
+ this.write(buf);
121
+ return this;
122
+ }
123
+
124
+ public writeVarintBN(bn: BigNumber): this {
125
+ const buf = BufferWriter.varintBufBN(bn);
126
+ this.write(buf);
127
+ return this;
128
+ }
129
+
130
+ public static varintBufNum(n: number): Buffer {
131
+ let buf: Buffer;
132
+ if (n < 253) {
133
+ buf = Buffer.alloc(1);
134
+ buf.writeUInt8(n, 0);
135
+ } else if (n < 0x10000) {
136
+ buf = Buffer.alloc(1 + 2);
137
+ buf.writeUInt8(253, 0);
138
+ buf.writeUInt16LE(n, 1);
139
+ } else if (n < 0x100000000) {
140
+ buf = Buffer.alloc(1 + 4);
141
+ buf.writeUInt8(254, 0);
142
+ buf.writeUInt32LE(n, 1);
143
+ } else {
144
+ buf = Buffer.alloc(1 + 8);
145
+ buf.writeUInt8(255, 0);
146
+ // eslint-disable-next-line no-bitwise
147
+ buf.writeInt32LE(n & -1, 1);
148
+ buf.writeUInt32LE(Math.floor(n / 0x100000000), 5);
149
+ }
150
+ return buf;
151
+ }
152
+
153
+ public static varintBufBN(bn: BigNumber): Buffer {
154
+ let buf: Buffer;
155
+ const n = bn.toNumber();
156
+ if (n < 253) {
157
+ buf = Buffer.alloc(1);
158
+ buf.writeUInt8(n, 0);
159
+ } else if (n < 0x10000) {
160
+ buf = Buffer.alloc(1 + 2);
161
+ buf.writeUInt8(253, 0);
162
+ buf.writeUInt16LE(n, 1);
163
+ } else if (n < 0x100000000) {
164
+ buf = Buffer.alloc(1 + 4);
165
+ buf.writeUInt8(254, 0);
166
+ buf.writeUInt32LE(n, 1);
167
+ } else {
168
+ const bw = new BufferWriter();
169
+ bw.writeUInt8(255);
170
+ bw.writeUInt64LE(bn);
171
+ buf = bw.concat();
172
+ }
173
+ return buf;
174
+ }
175
+ }
176
+
177
+ export default BufferWriter;
@@ -0,0 +1,72 @@
1
+ import { blake2b } from '@noble/hashes/blake2b';
2
+ import BigNumber from 'bignumber.js';
3
+ import { Hash } from '@noble/hashes/utils';
4
+ import BufferWriter from './BufferWriter';
5
+
6
+ const TransactionSigningHashKey = Buffer.from('TransactionSigningHash');
7
+
8
+ class HashWriter {
9
+ private blake2b: Hash<any>;
10
+
11
+ bw: BufferWriter;
12
+
13
+ hash: {
14
+ update: (buf: Buffer) => void;
15
+ digest: () => Buffer;
16
+ };
17
+
18
+ constructor() {
19
+ this.bw = new BufferWriter();
20
+ this.blake2b = blake2b.create({ dkLen: 32, key: TransactionSigningHashKey });
21
+ this.hash = {
22
+ update: (buf: Buffer) => {
23
+ this.bw.write(buf);
24
+ this.blake2b.update(buf);
25
+ },
26
+ digest: () => Buffer.from(this.blake2b.digest()),
27
+ };
28
+ }
29
+
30
+ writeUInt8(value: number): void {
31
+ const buf = new BufferWriter();
32
+ buf.writeUInt8(value);
33
+ this.hash.update(buf.toBuffer());
34
+ }
35
+
36
+ writeUInt16LE(value: number): void {
37
+ const buf = new BufferWriter();
38
+ buf.writeUInt16LE(value);
39
+ this.hash.update(buf.toBuffer());
40
+ }
41
+
42
+ writeUInt32LE(value: number): void {
43
+ const buf = new BufferWriter();
44
+ buf.writeUInt32LE(value);
45
+ this.hash.update(buf.toBuffer());
46
+ }
47
+
48
+ writeUInt64LE(value: BigNumber.Value): void {
49
+ const buf = new BufferWriter();
50
+ buf.writeUInt64LE(new BigNumber(value));
51
+ this.hash.update(buf.toBuffer());
52
+ }
53
+
54
+ writeVarBytes(buf: Buffer): void {
55
+ this.writeUInt64LE(buf.length);
56
+ this.hash.update(buf);
57
+ }
58
+
59
+ writeHash(buf: Buffer): void {
60
+ this.hash.update(buf);
61
+ }
62
+
63
+ finalize(): Buffer {
64
+ return this.hash.digest();
65
+ }
66
+
67
+ toBuffer(): Buffer {
68
+ return this.bw.toBuffer();
69
+ }
70
+ }
71
+
72
+ export { HashWriter };
@@ -0,0 +1,7 @@
1
+ export enum SignatureType {
2
+ SIGHASH_ALL = 0x01,
3
+ SIGHASH_NONE = 0x02,
4
+ SIGHASH_SINGLE = 0x03,
5
+ SIGHASH_FORKID = 0x40,
6
+ SIGHASH_ANYONECANPAY = 0x80,
7
+ }