@ledgerhq/coin-canton 0.9.0-nightly.1 → 0.9.0-nightly.20251030160608
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/.unimportedrc.json +2 -1
- package/CHANGELOG.md +26 -9
- 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/estimateMaxSpendable.d.ts +2 -2
- package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -1
- package/lib/bridge/estimateMaxSpendable.js +2 -3
- package/lib/bridge/estimateMaxSpendable.js.map +1 -1
- package/lib/bridge/getTransactionStatus.d.ts +5 -3
- package/lib/bridge/getTransactionStatus.d.ts.map +1 -1
- package/lib/bridge/getTransactionStatus.js +27 -10
- package/lib/bridge/getTransactionStatus.js.map +1 -1
- package/lib/bridge/index.d.ts +2 -2
- package/lib/bridge/index.d.ts.map +1 -1
- package/lib/bridge/index.js +3 -3
- package/lib/bridge/index.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/prepareTransaction.js +1 -1
- package/lib/bridge/prepareTransaction.js.map +1 -1
- package/lib/bridge/serialization.d.ts +4 -0
- package/lib/bridge/serialization.d.ts.map +1 -0
- package/lib/bridge/serialization.js +36 -0
- package/lib/bridge/serialization.js.map +1 -0
- package/lib/bridge/signOperation.d.ts.map +1 -1
- package/lib/bridge/signOperation.js +11 -4
- package/lib/bridge/signOperation.js.map +1 -1
- package/lib/bridge/sync.d.ts.map +1 -1
- package/lib/bridge/sync.js +14 -6
- package/lib/bridge/sync.js.map +1 -1
- package/lib/bridge/transaction.js +1 -1
- package/lib/bridge/transaction.js.map +1 -1
- package/lib/common-logic/account/getBalance.d.ts +5 -1
- package/lib/common-logic/account/getBalance.d.ts.map +1 -1
- package/lib/common-logic/account/getBalance.js +2 -0
- package/lib/common-logic/account/getBalance.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/craftTransaction.js +1 -1
- package/lib/common-logic/transaction/craftTransaction.js.map +1 -1
- package/lib/common-logic/transaction/estimateFees.js +1 -1
- package/lib/common-logic/transaction/estimateFees.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 +45 -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 +6 -1
- package/lib/network/gateway.d.ts.map +1 -1
- package/lib/network/gateway.js +6 -9
- 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/test/fixtures.d.ts +5 -0
- package/lib/test/fixtures.d.ts.map +1 -0
- package/lib/test/fixtures.js +57 -0
- package/lib/test/fixtures.js.map +1 -0
- package/lib/types/bridge.d.ts +14 -2
- package/lib/types/bridge.d.ts.map +1 -1
- package/lib/types/errors.d.ts +6 -0
- package/lib/types/errors.d.ts.map +1 -1
- package/lib/types/errors.js +3 -1
- package/lib/types/errors.js.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +1 -0
- package/lib/types/index.js.map +1 -1
- package/lib/types/signer.d.ts +15 -2
- 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/estimateMaxSpendable.d.ts +2 -2
- package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -1
- package/lib-es/bridge/estimateMaxSpendable.js +2 -3
- package/lib-es/bridge/estimateMaxSpendable.js.map +1 -1
- package/lib-es/bridge/getTransactionStatus.d.ts +5 -3
- package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -1
- package/lib-es/bridge/getTransactionStatus.js +27 -10
- package/lib-es/bridge/getTransactionStatus.js.map +1 -1
- package/lib-es/bridge/index.d.ts +2 -2
- package/lib-es/bridge/index.d.ts.map +1 -1
- package/lib-es/bridge/index.js +3 -3
- package/lib-es/bridge/index.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/prepareTransaction.js +1 -1
- package/lib-es/bridge/prepareTransaction.js.map +1 -1
- package/lib-es/bridge/serialization.d.ts +4 -0
- package/lib-es/bridge/serialization.d.ts.map +1 -0
- package/lib-es/bridge/serialization.js +32 -0
- package/lib-es/bridge/serialization.js.map +1 -0
- package/lib-es/bridge/signOperation.d.ts.map +1 -1
- package/lib-es/bridge/signOperation.js +11 -4
- package/lib-es/bridge/signOperation.js.map +1 -1
- package/lib-es/bridge/sync.d.ts.map +1 -1
- package/lib-es/bridge/sync.js +14 -6
- package/lib-es/bridge/sync.js.map +1 -1
- package/lib-es/bridge/transaction.js +1 -1
- package/lib-es/bridge/transaction.js.map +1 -1
- package/lib-es/common-logic/account/getBalance.d.ts +5 -1
- package/lib-es/common-logic/account/getBalance.d.ts.map +1 -1
- package/lib-es/common-logic/account/getBalance.js +2 -0
- package/lib-es/common-logic/account/getBalance.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/craftTransaction.js +1 -1
- package/lib-es/common-logic/transaction/craftTransaction.js.map +1 -1
- package/lib-es/common-logic/transaction/estimateFees.js +1 -1
- package/lib-es/common-logic/transaction/estimateFees.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 +42 -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 +6 -1
- package/lib-es/network/gateway.d.ts.map +1 -1
- package/lib-es/network/gateway.js +5 -10
- 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/test/fixtures.d.ts +5 -0
- package/lib-es/test/fixtures.d.ts.map +1 -0
- package/lib-es/test/fixtures.js +49 -0
- package/lib-es/test/fixtures.js.map +1 -0
- package/lib-es/types/bridge.d.ts +14 -2
- package/lib-es/types/bridge.d.ts.map +1 -1
- package/lib-es/types/errors.d.ts +6 -0
- package/lib-es/types/errors.d.ts.map +1 -1
- package/lib-es/types/errors.js +2 -0
- package/lib-es/types/errors.js.map +1 -1
- package/lib-es/types/index.d.ts +1 -0
- package/lib-es/types/index.d.ts.map +1 -1
- package/lib-es/types/index.js +1 -0
- package/lib-es/types/index.js.map +1 -1
- package/lib-es/types/signer.d.ts +15 -2
- package/lib-es/types/signer.d.ts.map +1 -1
- package/lib-es/types/transaction-proto.json +1238 -0
- package/package.json +13 -10
- package/scripts/generate.js +261 -0
- package/src/bridge/deviceTransactionConfig.test.ts +14 -10
- package/src/bridge/deviceTransactionConfig.ts +2 -2
- package/src/bridge/estimateMaxSpendable.ts +6 -8
- package/src/bridge/getTransactionStatus.test.ts +103 -165
- package/src/bridge/getTransactionStatus.ts +43 -11
- package/src/bridge/index.ts +6 -5
- package/src/bridge/onboard.integ.test.ts +8 -51
- package/src/bridge/onboard.ts +58 -33
- package/src/bridge/prepareTransaction.ts +1 -1
- package/src/bridge/serialization.ts +44 -0
- package/src/bridge/signOperation.test.ts +123 -0
- package/src/bridge/signOperation.ts +13 -6
- package/src/bridge/sync.integ.test.ts +157 -132
- package/src/bridge/sync.test.ts +5 -1
- package/src/bridge/sync.ts +18 -7
- package/src/bridge/transaction.ts +1 -1
- package/src/common-logic/account/getBalance.ts +12 -2
- package/src/common-logic/account/getBalance.unit.test.ts +7 -1
- package/src/common-logic/index.ts +1 -0
- package/src/common-logic/transaction/craftTransaction.ts +1 -1
- package/src/common-logic/transaction/estimateFees.test.ts +10 -0
- package/src/common-logic/transaction/estimateFees.ts +1 -1
- package/src/common-logic/transaction/sign.test.ts +389 -0
- package/src/common-logic/transaction/sign.ts +59 -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 +5 -6
- package/src/network/gateway.ts +13 -10
- package/src/test/cantonTestUtils.ts +789 -24
- package/src/test/fixtures.ts +53 -0
- package/src/test/prepare-transfer-serialized.json +26 -0
- package/src/test/prepare-transfer.json +3298 -0
- package/src/types/bridge.ts +15 -2
- package/src/types/errors.ts +3 -0
- package/src/types/index.ts +1 -0
- package/src/types/signer.ts +21 -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.8.
|
|
2
|
+
> @ledgerhq/coin-canton@0.8.0 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/.unimportedrc.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,24 +1,41 @@
|
|
|
1
1
|
# @ledgerhq/coin-canton
|
|
2
2
|
|
|
3
|
-
## 0.9.0-nightly.
|
|
3
|
+
## 0.9.0-nightly.20251030160608
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
|
+
- [#12424](https://github.com/LedgerHQ/ledger-live/pull/12424) [`919967c`](https://github.com/LedgerHQ/ledger-live/commit/919967c78195b7cd0ea43183c019b0b73e8d9a1f) Thanks [@ishaba](https://github.com/ishaba)! - feat: canton max utxo status checks
|
|
8
|
+
|
|
9
|
+
- [#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
|
|
10
|
+
|
|
11
|
+
- [#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
|
|
12
|
+
|
|
13
|
+
- [#12249](https://github.com/LedgerHQ/ledger-live/pull/12249) [`f1dfd9c`](https://github.com/LedgerHQ/ledger-live/commit/f1dfd9c9b4ddb7e9b971370ae7941ca06c01b0b8) Thanks [@ishaba](https://github.com/ishaba)! - fix canton add acciunt after retry
|
|
14
|
+
|
|
15
|
+
- [#12522](https://github.com/LedgerHQ/ledger-live/pull/12522) [`3d235e2`](https://github.com/LedgerHQ/ledger-live/commit/3d235e25eee064fa9498b5f9ce9dc0b9b7cf5175) Thanks [@ishaba](https://github.com/ishaba)! - fix canton spendable balance to include locked amount
|
|
16
|
+
|
|
17
|
+
- [#12405](https://github.com/LedgerHQ/ledger-live/pull/12405) [`0a5188a`](https://github.com/LedgerHQ/ledger-live/commit/0a5188aecac545b677cd5d4e8256bbb97081d269) Thanks [@ishaba](https://github.com/ishaba)! - add challenge support for canton onboarding request
|
|
18
|
+
|
|
19
|
+
- [#12518](https://github.com/LedgerHQ/ledger-live/pull/12518) [`8a4658b`](https://github.com/LedgerHQ/ledger-live/commit/8a4658b2140ad4d91de7a1ae79a53f5b9e9b076d) Thanks [@hedi-edelbloute](https://github.com/hedi-edelbloute)! - Update fees to 0 on canton
|
|
20
|
+
|
|
7
21
|
- [#12372](https://github.com/LedgerHQ/ledger-live/pull/12372) [`a731c4c`](https://github.com/LedgerHQ/ledger-live/commit/a731c4cd492a968eb7baa981fdd8aaddedd21f25) Thanks [@jprudent](https://github.com/jprudent)! - Add AlpacaApi.getValidators and implementation for SUI
|
|
8
22
|
|
|
9
23
|
### Patch Changes
|
|
10
24
|
|
|
11
|
-
-
|
|
12
|
-
- @ledgerhq/coin-framework@6.8.0-nightly.1
|
|
25
|
+
- [#12234](https://github.com/LedgerHQ/ledger-live/pull/12234) [`7aa7af1`](https://github.com/LedgerHQ/ledger-live/commit/7aa7af1a78453f24f8de8d9d4e358fd40497f498) Thanks [@ishaba](https://github.com/ishaba)! - fix canton account sync bug
|
|
13
26
|
|
|
14
|
-
|
|
27
|
+
- [#12363](https://github.com/LedgerHQ/ledger-live/pull/12363) [`07258d6`](https://github.com/LedgerHQ/ledger-live/commit/07258d6fab72d6d1765cd1d7d3d3960801f72bfa) Thanks [@jonezque](https://github.com/jonezque)! - feat: canton add memo support, fixed send flow
|
|
15
28
|
|
|
16
|
-
|
|
29
|
+
- [#12457](https://github.com/LedgerHQ/ledger-live/pull/12457) [`9d5fe40`](https://github.com/LedgerHQ/ledger-live/commit/9d5fe400707390f81cd50bc9ff3cdbdbc8c2b876) Thanks [@ishaba](https://github.com/ishaba)! - canton utxo critical warning limit decrease
|
|
17
30
|
|
|
18
|
-
- Updated dependencies [[`2c6a198`](https://github.com/LedgerHQ/ledger-live/commit/2c6a198ba28391695202a0787ce168c53768ff37)]:
|
|
19
|
-
- @ledgerhq/
|
|
20
|
-
- @ledgerhq/coin-framework@6.
|
|
21
|
-
- @ledgerhq/
|
|
31
|
+
- Updated dependencies [[`b4ceaff`](https://github.com/LedgerHQ/ledger-live/commit/b4ceaff2ecf68d8a14e09801c76ab0b014c45286), [`da750a1`](https://github.com/LedgerHQ/ledger-live/commit/da750a16ee5f2c083114569b8ae3c708cceba06c), [`63e8f34`](https://github.com/LedgerHQ/ledger-live/commit/63e8f342f6b951ab77bb710b9971f033c05e579e), [`ccf788d`](https://github.com/LedgerHQ/ledger-live/commit/ccf788d7c0239ca95e76c3cc340f9a6bd09ea726), [`34b28dd`](https://github.com/LedgerHQ/ledger-live/commit/34b28dd5e819906daaa79db5fe6064674def5e7d), [`9f61dcf`](https://github.com/LedgerHQ/ledger-live/commit/9f61dcf6163fd66657e5be732c28bea623a40515), [`607e4be`](https://github.com/LedgerHQ/ledger-live/commit/607e4be33145c102debce1606224b08579888aa8), [`c96d73f`](https://github.com/LedgerHQ/ledger-live/commit/c96d73fed0a75a9c208f78d51c34b742703a7dda), [`7744980`](https://github.com/LedgerHQ/ledger-live/commit/774498090411f1a6d6c06395dda1fc7cd24adf24), [`77566c5`](https://github.com/LedgerHQ/ledger-live/commit/77566c5a3b5795f5938bd5daaa5f8d65934c56b8), [`c1a4bfd`](https://github.com/LedgerHQ/ledger-live/commit/c1a4bfd34b46c6b6587d247673cadb3c078deb1d), [`5b41dd5`](https://github.com/LedgerHQ/ledger-live/commit/5b41dd56e024a5d03ba0e49084113c04887395db), [`f8d904d`](https://github.com/LedgerHQ/ledger-live/commit/f8d904de5607c103549f247428b5a4079f28c1c0), [`eb176c2`](https://github.com/LedgerHQ/ledger-live/commit/eb176c201d711f1d28f74de831c4a6cd0c2d4a50), [`a731c4c`](https://github.com/LedgerHQ/ledger-live/commit/a731c4cd492a968eb7baa981fdd8aaddedd21f25), [`b962966`](https://github.com/LedgerHQ/ledger-live/commit/b962966525517c5cfa7f1f8826f8f2b9162189e4), [`759064d`](https://github.com/LedgerHQ/ledger-live/commit/759064d4815c636af2d73ba548a85b4f53e7b491), [`f392f69`](https://github.com/LedgerHQ/ledger-live/commit/f392f6912f445cc2f7cf4dfcfd030fa3da76f736), [`cadf2e1`](https://github.com/LedgerHQ/ledger-live/commit/cadf2e1dfb09248d3f77d96f94ae774425dbca75), [`cbc0648`](https://github.com/LedgerHQ/ledger-live/commit/cbc064885d8e0459e40d327a2e5389204b3ec705), [`36e5168`](https://github.com/LedgerHQ/ledger-live/commit/36e5168397eaec2a5f425038392a4400f60571d0), [`6ccabef`](https://github.com/LedgerHQ/ledger-live/commit/6ccabef8f3c4e8cc042299d531684595ebadcc55), [`3d4188a`](https://github.com/LedgerHQ/ledger-live/commit/3d4188a26021d33b950129d82cb55d2c2e8d4358), [`d9305e8`](https://github.com/LedgerHQ/ledger-live/commit/d9305e8a4d8364366aaba05dd698396d28b539dc), [`2c6a198`](https://github.com/LedgerHQ/ledger-live/commit/2c6a198ba28391695202a0787ce168c53768ff37)]:
|
|
32
|
+
- @ledgerhq/cryptoassets@13.32.0-nightly.20251030160608
|
|
33
|
+
- @ledgerhq/coin-framework@6.8.0-nightly.20251030160608
|
|
34
|
+
- @ledgerhq/live-network@2.1.0-nightly.20251030160608
|
|
35
|
+
- @ledgerhq/live-env@2.20.0-nightly.20251030160608
|
|
36
|
+
- @ledgerhq/types-live@6.88.0-nightly.20251030160608
|
|
37
|
+
- @ledgerhq/devices@8.7.0-nightly.20251030160608
|
|
38
|
+
- @ledgerhq/errors@6.27.0-nightly.20251030160608
|
|
22
39
|
|
|
23
40
|
## 0.8.0
|
|
24
41
|
|
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,4 +1,4 @@
|
|
|
1
1
|
import { AccountBridge } from "@ledgerhq/types-live";
|
|
2
|
-
import { Transaction } from "../types";
|
|
3
|
-
export declare const estimateMaxSpendable: AccountBridge<Transaction>["estimateMaxSpendable"];
|
|
2
|
+
import { Transaction, CantonAccount } from "../types";
|
|
3
|
+
export declare const estimateMaxSpendable: AccountBridge<Transaction, CantonAccount>["estimateMaxSpendable"];
|
|
4
4
|
//# sourceMappingURL=estimateMaxSpendable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimateMaxSpendable.d.ts","sourceRoot":"","sources":["../../src/bridge/estimateMaxSpendable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAMrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"estimateMaxSpendable.d.ts","sourceRoot":"","sources":["../../src/bridge/estimateMaxSpendable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAMrD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEtD,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAC9C,WAAW,EACX,aAAa,CACd,CAAC,sBAAsB,CAUvB,CAAC"}
|
|
@@ -10,13 +10,12 @@ const abandonseed_1 = require("@ledgerhq/cryptoassets/abandonseed");
|
|
|
10
10
|
const getTransactionStatus_1 = require("./getTransactionStatus");
|
|
11
11
|
const prepareTransaction_1 = require("./prepareTransaction");
|
|
12
12
|
const createTransaction_1 = require("./createTransaction");
|
|
13
|
-
const estimateMaxSpendable = async ({ account, parentAccount, transaction
|
|
13
|
+
const estimateMaxSpendable = async ({ account, parentAccount, transaction }) => {
|
|
14
14
|
const mainAccount = (0, index_1.getMainAccount)(account, parentAccount);
|
|
15
15
|
const newTransaction = await (0, prepareTransaction_1.prepareTransaction)(mainAccount, {
|
|
16
16
|
...(0, createTransaction_1.createTransaction)(account),
|
|
17
17
|
...transaction,
|
|
18
|
-
|
|
19
|
-
recipient: transaction?.recipient || (0, abandonseed_1.getAbandonSeedAddress)("boilerplate"),
|
|
18
|
+
recipient: transaction?.recipient || (0, abandonseed_1.getAbandonSeedAddress)("canton_network"),
|
|
20
19
|
amount: new bignumber_js_1.default(0),
|
|
21
20
|
});
|
|
22
21
|
const status = await (0, getTransactionStatus_1.getTransactionStatus)(mainAccount, newTransaction);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimateMaxSpendable.js","sourceRoot":"","sources":["../../src/bridge/estimateMaxSpendable.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AAErC,kEAAwE;AACxE,oEAA2E;AAC3E,iEAA8D;AAC9D,6DAA0D;AAC1D,2DAAwD;AAGjD,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"estimateMaxSpendable.js","sourceRoot":"","sources":["../../src/bridge/estimateMaxSpendable.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AAErC,kEAAwE;AACxE,oEAA2E;AAC3E,iEAA8D;AAC9D,6DAA0D;AAC1D,2DAAwD;AAGjD,MAAM,oBAAoB,GAGL,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,EAAE,EAAE;IAC5E,MAAM,WAAW,GAAG,IAAA,sBAAc,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,MAAM,IAAA,uCAAkB,EAAC,WAAW,EAAE;QAC3D,GAAG,IAAA,qCAAiB,EAAC,OAAO,CAAC;QAC7B,GAAG,WAAW;QACd,SAAS,EAAE,WAAW,EAAE,SAAS,IAAI,IAAA,mCAAqB,EAAC,gBAAgB,CAAC;QAC5E,MAAM,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC;KACzB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,IAAA,2CAAoB,EAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvE,OAAO,sBAAS,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AAChF,CAAC,CAAC;AAbW,QAAA,oBAAoB,wBAa/B"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Transaction, TransactionStatus } from "../types";
|
|
3
|
-
export declare const
|
|
1
|
+
import { AccountBridge } from "@ledgerhq/types-live";
|
|
2
|
+
import { Transaction, TransactionStatus, CantonAccount } from "../types";
|
|
3
|
+
export declare const TO_MANY_UTXOS_CRITICAL_COUNT = 24;
|
|
4
|
+
export declare const TO_MANY_UTXOS_WARNING_COUNT = 10;
|
|
5
|
+
export declare const getTransactionStatus: AccountBridge<Transaction, CantonAccount, TransactionStatus>["getTransactionStatus"];
|
|
4
6
|
//# sourceMappingURL=getTransactionStatus.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.d.ts","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getTransactionStatus.d.ts","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,aAAa,EAGd,MAAM,UAAU,CAAC;AAKlB,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAC/C,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAC9C,WAAW,EACX,aAAa,EACb,iBAAiB,CAClB,CAAC,sBAAsB,CA6DvB,CAAC"}
|
|
@@ -3,12 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getTransactionStatus = void 0;
|
|
6
|
+
exports.getTransactionStatus = exports.TO_MANY_UTXOS_WARNING_COUNT = exports.TO_MANY_UTXOS_CRITICAL_COUNT = void 0;
|
|
7
7
|
const errors_1 = require("@ledgerhq/errors");
|
|
8
8
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
9
|
const index_1 = require("@ledgerhq/coin-framework/currencies/index");
|
|
10
|
+
const types_1 = require("../types");
|
|
10
11
|
const utils_1 = require("../common-logic/utils");
|
|
11
12
|
const config_1 = __importDefault(require("../config"));
|
|
13
|
+
const abandonseed_1 = require("@ledgerhq/cryptoassets/abandonseed");
|
|
14
|
+
exports.TO_MANY_UTXOS_CRITICAL_COUNT = 24;
|
|
15
|
+
exports.TO_MANY_UTXOS_WARNING_COUNT = 10;
|
|
12
16
|
const getTransactionStatus = async (account, transaction) => {
|
|
13
17
|
const errors = {};
|
|
14
18
|
const warnings = {};
|
|
@@ -21,14 +25,10 @@ const getTransactionStatus = async (account, transaction) => {
|
|
|
21
25
|
// if the fee is more than 10 times the amount, we warn the user that fee is high compared to what he is sending
|
|
22
26
|
warnings.feeTooHigh = new errors_1.FeeTooHigh();
|
|
23
27
|
}
|
|
24
|
-
if (
|
|
28
|
+
if (transaction.fee === null || transaction.fee === undefined) {
|
|
25
29
|
// if the fee is not loaded, we can't do much
|
|
26
30
|
errors.fee = new errors_1.FeeNotLoaded();
|
|
27
31
|
}
|
|
28
|
-
else if (transaction.fee.eq(0)) {
|
|
29
|
-
// On some chains, 0 fee could still work so this is optional
|
|
30
|
-
errors.fee = new errors_1.FeeRequired();
|
|
31
|
-
}
|
|
32
32
|
else if (totalSpent.gt(account.balance.minus(reserveAmount))) {
|
|
33
33
|
// if the total spent is greater than the balance minus the reserve amount, tx is invalid
|
|
34
34
|
errors.amount = new errors_1.NotEnoughSpendableBalance("", {
|
|
@@ -52,10 +52,6 @@ const getTransactionStatus = async (account, transaction) => {
|
|
|
52
52
|
if (!transaction.recipient) {
|
|
53
53
|
errors.recipient = new errors_1.RecipientRequired("");
|
|
54
54
|
}
|
|
55
|
-
else if (account.freshAddress === transaction.recipient) {
|
|
56
|
-
// we want to prevent user from sending to themselves (even if it's technically feasible)
|
|
57
|
-
errors.recipient = new errors_1.InvalidAddressBecauseDestinationIsAlsoSource();
|
|
58
|
-
}
|
|
59
55
|
else if (!(0, utils_1.isRecipientValid)(transaction.recipient)) {
|
|
60
56
|
// We want to prevent user from sending to an invalid address
|
|
61
57
|
errors.recipient = new errors_1.InvalidAddress("", {
|
|
@@ -66,6 +62,7 @@ const getTransactionStatus = async (account, transaction) => {
|
|
|
66
62
|
// if the amount is 0, we prevent the user from sending the tx (even if it's technically feasible)
|
|
67
63
|
errors.amount = new errors_1.AmountRequired();
|
|
68
64
|
}
|
|
65
|
+
validateUtxoCount(account, transaction, warnings);
|
|
69
66
|
return {
|
|
70
67
|
errors,
|
|
71
68
|
warnings,
|
|
@@ -75,4 +72,24 @@ const getTransactionStatus = async (account, transaction) => {
|
|
|
75
72
|
};
|
|
76
73
|
};
|
|
77
74
|
exports.getTransactionStatus = getTransactionStatus;
|
|
75
|
+
function validateUtxoCount(account, transaction, warnings) {
|
|
76
|
+
const abandonSeedAddress = (0, abandonseed_1.getAbandonSeedAddress)(account.currency.id);
|
|
77
|
+
const isAbandonSeedAddress = transaction.recipient?.includes(abandonSeedAddress);
|
|
78
|
+
// UTXO count validation - only validate if recipient is valid and not equal to sender
|
|
79
|
+
// Skip validation for abandon seed addresses
|
|
80
|
+
if (account?.cantonResources?.instrumentUtxoCounts &&
|
|
81
|
+
transaction.recipient &&
|
|
82
|
+
(0, utils_1.isRecipientValid)(transaction.recipient) &&
|
|
83
|
+
account.xpub !== transaction.recipient &&
|
|
84
|
+
!isAbandonSeedAddress) {
|
|
85
|
+
const { instrumentUtxoCounts } = account.cantonResources;
|
|
86
|
+
const instrumentUtxoCount = instrumentUtxoCounts[transaction.tokenId] || 0;
|
|
87
|
+
if (instrumentUtxoCount > exports.TO_MANY_UTXOS_CRITICAL_COUNT) {
|
|
88
|
+
warnings.tooManyUtxos = new types_1.TooManyUtxosCritical();
|
|
89
|
+
}
|
|
90
|
+
else if (instrumentUtxoCount > exports.TO_MANY_UTXOS_WARNING_COUNT) {
|
|
91
|
+
warnings.tooManyUtxos = new types_1.TooManyUtxosWarning("families.canton.tooManyUtxos.warning");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
78
95
|
//# sourceMappingURL=getTransactionStatus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.js","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"getTransactionStatus.js","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.ts"],"names":[],"mappings":"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"}
|
package/lib/bridge/index.d.ts
CHANGED
|
@@ -2,10 +2,10 @@ import { CoinConfig } from "@ledgerhq/coin-framework/config";
|
|
|
2
2
|
import { SignerContext } from "@ledgerhq/coin-framework/signer";
|
|
3
3
|
import type { AccountBridge } from "@ledgerhq/types-live";
|
|
4
4
|
import { type CantonCoinConfig } from "../config";
|
|
5
|
-
import { CantonCurrencyBridge, CantonSigner } from "../types";
|
|
5
|
+
import { CantonCurrencyBridge, CantonSigner, CantonAccount } from "../types";
|
|
6
6
|
import type { Transaction } from "../types";
|
|
7
7
|
export declare function createBridges(signerContext: SignerContext<CantonSigner>, coinConfig: CoinConfig<CantonCoinConfig>): {
|
|
8
8
|
currencyBridge: CantonCurrencyBridge;
|
|
9
|
-
accountBridge: AccountBridge<Transaction>;
|
|
9
|
+
accountBridge: AccountBridge<Transaction, CantonAccount>;
|
|
10
10
|
};
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAyB,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAyB,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAY5C,wBAAgB,aAAa,CAC3B,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,EAC1C,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC;;;EAgDzC"}
|
package/lib/bridge/index.js
CHANGED
|
@@ -17,6 +17,7 @@ const signOperation_1 = require("./signOperation");
|
|
|
17
17
|
const sync_1 = require("./sync");
|
|
18
18
|
const updateTransaction_1 = require("./updateTransaction");
|
|
19
19
|
const onboard_1 = require("./onboard");
|
|
20
|
+
const serialization_1 = require("./serialization");
|
|
20
21
|
function createBridges(signerContext, coinConfig) {
|
|
21
22
|
config_1.default.setCoinConfig(coinConfig);
|
|
22
23
|
const getAddress = (0, signer_1.default)(signerContext);
|
|
@@ -36,13 +37,10 @@ function createBridges(signerContext, coinConfig) {
|
|
|
36
37
|
};
|
|
37
38
|
const signOperation = (0, signOperation_1.buildSignOperation)(signerContext);
|
|
38
39
|
const sync = (0, jsHelpers_1.makeSync)({ getAccountShape: (0, sync_1.makeGetAccountShape)(signerContext) });
|
|
39
|
-
// we want one method per file
|
|
40
40
|
const accountBridge = {
|
|
41
41
|
broadcast: broadcast_1.broadcast,
|
|
42
42
|
createTransaction: createTransaction_1.createTransaction,
|
|
43
43
|
updateTransaction: updateTransaction_1.updateTransaction,
|
|
44
|
-
// NOTE: use updateTransaction: defaultUpdateTransaction<Transaction>,
|
|
45
|
-
// if you don't need to update the transaction patch object
|
|
46
44
|
prepareTransaction: prepareTransaction_1.prepareTransaction,
|
|
47
45
|
getTransactionStatus: getTransactionStatus_1.getTransactionStatus,
|
|
48
46
|
estimateMaxSpendable: estimateMaxSpendable_1.estimateMaxSpendable,
|
|
@@ -52,6 +50,8 @@ function createBridges(signerContext, coinConfig) {
|
|
|
52
50
|
signRawOperation: () => {
|
|
53
51
|
throw new Error("signRawOperation is not supported");
|
|
54
52
|
},
|
|
53
|
+
assignToAccountRaw: serialization_1.assignToAccountRaw,
|
|
54
|
+
assignFromAccountRaw: serialization_1.assignFromAccountRaw,
|
|
55
55
|
getSerializedAddressParameters: jsHelpers_1.getSerializedAddressParameters,
|
|
56
56
|
};
|
|
57
57
|
return {
|
package/lib/bridge/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":";;;;;AAyBA,sCAkDC;AA3ED,0GAAkF;AAClF,yEAKmD;AAInD,uDAAoE;AACpE,uDAAiC;AAGjC,2CAAwC;AACxC,2DAAwD;AACxD,iEAA8D;AAC9D,iEAA8D;AAC9D,6DAA0D;AAC1D,mDAAqD;AACrD,iCAA6C;AAC7C,2DAAwD;AACxD,uCAA2E;AAC3E,mDAA2E;AAE3E,SAAgB,aAAa,CAC3B,aAA0C,EAC1C,UAAwC;IAExC,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,UAAU,GAAG,IAAA,gBAAQ,EAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAA,oCAAwB,EAAC,IAAA,2BAAiB,EAAC,UAAU,CAAC,CAAC,CAAC;IAExE,MAAM,YAAY,GAAG,IAAA,4BAAgB,EAAC;QACpC,eAAe,EAAE,IAAA,0BAAmB,EAAC,aAAa,CAAC;QACnD,YAAY,EAAE,UAAU;KACzB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAA,6BAAmB,EAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,oBAAoB,GAAG,IAAA,mCAAyB,EAAC,aAAa,CAAC,CAAC;IAEtE,MAAM,cAAc,GAAyB;QAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,YAAY;QACZ,cAAc;QACd,oBAAoB;KACrB,CAAC;IAEF,MAAM,aAAa,GAAG,IAAA,kCAAkB,EAAC,aAAa,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAA,oBAAQ,EAAC,EAAE,eAAe,EAAE,IAAA,0BAAmB,EAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAE/E,MAAM,aAAa,GAA8C;QAC/D,SAAS,EAAT,qBAAS;QACT,iBAAiB,EAAjB,qCAAiB;QACjB,iBAAiB,EAAjB,qCAAiB;QACjB,kBAAkB,EAAlB,uCAAkB;QAClB,oBAAoB,EAApB,2CAAoB;QACpB,oBAAoB,EAApB,2CAAoB;QACpB,IAAI;QACJ,OAAO;QACP,aAAa;QACb,gBAAgB,EAAE,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,kBAAkB,EAAlB,kCAAkB;QAClB,oBAAoB,EAApB,oCAAoB;QACpB,8BAA8B,EAA9B,0CAA8B;KAC/B,CAAC;IAEF,OAAO;QACL,cAAc;QACd,aAAa;KACd,CAAC;AACJ,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,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,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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"}
|
|
@@ -10,7 +10,7 @@ const updateTransaction_1 = require("./updateTransaction");
|
|
|
10
10
|
const config_1 = __importDefault(require("../config"));
|
|
11
11
|
const prepareTransaction = async (account, transaction) => {
|
|
12
12
|
const amount = transaction.amount || (0, bignumber_js_1.default)(0);
|
|
13
|
-
const fee = (0, bignumber_js_1.default)((await (0, common_logic_1.estimateFees)(account.currency, BigInt(amount.
|
|
13
|
+
const fee = (0, bignumber_js_1.default)((await (0, common_logic_1.estimateFees)(account.currency, BigInt(amount.toFixed()))).toString());
|
|
14
14
|
if (!transaction.tokenId) {
|
|
15
15
|
transaction.tokenId = config_1.default.getCoinConfig(account.currency).nativeInstrumentId;
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":";;;;;;AAEA,kDAA+C;AAC/C,gEAAqC;AACrC,2DAAwD;AACxD,uDAAmC;AAE5B,MAAM,kBAAkB,GAAqD,KAAK,EACvF,OAAO,EACP,WAAW,EACX,EAAE;IACF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAA,sBAAS,EACnB,CAAC,MAAM,IAAA,2BAAY,EAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":";;;;;;AAEA,kDAA+C;AAC/C,gEAAqC;AACrC,2DAAwD;AACxD,uDAAmC;AAE5B,MAAM,kBAAkB,GAAqD,KAAK,EACvF,OAAO,EACP,WAAW,EACX,EAAE;IACF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAA,sBAAS,EACnB,CAAC,MAAM,IAAA,2BAAY,EAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC5E,CAAC;IAEF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,WAAW,CAAC,OAAO,GAAG,gBAAU,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC;IACtF,CAAC;IACD,OAAO,IAAA,qCAAiB,EAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC;AAbW,QAAA,kBAAkB,sBAa7B"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Account, AccountRaw } from "@ledgerhq/types-live";
|
|
2
|
+
export declare function assignToAccountRaw(account: Account, accountRaw: AccountRaw): void;
|
|
3
|
+
export declare function assignFromAccountRaw(accountRaw: AccountRaw, account: Account): void;
|
|
4
|
+
//# sourceMappingURL=serialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../src/bridge/serialization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AA6BhE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAMjF;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAMnF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assignToAccountRaw = assignToAccountRaw;
|
|
4
|
+
exports.assignFromAccountRaw = assignFromAccountRaw;
|
|
5
|
+
function isCantonAccount(account) {
|
|
6
|
+
return "cantonResources" in account;
|
|
7
|
+
}
|
|
8
|
+
function isCantonAccountRaw(accountRaw) {
|
|
9
|
+
return "cantonResources" in accountRaw;
|
|
10
|
+
}
|
|
11
|
+
function toResourcesRaw(r) {
|
|
12
|
+
const { instrumentUtxoCounts } = r;
|
|
13
|
+
return {
|
|
14
|
+
instrumentUtxoCounts,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function fromResourcesRaw(r) {
|
|
18
|
+
return {
|
|
19
|
+
instrumentUtxoCounts: r.instrumentUtxoCounts,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function assignToAccountRaw(account, accountRaw) {
|
|
23
|
+
if (isCantonAccount(account) && isCantonAccountRaw(accountRaw)) {
|
|
24
|
+
if (account.cantonResources) {
|
|
25
|
+
accountRaw.cantonResources = toResourcesRaw(account.cantonResources);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function assignFromAccountRaw(accountRaw, account) {
|
|
30
|
+
if (isCantonAccountRaw(accountRaw) && isCantonAccount(account)) {
|
|
31
|
+
if (accountRaw.cantonResources) {
|
|
32
|
+
account.cantonResources = fromResourcesRaw(accountRaw.cantonResources);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=serialization.js.map
|