@ledgerhq/coin-canton 0.9.0-nightly.1 → 0.9.0-nightly.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.
Files changed (97) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +16 -0
  3. package/README.md +75 -0
  4. package/lib/bridge/deviceTransactionConfig.d.ts +1 -1
  5. package/lib/bridge/deviceTransactionConfig.d.ts.map +1 -1
  6. package/lib/bridge/deviceTransactionConfig.js +1 -1
  7. package/lib/bridge/deviceTransactionConfig.js.map +1 -1
  8. package/lib/bridge/onboard.d.ts.map +1 -1
  9. package/lib/bridge/onboard.js +48 -22
  10. package/lib/bridge/onboard.js.map +1 -1
  11. package/lib/bridge/signOperation.d.ts.map +1 -1
  12. package/lib/bridge/signOperation.js +10 -3
  13. package/lib/bridge/signOperation.js.map +1 -1
  14. package/lib/common-logic/index.d.ts +1 -0
  15. package/lib/common-logic/index.d.ts.map +1 -1
  16. package/lib/common-logic/index.js +3 -1
  17. package/lib/common-logic/index.js.map +1 -1
  18. package/lib/common-logic/transaction/sign.d.ts +8 -0
  19. package/lib/common-logic/transaction/sign.d.ts.map +1 -0
  20. package/lib/common-logic/transaction/sign.js +27 -0
  21. package/lib/common-logic/transaction/sign.js.map +1 -0
  22. package/lib/common-logic/transaction/split.d.ts +9 -0
  23. package/lib/common-logic/transaction/split.d.ts.map +1 -0
  24. package/lib/common-logic/transaction/split.js +119 -0
  25. package/lib/common-logic/transaction/split.js.map +1 -0
  26. package/lib/common-logic/utils.js +2 -2
  27. package/lib/common-logic/utils.js.map +1 -1
  28. package/lib/network/gateway.d.ts +1 -0
  29. package/lib/network/gateway.d.ts.map +1 -1
  30. package/lib/network/gateway.js +2 -7
  31. package/lib/network/gateway.js.map +1 -1
  32. package/lib/test/cantonTestUtils.d.ts +4 -9
  33. package/lib/test/cantonTestUtils.d.ts.map +1 -1
  34. package/lib/test/cantonTestUtils.js +736 -27
  35. package/lib/test/cantonTestUtils.js.map +1 -1
  36. package/lib/types/signer.d.ts +10 -1
  37. package/lib/types/signer.d.ts.map +1 -1
  38. package/lib/types/transaction-proto.json +1238 -0
  39. package/lib-es/bridge/deviceTransactionConfig.d.ts +1 -1
  40. package/lib-es/bridge/deviceTransactionConfig.d.ts.map +1 -1
  41. package/lib-es/bridge/deviceTransactionConfig.js +1 -1
  42. package/lib-es/bridge/deviceTransactionConfig.js.map +1 -1
  43. package/lib-es/bridge/onboard.d.ts.map +1 -1
  44. package/lib-es/bridge/onboard.js +49 -23
  45. package/lib-es/bridge/onboard.js.map +1 -1
  46. package/lib-es/bridge/signOperation.d.ts.map +1 -1
  47. package/lib-es/bridge/signOperation.js +10 -3
  48. package/lib-es/bridge/signOperation.js.map +1 -1
  49. package/lib-es/common-logic/index.d.ts +1 -0
  50. package/lib-es/common-logic/index.d.ts.map +1 -1
  51. package/lib-es/common-logic/index.js +1 -0
  52. package/lib-es/common-logic/index.js.map +1 -1
  53. package/lib-es/common-logic/transaction/sign.d.ts +8 -0
  54. package/lib-es/common-logic/transaction/sign.d.ts.map +1 -0
  55. package/lib-es/common-logic/transaction/sign.js +24 -0
  56. package/lib-es/common-logic/transaction/sign.js.map +1 -0
  57. package/lib-es/common-logic/transaction/split.d.ts +9 -0
  58. package/lib-es/common-logic/transaction/split.d.ts.map +1 -0
  59. package/lib-es/common-logic/transaction/split.js +83 -0
  60. package/lib-es/common-logic/transaction/split.js.map +1 -0
  61. package/lib-es/common-logic/utils.js +2 -2
  62. package/lib-es/common-logic/utils.js.map +1 -1
  63. package/lib-es/network/gateway.d.ts +1 -0
  64. package/lib-es/network/gateway.d.ts.map +1 -1
  65. package/lib-es/network/gateway.js +1 -8
  66. package/lib-es/network/gateway.js.map +1 -1
  67. package/lib-es/test/cantonTestUtils.d.ts +4 -9
  68. package/lib-es/test/cantonTestUtils.d.ts.map +1 -1
  69. package/lib-es/test/cantonTestUtils.js +697 -21
  70. package/lib-es/test/cantonTestUtils.js.map +1 -1
  71. package/lib-es/types/signer.d.ts +10 -1
  72. package/lib-es/types/signer.d.ts.map +1 -1
  73. package/lib-es/types/transaction-proto.json +1238 -0
  74. package/package.json +10 -7
  75. package/scripts/generate.js +261 -0
  76. package/src/bridge/deviceTransactionConfig.test.ts +14 -10
  77. package/src/bridge/deviceTransactionConfig.ts +2 -2
  78. package/src/bridge/getTransactionStatus.test.ts +19 -19
  79. package/src/bridge/onboard.integ.test.ts +0 -20
  80. package/src/bridge/onboard.ts +57 -33
  81. package/src/bridge/signOperation.test.ts +114 -0
  82. package/src/bridge/signOperation.ts +12 -5
  83. package/src/bridge/sync.integ.test.ts +157 -132
  84. package/src/common-logic/index.ts +1 -0
  85. package/src/common-logic/transaction/sign.test.ts +317 -0
  86. package/src/common-logic/transaction/sign.ts +33 -0
  87. package/src/common-logic/transaction/split.test.ts +50 -0
  88. package/src/common-logic/transaction/split.ts +101 -0
  89. package/src/common-logic/utils.test.ts +22 -30
  90. package/src/common-logic/utils.ts +2 -2
  91. package/src/network/gateway.integ.test.ts +2 -0
  92. package/src/network/gateway.ts +3 -8
  93. package/src/test/cantonTestUtils.ts +789 -24
  94. package/src/test/prepare-transfer-serialized.json +26 -0
  95. package/src/test/prepare-transfer.json +3298 -0
  96. package/src/types/signer.ts +17 -3
  97. package/src/types/transaction-proto.json +1238 -0
@@ -1,4 +1,4 @@
1
1
 
2
- > @ledgerhq/coin-canton@0.8.1-nightly.0 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-canton
2
+ > @ledgerhq/coin-canton@0.9.0-nightly.1 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-canton
3
3
  > tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @ledgerhq/coin-canton
2
2
 
3
+ ## 0.9.0-nightly.2
4
+
5
+ ### Minor Changes
6
+
7
+ - [#12340](https://github.com/LedgerHQ/ledger-live/pull/12340) [`8d7c1f7`](https://github.com/LedgerHQ/ledger-live/commit/8d7c1f7a92489647399b0e780d4bb926508e8554) Thanks [@gre-ledger](https://github.com/gre-ledger)! - migrate getDeviceTransactionConfig to async
8
+
9
+ - [#12173](https://github.com/LedgerHQ/ledger-live/pull/12173) [`f4965d6`](https://github.com/LedgerHQ/ledger-live/commit/f4965d6dfc64949b0afa765cc9e4b24324b5df1d) Thanks [@ishaba](https://github.com/ishaba)! - add canton full transaction signing support
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [[`63e8f34`](https://github.com/LedgerHQ/ledger-live/commit/63e8f342f6b951ab77bb710b9971f033c05e579e), [`3d4188a`](https://github.com/LedgerHQ/ledger-live/commit/3d4188a26021d33b950129d82cb55d2c2e8d4358)]:
14
+ - @ledgerhq/cryptoassets@13.32.0-nightly.1
15
+ - @ledgerhq/coin-framework@6.8.0-nightly.2
16
+ - @ledgerhq/live-network@2.1.0-nightly.0
17
+ - @ledgerhq/types-live@6.88.0-nightly.1
18
+
3
19
  ## 0.9.0-nightly.1
4
20
 
5
21
  ### Minor Changes
package/README.md CHANGED
@@ -9,3 +9,78 @@ The Coin Canton module provides support for the Canton blockchain within the Led
9
9
  ## Test setup
10
10
 
11
11
  Create .env.integ.test file based on .env.integ.test.example
12
+
13
+ ## Protobuf Integration
14
+
15
+ The Canton module uses a binary protocol for all communication between Ledger Live and Ledger hardware devices.
16
+ It leverages Protocol Buffers (protobuf) to split complex DAML data structures into a compact binary format that the device can process efficiently.
17
+ Compared to JSON, this binary format significantly reduces data transfer size and processing time while preserving type safety and data integrity.
18
+ Get more info: [APDU](https://github.com/LedgerHQ/app-canton/blob/develop/doc/APDU.md), [SPLIT_TRANSACTION](https://github.com/LedgerHQ/app-canton/blob/develop/doc/SPLIT_TRANSACTION.md)
19
+
20
+ ### When to Use
21
+
22
+ After updating protobuf definitions in:
23
+
24
+ - [gateway](https://github.com/LedgerHQ/canton-protos-scala)
25
+ - [app-canton](https://github.com/LedgerHQ/app-canton)
26
+
27
+ you must regenerate the TypeScript bindings.
28
+
29
+ ```bash
30
+ cd libs/coin-modules/coin-canton
31
+ pnpm generate-proto
32
+ ```
33
+
34
+ ### Protobuf Generation Process
35
+
36
+ The generate-proto script temporary downloads `.proto` files and processes them, fix reserved words and naming conflicts, and then generates TypeScript bindings using protobufjs.
37
+
38
+ The compiled definitions are saved to `src/types/transaction-proto.json` in ES6 format.
39
+
40
+ ### Key Protobuf Files
41
+
42
+ #### Core Device Communication
43
+
44
+ - **`device.proto`** - Primary device communication protocol
45
+ - Defines the main interface for Ledger device communication
46
+ - Contains message types for transaction signing and address derivation
47
+ - Handles device-specific operations and responses
48
+
49
+ #### DAML Value System
50
+
51
+ - **`value.proto`** - DAML value types and structures
52
+
53
+ - Defines all DAML data types (Unit, Bool, Int64, Date, Timestamp, Numeric, Party, Text, ContractId, Optional, List, TextMap, GenMap, Record, Variant, Enum)
54
+ - Handles DAML's type system for smart contract data
55
+
56
+ - **`value_cb.proto`** - Canton Bridge value types
57
+ - Canton-specific extensions to DAML value types
58
+ - Additional types for Canton's privacy-preserving features
59
+ - Bridge-specific data structures and metadata
60
+
61
+ #### Interactive Transaction Submission
62
+
63
+ - **`interactive_submission_common_data.proto`** - Common submission data structures and metadata
64
+ - **`interactive_submission_data.proto`** - Transaction submission structure with versioning
65
+ - **`interactive_submission_data_cb.proto`** - Canton Bridge extensions for consensus mechanism
66
+
67
+ #### Google Protobuf Standard Types
68
+
69
+ Standard Google protobuf files providing basic types for message containers, time handling, error reporting, and gRPC status codes used throughout the Canton module.
70
+
71
+ ### Testing
72
+
73
+ To verify the protobuf bindings, run the transaction splitting tests:
74
+
75
+ ```bash
76
+ pnpm test src/common-logic/transaction/split.test.ts
77
+ ```
78
+
79
+ These tests validate protobuf serialization, and the logic that splits DAML transactions into device-compatible components.
80
+
81
+ Test data is stored in two files:
82
+
83
+ - `src/test/prepare-transfer.json` — a sample transaction request (`token-transfer-request`) from the [Gateway API](https://canton-gateway.api.live.ledger-test.com/docs/openapi/redoc/index.html#operation/postV1NodeNode_preset_idPartyParty_idTransactionPrepare)
84
+ - `src/test/prepare-transfer-serialized.json` — the expected serialized output, generated using [split_tx_util.py](https://github.com/LedgerHQ/app-canton/blob/develop/scripts/split_tx_util.py)
85
+
86
+ After updating protobuf bindings, make sure both files are refreshed with the latest Gateway data and serialized output.
@@ -6,6 +6,6 @@ declare function getDeviceTransactionConfig({ transaction: {}, status: { amount,
6
6
  parentAccount: Account | null | undefined;
7
7
  transaction: Transaction;
8
8
  status: TransactionStatus;
9
- }): Array<CommonDeviceTransactionField>;
9
+ }): Promise<Array<CommonDeviceTransactionField>>;
10
10
  export default getDeviceTransactionConfig;
11
11
  //# sourceMappingURL=deviceTransactionConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deviceTransactionConfig.d.ts","sourceRoot":"","sources":["../../src/bridge/deviceTransactionConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAGhG,iBAAS,0BAA0B,CAAC,EAClC,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAClC,EAAE;IACD,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,iBAAiB,CAAC;CAC3B,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAkBtC;AAED,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"deviceTransactionConfig.d.ts","sourceRoot":"","sources":["../../src/bridge/deviceTransactionConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAGhG,iBAAe,0BAA0B,CAAC,EACxC,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAClC,EAAE;IACD,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,iBAAiB,CAAC;CAC3B,GAAG,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAkB/C;AAED,eAAe,0BAA0B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // This method adds additional fields that need to be reviewed when signing a transaction on the device.
4
- function getDeviceTransactionConfig({ transaction: {}, status: { amount, estimatedFees }, }) {
4
+ async function getDeviceTransactionConfig({ transaction: {}, status: { amount, estimatedFees }, }) {
5
5
  const fields = [];
6
6
  if (!amount.isZero()) {
7
7
  fields.push({
@@ -1 +1 @@
1
- {"version":3,"file":"deviceTransactionConfig.js","sourceRoot":"","sources":["../../src/bridge/deviceTransactionConfig.ts"],"names":[],"mappings":";;AAIA,wGAAwG;AACxG,SAAS,0BAA0B,CAAC,EAClC,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAMlC;IACC,MAAM,MAAM,GAAwC,EAAE,CAAC;IAEvD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kBAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"deviceTransactionConfig.js","sourceRoot":"","sources":["../../src/bridge/deviceTransactionConfig.ts"],"names":[],"mappings":";;AAIA,wGAAwG;AACxG,KAAK,UAAU,0BAA0B,CAAC,EACxC,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAMlC;IACC,MAAM,MAAM,GAAwC,EAAE,CAAC;IAEvD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kBAAe,0BAA0B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/bridge/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAanE,OAAO,EAGL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,kBAAkB,GAAU,UAAU,cAAc,EAAE,WAAW,MAAM;;;;;;EAYnF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,UAAU,cAAc,EAAE,SAAS,MAAM,qBAOtF,CAAC;AAkBF,eAAO,MAAM,mBAAmB,GAC7B,eAAe,aAAa,CAAC,YAAY,CAAC,MAEzC,UAAU,cAAc,EACxB,UAAU,MAAM,EAChB,SAAS,OAAO,KACf,UAAU,CAAC,qBAAqB,GAAG,mBAAmB,CAgDrD,CAAC;AAEP,eAAO,MAAM,yBAAyB,GACnC,eAAe,aAAa,CAAC,YAAY,CAAC,MAEzC,UAAU,cAAc,EACxB,UAAU,MAAM,EAChB,SAAS,OAAO,EAChB,SAAS,MAAM,KACd,UAAU,CAAC,uBAAuB,GAAG,qBAAqB,CA0DzD,CAAC"}
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/bridge/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAiBnE,OAAO,EAGL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,kBAAkB,GAAU,UAAU,cAAc,EAAE,WAAW,MAAM;;;;;;EAYnF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,UAAU,cAAc,EAAE,SAAS,MAAM,qBAOtF,CAAC;AAkBF,eAAO,MAAM,mBAAmB,GAC7B,eAAe,aAAa,CAAC,YAAY,CAAC,MAEzC,UAAU,cAAc,EACxB,UAAU,MAAM,EAChB,SAAS,OAAO,KACf,UAAU,CAAC,qBAAqB,GAAG,mBAAmB,CA+CrD,CAAC;AAEP,eAAO,MAAM,yBAAyB,GACnC,eAAe,aAAa,CAAC,YAAY,CAAC,MAEzC,UAAU,cAAc,EACxB,UAAU,MAAM,EAChB,SAAS,OAAO,EAChB,SAAS,MAAM,KACd,UAAU,CAAC,uBAAuB,GAAG,qBAAqB,CA6DzD,CAAC"}
@@ -6,8 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.buildAuthorizePreapproval = exports.buildOnboardAccount = exports.isCantonCoinPreapproved = exports.isAccountOnboarded = void 0;
7
7
  const rxjs_1 = require("rxjs");
8
8
  const logs_1 = require("@ledgerhq/logs");
9
+ const errors_1 = require("@ledgerhq/errors");
9
10
  const accountId_1 = require("@ledgerhq/coin-framework/account/accountId");
10
11
  const gateway_1 = require("../network/gateway");
12
+ const sign_1 = require("../common-logic/transaction/sign");
11
13
  const onboard_1 = require("../types/onboard");
12
14
  const signer_1 = __importDefault(require("../signer"));
13
15
  const isAccountOnboarded = async (currency, publicKey) => {
@@ -63,7 +65,9 @@ const buildOnboardAccount = (signerContext) => (currency, deviceId, account) =>
63
65
  const preparedTransaction = await (0, gateway_1.prepareOnboarding)(currency, publicKey);
64
66
  partyId = preparedTransaction.party_id;
65
67
  o.next({ status: onboard_1.OnboardStatus.SIGN });
66
- const signature = await signerContext(deviceId, signer => signer.signTransaction(account.freshAddressPath, preparedTransaction.transactions.combined_hash));
68
+ const signature = await signerContext(deviceId, async (signer) => {
69
+ return await (0, sign_1.signTransaction)(signer, account.freshAddressPath, preparedTransaction);
70
+ });
67
71
  o.next({ status: onboard_1.OnboardStatus.SUBMIT });
68
72
  await (0, gateway_1.submitOnboarding)(currency, publicKey, preparedTransaction, signature);
69
73
  const onboardedAccount = createOnboardedAccount(account, partyId, currency);
@@ -71,7 +75,8 @@ const buildOnboardAccount = (signerContext) => (currency, deviceId, account) =>
71
75
  }
72
76
  main().then(() => o.complete(), error => {
73
77
  (0, logs_1.log)("[canton:onboard] onboardAccount failed:", error);
74
- o.error(error);
78
+ const handledError = handleDeviceErrors(error);
79
+ o.error(handledError || error);
75
80
  });
76
81
  });
77
82
  exports.buildOnboardAccount = buildOnboardAccount;
@@ -83,35 +88,56 @@ const buildAuthorizePreapproval = (signerContext) => (currency, deviceId, accoun
83
88
  o.next({ status: onboard_1.AuthorizeStatus.PREPARE });
84
89
  const preparedTransaction = await (0, gateway_1.preparePreApprovalTransaction)(currency, partyId);
85
90
  o.next({ status: onboard_1.AuthorizeStatus.SIGN });
86
- const signature = await signerContext(deviceId, signer => signer.signTransaction(account.freshAddressPath, preparedTransaction.hash));
91
+ const signature = await signerContext(deviceId, async (signer) => {
92
+ return await (0, sign_1.signTransaction)(signer, account.freshAddressPath, preparedTransaction);
93
+ });
87
94
  o.next({ status: onboard_1.AuthorizeStatus.SUBMIT });
88
95
  await (0, gateway_1.submitPreApprovalTransaction)(currency, partyId, preparedTransaction, signature);
89
96
  }
90
97
  o.next({ isApproved: true }); // success
91
- const handleTapRequest = async () => {
92
- try {
93
- const { serialized, hash } = await (0, gateway_1.prepareTapRequest)(currency, { partyId });
94
- if (serialized && hash) {
95
- o.next({ status: onboard_1.AuthorizeStatus.SIGN });
96
- const signature = await signerContext(deviceId, signer => signer.signTransaction(account.freshAddressPath, hash));
97
- o.next({ status: onboard_1.AuthorizeStatus.SUBMIT });
98
- await (0, gateway_1.submitTapRequest)(currency, {
99
- partyId,
100
- serialized,
101
- signature,
102
- });
98
+ if ((0, gateway_1.getNetworkType)(currency) !== "mainnet") {
99
+ const handleTapRequest = async () => {
100
+ try {
101
+ const { serialized, hash } = await (0, gateway_1.prepareTapRequest)(currency, { partyId });
102
+ if (serialized && hash) {
103
+ o.next({ status: onboard_1.AuthorizeStatus.SIGN });
104
+ const signature = await signerContext(deviceId, signer => signer.signTransaction(account.freshAddressPath, hash));
105
+ o.next({ status: onboard_1.AuthorizeStatus.SUBMIT });
106
+ await (0, gateway_1.submitTapRequest)(currency, {
107
+ partyId,
108
+ serialized,
109
+ signature,
110
+ });
111
+ }
112
+ }
113
+ catch (err) {
114
+ // Tap request failure should not break the pre-approval flow
103
115
  }
104
- }
105
- catch (err) {
106
- // Tap request failure should not break the pre-approval flow
107
- }
108
- };
109
- await handleTapRequest();
116
+ };
117
+ await handleTapRequest();
118
+ }
110
119
  }
111
120
  main().then(() => o.complete(), error => {
112
121
  (0, logs_1.log)("[canton:onboard] authorizePreapproval failed:", error);
113
- o.error(error);
122
+ const handledError = handleDeviceErrors(error);
123
+ o.error(handledError || error);
114
124
  });
115
125
  });
116
126
  exports.buildAuthorizePreapproval = buildAuthorizePreapproval;
127
+ /**
128
+ * Check if an error is a LockedDeviceError or UserRefusedOnDevice and create user-friendly error messages
129
+ */
130
+ const handleDeviceErrors = (error) => {
131
+ if (error instanceof errors_1.TransportStatusError) {
132
+ if (error.statusCode === 0x6985) {
133
+ const userRefusedError = new errors_1.UserRefusedOnDevice("errors.UserRefusedOnDevice.description");
134
+ return userRefusedError;
135
+ }
136
+ if (error.statusCode === 0x5515) {
137
+ const lockedDeviceError = new errors_1.LockedDeviceError("errors.LockedDeviceError.description");
138
+ return lockedDeviceError;
139
+ }
140
+ }
141
+ return null;
142
+ };
117
143
  //# sourceMappingURL=onboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/bridge/onboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/bridge/onboard.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../../src/bridge/signOperation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAa,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAIhE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAErD,eAAO,MAAM,kBAAkB,GAC5B,eAAe,aAAa,CAAC,YAAY,CAAC,KAAG,aAAa,CAAC,WAAW,CAAC,CAAC,eAAe,CAuFpF,CAAC"}
1
+ {"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../../src/bridge/signOperation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAa,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAKhE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAErD,eAAO,MAAM,kBAAkB,GAC5B,eAAe,aAAa,CAAC,YAAY,CAAC,KAAG,aAAa,CAAC,WAAW,CAAC,CAAC,eAAe,CA6FpF,CAAC"}
@@ -6,6 +6,7 @@ const errors_1 = require("@ledgerhq/errors");
6
6
  const operation_1 = require("@ledgerhq/coin-framework/operation");
7
7
  const account_1 = require("@ledgerhq/coin-framework/account");
8
8
  const common_logic_1 = require("../common-logic");
9
+ const sign_1 = require("../common-logic/transaction/sign");
9
10
  const buildSignOperation = (signerContext) => ({ account, deviceId, transaction }) => new rxjs_1.Observable(o => {
10
11
  async function main() {
11
12
  const { fee } = transaction;
@@ -28,10 +29,14 @@ const buildSignOperation = (signerContext) => ({ account, deviceId, transaction
28
29
  if (transaction.memo) {
29
30
  params.memo = transaction.memo;
30
31
  }
31
- const { hash, serializedTransaction } = await (0, common_logic_1.craftTransaction)(account.currency, {
32
+ const { nativeTransaction, serializedTransaction, hash } = await (0, common_logic_1.craftTransaction)(account.currency, {
32
33
  address,
33
34
  }, params);
34
- const transactionSignature = await signer.signTransaction(derivationPath, hash);
35
+ const transactionSignature = await (0, sign_1.signTransaction)(signer, derivationPath, {
36
+ json: nativeTransaction,
37
+ serialized: serializedTransaction,
38
+ hash: hash,
39
+ });
35
40
  return (0, common_logic_1.combine)(serializedTransaction, `${transactionSignature}__PARTY__${address}`);
36
41
  });
37
42
  o.next({
@@ -63,7 +68,9 @@ const buildSignOperation = (signerContext) => ({ account, deviceId, transaction
63
68
  }
64
69
  catch (e) {
65
70
  if (e instanceof Error) {
66
- throw new Error(e?.data?.resultMessage);
71
+ const errorMessage = e?.data?.resultMessage ||
72
+ e.message;
73
+ throw new Error(errorMessage);
67
74
  }
68
75
  throw e;
69
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../../src/bridge/signOperation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../../src/bridge/signOperation.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export { broadcast } from "./transaction/broadcast";
2
2
  export { combine } from "./transaction/combine";
3
3
  export { craftTransaction } from "./transaction/craftTransaction";
4
4
  export { estimateFees } from "./transaction/estimateFees";
5
+ export { signTransaction } from "./transaction/sign";
5
6
  export { getBalance } from "./account/getBalance";
6
7
  export { lastBlock } from "./history/lastBlock";
7
8
  export { listOperations } from "./history/listOperations";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common-logic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common-logic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseAPIValue = exports.getNextValidSequence = exports.isRecipientValid = exports.listOperations = exports.lastBlock = exports.getBalance = exports.estimateFees = exports.craftTransaction = exports.combine = exports.broadcast = void 0;
3
+ exports.parseAPIValue = exports.getNextValidSequence = exports.isRecipientValid = exports.listOperations = exports.lastBlock = exports.getBalance = exports.signTransaction = exports.estimateFees = exports.craftTransaction = exports.combine = exports.broadcast = void 0;
4
4
  var broadcast_1 = require("./transaction/broadcast");
5
5
  Object.defineProperty(exports, "broadcast", { enumerable: true, get: function () { return broadcast_1.broadcast; } });
6
6
  var combine_1 = require("./transaction/combine");
@@ -9,6 +9,8 @@ var craftTransaction_1 = require("./transaction/craftTransaction");
9
9
  Object.defineProperty(exports, "craftTransaction", { enumerable: true, get: function () { return craftTransaction_1.craftTransaction; } });
10
10
  var estimateFees_1 = require("./transaction/estimateFees");
11
11
  Object.defineProperty(exports, "estimateFees", { enumerable: true, get: function () { return estimateFees_1.estimateFees; } });
12
+ var sign_1 = require("./transaction/sign");
13
+ Object.defineProperty(exports, "signTransaction", { enumerable: true, get: function () { return sign_1.signTransaction; } });
12
14
  var getBalance_1 = require("./account/getBalance");
13
15
  Object.defineProperty(exports, "getBalance", { enumerable: true, get: function () { return getBalance_1.getBalance; } });
14
16
  var lastBlock_1 = require("./history/lastBlock");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common-logic/index.ts"],"names":[],"mappings":";;;AAAA,qDAAoD;AAA3C,sGAAA,SAAS,OAAA;AAClB,iDAAgD;AAAvC,kGAAA,OAAO,OAAA;AAChB,mEAAkE;AAAzD,oHAAA,gBAAgB,OAAA;AACzB,2DAA0D;AAAjD,4GAAA,YAAY,OAAA;AACrB,mDAAkD;AAAzC,wGAAA,UAAU,OAAA;AACnB,iDAAgD;AAAvC,sGAAA,SAAS,OAAA;AAClB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,iCAA2C;AAAlC,yGAAA,gBAAgB,OAAA;AACzB,6DAAiE;AAAxD,uHAAA,oBAAoB,OAAA;AAE7B,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common-logic/index.ts"],"names":[],"mappings":";;;AAAA,qDAAoD;AAA3C,sGAAA,SAAS,OAAA;AAClB,iDAAgD;AAAvC,kGAAA,OAAO,OAAA;AAChB,mEAAkE;AAAzD,oHAAA,gBAAgB,OAAA;AACzB,2DAA0D;AAAjD,4GAAA,YAAY,OAAA;AACrB,2CAAqD;AAA5C,uGAAA,eAAe,OAAA;AACxB,mDAAkD;AAAzC,wGAAA,UAAU,OAAA;AACnB,iDAAgD;AAAvC,sGAAA,SAAS,OAAA;AAClB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,iCAA2C;AAAlC,yGAAA,gBAAgB,OAAA;AACzB,6DAAiE;AAAxD,uHAAA,oBAAoB,OAAA;AAE7B,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
@@ -0,0 +1,8 @@
1
+ import { OnboardingPrepareResponse, PrepareTransferResponse } from "../../network/gateway";
2
+ import { PrepareTransactionResponse } from "../../types/onboard";
3
+ import { CantonSigner } from "../../types/signer";
4
+ /**
5
+ * Sign a Canton transaction - handles both prepared transactions and untyped versioned messages
6
+ */
7
+ export declare function signTransaction(signer: CantonSigner, derivationPath: string, transactionData: PrepareTransferResponse | OnboardingPrepareResponse | PrepareTransactionResponse): Promise<string>;
8
+ //# sourceMappingURL=sign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../../src/common-logic/transaction/sign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,uBAAuB,GAAG,yBAAyB,GAAG,0BAA0B,GAChG,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signTransaction = signTransaction;
4
+ const split_1 = require("./split");
5
+ /**
6
+ * Sign a Canton transaction - handles both prepared transactions and untyped versioned messages
7
+ */
8
+ async function signTransaction(signer, derivationPath, transactionData) {
9
+ let signature;
10
+ if ("json" in transactionData) {
11
+ const components = (0, split_1.splitTransaction)(transactionData.json);
12
+ signature = await signer.signTransaction(derivationPath, components);
13
+ }
14
+ else {
15
+ const transactions = [
16
+ transactionData.transactions.namespace_transaction.serialized,
17
+ transactionData.transactions.party_to_key_transaction.serialized,
18
+ transactionData.transactions.party_to_participant_transaction.serialized,
19
+ ];
20
+ signature = await signer.signTransaction(derivationPath, { transactions });
21
+ }
22
+ if (!signature || signature.length === 0) {
23
+ throw new Error("Device returned empty signature");
24
+ }
25
+ return signature;
26
+ }
27
+ //# sourceMappingURL=sign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../../src/common-logic/transaction/sign.ts"],"names":[],"mappings":";;AAQA,0CAwBC;AA7BD,mCAA2C;AAE3C;;GAEG;AACI,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,cAAsB,EACtB,eAAiG;IAEjG,IAAI,SAAiB,CAAC;IAEtB,IAAI,MAAM,IAAI,eAAe,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAA,wBAAgB,EAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1D,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG;YACnB,eAAe,CAAC,YAAY,CAAC,qBAAqB,CAAC,UAAU;YAC7D,eAAe,CAAC,YAAY,CAAC,wBAAwB,CAAC,UAAU;YAChE,eAAe,CAAC,YAAY,CAAC,gCAAgC,CAAC,UAAU;SACzE,CAAC;QACF,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { PrepareTransferResponse } from "../../network/gateway";
2
+ import { CantonPreparedTransaction } from "../../types/signer";
3
+ /**
4
+ * Splits a Canton transaction into components for prepared transaction signing.
5
+ * Converts protobuf transaction data into structured components that can be
6
+ * sent to the Ledger device for signing.
7
+ */
8
+ export declare function splitTransaction(transaction: PrepareTransferResponse["json"]): CantonPreparedTransaction;
9
+ //# sourceMappingURL=split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../../src/common-logic/transaction/split.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAuB/D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,uBAAuB,CAAC,MAAM,CAAC,GAC3C,yBAAyB,CAoE3B"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.splitTransaction = splitTransaction;
37
+ const protobuf = __importStar(require("protobufjs"));
38
+ const transactionProto = __importStar(require("../../types/transaction-proto.json"));
39
+ const root = protobuf.Root.fromJSON(transactionProto) || {};
40
+ const RESERVED_WORDS = {
41
+ bool: "bool_",
42
+ enum: "enum_",
43
+ constructor: "constructor_",
44
+ };
45
+ const replaceReservedWords = (obj) => {
46
+ if (obj === null || typeof obj !== "object")
47
+ return obj;
48
+ if (Array.isArray(obj))
49
+ return obj.map(replaceReservedWords);
50
+ const transformed = {};
51
+ for (const [key, value] of Object.entries(obj)) {
52
+ transformed[RESERVED_WORDS[key] || key] =
53
+ replaceReservedWords(value);
54
+ }
55
+ return transformed;
56
+ };
57
+ /**
58
+ * Splits a Canton transaction into components for prepared transaction signing.
59
+ * Converts protobuf transaction data into structured components that can be
60
+ * sent to the Ledger device for signing.
61
+ */
62
+ function splitTransaction(transaction) {
63
+ const { transaction: transactionData, metadata } = transaction;
64
+ // Process DAML transaction
65
+ const DeviceDamlTransaction = root.lookupType("com.daml.ledger.api.v2.interactive.DeviceDamlTransaction");
66
+ const damlTransactionBytes = DeviceDamlTransaction.encode({
67
+ version: transactionData.version,
68
+ roots: transactionData.roots,
69
+ nodesCount: transactionData.nodes?.length || 0,
70
+ nodeSeeds: (transactionData.nodeSeeds || []).map((seed) => ({
71
+ seed: Uint8Array.from(Buffer.from(seed.seed, "base64")),
72
+ ...(seed.nodeId && seed.nodeId !== 0 && { nodeId: seed.nodeId }),
73
+ })),
74
+ }).finish();
75
+ // Process input contracts
76
+ const inputContracts = (metadata.inputContracts || []).map((contract) => {
77
+ const { eventBlob, ...contractWithoutBlob } = contract;
78
+ const InputContract = root.lookupType("com.daml.ledger.api.v2.interactive.DeviceMetadata.InputContract");
79
+ const contractPb = InputContract.fromObject(replaceReservedWords(contractWithoutBlob));
80
+ return InputContract.encode(contractPb).finish();
81
+ });
82
+ // Process metadata
83
+ const metadataData = {
84
+ submitterInfo: {
85
+ actAs: metadata.submitterInfo.actAs,
86
+ commandId: metadata.submitterInfo.commandId,
87
+ },
88
+ synchronizerId: metadata.synchronizerId,
89
+ ...(metadata.mediatorGroup !== undefined && { mediatorGroup: metadata.mediatorGroup }),
90
+ transactionUuid: metadata.transactionUuid,
91
+ submissionTime: Number.parseInt(metadata.preparationTime, 10),
92
+ inputContractsCount: metadata.inputContracts?.length || 0,
93
+ ...(metadata.minLedgerEffectiveTime && {
94
+ minLedgerEffectiveTime: Number.parseInt(metadata.minLedgerEffectiveTime, 10),
95
+ }),
96
+ ...(metadata.maxLedgerEffectiveTime && {
97
+ maxLedgerEffectiveTime: Number.parseInt(metadata.maxLedgerEffectiveTime, 10),
98
+ }),
99
+ };
100
+ const DeviceMetadata = root.lookupType("com.daml.ledger.api.v2.interactive.DeviceMetadata");
101
+ const metadataBytes = DeviceMetadata.encode(metadataData).finish();
102
+ // Process nodes
103
+ const nodesArray = transactionData.nodes || [];
104
+ const nodes = new Array(nodesArray.length);
105
+ for (const node of nodesArray) {
106
+ const nodeId = Number.parseInt(node.nodeId || "0", 10);
107
+ const Node = root.lookupType("com.daml.ledger.api.v2.interactive.DeviceDamlTransaction.Node");
108
+ const nodePb = Node.fromObject(replaceReservedWords(node));
109
+ const pos = nodesArray.length - 1 - nodeId;
110
+ nodes[pos] = Node.encode(nodePb).finish();
111
+ }
112
+ return {
113
+ damlTransaction: damlTransactionBytes,
114
+ nodes,
115
+ metadata: metadataBytes,
116
+ inputContracts,
117
+ };
118
+ }
119
+ //# sourceMappingURL=split.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.js","sourceRoot":"","sources":["../../../src/common-logic/transaction/split.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,9 @@ const validateTag = (tag) => {
11
11
  return (!tag.isNaN() && tag.isFinite() && tag.isInteger() && tag.isPositive() && tag.lte(exports.UINT32_MAX));
12
12
  };
13
13
  exports.validateTag = validateTag;
14
- const CANTON_ADDRESS_REGEX = /^.+::[a-zA-Z0-9]+$/;
14
+ const CANTON_ADDRESS_REGEX = /^[a-zA-Z0-9-]+::[a-fA-F0-9]{68}$/;
15
15
  function isRecipientValid(recipient) {
16
- // Canton address format: at least 1 character :: at least 1 alphanumeric character
16
+ // Canton address format: alphanumeric with dashes :: 68 hexadecimal characters
17
17
  return CANTON_ADDRESS_REGEX.test(recipient);
18
18
  }
19
19
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/common-logic/utils.ts"],"names":[],"mappings":";;;;;;AAYA,4CAGC;AAfD,gEAAqC;AAExB,QAAA,UAAU,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAErD,MAAM,WAAW,GAAG,CAAC,GAAc,EAAE,EAAE;IAC5C,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,kBAAU,CAAC,CAC7F,CAAC;AACJ,CAAC,CAAC;AAJW,QAAA,WAAW,eAItB;AAEF,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAElD,SAAgB,gBAAgB,CAAC,SAAiB;IAChD,mFAAmF;IACnF,OAAO,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/common-logic/utils.ts"],"names":[],"mappings":";;;;;;AAYA,4CAGC;AAfD,gEAAqC;AAExB,QAAA,UAAU,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAErD,MAAM,WAAW,GAAG,CAAC,GAAc,EAAE,EAAE;IAC5C,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,kBAAU,CAAC,CAC7F,CAAC;AACJ,CAAC,CAAC;AAJW,QAAA,WAAW,eAItB;AAEF,MAAM,oBAAoB,GAAG,kCAAkC,CAAC;AAEhE,SAAgB,gBAAgB,CAAC,SAAiB;IAChD,+EAA+E;IAC/E,OAAO,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC"}
@@ -236,6 +236,7 @@ export type OperationInfo = {
236
236
  type: "transfer";
237
237
  };
238
238
  };
239
+ export declare const getNetworkType: (currency: CryptoCurrency) => "mainnet" | "devnet" | "testnet" | "localnet";
239
240
  export declare function prepareOnboarding(currency: CryptoCurrency, pubKey: string): Promise<OnboardingPrepareResponse>;
240
241
  export declare function submitOnboarding(currency: CryptoCurrency, publicKey: string, prepareResponse: OnboardingPrepareResponse, signature: string): Promise<OnboardingSubmitResponse>;
241
242
  export declare function submit(currency: CryptoCurrency, partyId: string, serialized: string, signature: string): Promise<TransactionSubmitResponse>;