@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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +16 -0
- package/README.md +75 -0
- package/lib/bridge/deviceTransactionConfig.d.ts +1 -1
- package/lib/bridge/deviceTransactionConfig.d.ts.map +1 -1
- package/lib/bridge/deviceTransactionConfig.js +1 -1
- package/lib/bridge/deviceTransactionConfig.js.map +1 -1
- package/lib/bridge/onboard.d.ts.map +1 -1
- package/lib/bridge/onboard.js +48 -22
- package/lib/bridge/onboard.js.map +1 -1
- package/lib/bridge/signOperation.d.ts.map +1 -1
- package/lib/bridge/signOperation.js +10 -3
- package/lib/bridge/signOperation.js.map +1 -1
- package/lib/common-logic/index.d.ts +1 -0
- package/lib/common-logic/index.d.ts.map +1 -1
- package/lib/common-logic/index.js +3 -1
- package/lib/common-logic/index.js.map +1 -1
- package/lib/common-logic/transaction/sign.d.ts +8 -0
- package/lib/common-logic/transaction/sign.d.ts.map +1 -0
- package/lib/common-logic/transaction/sign.js +27 -0
- package/lib/common-logic/transaction/sign.js.map +1 -0
- package/lib/common-logic/transaction/split.d.ts +9 -0
- package/lib/common-logic/transaction/split.d.ts.map +1 -0
- package/lib/common-logic/transaction/split.js +119 -0
- package/lib/common-logic/transaction/split.js.map +1 -0
- package/lib/common-logic/utils.js +2 -2
- package/lib/common-logic/utils.js.map +1 -1
- package/lib/network/gateway.d.ts +1 -0
- package/lib/network/gateway.d.ts.map +1 -1
- package/lib/network/gateway.js +2 -7
- package/lib/network/gateway.js.map +1 -1
- package/lib/test/cantonTestUtils.d.ts +4 -9
- package/lib/test/cantonTestUtils.d.ts.map +1 -1
- package/lib/test/cantonTestUtils.js +736 -27
- package/lib/test/cantonTestUtils.js.map +1 -1
- package/lib/types/signer.d.ts +10 -1
- package/lib/types/signer.d.ts.map +1 -1
- package/lib/types/transaction-proto.json +1238 -0
- package/lib-es/bridge/deviceTransactionConfig.d.ts +1 -1
- package/lib-es/bridge/deviceTransactionConfig.d.ts.map +1 -1
- package/lib-es/bridge/deviceTransactionConfig.js +1 -1
- package/lib-es/bridge/deviceTransactionConfig.js.map +1 -1
- package/lib-es/bridge/onboard.d.ts.map +1 -1
- package/lib-es/bridge/onboard.js +49 -23
- package/lib-es/bridge/onboard.js.map +1 -1
- package/lib-es/bridge/signOperation.d.ts.map +1 -1
- package/lib-es/bridge/signOperation.js +10 -3
- package/lib-es/bridge/signOperation.js.map +1 -1
- package/lib-es/common-logic/index.d.ts +1 -0
- package/lib-es/common-logic/index.d.ts.map +1 -1
- package/lib-es/common-logic/index.js +1 -0
- package/lib-es/common-logic/index.js.map +1 -1
- package/lib-es/common-logic/transaction/sign.d.ts +8 -0
- package/lib-es/common-logic/transaction/sign.d.ts.map +1 -0
- package/lib-es/common-logic/transaction/sign.js +24 -0
- package/lib-es/common-logic/transaction/sign.js.map +1 -0
- package/lib-es/common-logic/transaction/split.d.ts +9 -0
- package/lib-es/common-logic/transaction/split.d.ts.map +1 -0
- package/lib-es/common-logic/transaction/split.js +83 -0
- package/lib-es/common-logic/transaction/split.js.map +1 -0
- package/lib-es/common-logic/utils.js +2 -2
- package/lib-es/common-logic/utils.js.map +1 -1
- package/lib-es/network/gateway.d.ts +1 -0
- package/lib-es/network/gateway.d.ts.map +1 -1
- package/lib-es/network/gateway.js +1 -8
- package/lib-es/network/gateway.js.map +1 -1
- package/lib-es/test/cantonTestUtils.d.ts +4 -9
- package/lib-es/test/cantonTestUtils.d.ts.map +1 -1
- package/lib-es/test/cantonTestUtils.js +697 -21
- package/lib-es/test/cantonTestUtils.js.map +1 -1
- package/lib-es/types/signer.d.ts +10 -1
- package/lib-es/types/signer.d.ts.map +1 -1
- package/lib-es/types/transaction-proto.json +1238 -0
- package/package.json +10 -7
- package/scripts/generate.js +261 -0
- package/src/bridge/deviceTransactionConfig.test.ts +14 -10
- package/src/bridge/deviceTransactionConfig.ts +2 -2
- package/src/bridge/getTransactionStatus.test.ts +19 -19
- package/src/bridge/onboard.integ.test.ts +0 -20
- package/src/bridge/onboard.ts +57 -33
- package/src/bridge/signOperation.test.ts +114 -0
- package/src/bridge/signOperation.ts +12 -5
- package/src/bridge/sync.integ.test.ts +157 -132
- package/src/common-logic/index.ts +1 -0
- package/src/common-logic/transaction/sign.test.ts +317 -0
- package/src/common-logic/transaction/sign.ts +33 -0
- package/src/common-logic/transaction/split.test.ts +50 -0
- package/src/common-logic/transaction/split.ts +101 -0
- package/src/common-logic/utils.test.ts +22 -30
- package/src/common-logic/utils.ts +2 -2
- package/src/network/gateway.integ.test.ts +2 -0
- package/src/network/gateway.ts +3 -8
- package/src/test/cantonTestUtils.ts +789 -24
- package/src/test/prepare-transfer-serialized.json +26 -0
- package/src/test/prepare-transfer.json +3298 -0
- package/src/types/signer.ts +17 -3
- package/src/types/transaction-proto.json +1238 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/coin-canton@0.
|
|
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,
|
|
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,
|
|
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;
|
|
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"}
|
package/lib/bridge/onboard.js
CHANGED
|
@@ -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 =>
|
|
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
|
-
|
|
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 =>
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
106
|
-
|
|
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
|
-
|
|
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":";;;;;;AAAA,+BAAkC;AAIlC,yCAAqC;AACrC,0EAA6E;
|
|
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;
|
|
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 {
|
|
32
|
+
const { nativeTransaction, serializedTransaction, hash } = await (0, common_logic_1.craftTransaction)(account.currency, {
|
|
32
33
|
address,
|
|
33
34
|
}, params);
|
|
34
|
-
const transactionSignature = await
|
|
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
|
-
|
|
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":";;;AAAA,+BAAkC;AAElC,6CAAgD;AAGhD,kEAAuE;AACvE,8DAAmE;AACnE,kDAA4D;
|
|
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 =
|
|
14
|
+
const CANTON_ADDRESS_REGEX = /^[a-zA-Z0-9-]+::[a-fA-F0-9]{68}$/;
|
|
15
15
|
function isRecipientValid(recipient) {
|
|
16
|
-
// Canton address format:
|
|
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,
|
|
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"}
|
package/lib/network/gateway.d.ts
CHANGED
|
@@ -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>;
|