@ledgerhq/coin-casper 1.4.1 → 1.5.0-nightly.0
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/CHANGELOG.md +14 -0
- package/lib/api/index.d.ts.map +1 -1
- package/lib/api/index.js +81 -51
- package/lib/api/index.js.map +1 -1
- package/lib/api/index.unit.test.d.ts +2 -0
- package/lib/api/index.unit.test.d.ts.map +1 -0
- package/lib/api/index.unit.test.js +44 -0
- package/lib/api/index.unit.test.js.map +1 -0
- package/lib/api/types.d.ts +6 -1
- package/lib/api/types.d.ts.map +1 -1
- package/lib/bridge/broadcast.d.ts.map +1 -1
- package/lib/bridge/broadcast.js +5 -0
- package/lib/bridge/broadcast.js.map +1 -1
- package/lib-es/api/index.d.ts.map +1 -1
- package/lib-es/api/index.js +81 -51
- package/lib-es/api/index.js.map +1 -1
- package/lib-es/api/index.unit.test.d.ts +2 -0
- package/lib-es/api/index.unit.test.d.ts.map +1 -0
- package/lib-es/api/index.unit.test.js +42 -0
- package/lib-es/api/index.unit.test.js.map +1 -0
- package/lib-es/api/types.d.ts +6 -1
- package/lib-es/api/types.d.ts.map +1 -1
- package/lib-es/bridge/broadcast.d.ts.map +1 -1
- package/lib-es/bridge/broadcast.js +2 -0
- package/lib-es/bridge/broadcast.js.map +1 -1
- package/package.json +3 -3
- package/src/api/index.ts +94 -65
- package/src/api/index.unit.test.ts +51 -0
- package/src/api/types.ts +6 -1
- package/src/bridge/broadcast.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @ledgerhq/coin-casper
|
|
2
2
|
|
|
3
|
+
## 1.5.0-nightly.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#9472](https://github.com/LedgerHQ/ledger-live/pull/9472) [`9c4c82e`](https://github.com/LedgerHQ/ledger-live/commit/9c4c82e8e81aaadfc1132f0a25812be094e54453) Thanks [@KVNLS](https://github.com/KVNLS)! - Fix elliptic library version used
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [#9364](https://github.com/LedgerHQ/ledger-live/pull/9364) [`cb74786`](https://github.com/LedgerHQ/ledger-live/commit/cb74786fe27bfe894317965ddb2a11744a86eaef) Thanks [@lawRathod](https://github.com/lawRathod)! - Fixes error handling on casper api
|
|
12
|
+
|
|
13
|
+
- Updated dependencies [[`fa8b10c`](https://github.com/LedgerHQ/ledger-live/commit/fa8b10cac5603eedd7c2309d2bb544a7d2d1a1a8), [`5abde51`](https://github.com/LedgerHQ/ledger-live/commit/5abde5192d32f493ece2f99aec0e2de0c411f9e5), [`cc00249`](https://github.com/LedgerHQ/ledger-live/commit/cc002495f3e107aba283a3aa4abca90954de6d76), [`c15d7ea`](https://github.com/LedgerHQ/ledger-live/commit/c15d7ea48e41168726a90a17809175aee5bfa940), [`b8fca38`](https://github.com/LedgerHQ/ledger-live/commit/b8fca386fa07cf393109a1928e92dfc790f9c286)]:
|
|
14
|
+
- @ledgerhq/types-live@6.63.0-nightly.0
|
|
15
|
+
- @ledgerhq/coin-framework@2.3.0-nightly.0
|
|
16
|
+
|
|
3
17
|
## 1.4.1
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/lib/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EAEzB,eAAe,EACf,eAAe,EAEf,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAgB,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AA2EjE,eAAO,MAAM,qBAAqB,cACrB,MAAM,KAChB,QAAQ;IACT,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAiCA,CAAC;AAEF,eAAO,MAAM,YAAY,cAAqB,MAAM,KAAG,QAAQ,eAAe,CAmB7E,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAa,QAAQ,sBAAsB,CAUzE,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAgB,MAAM,KAAG,QAAQ,eAAe,EAAE,CAkBtE,CAAC;AAEF,eAAO,MAAM,WAAW,WACd,WAAW,MAAM,KACxB,QAAQ,yBAAyB,CASnC,CAAC"}
|
package/lib/api/index.js
CHANGED
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.broadcastTx = exports.fetchTxs = exports.fetchNetworkStatus = exports.fetchBalance = exports.fetchAccountStateInfo = void 0;
|
|
7
7
|
const logs_1 = require("@ledgerhq/logs");
|
|
8
|
-
const
|
|
8
|
+
const live_network_1 = __importDefault(require("@ledgerhq/live-network"));
|
|
9
9
|
const casper_js_sdk_1 = require("casper-js-sdk");
|
|
10
10
|
const live_env_1 = require("@ledgerhq/live-env");
|
|
11
11
|
const getCasperIndexerURL = (path) => {
|
|
@@ -22,63 +22,84 @@ const getCasperNodeURL = () => {
|
|
|
22
22
|
};
|
|
23
23
|
const casperIndexerWrapper = async (path) => {
|
|
24
24
|
const url = getCasperIndexerURL(path);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const opts = {
|
|
25
|
+
try {
|
|
26
|
+
const rawResponse = await (0, live_network_1.default)({
|
|
28
27
|
method: "GET",
|
|
29
|
-
url
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
url,
|
|
29
|
+
});
|
|
30
|
+
(0, logs_1.log)("http", url);
|
|
31
|
+
const { data, status } = rawResponse;
|
|
32
|
+
if (status >= 300) {
|
|
33
|
+
(0, logs_1.log)("http", url, data);
|
|
34
|
+
}
|
|
34
35
|
return data;
|
|
35
|
-
};
|
|
36
|
-
let page = 1;
|
|
37
|
-
const res = [];
|
|
38
|
-
const data = await getResponse(page);
|
|
39
|
-
const { pageCount } = data;
|
|
40
|
-
res.push(...data.data);
|
|
41
|
-
while (page <= pageCount) {
|
|
42
|
-
page++;
|
|
43
|
-
const data = await getResponse(page);
|
|
44
|
-
res.push(...data.data);
|
|
45
36
|
}
|
|
46
|
-
(
|
|
47
|
-
|
|
37
|
+
catch (error) {
|
|
38
|
+
(0, logs_1.log)("error", "Casper indexer error: ", error);
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
48
41
|
};
|
|
49
42
|
const casperNodeWrapper = async (payload) => {
|
|
50
43
|
const url = getCasperNodeURL();
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
44
|
+
try {
|
|
45
|
+
const rawResponse = await (0, live_network_1.default)({
|
|
46
|
+
method: "POST",
|
|
47
|
+
url,
|
|
48
|
+
data: payload,
|
|
49
|
+
});
|
|
50
|
+
(0, logs_1.log)("http", `${url} - ${payload.method}`);
|
|
51
|
+
const { data, status } = rawResponse;
|
|
52
|
+
if (status >= 300) {
|
|
53
|
+
(0, logs_1.log)("http", `${url} - Status: ${status}`, data);
|
|
54
|
+
throw new Error(`HTTP error: ${status}`);
|
|
55
|
+
}
|
|
56
|
+
if (data.error) {
|
|
57
|
+
const errorMessage = data.error.message + ". " + data.error.data || "Unknown error";
|
|
58
|
+
(0, logs_1.log)("http", `${payload.method} - ${errorMessage}`);
|
|
59
|
+
throw new Error(`Casper node error: ${errorMessage}`);
|
|
60
|
+
}
|
|
61
|
+
if (!data.result) {
|
|
62
|
+
throw new Error(`Casper node returned no result for method: ${payload.method}`);
|
|
63
|
+
}
|
|
64
|
+
return data.result;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
(0, logs_1.log)("error", `Failed to execute ${payload.method}`, error);
|
|
68
|
+
throw error instanceof Error
|
|
69
|
+
? error
|
|
70
|
+
: new Error(`Unknown error during Casper node request: ${String(error)}`);
|
|
71
|
+
}
|
|
62
72
|
};
|
|
63
73
|
const fetchAccountStateInfo = async (publicKey) => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
try {
|
|
75
|
+
const accountStateInfo = await casperNodeWrapper({
|
|
76
|
+
jsonrpc: "2.0",
|
|
77
|
+
method: "state_get_account_info",
|
|
78
|
+
params: {
|
|
79
|
+
public_key: publicKey,
|
|
80
|
+
},
|
|
81
|
+
id: 1,
|
|
82
|
+
});
|
|
83
|
+
if (!accountStateInfo) {
|
|
84
|
+
return {
|
|
85
|
+
purseUref: undefined,
|
|
86
|
+
accountHash: undefined,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const accountHash = accountStateInfo.account.account_hash.split("-")[2];
|
|
90
|
+
const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
|
|
91
|
+
const uRef = new casper_js_sdk_1.CLURef(Buffer.from(purseURefString, "hex"), casper_js_sdk_1.AccessRights.READ_ADD_WRITE);
|
|
92
|
+
return { purseUref: uRef, accountHash };
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (error instanceof Error && error.message.includes("ValueNotFound")) {
|
|
96
|
+
return {
|
|
97
|
+
purseUref: undefined,
|
|
98
|
+
accountHash: undefined,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
throw error;
|
|
77
102
|
}
|
|
78
|
-
const accountHash = accountStateInfo.account.account_hash.split("-")[2];
|
|
79
|
-
const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
|
|
80
|
-
const uRef = new casper_js_sdk_1.CLURef(Buffer.from(purseURefString, "hex"), casper_js_sdk_1.AccessRights.READ_ADD_WRITE);
|
|
81
|
-
return { purseUref: uRef, accountHash };
|
|
82
103
|
};
|
|
83
104
|
exports.fetchAccountStateInfo = fetchAccountStateInfo;
|
|
84
105
|
const fetchBalance = async (purseUref) => {
|
|
@@ -112,8 +133,17 @@ const fetchNetworkStatus = async () => {
|
|
|
112
133
|
};
|
|
113
134
|
exports.fetchNetworkStatus = fetchNetworkStatus;
|
|
114
135
|
const fetchTxs = async (addr) => {
|
|
115
|
-
|
|
116
|
-
|
|
136
|
+
let page = 1;
|
|
137
|
+
let res = [];
|
|
138
|
+
const limit = 100;
|
|
139
|
+
let response = await casperIndexerWrapper(`/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`);
|
|
140
|
+
res = res.concat(response.data);
|
|
141
|
+
while (response.pageCount > page) {
|
|
142
|
+
page++;
|
|
143
|
+
response = await casperIndexerWrapper(`/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`);
|
|
144
|
+
res = res.concat(response.data);
|
|
145
|
+
}
|
|
146
|
+
return res;
|
|
117
147
|
};
|
|
118
148
|
exports.fetchTxs = fetchTxs;
|
|
119
149
|
const broadcastTx = async (deploy) => {
|
package/lib/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAqC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.unit.test.d.ts","sourceRoot":"","sources":["../../src/api/index.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const abandonseed_1 = require("@ledgerhq/cryptoassets/abandonseed");
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const pubkey = "0202664e3958608cd8dc2b80d4c73f18f76ef197f1cccca2f4f817c70bb050b248bd";
|
|
6
|
+
const pubkeyAbandon = (0, abandonseed_1.getAbandonSeedAddress)("casper");
|
|
7
|
+
describe("Casper API", () => {
|
|
8
|
+
it("should be able to fetch the network status", async () => {
|
|
9
|
+
const status = await (0, _1.fetchNetworkStatus)();
|
|
10
|
+
expect(status).toBeDefined();
|
|
11
|
+
});
|
|
12
|
+
it("shouldn't fetch account state info if account doesn't exist", async () => {
|
|
13
|
+
const accountStateInfo = await (0, _1.fetchAccountStateInfo)(pubkeyAbandon);
|
|
14
|
+
expect(accountStateInfo).toEqual({
|
|
15
|
+
purseUref: undefined,
|
|
16
|
+
accountHash: undefined,
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
it("should fetch account state info if account exists", async () => {
|
|
20
|
+
const accountStateInfo = await (0, _1.fetchAccountStateInfo)(pubkey);
|
|
21
|
+
expect(accountStateInfo.purseUref).toBeDefined();
|
|
22
|
+
expect(accountStateInfo.accountHash).toBeDefined();
|
|
23
|
+
});
|
|
24
|
+
it("should fetch balance", async () => {
|
|
25
|
+
const accountStateInfo = await (0, _1.fetchAccountStateInfo)(pubkey);
|
|
26
|
+
expect(accountStateInfo.purseUref).toBeDefined();
|
|
27
|
+
if (!accountStateInfo.purseUref) {
|
|
28
|
+
throw new Error("Purse Uref is undefined");
|
|
29
|
+
}
|
|
30
|
+
const balance = await (0, _1.fetchBalance)(accountStateInfo.purseUref);
|
|
31
|
+
expect(balance).toBeDefined();
|
|
32
|
+
});
|
|
33
|
+
it("should fetch txs", async () => {
|
|
34
|
+
const txs = await (0, _1.fetchTxs)(pubkey);
|
|
35
|
+
expect(txs).toBeDefined();
|
|
36
|
+
expect(txs.length).toBeGreaterThan(0);
|
|
37
|
+
});
|
|
38
|
+
it("should fetch txs for abandon seed address", async () => {
|
|
39
|
+
const txs = await (0, _1.fetchTxs)(pubkeyAbandon);
|
|
40
|
+
expect(txs).toBeDefined();
|
|
41
|
+
expect(txs.length).toBe(0);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=index.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.unit.test.js","sourceRoot":"","sources":["../../src/api/index.unit.test.ts"],"names":[],"mappings":";;AAAA,oEAA2E;AAC3E,wBAAsF;AAEtF,MAAM,MAAM,GAAG,sEAAsE,CAAC;AACtF,MAAM,aAAa,GAAG,IAAA,mCAAqB,EAAC,QAAQ,CAAC,CAAC;AAEtD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAkB,GAAE,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,gBAAgB,GAAG,MAAM,IAAA,wBAAqB,EAAC,aAAa,CAAC,CAAC;QACpE,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;YAC/B,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,gBAAgB,GAAG,MAAM,IAAA,wBAAqB,EAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,gBAAgB,GAAG,MAAM,IAAA,wBAAqB,EAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAA,eAAY,EAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,IAAA,WAAQ,EAAC,MAAM,CAAC,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,GAAG,GAAG,MAAM,IAAA,WAAQ,EAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/lib/api/types.d.ts
CHANGED
|
@@ -48,7 +48,12 @@ export interface ITxnHistoryData {
|
|
|
48
48
|
export interface NodeResponseRoot<T> {
|
|
49
49
|
jsonrpc: string;
|
|
50
50
|
id: string;
|
|
51
|
-
result
|
|
51
|
+
result?: T;
|
|
52
|
+
error?: {
|
|
53
|
+
code: number;
|
|
54
|
+
message: string;
|
|
55
|
+
data: string;
|
|
56
|
+
};
|
|
52
57
|
}
|
|
53
58
|
export interface NNetworkStatusResponse {
|
|
54
59
|
api_version: string;
|
package/lib/api/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EACF,iBAAiB,GACjB,2BAA2B,GAC3B,wBAAwB,GACxB,mBAAmB,GACnB,oBAAoB,CAAC;IACzB,MAAM,EAAE,GAAG,CAAC;IACZ,EAAE,EAAE,CAAC,CAAC;CACP;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,qBAAqB,CAAC,EAAE,GAAG,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACJ,EAAE,EAAE;YACF,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE;gBACP,MAAM,EAAE,MAAM,CAAC;aAChB,CAAC;SACH,CAAC;QACF,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EACH;gBACE,SAAS,EAAE,MAAM,CAAC;aACnB,GACD,MAAM,CAAC;SACZ,CAAC;KACH,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAY7D,CAAC"}
|
package/lib/bridge/broadcast.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.broadcast = void 0;
|
|
4
7
|
const casper_js_sdk_1 = require("casper-js-sdk");
|
|
5
8
|
const operation_1 = require("@ledgerhq/coin-framework/operation");
|
|
6
9
|
const api_1 = require("../api");
|
|
10
|
+
const invariant_1 = __importDefault(require("invariant"));
|
|
7
11
|
const broadcast = async ({ signedOperation: { signature, operation }, }) => {
|
|
8
12
|
const tx = casper_js_sdk_1.DeployUtil.deployFromJson(JSON.parse(signature)).unwrap();
|
|
9
13
|
const resp = await (0, api_1.broadcastTx)(tx);
|
|
14
|
+
(0, invariant_1.default)(resp.deploy_hash, "casper: failed to broadcast transaction and get deploy hash");
|
|
10
15
|
const { deploy_hash } = resp;
|
|
11
16
|
const result = (0, operation_1.patchOperationWithHash)(operation, deploy_hash);
|
|
12
17
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":";;;;;;AAAA,iDAA2C;AAE3C,kEAA4E;AAE5E,gCAAqC;AACrC,0DAAkC;AAE3B,MAAM,SAAS,GAA4C,KAAK,EAAE,EACvE,eAAe,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAC1C,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,0BAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAW,EAAC,EAAE,CAAC,CAAC;IACnC,IAAA,mBAAS,EAAC,IAAI,CAAC,WAAW,EAAE,6DAA6D,CAAC,CAAC;IAC3F,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,MAAM,GAAG,IAAA,kCAAsB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAZW,QAAA,SAAS,aAYpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EAEzB,eAAe,EACf,eAAe,EAEf,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAgB,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AA2EjE,eAAO,MAAM,qBAAqB,cACrB,MAAM,KAChB,QAAQ;IACT,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAiCA,CAAC;AAEF,eAAO,MAAM,YAAY,cAAqB,MAAM,KAAG,QAAQ,eAAe,CAmB7E,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAa,QAAQ,sBAAsB,CAUzE,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAgB,MAAM,KAAG,QAAQ,eAAe,EAAE,CAkBtE,CAAC;AAEF,eAAO,MAAM,WAAW,WACd,WAAW,MAAM,KACxB,QAAQ,yBAAyB,CASnC,CAAC"}
|
package/lib-es/api/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { log } from "@ledgerhq/logs";
|
|
2
|
-
import network from "@ledgerhq/live-network
|
|
2
|
+
import network from "@ledgerhq/live-network";
|
|
3
3
|
import { AccessRights, CLURef, DeployUtil } from "casper-js-sdk";
|
|
4
4
|
import { getEnv } from "@ledgerhq/live-env";
|
|
5
5
|
const getCasperIndexerURL = (path) => {
|
|
@@ -16,63 +16,84 @@ const getCasperNodeURL = () => {
|
|
|
16
16
|
};
|
|
17
17
|
const casperIndexerWrapper = async (path) => {
|
|
18
18
|
const url = getCasperIndexerURL(path);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const opts = {
|
|
19
|
+
try {
|
|
20
|
+
const rawResponse = await network({
|
|
22
21
|
method: "GET",
|
|
23
|
-
url
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
url,
|
|
23
|
+
});
|
|
24
|
+
log("http", url);
|
|
25
|
+
const { data, status } = rawResponse;
|
|
26
|
+
if (status >= 300) {
|
|
27
|
+
log("http", url, data);
|
|
28
|
+
}
|
|
28
29
|
return data;
|
|
29
|
-
};
|
|
30
|
-
let page = 1;
|
|
31
|
-
const res = [];
|
|
32
|
-
const data = await getResponse(page);
|
|
33
|
-
const { pageCount } = data;
|
|
34
|
-
res.push(...data.data);
|
|
35
|
-
while (page <= pageCount) {
|
|
36
|
-
page++;
|
|
37
|
-
const data = await getResponse(page);
|
|
38
|
-
res.push(...data.data);
|
|
39
30
|
}
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
catch (error) {
|
|
32
|
+
log("error", "Casper indexer error: ", error);
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
42
35
|
};
|
|
43
36
|
const casperNodeWrapper = async (payload) => {
|
|
44
37
|
const url = getCasperNodeURL();
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
38
|
+
try {
|
|
39
|
+
const rawResponse = await network({
|
|
40
|
+
method: "POST",
|
|
41
|
+
url,
|
|
42
|
+
data: payload,
|
|
43
|
+
});
|
|
44
|
+
log("http", `${url} - ${payload.method}`);
|
|
45
|
+
const { data, status } = rawResponse;
|
|
46
|
+
if (status >= 300) {
|
|
47
|
+
log("http", `${url} - Status: ${status}`, data);
|
|
48
|
+
throw new Error(`HTTP error: ${status}`);
|
|
49
|
+
}
|
|
50
|
+
if (data.error) {
|
|
51
|
+
const errorMessage = data.error.message + ". " + data.error.data || "Unknown error";
|
|
52
|
+
log("http", `${payload.method} - ${errorMessage}`);
|
|
53
|
+
throw new Error(`Casper node error: ${errorMessage}`);
|
|
54
|
+
}
|
|
55
|
+
if (!data.result) {
|
|
56
|
+
throw new Error(`Casper node returned no result for method: ${payload.method}`);
|
|
57
|
+
}
|
|
58
|
+
return data.result;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
log("error", `Failed to execute ${payload.method}`, error);
|
|
62
|
+
throw error instanceof Error
|
|
63
|
+
? error
|
|
64
|
+
: new Error(`Unknown error during Casper node request: ${String(error)}`);
|
|
65
|
+
}
|
|
56
66
|
};
|
|
57
67
|
export const fetchAccountStateInfo = async (publicKey) => {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
try {
|
|
69
|
+
const accountStateInfo = await casperNodeWrapper({
|
|
70
|
+
jsonrpc: "2.0",
|
|
71
|
+
method: "state_get_account_info",
|
|
72
|
+
params: {
|
|
73
|
+
public_key: publicKey,
|
|
74
|
+
},
|
|
75
|
+
id: 1,
|
|
76
|
+
});
|
|
77
|
+
if (!accountStateInfo) {
|
|
78
|
+
return {
|
|
79
|
+
purseUref: undefined,
|
|
80
|
+
accountHash: undefined,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const accountHash = accountStateInfo.account.account_hash.split("-")[2];
|
|
84
|
+
const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
|
|
85
|
+
const uRef = new CLURef(Buffer.from(purseURefString, "hex"), AccessRights.READ_ADD_WRITE);
|
|
86
|
+
return { purseUref: uRef, accountHash };
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (error instanceof Error && error.message.includes("ValueNotFound")) {
|
|
90
|
+
return {
|
|
91
|
+
purseUref: undefined,
|
|
92
|
+
accountHash: undefined,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
throw error;
|
|
71
96
|
}
|
|
72
|
-
const accountHash = accountStateInfo.account.account_hash.split("-")[2];
|
|
73
|
-
const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
|
|
74
|
-
const uRef = new CLURef(Buffer.from(purseURefString, "hex"), AccessRights.READ_ADD_WRITE);
|
|
75
|
-
return { purseUref: uRef, accountHash };
|
|
76
97
|
};
|
|
77
98
|
export const fetchBalance = async (purseUref) => {
|
|
78
99
|
const stateRootInfo = await casperNodeWrapper({
|
|
@@ -103,8 +124,17 @@ export const fetchNetworkStatus = async () => {
|
|
|
103
124
|
return data;
|
|
104
125
|
};
|
|
105
126
|
export const fetchTxs = async (addr) => {
|
|
106
|
-
|
|
107
|
-
|
|
127
|
+
let page = 1;
|
|
128
|
+
let res = [];
|
|
129
|
+
const limit = 100;
|
|
130
|
+
let response = await casperIndexerWrapper(`/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`);
|
|
131
|
+
res = res.concat(response.data);
|
|
132
|
+
while (response.pageCount > page) {
|
|
133
|
+
page++;
|
|
134
|
+
response = await casperIndexerWrapper(`/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`);
|
|
135
|
+
res = res.concat(response.data);
|
|
136
|
+
}
|
|
137
|
+
return res;
|
|
108
138
|
};
|
|
109
139
|
export const broadcastTx = async (deploy) => {
|
|
110
140
|
const response = await casperNodeWrapper({
|
package/lib-es/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.unit.test.d.ts","sourceRoot":"","sources":["../../src/api/index.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getAbandonSeedAddress } from "@ledgerhq/cryptoassets/abandonseed";
|
|
2
|
+
import { fetchAccountStateInfo, fetchBalance, fetchNetworkStatus, fetchTxs } from ".";
|
|
3
|
+
const pubkey = "0202664e3958608cd8dc2b80d4c73f18f76ef197f1cccca2f4f817c70bb050b248bd";
|
|
4
|
+
const pubkeyAbandon = getAbandonSeedAddress("casper");
|
|
5
|
+
describe("Casper API", () => {
|
|
6
|
+
it("should be able to fetch the network status", async () => {
|
|
7
|
+
const status = await fetchNetworkStatus();
|
|
8
|
+
expect(status).toBeDefined();
|
|
9
|
+
});
|
|
10
|
+
it("shouldn't fetch account state info if account doesn't exist", async () => {
|
|
11
|
+
const accountStateInfo = await fetchAccountStateInfo(pubkeyAbandon);
|
|
12
|
+
expect(accountStateInfo).toEqual({
|
|
13
|
+
purseUref: undefined,
|
|
14
|
+
accountHash: undefined,
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
it("should fetch account state info if account exists", async () => {
|
|
18
|
+
const accountStateInfo = await fetchAccountStateInfo(pubkey);
|
|
19
|
+
expect(accountStateInfo.purseUref).toBeDefined();
|
|
20
|
+
expect(accountStateInfo.accountHash).toBeDefined();
|
|
21
|
+
});
|
|
22
|
+
it("should fetch balance", async () => {
|
|
23
|
+
const accountStateInfo = await fetchAccountStateInfo(pubkey);
|
|
24
|
+
expect(accountStateInfo.purseUref).toBeDefined();
|
|
25
|
+
if (!accountStateInfo.purseUref) {
|
|
26
|
+
throw new Error("Purse Uref is undefined");
|
|
27
|
+
}
|
|
28
|
+
const balance = await fetchBalance(accountStateInfo.purseUref);
|
|
29
|
+
expect(balance).toBeDefined();
|
|
30
|
+
});
|
|
31
|
+
it("should fetch txs", async () => {
|
|
32
|
+
const txs = await fetchTxs(pubkey);
|
|
33
|
+
expect(txs).toBeDefined();
|
|
34
|
+
expect(txs.length).toBeGreaterThan(0);
|
|
35
|
+
});
|
|
36
|
+
it("should fetch txs for abandon seed address", async () => {
|
|
37
|
+
const txs = await fetchTxs(pubkeyAbandon);
|
|
38
|
+
expect(txs).toBeDefined();
|
|
39
|
+
expect(txs.length).toBe(0);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=index.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.unit.test.js","sourceRoot":"","sources":["../../src/api/index.unit.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC;AAEtF,MAAM,MAAM,GAAG,sEAAsE,CAAC;AACtF,MAAM,aAAa,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAEtD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;QACpE,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;YAC/B,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/lib-es/api/types.d.ts
CHANGED
|
@@ -48,7 +48,12 @@ export interface ITxnHistoryData {
|
|
|
48
48
|
export interface NodeResponseRoot<T> {
|
|
49
49
|
jsonrpc: string;
|
|
50
50
|
id: string;
|
|
51
|
-
result
|
|
51
|
+
result?: T;
|
|
52
|
+
error?: {
|
|
53
|
+
code: number;
|
|
54
|
+
message: string;
|
|
55
|
+
data: string;
|
|
56
|
+
};
|
|
52
57
|
}
|
|
53
58
|
export interface NNetworkStatusResponse {
|
|
54
59
|
api_version: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EACF,iBAAiB,GACjB,2BAA2B,GAC3B,wBAAwB,GACxB,mBAAmB,GACnB,oBAAoB,CAAC;IACzB,MAAM,EAAE,GAAG,CAAC;IACZ,EAAE,EAAE,CAAC,CAAC;CACP;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,qBAAqB,CAAC,EAAE,GAAG,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACJ,EAAE,EAAE;YACF,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE;gBACP,MAAM,EAAE,MAAM,CAAC;aAChB,CAAC;SACH,CAAC;QACF,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EACH;gBACE,SAAS,EAAE,MAAM,CAAC;aACnB,GACD,MAAM,CAAC;SACZ,CAAC;KACH,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAY7D,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { DeployUtil } from "casper-js-sdk";
|
|
2
2
|
import { patchOperationWithHash } from "@ledgerhq/coin-framework/operation";
|
|
3
3
|
import { broadcastTx } from "../api";
|
|
4
|
+
import invariant from "invariant";
|
|
4
5
|
export const broadcast = async ({ signedOperation: { signature, operation }, }) => {
|
|
5
6
|
const tx = DeployUtil.deployFromJson(JSON.parse(signature)).unwrap();
|
|
6
7
|
const resp = await broadcastTx(tx);
|
|
8
|
+
invariant(resp.deploy_hash, "casper: failed to broadcast transaction and get deploy hash");
|
|
7
9
|
const { deploy_hash } = resp;
|
|
8
10
|
const result = patchOperationWithHash(operation, deploy_hash);
|
|
9
11
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,SAAS,GAA4C,KAAK,EAAE,EACvE,eAAe,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAC1C,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,6DAA6D,CAAC,CAAC;IAC3F,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/coin-casper",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0-nightly.0",
|
|
4
4
|
"description": "Ledger Casper integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger",
|
|
@@ -91,14 +91,14 @@
|
|
|
91
91
|
"casper-js-sdk": "^2.15.4",
|
|
92
92
|
"blakejs": "^1.2.1",
|
|
93
93
|
"rxjs": "^7.8.1",
|
|
94
|
+
"@ledgerhq/coin-framework": "^2.3.0-nightly.0",
|
|
94
95
|
"@ledgerhq/cryptoassets": "^13.13.0",
|
|
95
|
-
"@ledgerhq/coin-framework": "^2.2.0",
|
|
96
96
|
"@ledgerhq/devices": "8.4.4",
|
|
97
97
|
"@ledgerhq/errors": "^6.19.1",
|
|
98
98
|
"@ledgerhq/live-env": "^2.6.0",
|
|
99
99
|
"@ledgerhq/live-network": "^2.0.5",
|
|
100
100
|
"@ledgerhq/logs": "^6.12.0",
|
|
101
|
-
"@ledgerhq/types-live": "^6.
|
|
101
|
+
"@ledgerhq/types-live": "^6.63.0-nightly.0"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
104
|
"@types/invariant": "^2.2.2",
|
package/src/api/index.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { log } from "@ledgerhq/logs";
|
|
2
|
-
import { AxiosRequestConfig, AxiosResponse } from "axios";
|
|
3
2
|
|
|
4
3
|
import {
|
|
5
4
|
NDeployMessagePutResponse,
|
|
@@ -13,7 +12,7 @@ import {
|
|
|
13
12
|
NStateRootHashResponse,
|
|
14
13
|
} from "./types";
|
|
15
14
|
|
|
16
|
-
import network from "@ledgerhq/live-network
|
|
15
|
+
import network from "@ledgerhq/live-network";
|
|
17
16
|
import { AccessRights, CLURef, DeployUtil } from "casper-js-sdk";
|
|
18
17
|
import { getEnv } from "@ledgerhq/live-env";
|
|
19
18
|
|
|
@@ -33,53 +32,60 @@ const getCasperNodeURL = (): string => {
|
|
|
33
32
|
|
|
34
33
|
const casperIndexerWrapper = async <T>(path: string) => {
|
|
35
34
|
const url = getCasperIndexerURL(path);
|
|
36
|
-
const getResponse = async (page: number) => {
|
|
37
|
-
// We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
|
|
38
|
-
const opts: AxiosRequestConfig = {
|
|
39
|
-
method: "GET",
|
|
40
|
-
url: `${url}?limit=100&page=${page}`,
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const rawResponse = await network(opts);
|
|
44
|
-
// We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
|
|
45
|
-
const { data } = rawResponse as AxiosResponse<IndexerResponseRoot<T>>;
|
|
46
35
|
|
|
36
|
+
try {
|
|
37
|
+
const rawResponse = await network<IndexerResponseRoot<T>>({
|
|
38
|
+
method: "GET",
|
|
39
|
+
url,
|
|
40
|
+
});
|
|
41
|
+
log("http", url);
|
|
42
|
+
|
|
43
|
+
const { data, status } = rawResponse;
|
|
44
|
+
if (status >= 300) {
|
|
45
|
+
log("http", url, data);
|
|
46
|
+
}
|
|
47
47
|
return data;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const res: T[] = [];
|
|
52
|
-
|
|
53
|
-
const data = await getResponse(page);
|
|
54
|
-
const { pageCount } = data;
|
|
55
|
-
res.push(...data.data);
|
|
56
|
-
|
|
57
|
-
while (page <= pageCount) {
|
|
58
|
-
page++;
|
|
59
|
-
const data = await getResponse(page);
|
|
60
|
-
res.push(...data.data);
|
|
48
|
+
} catch (error) {
|
|
49
|
+
log("error", "Casper indexer error: ", error);
|
|
50
|
+
throw error;
|
|
61
51
|
}
|
|
62
|
-
|
|
63
|
-
log("http", url);
|
|
64
|
-
return res;
|
|
65
52
|
};
|
|
66
53
|
|
|
67
54
|
const casperNodeWrapper = async <T>(payload: NodeRPCPayload) => {
|
|
68
55
|
const url = getCasperNodeURL();
|
|
69
56
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
57
|
+
try {
|
|
58
|
+
const rawResponse = await network<NodeResponseRoot<T>>({
|
|
59
|
+
method: "POST",
|
|
60
|
+
url,
|
|
61
|
+
data: payload,
|
|
62
|
+
});
|
|
63
|
+
log("http", `${url} - ${payload.method}`);
|
|
64
|
+
|
|
65
|
+
const { data, status } = rawResponse;
|
|
66
|
+
|
|
67
|
+
if (status >= 300) {
|
|
68
|
+
log("http", `${url} - Status: ${status}`, data);
|
|
69
|
+
throw new Error(`HTTP error: ${status}`);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (data.error) {
|
|
73
|
+
const errorMessage = data.error.message + ". " + data.error.data || "Unknown error";
|
|
74
|
+
log("http", `${payload.method} - ${errorMessage}`);
|
|
75
|
+
throw new Error(`Casper node error: ${errorMessage}`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (!data.result) {
|
|
79
|
+
throw new Error(`Casper node returned no result for method: ${payload.method}`);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return data.result;
|
|
83
|
+
} catch (error) {
|
|
84
|
+
log("error", `Failed to execute ${payload.method}`, error);
|
|
85
|
+
throw error instanceof Error
|
|
86
|
+
? error
|
|
87
|
+
: new Error(`Unknown error during Casper node request: ${String(error)}`);
|
|
88
|
+
}
|
|
83
89
|
};
|
|
84
90
|
|
|
85
91
|
export const fetchAccountStateInfo = async (
|
|
@@ -88,28 +94,38 @@ export const fetchAccountStateInfo = async (
|
|
|
88
94
|
purseUref: CLURef | undefined;
|
|
89
95
|
accountHash: string | undefined;
|
|
90
96
|
}> => {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
try {
|
|
98
|
+
const accountStateInfo = await casperNodeWrapper<NAccountInfo>({
|
|
99
|
+
jsonrpc: "2.0",
|
|
100
|
+
method: "state_get_account_info",
|
|
101
|
+
params: {
|
|
102
|
+
public_key: publicKey,
|
|
103
|
+
},
|
|
104
|
+
id: 1,
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
if (!accountStateInfo) {
|
|
108
|
+
return {
|
|
109
|
+
purseUref: undefined,
|
|
110
|
+
accountHash: undefined,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const accountHash = accountStateInfo.account.account_hash.split("-")[2];
|
|
115
|
+
const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
|
|
116
|
+
|
|
117
|
+
const uRef = new CLURef(Buffer.from(purseURefString, "hex"), AccessRights.READ_ADD_WRITE);
|
|
118
|
+
|
|
119
|
+
return { purseUref: uRef, accountHash };
|
|
120
|
+
} catch (error) {
|
|
121
|
+
if (error instanceof Error && error.message.includes("ValueNotFound")) {
|
|
122
|
+
return {
|
|
123
|
+
purseUref: undefined,
|
|
124
|
+
accountHash: undefined,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
throw error;
|
|
105
128
|
}
|
|
106
|
-
|
|
107
|
-
const accountHash = accountStateInfo.account.account_hash.split("-")[2];
|
|
108
|
-
const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
|
|
109
|
-
|
|
110
|
-
const uRef = new CLURef(Buffer.from(purseURefString, "hex"), AccessRights.READ_ADD_WRITE);
|
|
111
|
-
|
|
112
|
-
return { purseUref: uRef, accountHash };
|
|
113
129
|
};
|
|
114
130
|
|
|
115
131
|
export const fetchBalance = async (purseUref: CLURef): Promise<NAccountBalance> => {
|
|
@@ -146,10 +162,23 @@ export const fetchNetworkStatus = async (): Promise<NNetworkStatusResponse> => {
|
|
|
146
162
|
};
|
|
147
163
|
|
|
148
164
|
export const fetchTxs = async (addr: string): Promise<ITxnHistoryData[]> => {
|
|
149
|
-
|
|
150
|
-
|
|
165
|
+
let page = 1;
|
|
166
|
+
let res: ITxnHistoryData[] = [];
|
|
167
|
+
const limit = 100;
|
|
168
|
+
|
|
169
|
+
let response = await casperIndexerWrapper<ITxnHistoryData>(
|
|
170
|
+
`/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`,
|
|
151
171
|
);
|
|
152
|
-
|
|
172
|
+
res = res.concat(response.data);
|
|
173
|
+
|
|
174
|
+
while (response.pageCount > page) {
|
|
175
|
+
page++;
|
|
176
|
+
response = await casperIndexerWrapper<ITxnHistoryData>(
|
|
177
|
+
`/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`,
|
|
178
|
+
);
|
|
179
|
+
res = res.concat(response.data);
|
|
180
|
+
}
|
|
181
|
+
return res;
|
|
153
182
|
};
|
|
154
183
|
|
|
155
184
|
export const broadcastTx = async (
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { getAbandonSeedAddress } from "@ledgerhq/cryptoassets/abandonseed";
|
|
2
|
+
import { fetchAccountStateInfo, fetchBalance, fetchNetworkStatus, fetchTxs } from ".";
|
|
3
|
+
|
|
4
|
+
const pubkey = "0202664e3958608cd8dc2b80d4c73f18f76ef197f1cccca2f4f817c70bb050b248bd";
|
|
5
|
+
const pubkeyAbandon = getAbandonSeedAddress("casper");
|
|
6
|
+
|
|
7
|
+
describe("Casper API", () => {
|
|
8
|
+
it("should be able to fetch the network status", async () => {
|
|
9
|
+
const status = await fetchNetworkStatus();
|
|
10
|
+
expect(status).toBeDefined();
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it("shouldn't fetch account state info if account doesn't exist", async () => {
|
|
14
|
+
const accountStateInfo = await fetchAccountStateInfo(pubkeyAbandon);
|
|
15
|
+
expect(accountStateInfo).toEqual({
|
|
16
|
+
purseUref: undefined,
|
|
17
|
+
accountHash: undefined,
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it("should fetch account state info if account exists", async () => {
|
|
22
|
+
const accountStateInfo = await fetchAccountStateInfo(pubkey);
|
|
23
|
+
expect(accountStateInfo.purseUref).toBeDefined();
|
|
24
|
+
expect(accountStateInfo.accountHash).toBeDefined();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("should fetch balance", async () => {
|
|
28
|
+
const accountStateInfo = await fetchAccountStateInfo(pubkey);
|
|
29
|
+
|
|
30
|
+
expect(accountStateInfo.purseUref).toBeDefined();
|
|
31
|
+
if (!accountStateInfo.purseUref) {
|
|
32
|
+
throw new Error("Purse Uref is undefined");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const balance = await fetchBalance(accountStateInfo.purseUref);
|
|
36
|
+
expect(balance).toBeDefined();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("should fetch txs", async () => {
|
|
40
|
+
const txs = await fetchTxs(pubkey);
|
|
41
|
+
|
|
42
|
+
expect(txs).toBeDefined();
|
|
43
|
+
expect(txs.length).toBeGreaterThan(0);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("should fetch txs for abandon seed address", async () => {
|
|
47
|
+
const txs = await fetchTxs(pubkeyAbandon);
|
|
48
|
+
expect(txs).toBeDefined();
|
|
49
|
+
expect(txs.length).toBe(0);
|
|
50
|
+
});
|
|
51
|
+
});
|
package/src/api/types.ts
CHANGED
|
@@ -55,7 +55,12 @@ export interface ITxnHistoryData {
|
|
|
55
55
|
export interface NodeResponseRoot<T> {
|
|
56
56
|
jsonrpc: string;
|
|
57
57
|
id: string;
|
|
58
|
-
result
|
|
58
|
+
result?: T;
|
|
59
|
+
error?: {
|
|
60
|
+
code: number;
|
|
61
|
+
message: string;
|
|
62
|
+
data: string;
|
|
63
|
+
};
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
export interface NNetworkStatusResponse {
|
package/src/bridge/broadcast.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { AccountBridge } from "@ledgerhq/types-live";
|
|
|
3
3
|
import { patchOperationWithHash } from "@ledgerhq/coin-framework/operation";
|
|
4
4
|
import { Transaction } from "../types";
|
|
5
5
|
import { broadcastTx } from "../api";
|
|
6
|
+
import invariant from "invariant";
|
|
6
7
|
|
|
7
8
|
export const broadcast: AccountBridge<Transaction>["broadcast"] = async ({
|
|
8
9
|
signedOperation: { signature, operation },
|
|
@@ -10,6 +11,7 @@ export const broadcast: AccountBridge<Transaction>["broadcast"] = async ({
|
|
|
10
11
|
const tx = DeployUtil.deployFromJson(JSON.parse(signature)).unwrap();
|
|
11
12
|
|
|
12
13
|
const resp = await broadcastTx(tx);
|
|
14
|
+
invariant(resp.deploy_hash, "casper: failed to broadcast transaction and get deploy hash");
|
|
13
15
|
const { deploy_hash } = resp;
|
|
14
16
|
|
|
15
17
|
const result = patchOperationWithHash(operation, deploy_hash);
|