@ledgerhq/coin-internet_computer 1.9.0 → 1.9.1-nightly.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +16 -0
- package/lib/api/api.d.ts +6 -11
- package/lib/api/api.d.ts.map +1 -1
- package/lib/api/api.js +84 -64
- package/lib/api/api.js.map +1 -1
- package/lib/bridge/bridgeHelpers/account.d.ts.map +1 -1
- package/lib/bridge/bridgeHelpers/account.js +52 -33
- package/lib/bridge/bridgeHelpers/account.js.map +1 -1
- package/lib/bridge/bridgeHelpers/addresses.d.ts +0 -6
- package/lib/bridge/bridgeHelpers/addresses.d.ts.map +1 -1
- package/lib/bridge/bridgeHelpers/addresses.js +1 -29
- package/lib/bridge/bridgeHelpers/addresses.js.map +1 -1
- package/lib/bridge/broadcast.d.ts.map +1 -1
- package/lib/bridge/broadcast.js +22 -6
- package/lib/bridge/broadcast.js.map +1 -1
- package/lib/bridge/getTransactionStatus.d.ts.map +1 -1
- package/lib/bridge/getTransactionStatus.js +4 -3
- package/lib/bridge/getTransactionStatus.js.map +1 -1
- package/lib/bridge/prepareTransaction.d.ts.map +1 -1
- package/lib/bridge/prepareTransaction.js +2 -1
- package/lib/bridge/prepareTransaction.js.map +1 -1
- package/lib/bridge/signOperation.d.ts +2 -2
- package/lib/bridge/signOperation.d.ts.map +1 -1
- package/lib/bridge/signOperation.js +44 -13
- package/lib/bridge/signOperation.js.map +1 -1
- package/lib/consts.d.ts +2 -0
- package/lib/consts.d.ts.map +1 -1
- package/lib/consts.js +8 -1
- package/lib/consts.js.map +1 -1
- package/lib/hw-signMessage.d.ts.map +1 -1
- package/lib/hw-signMessage.js +1 -2
- package/lib/hw-signMessage.js.map +1 -1
- package/lib/types/signer.d.ts +1 -1
- package/lib/types/signer.d.ts.map +1 -1
- package/lib-es/api/api.d.ts +6 -11
- package/lib-es/api/api.d.ts.map +1 -1
- package/lib-es/api/api.js +81 -60
- package/lib-es/api/api.js.map +1 -1
- package/lib-es/bridge/bridgeHelpers/account.d.ts.map +1 -1
- package/lib-es/bridge/bridgeHelpers/account.js +52 -33
- package/lib-es/bridge/bridgeHelpers/account.js.map +1 -1
- package/lib-es/bridge/bridgeHelpers/addresses.d.ts +0 -6
- package/lib-es/bridge/bridgeHelpers/addresses.d.ts.map +1 -1
- package/lib-es/bridge/bridgeHelpers/addresses.js +0 -23
- package/lib-es/bridge/bridgeHelpers/addresses.js.map +1 -1
- package/lib-es/bridge/broadcast.d.ts.map +1 -1
- package/lib-es/bridge/broadcast.js +19 -6
- package/lib-es/bridge/broadcast.js.map +1 -1
- package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -1
- package/lib-es/bridge/getTransactionStatus.js +2 -1
- package/lib-es/bridge/getTransactionStatus.js.map +1 -1
- package/lib-es/bridge/prepareTransaction.d.ts.map +1 -1
- package/lib-es/bridge/prepareTransaction.js +2 -1
- package/lib-es/bridge/prepareTransaction.js.map +1 -1
- package/lib-es/bridge/signOperation.d.ts +2 -2
- package/lib-es/bridge/signOperation.d.ts.map +1 -1
- package/lib-es/bridge/signOperation.js +41 -13
- package/lib-es/bridge/signOperation.js.map +1 -1
- package/lib-es/consts.d.ts +2 -0
- package/lib-es/consts.d.ts.map +1 -1
- package/lib-es/consts.js +3 -0
- package/lib-es/consts.js.map +1 -1
- package/lib-es/hw-signMessage.d.ts.map +1 -1
- package/lib-es/hw-signMessage.js +1 -2
- package/lib-es/hw-signMessage.js.map +1 -1
- package/lib-es/types/signer.d.ts +1 -1
- package/lib-es/types/signer.d.ts.map +1 -1
- package/package.json +7 -13
- package/src/api/api.ts +126 -71
- package/src/bridge/bridgeHelpers/account.ts +70 -43
- package/src/bridge/bridgeHelpers/addresses.ts +0 -25
- package/src/bridge/broadcast.ts +31 -6
- package/src/bridge/getTransactionStatus.ts +2 -1
- package/src/bridge/prepareTransaction.ts +2 -1
- package/src/bridge/signOperation.ts +68 -18
- package/src/consts.ts +10 -0
- package/src/hw-signMessage.ts +1 -6
- package/src/types/signer.ts +1 -1
- package/lib/bridge/bridgeHelpers/icpRosetta/index.d.ts +0 -30
- package/lib/bridge/bridgeHelpers/icpRosetta/index.d.ts.map +0 -1
- package/lib/bridge/bridgeHelpers/icpRosetta/index.js +0 -88
- package/lib/bridge/bridgeHelpers/icpRosetta/index.js.map +0 -1
- package/lib/bridge/bridgeHelpers/icpRosetta/types.d.ts +0 -145
- package/lib/bridge/bridgeHelpers/icpRosetta/types.d.ts.map +0 -1
- package/lib/bridge/bridgeHelpers/icpRosetta/types.js +0 -3
- package/lib/bridge/bridgeHelpers/icpRosetta/types.js.map +0 -1
- package/lib/bridge/bridgeHelpers/icpRosetta/utils.d.ts +0 -17
- package/lib/bridge/bridgeHelpers/icpRosetta/utils.d.ts.map +0 -1
- package/lib/bridge/bridgeHelpers/icpRosetta/utils.js +0 -155
- package/lib/bridge/bridgeHelpers/icpRosetta/utils.js.map +0 -1
- package/lib-es/bridge/bridgeHelpers/icpRosetta/index.d.ts +0 -30
- package/lib-es/bridge/bridgeHelpers/icpRosetta/index.d.ts.map +0 -1
- package/lib-es/bridge/bridgeHelpers/icpRosetta/index.js +0 -76
- package/lib-es/bridge/bridgeHelpers/icpRosetta/index.js.map +0 -1
- package/lib-es/bridge/bridgeHelpers/icpRosetta/types.d.ts +0 -145
- package/lib-es/bridge/bridgeHelpers/icpRosetta/types.d.ts.map +0 -1
- package/lib-es/bridge/bridgeHelpers/icpRosetta/types.js +0 -2
- package/lib-es/bridge/bridgeHelpers/icpRosetta/types.js.map +0 -1
- package/lib-es/bridge/bridgeHelpers/icpRosetta/utils.d.ts +0 -17
- package/lib-es/bridge/bridgeHelpers/icpRosetta/utils.d.ts.map +0 -1
- package/lib-es/bridge/bridgeHelpers/icpRosetta/utils.js +0 -123
- package/lib-es/bridge/bridgeHelpers/icpRosetta/utils.js.map +0 -1
- package/src/bridge/bridgeHelpers/icpRosetta/index.ts +0 -154
- package/src/bridge/bridgeHelpers/icpRosetta/types.ts +0 -166
- package/src/bridge/bridgeHelpers/icpRosetta/utils.ts +0 -151
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/coin-internet_computer@1.9.0 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-internet_computer
|
|
2
|
+
> @ledgerhq/coin-internet_computer@1.9.1-nightly.0 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-internet_computer
|
|
3
3
|
> tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es
|
|
4
4
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @ledgerhq/coin-internet_computer
|
|
2
2
|
|
|
3
|
+
## 1.9.1-nightly.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`a731c4c`](https://github.com/LedgerHQ/ledger-live/commit/a731c4cd492a968eb7baa981fdd8aaddedd21f25)]:
|
|
8
|
+
- @ledgerhq/coin-framework@6.8.0-nightly.1
|
|
9
|
+
|
|
10
|
+
## 1.9.1-nightly.0
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- Updated dependencies [[`2c6a198`](https://github.com/LedgerHQ/ledger-live/commit/2c6a198ba28391695202a0787ce168c53768ff37)]:
|
|
15
|
+
- @ledgerhq/types-live@6.88.0-nightly.0
|
|
16
|
+
- @ledgerhq/coin-framework@6.7.1-nightly.0
|
|
17
|
+
- @ledgerhq/cryptoassets@13.31.1-nightly.0
|
|
18
|
+
|
|
3
19
|
## 1.9.0
|
|
4
20
|
|
|
5
21
|
### Minor Changes
|
package/lib/api/api.d.ts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
8
|
-
export declare const fetchBlockHeight: () => Promise<ICPRosettaBlockHeightResponse>;
|
|
9
|
-
export declare const fetchBalances: (accountId: string) => Promise<ICPRosettaGetBalancesResponse>;
|
|
10
|
-
export declare const fetchTxns: (accountId: string) => Promise<ICPRosettaGetTxnsHistoryResponse>;
|
|
11
|
-
export declare const constructionInvoke: <TRequest, TResponse>(opts: TRequest, method: string) => Promise<TResponse>;
|
|
1
|
+
import { TransactionWithId } from "@zondax/ledger-live-icp";
|
|
2
|
+
import BigNumber from "bignumber.js";
|
|
3
|
+
export declare const fetchBlockHeight: () => Promise<BigNumber>;
|
|
4
|
+
export declare const broadcastTxn: (payload: Buffer, canisterId: string, type: "call" | "read_state") => Promise<ArrayBuffer>;
|
|
5
|
+
export declare const fetchBalance: (address: string) => Promise<BigNumber>;
|
|
6
|
+
export declare const fetchTxns: (address: string, startBlockHeight: bigint, stopBlockHeight?: bigint) => Promise<TransactionWithId[]>;
|
|
12
7
|
//# sourceMappingURL=api.d.ts.map
|
package/lib/api/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":"AAQA,OAAO,EAQL,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,SAAS,MAAM,cAAc,CAAC;AAKrC,eAAO,MAAM,gBAAgB,QAAa,QAAQ,SAAS,CA0B1D,CAAC;AAEF,eAAO,MAAM,YAAY,YACd,MAAM,cACH,MAAM,QACZ,MAAM,GAAG,YAAY,yBAgB5B,CAAC;AAEF,eAAO,MAAM,YAAY,YAAmB,MAAM,KAAG,QAAQ,SAAS,CAuBrE,CAAC;AAEF,eAAO,MAAM,SAAS,YACX,MAAM,oBACG,MAAM,+BAEvB,QAAQ,iBAAiB,EAAE,CA6C7B,CAAC"}
|
package/lib/api/api.js
CHANGED
|
@@ -3,78 +3,98 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.fetchTxns = exports.fetchBalance = exports.broadcastTxn = exports.fetchBlockHeight = void 0;
|
|
7
7
|
const logs_1 = require("@ledgerhq/logs");
|
|
8
|
-
const live_env_1 = require("@ledgerhq/live-env");
|
|
9
|
-
const network_1 = __importDefault(require("@ledgerhq/live-network/network"));
|
|
10
8
|
const consts_1 = require("../consts");
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
};
|
|
17
|
-
const ICPFetchWrapper = async (path, body) => {
|
|
18
|
-
const url = getICPURL(path);
|
|
19
|
-
// 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
|
|
20
|
-
const opts = {
|
|
21
|
-
method: "POST",
|
|
22
|
-
data: body,
|
|
23
|
-
url,
|
|
24
|
-
};
|
|
25
|
-
const rawResponse = await (0, network_1.default)(opts);
|
|
26
|
-
if (rawResponse && rawResponse.data && rawResponse.data.details?.error_message) {
|
|
27
|
-
(0, logs_1.log)("error", rawResponse.data.details?.error_message);
|
|
28
|
-
}
|
|
29
|
-
// 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
|
|
30
|
-
const { data } = rawResponse;
|
|
31
|
-
(0, logs_1.log)("http", url);
|
|
32
|
-
return data;
|
|
33
|
-
};
|
|
34
|
-
const getICPRosettaNetworkIdentifier = () => {
|
|
35
|
-
return {
|
|
36
|
-
network_identifier: {
|
|
37
|
-
blockchain: consts_1.ICP_BLK_NAME_ROSETTA,
|
|
38
|
-
network: consts_1.ICP_NET_ID_ROSETTA,
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
exports.getICPRosettaNetworkIdentifier = getICPRosettaNetworkIdentifier;
|
|
9
|
+
const ledger_live_icp_1 = require("@zondax/ledger-live-icp");
|
|
10
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
11
|
+
const utils_1 = require("@zondax/ledger-live-icp/utils");
|
|
12
|
+
const agent_1 = require("@zondax/ledger-live-icp/agent");
|
|
13
|
+
const invariant_1 = __importDefault(require("invariant"));
|
|
43
14
|
const fetchBlockHeight = async () => {
|
|
44
|
-
const
|
|
45
|
-
|
|
15
|
+
const canisterId = ledger_live_icp_1.Principal.fromText(consts_1.MAINNET_LEDGER_CANISTER_ID);
|
|
16
|
+
const queryBlocksRawRequest = {
|
|
17
|
+
start: BigInt(0),
|
|
18
|
+
length: BigInt(1),
|
|
19
|
+
};
|
|
20
|
+
const queryBlocksIdlFunc = (0, ledger_live_icp_1.getCanisterIdlFunc)(ledger_live_icp_1.ledgerIdlFactory, "query_blocks");
|
|
21
|
+
const queryBlocksargs = (0, ledger_live_icp_1.encodeCanisterIdlFunc)(queryBlocksIdlFunc, [queryBlocksRawRequest]);
|
|
22
|
+
const agent = await (0, agent_1.getAgent)(consts_1.ICP_NETWORK_URL);
|
|
23
|
+
const blockHeightRes = await agent.query(canisterId, {
|
|
24
|
+
arg: queryBlocksargs,
|
|
25
|
+
methodName: "query_blocks",
|
|
26
|
+
});
|
|
27
|
+
(0, invariant_1.default)(blockHeightRes.status === "replied", "[ICP](fetchBlockHeight) Query failed");
|
|
28
|
+
const decodedIdl = (0, ledger_live_icp_1.decodeCanisterIdlFunc)(queryBlocksIdlFunc, blockHeightRes.reply.arg);
|
|
29
|
+
const decoded = (0, utils_1.fromNullable)(decodedIdl);
|
|
30
|
+
(0, invariant_1.default)(decoded, "[ICP](fetchBlockHeight) Decoding failed");
|
|
31
|
+
return (0, bignumber_js_1.default)(decoded.chain_length.toString());
|
|
46
32
|
};
|
|
47
33
|
exports.fetchBlockHeight = fetchBlockHeight;
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
34
|
+
const broadcastTxn = async (payload, canisterId, type) => {
|
|
35
|
+
(0, logs_1.log)("debug", `[ICP] Broadcasting ${type} to ${canisterId}, body: ${payload.toString("hex")}`);
|
|
36
|
+
const res = await fetch(`${consts_1.ICP_NETWORK_URL}/api/v3/canister/${canisterId}/${type}`, {
|
|
37
|
+
body: payload,
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: {
|
|
40
|
+
"Content-Type": "application/cbor",
|
|
54
41
|
},
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
|
|
42
|
+
});
|
|
43
|
+
if (res.status === 200) {
|
|
44
|
+
return await res.arrayBuffer();
|
|
45
|
+
}
|
|
46
|
+
throw new Error(`Failed to broadcast transaction: ${res.text()}`);
|
|
58
47
|
};
|
|
59
|
-
exports.
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
48
|
+
exports.broadcastTxn = broadcastTxn;
|
|
49
|
+
const fetchBalance = async (address) => {
|
|
50
|
+
const agent = await (0, agent_1.getAgent)(consts_1.ICP_NETWORK_URL);
|
|
51
|
+
const indexCanister = ledger_live_icp_1.Principal.fromText(consts_1.MAINNET_INDEX_CANISTER_ID);
|
|
52
|
+
const getBalanceIdlFunc = (0, ledger_live_icp_1.getCanisterIdlFunc)(ledger_live_icp_1.indexIdlFactory, "get_account_identifier_balance");
|
|
53
|
+
const getBalanceArgs = (0, ledger_live_icp_1.encodeCanisterIdlFunc)(getBalanceIdlFunc, [address]);
|
|
54
|
+
const balanceRes = await agent.query(indexCanister, {
|
|
55
|
+
arg: getBalanceArgs,
|
|
56
|
+
methodName: "get_account_identifier_balance",
|
|
57
|
+
});
|
|
58
|
+
if (balanceRes.status !== "replied") {
|
|
59
|
+
(0, logs_1.log)("debug", `[ICP](fetchBalance) Query failed: ${balanceRes.status}`);
|
|
60
|
+
return (0, bignumber_js_1.default)(0);
|
|
61
|
+
}
|
|
62
|
+
const decodedBalance = (0, ledger_live_icp_1.decodeCanisterIdlFunc)(getBalanceIdlFunc, balanceRes.reply.arg);
|
|
63
|
+
const balance = (0, utils_1.fromNullable)(decodedBalance);
|
|
64
|
+
if (!balance) {
|
|
65
|
+
return (0, bignumber_js_1.default)(0);
|
|
66
|
+
}
|
|
67
|
+
return (0, bignumber_js_1.default)(balance.toString());
|
|
70
68
|
};
|
|
71
|
-
exports.
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
69
|
+
exports.fetchBalance = fetchBalance;
|
|
70
|
+
const fetchTxns = async (address, startBlockHeight, stopBlockHeight = BigInt(0)) => {
|
|
71
|
+
if (startBlockHeight <= stopBlockHeight) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
const agent = await (0, agent_1.getAgent)(consts_1.ICP_NETWORK_URL);
|
|
75
|
+
const canisterId = ledger_live_icp_1.Principal.fromText(consts_1.MAINNET_INDEX_CANISTER_ID);
|
|
76
|
+
const transactionsRawRequest = {
|
|
77
|
+
account_identifier: address,
|
|
78
|
+
start: [startBlockHeight],
|
|
79
|
+
max_results: BigInt(consts_1.FETCH_TXNS_LIMIT),
|
|
75
80
|
};
|
|
76
|
-
const
|
|
77
|
-
|
|
81
|
+
const getTransactionsIdlFunc = (0, ledger_live_icp_1.getCanisterIdlFunc)(ledger_live_icp_1.indexIdlFactory, "get_account_identifier_transactions");
|
|
82
|
+
const getTransactionsArgs = (0, ledger_live_icp_1.encodeCanisterIdlFunc)(getTransactionsIdlFunc, [
|
|
83
|
+
transactionsRawRequest,
|
|
84
|
+
]);
|
|
85
|
+
const transactionsRes = await agent.query(canisterId, {
|
|
86
|
+
arg: getTransactionsArgs,
|
|
87
|
+
methodName: "get_account_identifier_transactions",
|
|
88
|
+
});
|
|
89
|
+
(0, invariant_1.default)(transactionsRes.status === "replied", "[ICP](fetchTxns) Query failed");
|
|
90
|
+
const decodedTransactions = (0, ledger_live_icp_1.decodeCanisterIdlFunc)(getTransactionsIdlFunc, transactionsRes.reply.arg);
|
|
91
|
+
const response = (0, utils_1.fromNullable)(decodedTransactions);
|
|
92
|
+
(0, invariant_1.default)(response, "[ICP](fetchTxns) Decoding failed");
|
|
93
|
+
if (response.Ok.transactions.length === 0) {
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
const nextTxns = await (0, exports.fetchTxns)(address, response.Ok.transactions.at(-1)?.id ?? BigInt(0), stopBlockHeight);
|
|
97
|
+
return [...response.Ok.transactions, ...nextTxns];
|
|
78
98
|
};
|
|
79
|
-
exports.
|
|
99
|
+
exports.fetchTxns = fetchTxns;
|
|
80
100
|
//# sourceMappingURL=api.js.map
|
package/lib/api/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAqC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAqC;AACrC,sCAKmB;AAEnB,6DASiC;AACjC,gEAAqC;AACrC,yDAA6D;AAC7D,yDAAyD;AACzD,0DAAkC;AAE3B,MAAM,gBAAgB,GAAG,KAAK,IAAwB,EAAE;IAC7D,MAAM,UAAU,GAAG,2BAAS,CAAC,QAAQ,CAAC,mCAA0B,CAAC,CAAC;IAClE,MAAM,qBAAqB,GAAG;QAC5B,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;KAClB,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAA,oCAAkB,EAAC,kCAAgB,EAAE,cAAc,CAAC,CAAC;IAChF,MAAM,eAAe,GAAG,IAAA,uCAAqB,EAAC,kBAAkB,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE3F,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAQ,EAAC,wBAAe,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE;QACnD,GAAG,EAAE,eAAe;QACpB,UAAU,EAAE,cAAc;KAC3B,CAAC,CAAC;IAEH,IAAA,mBAAS,EAAC,cAAc,CAAC,MAAM,KAAK,SAAS,EAAE,sCAAsC,CAAC,CAAC;IAEvF,MAAM,UAAU,GAAG,IAAA,uCAAqB,EACtC,kBAAkB,EAClB,cAAc,CAAC,KAAK,CAAC,GAAG,CACzB,CAAC;IACF,MAAM,OAAO,GAAG,IAAA,oBAAY,EAAC,UAAU,CAAC,CAAC;IACzC,IAAA,mBAAS,EAAC,OAAO,EAAE,yCAAyC,CAAC,CAAC;IAE9D,OAAO,IAAA,sBAAS,EAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AA1BW,QAAA,gBAAgB,oBA0B3B;AAEK,MAAM,YAAY,GAAG,KAAK,EAC/B,OAAe,EACf,UAAkB,EAClB,IAA2B,EAC3B,EAAE;IACF,IAAA,UAAG,EAAC,OAAO,EAAE,sBAAsB,IAAI,OAAO,UAAU,WAAW,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9F,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,wBAAe,oBAAoB,UAAU,IAAI,IAAI,EAAE,EAAE;QAClF,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACpE,CAAC,CAAC;AAnBW,QAAA,YAAY,gBAmBvB;AAEK,MAAM,YAAY,GAAG,KAAK,EAAE,OAAe,EAAsB,EAAE;IACxE,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAQ,EAAC,wBAAe,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,2BAAS,CAAC,QAAQ,CAAC,kCAAyB,CAAC,CAAC;IACpE,MAAM,iBAAiB,GAAG,IAAA,oCAAkB,EAAC,iCAAe,EAAE,gCAAgC,CAAC,CAAC;IAChG,MAAM,cAAc,GAAG,IAAA,uCAAqB,EAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3E,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE;QAClD,GAAG,EAAE,cAAc;QACnB,UAAU,EAAE,gCAAgC;KAC7C,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACpC,IAAA,UAAG,EAAC,OAAO,EAAE,qCAAqC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,cAAc,GAAG,IAAA,uCAAqB,EAAW,iBAAiB,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChG,MAAM,OAAO,GAAuB,IAAA,oBAAY,EAAC,cAAc,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,IAAA,sBAAS,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvC,CAAC,CAAC;AAvBW,QAAA,YAAY,gBAuBvB;AAEK,MAAM,SAAS,GAAG,KAAK,EAC5B,OAAe,EACf,gBAAwB,EACxB,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,EACG,EAAE;IAChC,IAAI,gBAAgB,IAAI,eAAe,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAQ,EAAC,wBAAe,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,2BAAS,CAAC,QAAQ,CAAC,kCAAyB,CAAC,CAAC;IACjE,MAAM,sBAAsB,GAAG;QAC7B,kBAAkB,EAAE,OAAO;QAC3B,KAAK,EAAE,CAAC,gBAAgB,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC,yBAAgB,CAAC;KACtC,CAAC;IAEF,MAAM,sBAAsB,GAAG,IAAA,oCAAkB,EAC/C,iCAAe,EACf,qCAAqC,CACtC,CAAC;IACF,MAAM,mBAAmB,GAAG,IAAA,uCAAqB,EAAC,sBAAsB,EAAE;QACxE,sBAAsB;KACvB,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE;QACpD,GAAG,EAAE,mBAAmB;QACxB,UAAU,EAAE,qCAAqC;KAClD,CAAC,CAAC;IAEH,IAAA,mBAAS,EAAC,eAAe,CAAC,MAAM,KAAK,SAAS,EAAE,+BAA+B,CAAC,CAAC;IACjF,MAAM,mBAAmB,GAAG,IAAA,uCAAqB,EAE/C,sBAAsB,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,mBAAmB,CAAC,CAAC;IACnD,IAAA,mBAAS,EAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;IAExD,IAAI,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAS,EAC9B,OAAO,EACP,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,EAChD,eAAe,CAChB,CAAC;IAEF,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,CAAC;AACpD,CAAC,CAAC;AAjDW,QAAA,SAAS,aAiDpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAiBjF,eAAO,MAAM,eAAe,EAAE,eAyC7B,CAAC"}
|
|
@@ -12,13 +12,13 @@ const consts_1 = require("../../consts");
|
|
|
12
12
|
const operation_1 = require("@ledgerhq/coin-framework/operation");
|
|
13
13
|
const utils_1 = require("../../common-logic/utils");
|
|
14
14
|
const invariant_1 = __importDefault(require("invariant"));
|
|
15
|
-
const
|
|
15
|
+
const ledger_live_icp_1 = require("@zondax/ledger-live-icp");
|
|
16
16
|
const getAccountShape = async (info) => {
|
|
17
17
|
const { currency, derivationMode, rest = {}, initialAccount } = info;
|
|
18
18
|
const publicKey = reconciliatePublicKey(rest.publicKey, initialAccount);
|
|
19
19
|
(0, invariant_1.default)(publicKey, "publicKey is required");
|
|
20
20
|
// deriving address from public key
|
|
21
|
-
const address = await (0,
|
|
21
|
+
const address = await (0, ledger_live_icp_1.deriveAddressFromPubkey)(publicKey);
|
|
22
22
|
(0, invariant_1.default)(address, "address is required");
|
|
23
23
|
const accountId = (0, index_1.encodeAccountId)({
|
|
24
24
|
type: "js",
|
|
@@ -29,16 +29,15 @@ const getAccountShape = async (info) => {
|
|
|
29
29
|
});
|
|
30
30
|
// log("debug", `Generation account shape for ${address}`);
|
|
31
31
|
const blockHeight = await (0, api_1.fetchBlockHeight)();
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const txns = await (0, api_1.fetchTxns)(address);
|
|
32
|
+
const balance = await (0, api_1.fetchBalance)(address);
|
|
33
|
+
const txns = await (0, api_1.fetchTxns)(address, BigInt(blockHeight.toString()), initialAccount ? BigInt(initialAccount.blockHeight.toString()) : undefined);
|
|
35
34
|
const result = {
|
|
36
35
|
id: accountId,
|
|
37
|
-
balance
|
|
38
|
-
spendableBalance:
|
|
39
|
-
operations: (0, flatMap_1.default)(txns
|
|
40
|
-
blockHeight: blockHeight.
|
|
41
|
-
operationsCount: txns.
|
|
36
|
+
balance,
|
|
37
|
+
spendableBalance: balance,
|
|
38
|
+
operations: (0, flatMap_1.default)(txns, mapTxToOps(accountId, address)),
|
|
39
|
+
blockHeight: blockHeight.toNumber(),
|
|
40
|
+
operationsCount: (initialAccount?.operations.length ?? 0) + txns.length,
|
|
42
41
|
xpub: publicKey,
|
|
43
42
|
};
|
|
44
43
|
return result;
|
|
@@ -55,36 +54,56 @@ function reconciliatePublicKey(publicKey, initialAccount) {
|
|
|
55
54
|
}
|
|
56
55
|
const mapTxToOps = (accountId, address, fee = consts_1.ICP_FEES) => {
|
|
57
56
|
return (txInfo) => {
|
|
57
|
+
const { transaction: txn } = txInfo;
|
|
58
58
|
const ops = [];
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
59
|
+
if (txn.operation === undefined) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
if ("Transfer" in txn.operation === undefined) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
const timeStamp = txn.timestamp[0]?.timestamp_nanos ?? Date.now();
|
|
66
|
+
let amount = (0, bignumber_js_1.default)(0);
|
|
67
|
+
let fromAccount = "";
|
|
68
|
+
let toAccount = "";
|
|
69
|
+
let hash = "";
|
|
70
|
+
if ("Transfer" in txn.operation) {
|
|
71
|
+
amount = (0, bignumber_js_1.default)(txn.operation.Transfer.amount.e8s.toString());
|
|
72
|
+
fromAccount = txn.operation.Transfer.from;
|
|
73
|
+
toAccount = txn.operation.Transfer.to;
|
|
74
|
+
hash = (0, ledger_live_icp_1.hashTransaction)({
|
|
75
|
+
from: fromAccount,
|
|
76
|
+
to: toAccount,
|
|
77
|
+
amount: txn.operation.Transfer.amount.e8s,
|
|
78
|
+
fee: txn.operation.Transfer.fee.e8s,
|
|
79
|
+
memo: txn.memo,
|
|
80
|
+
created_at_time: txn.created_at_time[0]?.timestamp_nanos ?? BigInt(0),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const blockHeight = Number(txInfo.id);
|
|
84
|
+
const blockHash = "";
|
|
85
|
+
const memo = txInfo.transaction.memo.toString();
|
|
74
86
|
const date = new Date((0, utils_1.normalizeEpochTimestamp)(timeStamp.toString()));
|
|
75
87
|
const value = amount.abs();
|
|
76
88
|
const feeToUse = (0, bignumber_js_1.default)(fee);
|
|
77
|
-
const isSending =
|
|
78
|
-
const isReceiving =
|
|
89
|
+
const isSending = address === fromAccount;
|
|
90
|
+
const isReceiving = address === toAccount;
|
|
91
|
+
let type;
|
|
92
|
+
if (isSending) {
|
|
93
|
+
type = "OUT";
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
type = "IN";
|
|
97
|
+
}
|
|
79
98
|
if (isSending) {
|
|
80
99
|
ops.push({
|
|
81
|
-
id: (0, operation_1.encodeOperationId)(accountId, hash,
|
|
100
|
+
id: (0, operation_1.encodeOperationId)(accountId, hash, type),
|
|
82
101
|
hash,
|
|
83
|
-
type
|
|
102
|
+
type,
|
|
84
103
|
value: value.plus(feeToUse),
|
|
85
104
|
fee: feeToUse,
|
|
86
105
|
blockHeight,
|
|
87
|
-
blockHash
|
|
106
|
+
blockHash,
|
|
88
107
|
accountId,
|
|
89
108
|
senders: [fromAccount],
|
|
90
109
|
recipients: [toAccount],
|
|
@@ -96,13 +115,13 @@ const mapTxToOps = (accountId, address, fee = consts_1.ICP_FEES) => {
|
|
|
96
115
|
}
|
|
97
116
|
if (isReceiving) {
|
|
98
117
|
ops.push({
|
|
99
|
-
id: (0, operation_1.encodeOperationId)(accountId, hash,
|
|
118
|
+
id: (0, operation_1.encodeOperationId)(accountId, hash, type),
|
|
100
119
|
hash,
|
|
101
|
-
type
|
|
120
|
+
type,
|
|
102
121
|
value,
|
|
103
122
|
fee: feeToUse,
|
|
104
123
|
blockHeight,
|
|
105
|
-
blockHash
|
|
124
|
+
blockHash,
|
|
106
125
|
accountId,
|
|
107
126
|
senders: [fromAccount],
|
|
108
127
|
recipients: [toAccount],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/account.ts"],"names":[],"mappings":";;;;;;AACA,kEAA0F;AAC1F,
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,4 @@ export declare const getAddress: (a: Account) => {
|
|
|
3
3
|
address: string;
|
|
4
4
|
derivationPath: string;
|
|
5
5
|
};
|
|
6
|
-
export declare function validateAddress(address: string): Promise<{
|
|
7
|
-
isValid: boolean;
|
|
8
|
-
}>;
|
|
9
|
-
export declare function validateMemo(memo?: string): {
|
|
10
|
-
isValid: boolean;
|
|
11
|
-
};
|
|
12
6
|
//# sourceMappingURL=addresses.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/addresses.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,eAAO,MAAM,UAAU,MAClB,OAAO,KACT;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CAC6C,CAAC"}
|
|
@@ -1,34 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
const logs_1 = require("@ledgerhq/logs");
|
|
8
|
-
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
|
-
const consts_1 = require("../../consts");
|
|
10
|
-
const api_1 = require("../../api");
|
|
3
|
+
exports.getAddress = void 0;
|
|
11
4
|
const getAddress = (a) => ({ address: a.freshAddress, derivationPath: a.freshAddressPath });
|
|
12
5
|
exports.getAddress = getAddress;
|
|
13
|
-
async function validateAddress(address) {
|
|
14
|
-
try {
|
|
15
|
-
const res = await (0, api_1.fetchBalances)(address);
|
|
16
|
-
if (!res.balances)
|
|
17
|
-
throw Error(res.details?.error_message);
|
|
18
|
-
return { isValid: true };
|
|
19
|
-
}
|
|
20
|
-
catch (e) {
|
|
21
|
-
(0, logs_1.log)("error", e.message ?? "Failed to validate address");
|
|
22
|
-
return { isValid: false };
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
exports.validateAddress = validateAddress;
|
|
26
|
-
function validateMemo(memo) {
|
|
27
|
-
const res = (0, bignumber_js_1.default)(memo ?? 0);
|
|
28
|
-
if (res.isNaN() || res.lt(0) || res.gt((0, bignumber_js_1.default)(consts_1.MAX_MEMO_VALUE))) {
|
|
29
|
-
return { isValid: false };
|
|
30
|
-
}
|
|
31
|
-
return { isValid: true };
|
|
32
|
-
}
|
|
33
|
-
exports.validateMemo = validateMemo;
|
|
34
6
|
//# sourceMappingURL=addresses.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/addresses.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/addresses.ts"],"names":[],"mappings":";;;AAEO,MAAM,UAAU,GAAG,CACxB,CAAU,EAIV,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAL1D,QAAA,UAAU,cAKgD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AAAA,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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAqBvC,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAgB7D,CAAC"}
|
package/lib/bridge/broadcast.js
CHANGED
|
@@ -1,12 +1,28 @@
|
|
|
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
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
const api_1 = require("../api");
|
|
8
|
+
const logs_1 = require("@ledgerhq/logs");
|
|
9
|
+
const invariant_1 = __importDefault(require("invariant"));
|
|
10
|
+
const consts_1 = require("../consts");
|
|
11
|
+
// Type guard to validate rawData shape
|
|
12
|
+
function isBroadcastRawData(data) {
|
|
13
|
+
return (typeof data === "object" &&
|
|
14
|
+
data !== null &&
|
|
15
|
+
"encodedSignedCallBlob" in data &&
|
|
16
|
+
typeof data.encodedSignedCallBlob === "string");
|
|
17
|
+
}
|
|
18
|
+
// Main broadcast function for handling Internet Computer transactions
|
|
19
|
+
const broadcast = async ({ signedOperation: { operation, rawData }, }) => {
|
|
20
|
+
(0, logs_1.log)("debug", "[broadcast] Internet Computer transaction broadcast initiated");
|
|
21
|
+
// Validate rawData with type guard
|
|
22
|
+
(0, invariant_1.default)(isBroadcastRawData(rawData), "[ICP](broadcast) Invalid rawData format");
|
|
23
|
+
(0, invariant_1.default)(operation.extra, "[ICP](broadcast) Missing operation extra");
|
|
24
|
+
await (0, api_1.broadcastTxn)(Buffer.from(rawData.encodedSignedCallBlob, "hex"), consts_1.MAINNET_LEDGER_CANISTER_ID, "call");
|
|
25
|
+
return operation;
|
|
10
26
|
};
|
|
11
27
|
exports.broadcast = broadcast;
|
|
12
28
|
//# sourceMappingURL=broadcast.js.map
|
|
@@ -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":";;;;;;AACA,gCAAsC;AAEtC,yCAAqC;AACrC,0DAAkC;AAClC,sCAAuD;AAOvD,uCAAuC;AACvC,SAAS,kBAAkB,CAAC,IAAa;IACvC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,uBAAuB,IAAI,IAAI;QAC/B,OAAQ,IAAY,CAAC,qBAAqB,KAAK,QAAQ,CACxD,CAAC;AACJ,CAAC;AAED,sEAAsE;AAC/D,MAAM,SAAS,GAA4C,KAAK,EAAE,EACvE,eAAe,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,GACxC,EAAE,EAAE;IACH,IAAA,UAAG,EAAC,OAAO,EAAE,+DAA+D,CAAC,CAAC;IAE9E,mCAAmC;IACnC,IAAA,mBAAS,EAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,yCAAyC,CAAC,CAAC;IAClF,IAAA,mBAAS,EAAC,SAAS,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAC;IAEvE,MAAM,IAAA,kBAAY,EAChB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,KAAK,CAAC,EACjD,mCAA0B,EAC1B,MAAM,CACP,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAhBW,QAAA,SAAS,aAgBpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.d.ts","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"getTransactionStatus.d.ts","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAqB,MAAM,UAAU,CAAC;AAG1D,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,sBAAsB,CA6DnF,CAAC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getTransactionStatus = void 0;
|
|
4
4
|
const errors_1 = require("@ledgerhq/errors");
|
|
5
5
|
const addresses_1 = require("./bridgeHelpers/addresses");
|
|
6
|
+
const utils_1 = require("@zondax/ledger-live-icp/utils");
|
|
6
7
|
const errors_2 = require("../errors");
|
|
7
8
|
const getTransactionStatus = async (account, transaction) => {
|
|
8
9
|
const errors = {};
|
|
@@ -14,7 +15,7 @@ const getTransactionStatus = async (account, transaction) => {
|
|
|
14
15
|
if (!recipient) {
|
|
15
16
|
errors.recipient = new errors_1.RecipientRequired();
|
|
16
17
|
}
|
|
17
|
-
else if (!(await (0,
|
|
18
|
+
else if (!(await (0, utils_1.validateAddress)(recipient)).isValid) {
|
|
18
19
|
errors.recipient = new errors_1.InvalidAddress("", {
|
|
19
20
|
currencyName: account.currency.name,
|
|
20
21
|
});
|
|
@@ -22,12 +23,12 @@ const getTransactionStatus = async (account, transaction) => {
|
|
|
22
23
|
else if (recipient.toLowerCase() === address.toLowerCase()) {
|
|
23
24
|
errors.recipient = new errors_1.InvalidAddressBecauseDestinationIsAlsoSource();
|
|
24
25
|
}
|
|
25
|
-
if (!(await (0,
|
|
26
|
+
if (!(await (0, utils_1.validateAddress)(address)).isValid) {
|
|
26
27
|
errors.sender = new errors_1.InvalidAddress("", {
|
|
27
28
|
currencyName: account.currency.name,
|
|
28
29
|
});
|
|
29
30
|
}
|
|
30
|
-
if (!(0,
|
|
31
|
+
if (!(0, utils_1.validateMemo)(transaction.memo).isValid) {
|
|
31
32
|
errors.transaction = new errors_2.InvalidMemoICP();
|
|
32
33
|
}
|
|
33
34
|
// This is the worst case scenario (the tx won't cost more than this value)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.js","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.ts"],"names":[],"mappings":";;;AAAA,6CAM0B;AAG1B,
|
|
1
|
+
{"version":3,"file":"getTransactionStatus.js","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.ts"],"names":[],"mappings":";;;AAAA,6CAM0B;AAG1B,yDAAuD;AACvD,yDAA8E;AAE9E,sCAA2C;AAEpC,MAAM,oBAAoB,GAAuD,KAAK,EAC3F,OAAO,EACP,WAAW,EACX,EAAE;IACF,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAkC,EAAE,CAAC;IAEnD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,sBAAU,EAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC;IAChD,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,SAAS,GAAG,IAAI,0BAAiB,EAAE,CAAC;IAC7C,CAAC;SAAM,IAAI,CAAC,CAAC,MAAM,IAAA,uBAAe,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACvD,MAAM,CAAC,SAAS,GAAG,IAAI,uBAAc,CAAC,EAAE,EAAE;YACxC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;SACpC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7D,MAAM,CAAC,SAAS,GAAG,IAAI,qDAA4C,EAAE,CAAC;IACxE,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,IAAA,uBAAe,EAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,CAAC,MAAM,GAAG,IAAI,uBAAc,CAAC,EAAE,EAAE;YACrC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;SACpC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAA,oBAAY,EAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,CAAC,WAAW,GAAG,IAAI,uBAAc,EAAE,CAAC;IAC5C,CAAC;IAED,2EAA2E;IAC3E,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC;IAEvC,IAAI,UAAqB,CAAC;IAE1B,IAAI,YAAY,EAAE,CAAC;QACjB,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACtC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,GAAG,IAAI,yBAAgB,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,GAAG,IAAI,uBAAc,EAAE,CAAC;QACvC,CAAC;aAAM,IAAI,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,MAAM,GAAG,IAAI,yBAAgB,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED,oDAAoD;IAEpD,OAAO;QACL,MAAM;QACN,QAAQ;QACR,aAAa;QACb,MAAM;QACN,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AA7DW,QAAA,oBAAoB,wBA6D/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAuB/E,CAAC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.prepareTransaction = void 0;
|
|
4
4
|
const addresses_1 = require("./bridgeHelpers/addresses");
|
|
5
|
+
const ledger_live_icp_1 = require("@zondax/ledger-live-icp");
|
|
5
6
|
const prepareTransaction = async (account, transaction) => {
|
|
6
7
|
// log("debug", "[prepareTransaction] start fn");
|
|
7
8
|
const { address } = (0, addresses_1.getAddress)(account);
|
|
@@ -9,7 +10,7 @@ const prepareTransaction = async (account, transaction) => {
|
|
|
9
10
|
let amount = transaction.amount;
|
|
10
11
|
if (recipient && address) {
|
|
11
12
|
// log("debug", "[prepareTransaction] fetching estimated fees");
|
|
12
|
-
if ((await (0,
|
|
13
|
+
if ((await (0, ledger_live_icp_1.validateAddress)(recipient)).isValid && (await (0, ledger_live_icp_1.validateAddress)(address)).isValid) {
|
|
13
14
|
if (transaction.useAllAmount) {
|
|
14
15
|
amount = account.spendableBalance.minus(transaction.fees);
|
|
15
16
|
return { ...transaction, amount };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":";;;AAEA,yDAAuD;AACvD,6DAA0D;AAEnD,MAAM,kBAAkB,GAAqD,KAAK,EACvF,OAAO,EACP,WAAW,EACX,EAAE;IACF,iDAAiD;IAEjD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,sBAAU,EAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IAElC,IAAI,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAChC,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QACzB,gEAAgE;QAEhE,IAAI,CAAC,MAAM,IAAA,iCAAe,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,IAAA,iCAAe,EAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC3F,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;gBAC7B,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC1D,OAAO,EAAE,GAAG,WAAW,EAAE,MAAM,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAvBW,QAAA,kBAAkB,sBAuB7B"}
|