@ledgerhq/coin-canton 0.5.0-nightly.1 → 0.5.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/.unimportedrc.json +12 -4
- package/CHANGELOG.md +21 -0
- package/lib/api/getBalance.integ.test.js +1 -1
- package/lib/api/getBalance.integ.test.js.map +1 -1
- package/lib/api/index.d.ts.map +1 -1
- package/lib/api/index.js +11 -8
- package/lib/api/index.js.map +1 -1
- package/lib/bridge/createTransaction.test.js +1 -1
- package/lib/bridge/createTransaction.test.js.map +1 -1
- package/lib/bridge/index.d.ts +3 -3
- package/lib/bridge/index.d.ts.map +1 -1
- package/lib/bridge/index.js +9 -1
- package/lib/bridge/index.js.map +1 -1
- package/lib/bridge/onboard.d.ts +10 -0
- package/lib/bridge/onboard.d.ts.map +1 -0
- package/lib/bridge/onboard.integ.test.d.ts +2 -0
- package/lib/bridge/onboard.integ.test.d.ts.map +1 -0
- package/lib/bridge/onboard.integ.test.js +156 -0
- package/lib/bridge/onboard.integ.test.js.map +1 -0
- package/lib/bridge/onboard.js +139 -0
- package/lib/bridge/onboard.js.map +1 -0
- package/lib/bridge/prepareTransaction.d.ts.map +1 -1
- package/lib/bridge/prepareTransaction.js +5 -7
- package/lib/bridge/prepareTransaction.js.map +1 -1
- package/lib/bridge/signOperation.d.ts.map +1 -1
- package/lib/bridge/signOperation.js +2 -1
- package/lib/bridge/signOperation.js.map +1 -1
- package/lib/bridge/sync.d.ts.map +1 -1
- package/lib/bridge/sync.integ.test.d.ts +2 -0
- package/lib/bridge/sync.integ.test.d.ts.map +1 -0
- package/lib/bridge/sync.integ.test.js +175 -0
- package/lib/bridge/sync.integ.test.js.map +1 -0
- package/lib/bridge/sync.js +39 -36
- package/lib/bridge/sync.js.map +1 -1
- package/lib/bridge/updateTransaction.d.ts.map +1 -1
- package/lib/bridge/updateTransaction.js +0 -4
- package/lib/bridge/updateTransaction.js.map +1 -1
- package/lib/common-logic/history/listOperations.d.ts.map +1 -1
- package/lib/common-logic/history/listOperations.js +19 -31
- package/lib/common-logic/history/listOperations.js.map +1 -1
- package/lib/common-logic/transaction/craftTransaction.d.ts +4 -3
- package/lib/common-logic/transaction/craftTransaction.d.ts.map +1 -1
- package/lib/common-logic/transaction/craftTransaction.js +10 -12
- package/lib/common-logic/transaction/craftTransaction.js.map +1 -1
- package/lib/network/gateway.d.ts +194 -3
- package/lib/network/gateway.d.ts.map +1 -1
- package/lib/network/gateway.integ.test.js +121 -11
- package/lib/network/gateway.integ.test.js.map +1 -1
- package/lib/network/gateway.js +96 -18
- package/lib/network/gateway.js.map +1 -1
- package/lib/network/node.d.ts +2 -2
- package/lib/network/node.d.ts.map +1 -1
- package/lib/network/node.js.map +1 -1
- package/lib/network/types.d.ts +1 -1
- package/lib/network/types.d.ts.map +1 -1
- package/lib/signer/getAddress.d.ts.map +1 -1
- package/lib/signer/getAddress.js +2 -2
- package/lib/signer/getAddress.js.map +1 -1
- package/lib/test/cantonTestUtils.d.ts +33 -0
- package/lib/test/cantonTestUtils.d.ts.map +1 -0
- package/lib/test/cantonTestUtils.js +159 -0
- package/lib/test/cantonTestUtils.js.map +1 -0
- package/lib/types/bridge.d.ts +7 -1
- package/lib/types/bridge.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -10
- 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/onboard.d.ts +55 -0
- package/lib/types/onboard.d.ts.map +1 -0
- package/lib/types/onboard.js +22 -0
- package/lib/types/onboard.js.map +1 -0
- package/lib-es/api/getBalance.integ.test.js +1 -1
- package/lib-es/api/getBalance.integ.test.js.map +1 -1
- package/lib-es/api/index.d.ts.map +1 -1
- package/lib-es/api/index.js +12 -9
- package/lib-es/api/index.js.map +1 -1
- package/lib-es/bridge/createTransaction.test.js +1 -1
- package/lib-es/bridge/createTransaction.test.js.map +1 -1
- package/lib-es/bridge/index.d.ts +3 -3
- package/lib-es/bridge/index.d.ts.map +1 -1
- package/lib-es/bridge/index.js +9 -1
- package/lib-es/bridge/index.js.map +1 -1
- package/lib-es/bridge/onboard.d.ts +10 -0
- package/lib-es/bridge/onboard.d.ts.map +1 -0
- package/lib-es/bridge/onboard.integ.test.d.ts +2 -0
- package/lib-es/bridge/onboard.integ.test.d.ts.map +1 -0
- package/lib-es/bridge/onboard.integ.test.js +151 -0
- package/lib-es/bridge/onboard.integ.test.js.map +1 -0
- package/lib-es/bridge/onboard.js +133 -0
- package/lib-es/bridge/onboard.js.map +1 -0
- package/lib-es/bridge/prepareTransaction.d.ts.map +1 -1
- package/lib-es/bridge/prepareTransaction.js +6 -8
- package/lib-es/bridge/prepareTransaction.js.map +1 -1
- package/lib-es/bridge/signOperation.d.ts.map +1 -1
- package/lib-es/bridge/signOperation.js +2 -1
- package/lib-es/bridge/signOperation.js.map +1 -1
- package/lib-es/bridge/sync.d.ts.map +1 -1
- package/lib-es/bridge/sync.integ.test.d.ts +2 -0
- package/lib-es/bridge/sync.integ.test.d.ts.map +1 -0
- package/lib-es/bridge/sync.integ.test.js +137 -0
- package/lib-es/bridge/sync.integ.test.js.map +1 -0
- package/lib-es/bridge/sync.js +38 -35
- package/lib-es/bridge/sync.js.map +1 -1
- package/lib-es/bridge/updateTransaction.d.ts.map +1 -1
- package/lib-es/bridge/updateTransaction.js +0 -4
- package/lib-es/bridge/updateTransaction.js.map +1 -1
- package/lib-es/common-logic/history/listOperations.d.ts.map +1 -1
- package/lib-es/common-logic/history/listOperations.js +20 -29
- package/lib-es/common-logic/history/listOperations.js.map +1 -1
- package/lib-es/common-logic/transaction/craftTransaction.d.ts +4 -3
- package/lib-es/common-logic/transaction/craftTransaction.d.ts.map +1 -1
- package/lib-es/common-logic/transaction/craftTransaction.js +10 -12
- package/lib-es/common-logic/transaction/craftTransaction.js.map +1 -1
- package/lib-es/network/gateway.d.ts +194 -3
- package/lib-es/network/gateway.d.ts.map +1 -1
- package/lib-es/network/gateway.integ.test.js +122 -12
- package/lib-es/network/gateway.integ.test.js.map +1 -1
- package/lib-es/network/gateway.js +90 -17
- package/lib-es/network/gateway.js.map +1 -1
- package/lib-es/network/node.d.ts +2 -2
- package/lib-es/network/node.d.ts.map +1 -1
- package/lib-es/network/node.js.map +1 -1
- package/lib-es/network/types.d.ts +1 -1
- package/lib-es/network/types.d.ts.map +1 -1
- package/lib-es/signer/getAddress.d.ts.map +1 -1
- package/lib-es/signer/getAddress.js +2 -2
- package/lib-es/signer/getAddress.js.map +1 -1
- package/lib-es/test/cantonTestUtils.d.ts +33 -0
- package/lib-es/test/cantonTestUtils.d.ts.map +1 -0
- package/lib-es/test/cantonTestUtils.js +151 -0
- package/lib-es/test/cantonTestUtils.js.map +1 -0
- package/lib-es/types/bridge.d.ts +7 -1
- package/lib-es/types/bridge.d.ts.map +1 -1
- package/lib-es/types/index.d.ts +1 -10
- 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/onboard.d.ts +55 -0
- package/lib-es/types/onboard.d.ts.map +1 -0
- package/lib-es/types/onboard.js +19 -0
- package/lib-es/types/onboard.js.map +1 -0
- package/package.json +6 -6
- package/src/api/getBalance.integ.test.ts +1 -2
- package/src/api/index.ts +33 -26
- package/src/bridge/createTransaction.test.ts +1 -1
- package/src/bridge/index.ts +14 -4
- package/src/bridge/onboard.integ.test.ts +219 -0
- package/src/bridge/onboard.ts +220 -0
- package/src/bridge/prepareTransaction.ts +6 -15
- package/src/bridge/signOperation.ts +3 -2
- package/src/bridge/sync.integ.test.ts +180 -0
- package/src/bridge/sync.ts +57 -49
- package/src/bridge/updateTransaction.ts +0 -5
- package/src/common-logic/history/listOperations.ts +20 -31
- package/src/common-logic/transaction/craftTransaction.ts +13 -17
- package/src/network/gateway.integ.test.ts +156 -17
- package/src/network/gateway.ts +333 -26
- package/src/network/node.ts +3 -3
- package/src/network/types.ts +1 -1
- package/src/signer/getAddress.ts +3 -5
- package/src/test/cantonTestUtils.ts +181 -0
- package/src/types/bridge.ts +20 -0
- package/src/types/index.ts +1 -11
- package/src/types/onboard.ts +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cantonTestUtils.js","sourceRoot":"","sources":["../../src/test/cantonTestUtils.ts"],"names":[],"mappings":"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"}
|
package/lib-es/types/bridge.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { BigNumber } from "bignumber.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { Observable } from "rxjs";
|
|
3
|
+
import type { CurrencyBridge, TransactionCommon, TransactionCommonRaw, TransactionStatusCommon, TransactionStatusCommonRaw } from "@ledgerhq/types-live";
|
|
4
|
+
import type { CantonOnboardProgress, CantonOnboardResult, CantonPreApprovalProgress, CantonPreApprovalResult } from "./onboard";
|
|
5
|
+
export interface CantonCurrencyBridge extends CurrencyBridge {
|
|
6
|
+
onboardAccount: (deviceId: string, derivationPath: string) => Observable<CantonOnboardProgress | CantonOnboardResult>;
|
|
7
|
+
authorizePreapproval: (deviceId: string, derivationPath: string, partyId: string) => Observable<CantonPreApprovalProgress | CantonPreApprovalResult>;
|
|
8
|
+
}
|
|
3
9
|
export type NetworkInfo = {
|
|
4
10
|
family: "canton";
|
|
5
11
|
serverFee: BigNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,cAAc,EAAE,CACd,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,KACnB,UAAU,CAAC,qBAAqB,GAAG,mBAAmB,CAAC,CAAC;IAC7D,oBAAoB,EAAE,CACpB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,KACZ,UAAU,CAAC,yBAAyB,GAAG,uBAAuB,CAAC,CAAC;CACtE;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,MAAM,EAAE,QAAQ,CAAC;IACjB,GAAG,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG;IAClD,MAAM,EAAE,QAAQ,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AACxD,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,CAAC"}
|
package/lib-es/types/index.d.ts
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
export * from "./bridge";
|
|
2
|
+
export * from "./onboard";
|
|
2
3
|
export * from "./signer";
|
|
3
|
-
export type BoilerplateNativeTransaction = {
|
|
4
|
-
TransactionType: "Payment";
|
|
5
|
-
Account: string;
|
|
6
|
-
Amount: string;
|
|
7
|
-
Destination: string;
|
|
8
|
-
Fee: string;
|
|
9
|
-
Sequence: number;
|
|
10
|
-
SigningPubKey?: string;
|
|
11
|
-
TxnSignature?: string;
|
|
12
|
-
};
|
|
13
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
|
package/lib-es/types/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export declare enum OnboardStatus {
|
|
2
|
+
INIT = 0,
|
|
3
|
+
PREPARE = 1,
|
|
4
|
+
SIGN = 2,
|
|
5
|
+
SUBMIT = 3,
|
|
6
|
+
SUCCESS = 4,
|
|
7
|
+
ERROR = 5
|
|
8
|
+
}
|
|
9
|
+
export declare enum PreApprovalStatus {
|
|
10
|
+
INIT = 0,
|
|
11
|
+
PREPARE = 1,
|
|
12
|
+
SIGN = 2,
|
|
13
|
+
SUBMIT = 3,
|
|
14
|
+
SUCCESS = 4,
|
|
15
|
+
ERROR = 5
|
|
16
|
+
}
|
|
17
|
+
export type CantonOnboardProgress = {
|
|
18
|
+
status: OnboardStatus;
|
|
19
|
+
};
|
|
20
|
+
export type CantonOnboardResult = {
|
|
21
|
+
partyId: string;
|
|
22
|
+
};
|
|
23
|
+
export type CantonPreApprovalProgress = {
|
|
24
|
+
status: PreApprovalStatus;
|
|
25
|
+
};
|
|
26
|
+
export type CantonPreApprovalResult = {
|
|
27
|
+
isApproved: boolean;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Types for Canton Gateway Transaction API
|
|
31
|
+
* Based on the API endpoints in canton-gateway
|
|
32
|
+
*/
|
|
33
|
+
export interface PrepareTransactionRequest {
|
|
34
|
+
type: "transfer-pre-approval-proposal";
|
|
35
|
+
receiver: string;
|
|
36
|
+
}
|
|
37
|
+
export interface PrepareTransactionResponse {
|
|
38
|
+
serialized: string;
|
|
39
|
+
json: any;
|
|
40
|
+
hash: string;
|
|
41
|
+
}
|
|
42
|
+
export interface SubmitTransactionRequest {
|
|
43
|
+
serialized: string;
|
|
44
|
+
signature: string;
|
|
45
|
+
}
|
|
46
|
+
export interface SubmitTransactionResponse {
|
|
47
|
+
submission_id: string;
|
|
48
|
+
update_id: string;
|
|
49
|
+
}
|
|
50
|
+
export interface PreApprovalResult {
|
|
51
|
+
isApproved: boolean;
|
|
52
|
+
submissionId: string;
|
|
53
|
+
updateId: string;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=onboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/types/onboard.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,IAAI,IAAA;IACJ,OAAO,IAAA;IACP,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,OAAO,IAAA;IACP,KAAK,IAAA;CACN;AAED,oBAAY,iBAAiB;IAC3B,IAAI,IAAA;IACJ,OAAO,IAAA;IACP,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,OAAO,IAAA;IACP,KAAK,IAAA;CACN;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;GAGG;AAEH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,gCAAgC,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export var OnboardStatus;
|
|
2
|
+
(function (OnboardStatus) {
|
|
3
|
+
OnboardStatus[OnboardStatus["INIT"] = 0] = "INIT";
|
|
4
|
+
OnboardStatus[OnboardStatus["PREPARE"] = 1] = "PREPARE";
|
|
5
|
+
OnboardStatus[OnboardStatus["SIGN"] = 2] = "SIGN";
|
|
6
|
+
OnboardStatus[OnboardStatus["SUBMIT"] = 3] = "SUBMIT";
|
|
7
|
+
OnboardStatus[OnboardStatus["SUCCESS"] = 4] = "SUCCESS";
|
|
8
|
+
OnboardStatus[OnboardStatus["ERROR"] = 5] = "ERROR";
|
|
9
|
+
})(OnboardStatus || (OnboardStatus = {}));
|
|
10
|
+
export var PreApprovalStatus;
|
|
11
|
+
(function (PreApprovalStatus) {
|
|
12
|
+
PreApprovalStatus[PreApprovalStatus["INIT"] = 0] = "INIT";
|
|
13
|
+
PreApprovalStatus[PreApprovalStatus["PREPARE"] = 1] = "PREPARE";
|
|
14
|
+
PreApprovalStatus[PreApprovalStatus["SIGN"] = 2] = "SIGN";
|
|
15
|
+
PreApprovalStatus[PreApprovalStatus["SUBMIT"] = 3] = "SUBMIT";
|
|
16
|
+
PreApprovalStatus[PreApprovalStatus["SUCCESS"] = 4] = "SUCCESS";
|
|
17
|
+
PreApprovalStatus[PreApprovalStatus["ERROR"] = 5] = "ERROR";
|
|
18
|
+
})(PreApprovalStatus || (PreApprovalStatus = {}));
|
|
19
|
+
//# sourceMappingURL=onboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/types/onboard.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACvB,iDAAI,CAAA;IACJ,uDAAO,CAAA;IACP,iDAAI,CAAA;IACJ,qDAAM,CAAA;IACN,uDAAO,CAAA;IACP,mDAAK,CAAA;AACP,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAED,MAAM,CAAN,IAAY,iBAOX;AAPD,WAAY,iBAAiB;IAC3B,yDAAI,CAAA;IACJ,+DAAO,CAAA;IACP,yDAAI,CAAA;IACJ,6DAAM,CAAA;IACN,+DAAO,CAAA;IACP,2DAAK,CAAA;AACP,CAAC,EAPW,iBAAiB,KAAjB,iBAAiB,QAO5B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/coin-canton",
|
|
3
|
-
"version": "0.5.0-nightly.
|
|
3
|
+
"version": "0.5.0-nightly.2",
|
|
4
4
|
"description": "Canton coin integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger",
|
|
@@ -101,13 +101,13 @@
|
|
|
101
101
|
"bignumber.js": "^9.1.2",
|
|
102
102
|
"invariant": "^2.2.4",
|
|
103
103
|
"rxjs": "^7.8.1",
|
|
104
|
-
"@ledgerhq/coin-framework": "^6.4.0-nightly.
|
|
105
|
-
"@ledgerhq/cryptoassets": "^13.28.0-nightly.
|
|
104
|
+
"@ledgerhq/coin-framework": "^6.4.0-nightly.2",
|
|
105
|
+
"@ledgerhq/cryptoassets": "^13.28.0-nightly.1",
|
|
106
106
|
"@ledgerhq/devices": "8.5.1",
|
|
107
107
|
"@ledgerhq/errors": "^6.25.0",
|
|
108
|
-
"@ledgerhq/live-env": "^2.16.0-nightly.
|
|
109
|
-
"@ledgerhq/live-network": "^2.0.17-nightly.
|
|
110
|
-
"@ledgerhq/types-live": "^6.83.0"
|
|
108
|
+
"@ledgerhq/live-env": "^2.16.0-nightly.1",
|
|
109
|
+
"@ledgerhq/live-network": "^2.0.17-nightly.1",
|
|
110
|
+
"@ledgerhq/types-live": "^6.83.1-nightly.0"
|
|
111
111
|
},
|
|
112
112
|
"devDependencies": {
|
|
113
113
|
"@types/invariant": "^2.2.37",
|
|
@@ -10,8 +10,7 @@ describe("devnet", () => {
|
|
|
10
10
|
networkType: "devnet",
|
|
11
11
|
gatewayUrl: "https://canton-gateway.api.live.ledger-test.com",
|
|
12
12
|
useGateway: true,
|
|
13
|
-
nativeInstrumentId:
|
|
14
|
-
"6e9fc50fb94e56751b49f09ba2dc84da53a9d7cff08115ebb4f6b7a12d0c990c:Splice.Amulet:Amulet",
|
|
13
|
+
nativeInstrumentId: "Amulet",
|
|
15
14
|
});
|
|
16
15
|
});
|
|
17
16
|
|
package/src/api/index.ts
CHANGED
|
@@ -2,13 +2,13 @@ import {
|
|
|
2
2
|
AlpacaApi,
|
|
3
3
|
Block,
|
|
4
4
|
BlockInfo,
|
|
5
|
-
CraftedTransaction,
|
|
6
5
|
Cursor,
|
|
7
6
|
FeeEstimation,
|
|
8
7
|
Page,
|
|
9
8
|
Reward,
|
|
10
9
|
Stake,
|
|
11
10
|
TransactionIntent,
|
|
11
|
+
CraftedTransaction,
|
|
12
12
|
} from "@ledgerhq/coin-framework/api/index";
|
|
13
13
|
import coinConfig, { type CantonConfig } from "../config";
|
|
14
14
|
import {
|
|
@@ -17,7 +17,6 @@ import {
|
|
|
17
17
|
craftTransaction,
|
|
18
18
|
estimateFees,
|
|
19
19
|
getBalance,
|
|
20
|
-
getNextValidSequence,
|
|
21
20
|
lastBlock,
|
|
22
21
|
listOperations,
|
|
23
22
|
} from "../common-logic";
|
|
@@ -29,8 +28,8 @@ export function createApi(config: CantonConfig): AlpacaApi {
|
|
|
29
28
|
return {
|
|
30
29
|
broadcast,
|
|
31
30
|
combine,
|
|
32
|
-
craftTransaction: craft,
|
|
33
|
-
estimateFees: estimate,
|
|
31
|
+
craftTransaction: craft(config.nativeInstrumentId ?? ""),
|
|
32
|
+
estimateFees: estimate(config.nativeInstrumentId ?? ""),
|
|
34
33
|
getBalance,
|
|
35
34
|
lastBlock,
|
|
36
35
|
listOperations,
|
|
@@ -49,28 +48,36 @@ export function createApi(config: CantonConfig): AlpacaApi {
|
|
|
49
48
|
};
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
51
|
+
const craft =
|
|
52
|
+
(tokenId: string) =>
|
|
53
|
+
async (transactionIntent: TransactionIntent): Promise<CraftedTransaction> => {
|
|
54
|
+
const tx = await craftTransaction(
|
|
55
|
+
{ address: transactionIntent.sender },
|
|
56
|
+
{
|
|
57
|
+
recipient: transactionIntent.recipient,
|
|
58
|
+
amount: new BigNumber(transactionIntent.amount.toString()),
|
|
59
|
+
tokenId,
|
|
60
|
+
expireInSeconds: 24 * 60 * 60,
|
|
61
|
+
},
|
|
62
|
+
);
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
{ address: transactionIntent.sender },
|
|
67
|
-
{
|
|
68
|
-
recipient: transactionIntent.recipient,
|
|
69
|
-
amount: new BigNumber(transactionIntent.amount.toString()),
|
|
70
|
-
},
|
|
71
|
-
);
|
|
64
|
+
return { transaction: tx.serializedTransaction };
|
|
65
|
+
};
|
|
72
66
|
|
|
73
|
-
|
|
67
|
+
const estimate =
|
|
68
|
+
(tokenId: string) =>
|
|
69
|
+
async (transactionIntent: TransactionIntent): Promise<FeeEstimation> => {
|
|
70
|
+
const { serializedTransaction } = await craftTransaction(
|
|
71
|
+
{ address: transactionIntent.sender },
|
|
72
|
+
{
|
|
73
|
+
recipient: transactionIntent.recipient,
|
|
74
|
+
amount: new BigNumber(transactionIntent.amount.toString()),
|
|
75
|
+
tokenId,
|
|
76
|
+
expireInSeconds: 24 * 60 * 60,
|
|
77
|
+
},
|
|
78
|
+
);
|
|
74
79
|
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
const value = await estimateFees(serializedTransaction);
|
|
81
|
+
|
|
82
|
+
return { value };
|
|
83
|
+
};
|
|
@@ -6,7 +6,7 @@ describe("createTransaction", () => {
|
|
|
6
6
|
expect(createTransaction({} as AccountLike<Account>).amount.toNumber()).toEqual(0);
|
|
7
7
|
});
|
|
8
8
|
|
|
9
|
-
it("should create a transaction with
|
|
9
|
+
it("should create a transaction with canton family", () => {
|
|
10
10
|
expect(createTransaction({} as AccountLike<Account>).family).toEqual("canton");
|
|
11
11
|
});
|
|
12
12
|
});
|
package/src/bridge/index.ts
CHANGED
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
} from "@ledgerhq/coin-framework/bridge/jsHelpers";
|
|
8
8
|
import { CoinConfig } from "@ledgerhq/coin-framework/config";
|
|
9
9
|
import { SignerContext } from "@ledgerhq/coin-framework/signer";
|
|
10
|
-
import type { AccountBridge
|
|
10
|
+
import type { AccountBridge } from "@ledgerhq/types-live";
|
|
11
11
|
import cantonCoinConfig, { type CantonCoinConfig } from "../config";
|
|
12
12
|
import resolver from "../signer";
|
|
13
|
-
import { CantonSigner } from "../types";
|
|
13
|
+
import { CantonCurrencyBridge, CantonSigner } from "../types";
|
|
14
14
|
import type { Transaction } from "../types";
|
|
15
15
|
import { broadcast } from "./broadcast";
|
|
16
16
|
import { createTransaction } from "./createTransaction";
|
|
@@ -20,6 +20,7 @@ import { prepareTransaction } from "./prepareTransaction";
|
|
|
20
20
|
import { buildSignOperation } from "./signOperation";
|
|
21
21
|
import { getAccountShape } from "./sync";
|
|
22
22
|
import { updateTransaction } from "./updateTransaction";
|
|
23
|
+
import { buildOnboardAccount, buildAuthorizePreapproval } from "./onboard";
|
|
23
24
|
|
|
24
25
|
export function createBridges(
|
|
25
26
|
signerContext: SignerContext<CantonSigner>,
|
|
@@ -30,11 +31,20 @@ export function createBridges(
|
|
|
30
31
|
const getAddress = resolver(signerContext);
|
|
31
32
|
const receive = makeAccountBridgeReceive(getAddressWrapper(getAddress));
|
|
32
33
|
|
|
33
|
-
const scanAccounts = makeScanAccounts({
|
|
34
|
-
|
|
34
|
+
const scanAccounts = makeScanAccounts({
|
|
35
|
+
getAccountShape: getAccountShape,
|
|
36
|
+
getAddressFn: getAddress,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const onboardAccount = buildOnboardAccount(signerContext);
|
|
40
|
+
const authorizePreapproval = buildAuthorizePreapproval(signerContext);
|
|
41
|
+
|
|
42
|
+
const currencyBridge: CantonCurrencyBridge = {
|
|
35
43
|
preload: () => Promise.resolve({}),
|
|
36
44
|
hydrate: () => {},
|
|
37
45
|
scanAccounts,
|
|
46
|
+
onboardAccount,
|
|
47
|
+
authorizePreapproval,
|
|
38
48
|
};
|
|
39
49
|
|
|
40
50
|
const signOperation = buildSignOperation(signerContext);
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { firstValueFrom, toArray } from "rxjs";
|
|
2
|
+
import { generateMockKeyPair, createMockSigner } from "../test/cantonTestUtils";
|
|
3
|
+
import { buildOnboardAccount, isAccountOnboarded, buildAuthorizePreapproval } from "./onboard";
|
|
4
|
+
import {
|
|
5
|
+
OnboardStatus,
|
|
6
|
+
PreApprovalStatus,
|
|
7
|
+
CantonOnboardProgress,
|
|
8
|
+
CantonOnboardResult,
|
|
9
|
+
CantonPreApprovalProgress,
|
|
10
|
+
CantonPreApprovalResult,
|
|
11
|
+
} from "../types/onboard";
|
|
12
|
+
import coinConfig from "../config";
|
|
13
|
+
|
|
14
|
+
describe("onboard (devnet)", () => {
|
|
15
|
+
const mockDeviceId = "test-device-id";
|
|
16
|
+
const mockDerivationPath = "44'/6767'/0'/0'/0'";
|
|
17
|
+
|
|
18
|
+
let onboardedAccount: {
|
|
19
|
+
keyPair: ReturnType<typeof generateMockKeyPair>;
|
|
20
|
+
mockSigner: ReturnType<typeof createMockSigner>;
|
|
21
|
+
mockSignerContext: jest.Mock;
|
|
22
|
+
onboardResult: CantonOnboardResult;
|
|
23
|
+
} | null = null;
|
|
24
|
+
|
|
25
|
+
beforeAll(() => {
|
|
26
|
+
coinConfig.setCoinConfig(() => ({
|
|
27
|
+
gatewayUrl: "https://canton-gateway.api.live.ledger-test.com",
|
|
28
|
+
useGateway: true,
|
|
29
|
+
networkType: "devnet",
|
|
30
|
+
status: {
|
|
31
|
+
type: "active",
|
|
32
|
+
},
|
|
33
|
+
}));
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const getOnboardedAccount = () => {
|
|
37
|
+
if (!onboardedAccount) {
|
|
38
|
+
throw new Error(
|
|
39
|
+
"onboardedAccount is null. Ensure isAccountOnboarded test runs first to set it.",
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
return onboardedAccount;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
describe("isAccountOnboarded", () => {
|
|
46
|
+
it("should return true for onboarded account", async () => {
|
|
47
|
+
// GIVEN
|
|
48
|
+
const keyPair = generateMockKeyPair();
|
|
49
|
+
const mockSigner = createMockSigner(keyPair);
|
|
50
|
+
const mockSignerContext = jest.fn().mockImplementation((deviceId, callback) => {
|
|
51
|
+
return callback(mockSigner);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const onboardObservable = buildOnboardAccount(mockSignerContext);
|
|
55
|
+
const onboardValues = await firstValueFrom(
|
|
56
|
+
onboardObservable(mockDeviceId, mockDerivationPath).pipe(toArray()),
|
|
57
|
+
);
|
|
58
|
+
const onboardResult = onboardValues.find(
|
|
59
|
+
(value): value is CantonOnboardResult => "partyId" in value,
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
if (!onboardResult) {
|
|
63
|
+
throw new Error("Failed to onboard account for shared test data");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Save onboarded account for all tests that need a valid party ID
|
|
67
|
+
onboardedAccount = {
|
|
68
|
+
keyPair,
|
|
69
|
+
mockSigner,
|
|
70
|
+
mockSignerContext,
|
|
71
|
+
onboardResult,
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// WHEN
|
|
75
|
+
const result = await isAccountOnboarded(keyPair.publicKeyHex);
|
|
76
|
+
|
|
77
|
+
// THEN
|
|
78
|
+
expect(result).not.toBe(false);
|
|
79
|
+
if (typeof result === "object") {
|
|
80
|
+
expect(result.party_id).toBeDefined();
|
|
81
|
+
expect(result.party_id).toBe(onboardResult!.partyId);
|
|
82
|
+
}
|
|
83
|
+
}, 30000);
|
|
84
|
+
|
|
85
|
+
it("should return false for non-onboarded account with fresh keypair", async () => {
|
|
86
|
+
// GIVEN
|
|
87
|
+
const keyPair = generateMockKeyPair();
|
|
88
|
+
|
|
89
|
+
// WHEN
|
|
90
|
+
const result = await isAccountOnboarded(keyPair.publicKeyHex);
|
|
91
|
+
|
|
92
|
+
// THEN
|
|
93
|
+
expect(result).toBe(false);
|
|
94
|
+
}, 15000);
|
|
95
|
+
|
|
96
|
+
it("should handle errors gracefully when checking non-existent party", async () => {
|
|
97
|
+
// GIVEN
|
|
98
|
+
const keyPair = generateMockKeyPair();
|
|
99
|
+
|
|
100
|
+
// WHEN
|
|
101
|
+
const result = await isAccountOnboarded(keyPair.publicKeyHex);
|
|
102
|
+
|
|
103
|
+
// THEN
|
|
104
|
+
expect(result).toBe(false);
|
|
105
|
+
}, 15000);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
describe("buildOnboardAccount", () => {
|
|
109
|
+
it("should complete full onboarding flow with fresh keypair", async () => {
|
|
110
|
+
// GIVEN
|
|
111
|
+
const keyPair = generateMockKeyPair();
|
|
112
|
+
const mockSigner = createMockSigner(keyPair);
|
|
113
|
+
const mockSignerContext = jest.fn().mockImplementation((deviceId, callback) => {
|
|
114
|
+
return callback(mockSigner);
|
|
115
|
+
});
|
|
116
|
+
const onboardObservable = buildOnboardAccount(mockSignerContext);
|
|
117
|
+
|
|
118
|
+
// WHEN
|
|
119
|
+
const allValues = await firstValueFrom(
|
|
120
|
+
onboardObservable(mockDeviceId, mockDerivationPath).pipe(toArray()),
|
|
121
|
+
);
|
|
122
|
+
const progressValues = allValues.filter(
|
|
123
|
+
(value): value is CantonOnboardProgress => "status" in value && !("partyId" in value),
|
|
124
|
+
);
|
|
125
|
+
const resultValues = allValues.filter(
|
|
126
|
+
(value): value is CantonOnboardResult => "partyId" in value,
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
// THEN
|
|
130
|
+
// Check expected status progression
|
|
131
|
+
expect(progressValues.some(p => p.status === OnboardStatus.INIT)).toBe(true);
|
|
132
|
+
expect(progressValues.some(p => p.status === OnboardStatus.PREPARE)).toBe(true);
|
|
133
|
+
expect(progressValues.some(p => p.status === OnboardStatus.SIGN)).toBe(true);
|
|
134
|
+
expect(progressValues.some(p => p.status === OnboardStatus.SUBMIT)).toBe(true);
|
|
135
|
+
|
|
136
|
+
// Check final result
|
|
137
|
+
expect(resultValues.length).toBeGreaterThan(0);
|
|
138
|
+
const finalResult = resultValues[resultValues.length - 1];
|
|
139
|
+
expect(finalResult.partyId).toBeDefined();
|
|
140
|
+
expect(typeof finalResult.partyId).toBe("string");
|
|
141
|
+
|
|
142
|
+
expect(mockSignerContext).toHaveBeenCalled();
|
|
143
|
+
}, 30000);
|
|
144
|
+
|
|
145
|
+
it("should complete full onboarding flow with already onboarded account", async () => {
|
|
146
|
+
// GIVEN
|
|
147
|
+
const { keyPair, mockSignerContext, onboardResult: firstResult } = getOnboardedAccount();
|
|
148
|
+
const secondOnboardObservable = buildOnboardAccount(mockSignerContext);
|
|
149
|
+
|
|
150
|
+
// WHEN
|
|
151
|
+
const secondOnboardValues = await firstValueFrom(
|
|
152
|
+
secondOnboardObservable(mockDeviceId, mockDerivationPath).pipe(toArray()),
|
|
153
|
+
);
|
|
154
|
+
const secondResult = secondOnboardValues.find(
|
|
155
|
+
(value): value is CantonOnboardResult => "partyId" in value,
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
// THEN
|
|
159
|
+
expect(secondResult).toBeDefined();
|
|
160
|
+
expect(secondResult!.partyId).toBe(firstResult.partyId);
|
|
161
|
+
expect(typeof secondResult!.partyId).toBe("string");
|
|
162
|
+
}, 30000);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
describe("buildAuthorizePreapproval", () => {
|
|
166
|
+
it("should complete preapproval flow for onboarded account", async () => {
|
|
167
|
+
// GIVEN
|
|
168
|
+
const { mockSignerContext, onboardResult } = getOnboardedAccount();
|
|
169
|
+
const preapprovalObservable = buildAuthorizePreapproval(mockSignerContext);
|
|
170
|
+
|
|
171
|
+
// WHEN
|
|
172
|
+
const preapprovalValues = await firstValueFrom(
|
|
173
|
+
preapprovalObservable(mockDeviceId, mockDerivationPath, onboardResult.partyId).pipe(
|
|
174
|
+
toArray(),
|
|
175
|
+
),
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
const progressValues = preapprovalValues.filter(
|
|
179
|
+
(value): value is CantonPreApprovalProgress =>
|
|
180
|
+
"status" in value && !("isApproved" in value),
|
|
181
|
+
);
|
|
182
|
+
const resultValues = preapprovalValues.filter(
|
|
183
|
+
(value): value is CantonPreApprovalResult => "isApproved" in value,
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
// THEN
|
|
187
|
+
// Check expected status progression
|
|
188
|
+
expect(progressValues.some(p => p.status === PreApprovalStatus.PREPARE)).toBe(true);
|
|
189
|
+
expect(progressValues.some(p => p.status === PreApprovalStatus.SIGN)).toBe(true);
|
|
190
|
+
expect(progressValues.some(p => p.status === PreApprovalStatus.SUBMIT)).toBe(true);
|
|
191
|
+
|
|
192
|
+
// Check final result (should be approved)
|
|
193
|
+
expect(resultValues.length).toBeGreaterThan(0);
|
|
194
|
+
const finalResult = resultValues[resultValues.length - 1];
|
|
195
|
+
expect(finalResult.isApproved).toBe(true);
|
|
196
|
+
expect(typeof finalResult.isApproved).toBe("boolean");
|
|
197
|
+
}, 30000);
|
|
198
|
+
|
|
199
|
+
it("should handle invalid party ID gracefully", async () => {
|
|
200
|
+
// GIVEN
|
|
201
|
+
const keyPair = generateMockKeyPair();
|
|
202
|
+
const mockSigner = createMockSigner(keyPair);
|
|
203
|
+
const mockSignerContext = jest.fn().mockImplementation((deviceId, callback) => {
|
|
204
|
+
return callback(mockSigner);
|
|
205
|
+
});
|
|
206
|
+
const preapprovalObservable = buildAuthorizePreapproval(mockSignerContext);
|
|
207
|
+
|
|
208
|
+
// WHEN & THEN
|
|
209
|
+
try {
|
|
210
|
+
await firstValueFrom(
|
|
211
|
+
preapprovalObservable(mockDeviceId, mockDerivationPath, "invalid-party-id-123"),
|
|
212
|
+
);
|
|
213
|
+
expect(true).toBe(true);
|
|
214
|
+
} catch (error) {
|
|
215
|
+
expect(error).toBeDefined();
|
|
216
|
+
}
|
|
217
|
+
}, 30000);
|
|
218
|
+
});
|
|
219
|
+
});
|