@ledgerhq/coin-canton 0.5.0-nightly.3 → 0.5.0-nightly.4
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 +12 -0
- package/lib/api/getBalance.integ.test.js +7 -3
- package/lib/api/getBalance.integ.test.js.map +1 -1
- package/lib/bridge/index.d.ts.map +1 -1
- package/lib/bridge/index.js +3 -0
- package/lib/bridge/index.js.map +1 -1
- package/lib/bridge/onboard.d.ts +4 -3
- package/lib/bridge/onboard.d.ts.map +1 -1
- package/lib/bridge/onboard.integ.test.js +2 -2
- package/lib/bridge/onboard.integ.test.js.map +1 -1
- package/lib/bridge/onboard.js +95 -35
- package/lib/bridge/onboard.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 +31 -0
- package/lib/bridge/serialization.js.map +1 -0
- package/lib/bridge/sync.d.ts +2 -1
- package/lib/bridge/sync.d.ts.map +1 -1
- package/lib/bridge/sync.integ.test.js +2 -2
- package/lib/bridge/sync.integ.test.js.map +1 -1
- package/lib/bridge/sync.js +20 -12
- package/lib/bridge/sync.js.map +1 -1
- package/lib/common-logic/transaction/estimateFees.d.ts.map +1 -1
- package/lib/common-logic/transaction/estimateFees.js +6 -1
- package/lib/common-logic/transaction/estimateFees.js.map +1 -1
- package/lib/config.d.ts +1 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js.map +1 -1
- package/lib/network/gateway.d.ts +5 -13
- package/lib/network/gateway.d.ts.map +1 -1
- package/lib/network/gateway.integ.test.js +2 -1
- package/lib/network/gateway.integ.test.js.map +1 -1
- package/lib/network/gateway.js +11 -4
- package/lib/network/gateway.js.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/types/bridge.d.ts +13 -1
- package/lib/types/bridge.d.ts.map +1 -1
- package/lib/types/onboard.d.ts +2 -0
- package/lib/types/onboard.d.ts.map +1 -1
- package/lib/types/onboard.js.map +1 -1
- package/lib/types/signer.d.ts +2 -1
- package/lib/types/signer.d.ts.map +1 -1
- package/lib-es/api/getBalance.integ.test.js +7 -3
- package/lib-es/api/getBalance.integ.test.js.map +1 -1
- package/lib-es/bridge/index.d.ts.map +1 -1
- package/lib-es/bridge/index.js +3 -0
- package/lib-es/bridge/index.js.map +1 -1
- package/lib-es/bridge/onboard.d.ts +4 -3
- package/lib-es/bridge/onboard.d.ts.map +1 -1
- package/lib-es/bridge/onboard.integ.test.js +2 -2
- package/lib-es/bridge/onboard.integ.test.js.map +1 -1
- package/lib-es/bridge/onboard.js +92 -35
- package/lib-es/bridge/onboard.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 +27 -0
- package/lib-es/bridge/serialization.js.map +1 -0
- package/lib-es/bridge/sync.d.ts +2 -1
- package/lib-es/bridge/sync.d.ts.map +1 -1
- package/lib-es/bridge/sync.integ.test.js +2 -2
- package/lib-es/bridge/sync.integ.test.js.map +1 -1
- package/lib-es/bridge/sync.js +21 -13
- package/lib-es/bridge/sync.js.map +1 -1
- package/lib-es/common-logic/transaction/estimateFees.d.ts.map +1 -1
- package/lib-es/common-logic/transaction/estimateFees.js +3 -1
- package/lib-es/common-logic/transaction/estimateFees.js.map +1 -1
- package/lib-es/config.d.ts +1 -0
- package/lib-es/config.d.ts.map +1 -1
- package/lib-es/config.js.map +1 -1
- package/lib-es/network/gateway.d.ts +5 -13
- package/lib-es/network/gateway.d.ts.map +1 -1
- package/lib-es/network/gateway.integ.test.js +2 -1
- package/lib-es/network/gateway.integ.test.js.map +1 -1
- package/lib-es/network/gateway.js +11 -4
- package/lib-es/network/gateway.js.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/types/bridge.d.ts +13 -1
- package/lib-es/types/bridge.d.ts.map +1 -1
- package/lib-es/types/onboard.d.ts +2 -0
- package/lib-es/types/onboard.d.ts.map +1 -1
- package/lib-es/types/onboard.js.map +1 -1
- package/lib-es/types/signer.d.ts +2 -1
- package/lib-es/types/signer.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/api/getBalance.integ.test.ts +7 -3
- package/src/bridge/index.ts +3 -0
- package/src/bridge/onboard.integ.test.ts +2 -2
- package/src/bridge/onboard.ts +120 -47
- package/src/bridge/serialization.ts +36 -0
- package/src/bridge/sync.integ.test.ts +2 -2
- package/src/bridge/sync.ts +27 -19
- package/src/common-logic/transaction/estimateFees.ts +5 -1
- package/src/config.ts +1 -0
- package/src/network/gateway.integ.test.ts +2 -1
- package/src/network/gateway.ts +17 -23
- package/src/signer/getAddress.ts +6 -4
- package/src/types/bridge.ts +16 -0
- package/src/types/onboard.ts +3 -0
- package/src/types/signer.ts +2 -1
|
@@ -3,6 +3,7 @@ import { getEnv } from "@ledgerhq/live-env";
|
|
|
3
3
|
import coinConfig from "../config";
|
|
4
4
|
const getGatewayUrl = () => coinConfig.getCoinConfig().gatewayUrl;
|
|
5
5
|
const getNodeId = () => coinConfig.getCoinConfig().nodeId || "ledger-devnet-stg";
|
|
6
|
+
const getNetworkType = () => coinConfig.getCoinConfig().networkType;
|
|
6
7
|
const gatewayNetwork = (req) => {
|
|
7
8
|
const API_KEY = getEnv("CANTON_API_KEY");
|
|
8
9
|
return network({
|
|
@@ -53,8 +54,7 @@ export async function submit(partyId, serialized, signature) {
|
|
|
53
54
|
export async function getBalance(partyId) {
|
|
54
55
|
const { data } = await gatewayNetwork({
|
|
55
56
|
method: "GET",
|
|
56
|
-
|
|
57
|
-
url: `${getGatewayUrl()}/v1/node/${getNodeId()}/party/${partyId.replace(/_/g, ":")}/balance`,
|
|
57
|
+
url: `${getGatewayUrl()}/v1/node/${getNodeId()}/party/${partyId}/balance`,
|
|
58
58
|
});
|
|
59
59
|
return data;
|
|
60
60
|
}
|
|
@@ -74,7 +74,7 @@ async function getParty(identifier, by) {
|
|
|
74
74
|
export async function getOperations(partyId, options) {
|
|
75
75
|
const { data } = await gatewayNetwork({
|
|
76
76
|
method: "GET",
|
|
77
|
-
url: `${getGatewayUrl()}/v1/node/${getNodeId()}/party/${partyId
|
|
77
|
+
url: `${getGatewayUrl()}/v1/node/${getNodeId()}/party/${partyId}/operations`,
|
|
78
78
|
params: options,
|
|
79
79
|
});
|
|
80
80
|
return data;
|
|
@@ -85,6 +85,13 @@ var TransactionType;
|
|
|
85
85
|
TransactionType["TRANSFER_PRE_APPROVAL_PROPOSAL"] = "transfer-pre-approval-proposal";
|
|
86
86
|
})(TransactionType || (TransactionType = {}));
|
|
87
87
|
export async function prepareTapRequest({ partyId, amount = 1000000, }) {
|
|
88
|
+
if (getNetworkType() === "mainnet") {
|
|
89
|
+
return {
|
|
90
|
+
serialized: "",
|
|
91
|
+
json: null,
|
|
92
|
+
hash: "",
|
|
93
|
+
};
|
|
94
|
+
}
|
|
88
95
|
const { data } = await gatewayNetwork({
|
|
89
96
|
method: "POST",
|
|
90
97
|
url: `${getGatewayUrl()}/v1/node/${getNodeId()}/party/${partyId}/transaction/prepare`,
|
|
@@ -107,7 +114,7 @@ export async function submitTapRequest({ partyId, serialized, signature, }) {
|
|
|
107
114
|
return data;
|
|
108
115
|
}
|
|
109
116
|
export async function prepareTransferRequest(partyId, params) {
|
|
110
|
-
const { data } = await
|
|
117
|
+
const { data } = await gatewayNetwork({
|
|
111
118
|
method: "POST",
|
|
112
119
|
url: `${getGatewayUrl()}/v1/node/${getNodeId()}/party/${partyId}/transaction/prepare`,
|
|
113
120
|
data: params,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/network/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,UAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/network/gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAddress.d.ts","sourceRoot":"","sources":["../../src/signer/getAddress.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mDAAmD,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"getAddress.d.ts","sourceRoot":"","sources":["../../src/signer/getAddress.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mDAAmD,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAiB,MAAM,UAAU,CAAC;AAEvD,QAAA,MAAM,UAAU,GAAI,eAAe,aAAa,CAAC,YAAY,CAAC,KAAG,YAYhE,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const getAddress = (signerContext) => {
|
|
2
|
-
return async (deviceId, { path }) => {
|
|
3
|
-
const { address, publicKey } = await signerContext(deviceId, signer => signer.getAddress(path));
|
|
2
|
+
return async (deviceId, { path, verify }) => {
|
|
3
|
+
const { address, publicKey } = await signerContext(deviceId, signer => signer.getAddress(path, verify));
|
|
4
4
|
return {
|
|
5
5
|
path,
|
|
6
6
|
address,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAddress.js","sourceRoot":"","sources":["../../src/signer/getAddress.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,GAAG,CAAC,aAA0C,EAAgB,EAAE;IAC9E,OAAO,KAAK,EAAE,QAAgB,EAAE,EAAE,IAAI,EAAqB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"getAddress.js","sourceRoot":"","sources":["../../src/signer/getAddress.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,GAAG,CAAC,aAA0C,EAAgB,EAAE;IAC9E,OAAO,KAAK,EAAE,QAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAqB,EAAE,EAAE;QACrE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CACpE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAChC,CAAC;QAEF,OAAO;YACL,IAAI;YACJ,OAAO;YACP,SAAS;SACc,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
package/lib-es/types/bridge.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BigNumber } from "bignumber.js";
|
|
2
2
|
import type { Observable } from "rxjs";
|
|
3
|
-
import type { CurrencyBridge, TransactionCommon, TransactionCommonRaw, TransactionStatusCommon, TransactionStatusCommonRaw } from "@ledgerhq/types-live";
|
|
3
|
+
import type { Account, AccountRaw, CurrencyBridge, TransactionCommon, TransactionCommonRaw, TransactionStatusCommon, TransactionStatusCommonRaw } from "@ledgerhq/types-live";
|
|
4
4
|
import type { CantonOnboardProgress, CantonOnboardResult, CantonPreApprovalProgress, CantonPreApprovalResult } from "./onboard";
|
|
5
5
|
export interface CantonCurrencyBridge extends CurrencyBridge {
|
|
6
6
|
onboardAccount: (deviceId: string, derivationPath: string) => Observable<CantonOnboardProgress | CantonOnboardResult>;
|
|
@@ -26,4 +26,16 @@ export type TransactionRaw = TransactionCommonRaw & {
|
|
|
26
26
|
};
|
|
27
27
|
export type TransactionStatus = TransactionStatusCommon;
|
|
28
28
|
export type TransactionStatusRaw = TransactionStatusCommonRaw;
|
|
29
|
+
export type CantonResources = {
|
|
30
|
+
partyId: string;
|
|
31
|
+
};
|
|
32
|
+
export type CantonResourcesRaw = {
|
|
33
|
+
partyId: string;
|
|
34
|
+
};
|
|
35
|
+
export type CantonAccount = Account & {
|
|
36
|
+
cantonResources?: CantonResources;
|
|
37
|
+
};
|
|
38
|
+
export type CantonAccountRaw = AccountRaw & {
|
|
39
|
+
cantonResources: CantonResourcesRaw;
|
|
40
|
+
};
|
|
29
41
|
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -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,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"}
|
|
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,OAAO,EACP,UAAU,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;AAE9D,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG;IAC1C,eAAe,EAAE,kBAAkB,CAAC;CACrC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Account } from "@ledgerhq/types-live";
|
|
1
2
|
export declare enum OnboardStatus {
|
|
2
3
|
INIT = 0,
|
|
3
4
|
PREPARE = 1,
|
|
@@ -19,6 +20,7 @@ export type CantonOnboardProgress = {
|
|
|
19
20
|
};
|
|
20
21
|
export type CantonOnboardResult = {
|
|
21
22
|
partyId: string;
|
|
23
|
+
account: Partial<Account>;
|
|
22
24
|
};
|
|
23
25
|
export type CantonPreApprovalProgress = {
|
|
24
26
|
status: PreApprovalStatus;
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/types/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,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;IAChB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3B,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/types/onboard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/types/onboard.ts"],"names":[],"mappings":"AAEA,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/lib-es/types/signer.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export type CantonAddress = {
|
|
2
2
|
publicKey: string;
|
|
3
3
|
address: string;
|
|
4
|
+
path: string;
|
|
4
5
|
};
|
|
5
6
|
export type CantonSignature = string;
|
|
6
7
|
export interface CantonSigner {
|
|
7
|
-
getAddress(path: string): Promise<CantonAddress>;
|
|
8
|
+
getAddress(path: string, display?: boolean): Promise<CantonAddress>;
|
|
8
9
|
signTransaction(path: string, rawTx: string): Promise<CantonSignature>;
|
|
9
10
|
}
|
|
10
11
|
//# sourceMappingURL=signer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/types/signer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/types/signer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACpE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACxE"}
|
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.4",
|
|
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.
|
|
104
|
+
"@ledgerhq/coin-framework": "^6.4.0-nightly.4",
|
|
105
105
|
"@ledgerhq/cryptoassets": "^13.28.0-nightly.2",
|
|
106
106
|
"@ledgerhq/devices": "8.5.1",
|
|
107
107
|
"@ledgerhq/errors": "^6.25.0",
|
|
108
108
|
"@ledgerhq/live-env": "^2.16.0-nightly.1",
|
|
109
109
|
"@ledgerhq/live-network": "^2.0.17-nightly.1",
|
|
110
|
-
"@ledgerhq/types-live": "^6.
|
|
110
|
+
"@ledgerhq/types-live": "^6.84.0-nightly.1"
|
|
111
111
|
},
|
|
112
112
|
"devDependencies": {
|
|
113
113
|
"@types/invariant": "^2.2.37",
|
|
@@ -19,9 +19,13 @@ describe("devnet", () => {
|
|
|
19
19
|
const balance = await api.getBalance(
|
|
20
20
|
"party-4f2e1485107adf5f::122027c6dbbbdbffe0fa3122ae05175f3b9328e879e9ce96b670354deb64a45683c1",
|
|
21
21
|
);
|
|
22
|
-
expect(balance.length).toBeGreaterThanOrEqual(
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
expect(balance.length).toBeGreaterThanOrEqual(0);
|
|
23
|
+
if (balance.length > 0) {
|
|
24
|
+
const nativeBalance = balance.find(b => b.asset.type === "native");
|
|
25
|
+
if (nativeBalance) {
|
|
26
|
+
expect(nativeBalance.value).toBeGreaterThanOrEqual(BigInt(0));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
25
29
|
});
|
|
26
30
|
});
|
|
27
31
|
});
|
package/src/bridge/index.ts
CHANGED
|
@@ -21,6 +21,7 @@ import { buildSignOperation } from "./signOperation";
|
|
|
21
21
|
import { getAccountShape } from "./sync";
|
|
22
22
|
import { updateTransaction } from "./updateTransaction";
|
|
23
23
|
import { buildOnboardAccount, buildAuthorizePreapproval } from "./onboard";
|
|
24
|
+
import { assignFromAccountRaw, assignToAccountRaw } from "./serialization";
|
|
24
25
|
|
|
25
26
|
export function createBridges(
|
|
26
27
|
signerContext: SignerContext<CantonSigner>,
|
|
@@ -62,6 +63,8 @@ export function createBridges(
|
|
|
62
63
|
sync,
|
|
63
64
|
receive,
|
|
64
65
|
signOperation,
|
|
66
|
+
assignToAccountRaw,
|
|
67
|
+
assignFromAccountRaw,
|
|
65
68
|
getSerializedAddressParameters,
|
|
66
69
|
};
|
|
67
70
|
|
|
@@ -90,7 +90,7 @@ describe("onboard (devnet)", () => {
|
|
|
90
90
|
const result = await isAccountOnboarded(keyPair.publicKeyHex);
|
|
91
91
|
|
|
92
92
|
// THEN
|
|
93
|
-
expect(result).
|
|
93
|
+
expect(result).toEqual({ isOnboarded: false });
|
|
94
94
|
}, 15000);
|
|
95
95
|
|
|
96
96
|
it("should handle errors gracefully when checking non-existent party", async () => {
|
|
@@ -101,7 +101,7 @@ describe("onboard (devnet)", () => {
|
|
|
101
101
|
const result = await isAccountOnboarded(keyPair.publicKeyHex);
|
|
102
102
|
|
|
103
103
|
// THEN
|
|
104
|
-
expect(result).
|
|
104
|
+
expect(result).toEqual({ isOnboarded: false });
|
|
105
105
|
}, 15000);
|
|
106
106
|
});
|
|
107
107
|
|
package/src/bridge/onboard.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { Observable } from "rxjs";
|
|
2
2
|
import { SignerContext } from "@ledgerhq/coin-framework/signer";
|
|
3
|
-
import {
|
|
3
|
+
import { emptyHistoryCache } from "@ledgerhq/coin-framework/account/index";
|
|
4
|
+
import { getDerivationModesForCurrency } from "@ledgerhq/coin-framework/derivation";
|
|
5
|
+
import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets/currencies";
|
|
6
|
+
import { getAccountShape } from "./sync";
|
|
7
|
+
import { CantonAccount, CantonSigner } from "../types";
|
|
8
|
+
import type { Account } from "@ledgerhq/types-live";
|
|
4
9
|
import {
|
|
5
10
|
prepareOnboarding,
|
|
6
11
|
submitOnboarding,
|
|
@@ -19,8 +24,9 @@ import {
|
|
|
19
24
|
CantonPreApprovalResult,
|
|
20
25
|
PrepareTransactionResponse,
|
|
21
26
|
} from "../types/onboard";
|
|
27
|
+
import resolver from "../signer";
|
|
22
28
|
|
|
23
|
-
async function
|
|
29
|
+
async function _getKeypair(
|
|
24
30
|
signerContext: SignerContext<CantonSigner>,
|
|
25
31
|
deviceId: string,
|
|
26
32
|
derivationPath: string,
|
|
@@ -31,20 +37,23 @@ async function getKeypair(
|
|
|
31
37
|
});
|
|
32
38
|
}
|
|
33
39
|
|
|
40
|
+
const currency = getCryptoCurrencyById("canton_network");
|
|
41
|
+
const derivationMode = getDerivationModesForCurrency(currency)[0];
|
|
42
|
+
|
|
34
43
|
export const isAccountOnboarded = async (
|
|
35
44
|
publicKey: string,
|
|
36
|
-
): Promise<
|
|
45
|
+
): Promise<{ isOnboarded: boolean; party_id?: string }> => {
|
|
37
46
|
try {
|
|
38
47
|
const { party_id } = await getPartyByPubKey(publicKey);
|
|
39
48
|
|
|
40
49
|
if (party_id) {
|
|
41
|
-
return { party_id };
|
|
50
|
+
return { isOnboarded: true, party_id };
|
|
42
51
|
} else {
|
|
43
|
-
return false;
|
|
52
|
+
return { isOnboarded: false };
|
|
44
53
|
}
|
|
45
54
|
} catch (err) {
|
|
46
55
|
log("[isAccountOnboarded] Error checking party status (likely not onboarded):", err);
|
|
47
|
-
return false;
|
|
56
|
+
return { isOnboarded: false };
|
|
48
57
|
}
|
|
49
58
|
};
|
|
50
59
|
|
|
@@ -59,22 +68,29 @@ export const buildOnboardAccount =
|
|
|
59
68
|
observer.next({
|
|
60
69
|
status: OnboardStatus.INIT,
|
|
61
70
|
});
|
|
62
|
-
const
|
|
71
|
+
const getAddress = resolver(signerContext);
|
|
72
|
+
const { address, publicKey } = await getAddress(deviceId, {
|
|
73
|
+
path: derivationPath,
|
|
74
|
+
currency,
|
|
75
|
+
derivationMode: derivationMode || "",
|
|
76
|
+
});
|
|
63
77
|
|
|
64
78
|
observer.next({
|
|
65
79
|
status: OnboardStatus.PREPARE,
|
|
66
80
|
});
|
|
67
81
|
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
82
|
+
const { party_id: partyId } = await isAccountOnboarded(publicKey);
|
|
83
|
+
if (partyId) {
|
|
84
|
+
const account = await createAccount({ address, derivationPath, partyId });
|
|
70
85
|
observer.next({
|
|
71
|
-
partyId
|
|
86
|
+
partyId,
|
|
87
|
+
account,
|
|
72
88
|
});
|
|
73
89
|
observer.complete();
|
|
74
90
|
return;
|
|
75
91
|
}
|
|
76
92
|
|
|
77
|
-
const preparedTransaction = await prepareOnboarding(
|
|
93
|
+
const preparedTransaction = await prepareOnboarding(publicKey, "ed25519");
|
|
78
94
|
|
|
79
95
|
observer.next({
|
|
80
96
|
status: OnboardStatus.SIGN,
|
|
@@ -89,26 +105,39 @@ export const buildOnboardAccount =
|
|
|
89
105
|
});
|
|
90
106
|
|
|
91
107
|
const result = await submitOnboarding(
|
|
92
|
-
{ public_key:
|
|
108
|
+
{ public_key: publicKey, public_key_type: "ed25519" },
|
|
93
109
|
preparedTransaction,
|
|
94
110
|
signature,
|
|
95
|
-
).catch(err => {
|
|
111
|
+
).catch(async err => {
|
|
96
112
|
if (err.type === "PARTY_ALREADY_EXISTS") {
|
|
113
|
+
const account = await createAccount({
|
|
114
|
+
address,
|
|
115
|
+
derivationPath,
|
|
116
|
+
partyId: preparedTransaction.party_id,
|
|
117
|
+
});
|
|
97
118
|
observer.next({
|
|
98
119
|
partyId: preparedTransaction.party_id,
|
|
120
|
+
account,
|
|
99
121
|
});
|
|
100
122
|
return observer.complete();
|
|
101
123
|
}
|
|
102
124
|
throw err;
|
|
103
125
|
});
|
|
104
126
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
127
|
+
if (result) {
|
|
128
|
+
observer.next({
|
|
129
|
+
status: OnboardStatus.SUCCESS,
|
|
130
|
+
});
|
|
131
|
+
const account = await createAccount({
|
|
132
|
+
address,
|
|
133
|
+
derivationPath,
|
|
134
|
+
partyId: result.party.party_id,
|
|
135
|
+
});
|
|
136
|
+
observer.next({
|
|
137
|
+
partyId: result.party.party_id,
|
|
138
|
+
account,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
112
141
|
|
|
113
142
|
observer.complete();
|
|
114
143
|
}
|
|
@@ -164,38 +193,35 @@ export const buildAuthorizePreapproval =
|
|
|
164
193
|
isApproved,
|
|
165
194
|
});
|
|
166
195
|
|
|
167
|
-
// TODO: remove after demo
|
|
168
196
|
const handleTapRequest = async () => {
|
|
169
197
|
try {
|
|
170
|
-
observer.next({
|
|
171
|
-
status: PreApprovalStatus.PREPARE,
|
|
172
|
-
});
|
|
173
|
-
|
|
174
198
|
const { serialized, hash } = await prepareTapRequest({
|
|
175
199
|
partyId,
|
|
176
200
|
});
|
|
177
201
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
202
|
+
if (serialized && hash) {
|
|
203
|
+
observer.next({
|
|
204
|
+
status: PreApprovalStatus.SIGN,
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
const signature = await signerContext(deviceId, signer =>
|
|
208
|
+
signer.signTransaction(derivationPath, hash),
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
observer.next({
|
|
212
|
+
status: PreApprovalStatus.SUBMIT,
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
await submitTapRequest({
|
|
216
|
+
partyId,
|
|
217
|
+
serialized,
|
|
218
|
+
signature,
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
observer.next({
|
|
222
|
+
status: PreApprovalStatus.SUCCESS,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
199
225
|
} catch (err) {
|
|
200
226
|
// Tap request failure should not break the pre-approval flow
|
|
201
227
|
}
|
|
@@ -214,7 +240,54 @@ export const buildAuthorizePreapproval =
|
|
|
214
240
|
);
|
|
215
241
|
});
|
|
216
242
|
|
|
217
|
-
const
|
|
243
|
+
const createAccount = async ({
|
|
244
|
+
address,
|
|
245
|
+
partyId,
|
|
246
|
+
derivationPath,
|
|
247
|
+
index = 0,
|
|
248
|
+
}: {
|
|
249
|
+
address: string;
|
|
250
|
+
derivationPath: string;
|
|
251
|
+
partyId: string;
|
|
252
|
+
index?: number;
|
|
253
|
+
}): Promise<Partial<Account>> => {
|
|
254
|
+
const accountShape = await getAccountShape(
|
|
255
|
+
{
|
|
256
|
+
address,
|
|
257
|
+
currency,
|
|
258
|
+
derivationMode,
|
|
259
|
+
derivationPath,
|
|
260
|
+
index,
|
|
261
|
+
rest: {
|
|
262
|
+
cantonResources: {
|
|
263
|
+
partyId,
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
{ paginationConfig: {} },
|
|
268
|
+
);
|
|
269
|
+
|
|
270
|
+
const account: Partial<CantonAccount> = {
|
|
271
|
+
...accountShape,
|
|
272
|
+
type: "Account",
|
|
273
|
+
xpub: partyId.replace(/:/g, "_"),
|
|
274
|
+
index,
|
|
275
|
+
// operations: [],
|
|
276
|
+
currency,
|
|
277
|
+
derivationMode,
|
|
278
|
+
lastSyncDate: new Date(),
|
|
279
|
+
pendingOperations: [],
|
|
280
|
+
seedIdentifier: address,
|
|
281
|
+
balanceHistoryCache: emptyHistoryCache,
|
|
282
|
+
cantonResources: {
|
|
283
|
+
partyId,
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
return account;
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
const log = (message: string, ...rest: unknown[]) => {
|
|
218
291
|
// eslint-disable-next-line no-console
|
|
219
292
|
console.log(message, ...rest);
|
|
220
293
|
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Account, AccountRaw } from "@ledgerhq/types-live";
|
|
2
|
+
import type {
|
|
3
|
+
CantonAccount,
|
|
4
|
+
CantonAccountRaw,
|
|
5
|
+
CantonResources,
|
|
6
|
+
CantonResourcesRaw,
|
|
7
|
+
} from "../types";
|
|
8
|
+
|
|
9
|
+
function toResourcesRaw(r: CantonResources): CantonResourcesRaw {
|
|
10
|
+
const { partyId } = r;
|
|
11
|
+
return {
|
|
12
|
+
partyId,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function fromResourcesRaw(r: CantonResourcesRaw): CantonResources {
|
|
16
|
+
const { partyId } = r;
|
|
17
|
+
return {
|
|
18
|
+
partyId,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function assignToAccountRaw(account: Account, accountRaw: AccountRaw): void {
|
|
23
|
+
const cantonAccount = account as CantonAccount;
|
|
24
|
+
const cantonAccountRaw = accountRaw as CantonAccountRaw;
|
|
25
|
+
if (cantonAccount.cantonResources) {
|
|
26
|
+
cantonAccountRaw.cantonResources = toResourcesRaw(cantonAccount.cantonResources);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function assignFromAccountRaw(accountRaw: AccountRaw, account: Account): void {
|
|
31
|
+
const cantonResourcesRaw = (accountRaw as CantonAccountRaw).cantonResources;
|
|
32
|
+
const cantonAccount = account as CantonAccount;
|
|
33
|
+
if (cantonResourcesRaw) {
|
|
34
|
+
cantonAccount.cantonResources = fromResourcesRaw(cantonResourcesRaw);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -110,7 +110,7 @@ describe("sync (devnet)", () => {
|
|
|
110
110
|
|
|
111
111
|
mockGetBalance.mockResolvedValue([
|
|
112
112
|
{
|
|
113
|
-
instrument_id: "
|
|
113
|
+
instrument_id: "Amulet",
|
|
114
114
|
amount: 1000000,
|
|
115
115
|
locked: true,
|
|
116
116
|
},
|
|
@@ -167,7 +167,7 @@ describe("sync (devnet)", () => {
|
|
|
167
167
|
const result = await getAccountShape(ACCOUNT_SHAPE_INFO, { paginationConfig: {} });
|
|
168
168
|
|
|
169
169
|
expect(result.operations).toBeDefined();
|
|
170
|
-
expect(result.operationsCount).
|
|
170
|
+
expect(result.operationsCount).toBeGreaterThanOrEqual(1);
|
|
171
171
|
|
|
172
172
|
expect(mockGetOperations).toHaveBeenCalledWith(TEST_ADDRESS, {
|
|
173
173
|
cursor: 0,
|