@ledgerhq/coin-framework 0.8.2-nightly.1 → 0.9.0-next.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +11 -12
- package/lib/account/helpers.d.ts +1 -1
- package/lib/currencies/formatCurrencyUnit.test.d.ts +2 -0
- package/lib/currencies/formatCurrencyUnit.test.d.ts.map +1 -0
- package/lib/currencies/formatCurrencyUnit.test.js +46 -0
- package/lib/currencies/formatCurrencyUnit.test.js.map +1 -0
- package/lib/operation.d.ts +6 -6
- package/lib/operation.d.ts.map +1 -1
- package/lib/operation.js +20 -53
- package/lib/operation.js.map +1 -1
- package/lib/operation.test.js +27 -63
- package/lib/operation.test.js.map +1 -1
- package/lib-es/account/helpers.d.ts +1 -1
- package/lib-es/currencies/formatCurrencyUnit.test.d.ts +2 -0
- package/lib-es/currencies/formatCurrencyUnit.test.d.ts.map +1 -0
- package/lib-es/currencies/formatCurrencyUnit.test.js +44 -0
- package/lib-es/currencies/formatCurrencyUnit.test.js.map +1 -0
- package/lib-es/operation.d.ts +6 -6
- package/lib-es/operation.d.ts.map +1 -1
- package/lib-es/operation.js +18 -50
- package/lib-es/operation.js.map +1 -1
- package/lib-es/operation.test.js +28 -64
- package/lib-es/operation.test.js.map +1 -1
- package/package.json +10 -10
- package/src/currencies/__snapshots__/formatCurrencyUnit.test.ts.snap +3543 -0
- package/src/currencies/formatCurrencyUnit.test.ts +50 -0
- package/src/operation.test.ts +54 -101
- package/src/operation.ts +21 -70
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
# @ledgerhq/coin-framework
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 0.9.0-next.0
|
|
4
4
|
|
|
5
|
-
###
|
|
6
|
-
|
|
7
|
-
- Updated dependencies [[`a4299c5d62`](https://github.com/LedgerHQ/ledger-live/commit/a4299c5d629cd56e6e6795adaa14978ae2b90f42), [`e63205b850`](https://github.com/LedgerHQ/ledger-live/commit/e63205b85071538ed2431157a12818d7a8f0ffa9)]:
|
|
8
|
-
- @ledgerhq/types-live@6.42.1-nightly.1
|
|
9
|
-
- @ledgerhq/errors@6.15.1-nightly.0
|
|
10
|
-
- @ledgerhq/devices@8.0.9-nightly.0
|
|
5
|
+
### Minor Changes
|
|
11
6
|
|
|
12
|
-
|
|
7
|
+
- [#4886](https://github.com/LedgerHQ/ledger-live/pull/4886) [`771c9d3c1d`](https://github.com/LedgerHQ/ledger-live/commit/771c9d3c1d138ddd68da2e4f9738e2c41ecaf81b) Thanks [@chabroA](https://github.com/chabroA)! - Add speedup / cancel tx feature for evm
|
|
13
8
|
|
|
14
9
|
### Patch Changes
|
|
15
10
|
|
|
16
|
-
- Updated dependencies [[`08dde174fd`](https://github.com/LedgerHQ/ledger-live/commit/08dde174fdeaadbce85dcd914383839f788f21dd)]:
|
|
17
|
-
- @ledgerhq/types-
|
|
18
|
-
- @ledgerhq/cryptoassets@
|
|
19
|
-
- @ledgerhq/
|
|
11
|
+
- Updated dependencies [[`48487abd29`](https://github.com/LedgerHQ/ledger-live/commit/48487abd297e41629c6725bc0ac9d69bfeaa74d3), [`08dde174fd`](https://github.com/LedgerHQ/ledger-live/commit/08dde174fdeaadbce85dcd914383839f788f21dd), [`771c9d3c1d`](https://github.com/LedgerHQ/ledger-live/commit/771c9d3c1d138ddd68da2e4f9738e2c41ecaf81b), [`c5981ae341`](https://github.com/LedgerHQ/ledger-live/commit/c5981ae3411abc4c8594adf2efcb52aacddac143), [`317685e696`](https://github.com/LedgerHQ/ledger-live/commit/317685e69678e6fe1f489f0c071e7613d329d389), [`a4299c5d62`](https://github.com/LedgerHQ/ledger-live/commit/a4299c5d629cd56e6e6795adaa14978ae2b90f42), [`b4e7201b0b`](https://github.com/LedgerHQ/ledger-live/commit/b4e7201b0b70d146de7d936ff2c9e9e443164243), [`e63205b850`](https://github.com/LedgerHQ/ledger-live/commit/e63205b85071538ed2431157a12818d7a8f0ffa9), [`5964e30bed`](https://github.com/LedgerHQ/ledger-live/commit/5964e30bed11d64a3b7401c6ab51ffc1ad4c427c)]:
|
|
12
|
+
- @ledgerhq/types-live@6.43.0-next.0
|
|
13
|
+
- @ledgerhq/types-cryptoassets@7.8.0-next.0
|
|
14
|
+
- @ledgerhq/cryptoassets@11.2.0-next.0
|
|
15
|
+
- @ledgerhq/errors@6.16.0-next.0
|
|
16
|
+
- @ledgerhq/live-env@0.7.0-next.0
|
|
17
|
+
- @ledgerhq/devices@8.1.0-next.0
|
|
18
|
+
- @ledgerhq/logs@6.12.0-next.0
|
|
20
19
|
|
|
21
20
|
## 0.8.1
|
|
22
21
|
|
package/lib/account/helpers.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BigNumber } from "bignumber.js";
|
|
2
2
|
import type { Account, AccountLike, AccountLikeArray, SubAccount, TokenAccount, ChildAccount } from "@ledgerhq/types-live";
|
|
3
3
|
import { CryptoCurrency, TokenCurrency, Unit } from "@ledgerhq/types-cryptoassets";
|
|
4
|
-
export declare const getMainAccount: <A extends Account>(account:
|
|
4
|
+
export declare const getMainAccount: <A extends Account>(account: SubAccount | A, parentAccount?: A | null | undefined) => A;
|
|
5
5
|
export declare const getFeesCurrency: (account?: AccountLike) => TokenCurrency | CryptoCurrency;
|
|
6
6
|
export declare const getFeesUnit: (currency: TokenCurrency | CryptoCurrency) => Unit;
|
|
7
7
|
export declare const getAccountCurrency: (account?: AccountLike) => TokenCurrency | CryptoCurrency;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatCurrencyUnit.test.d.ts","sourceRoot":"","sources":["../../src/currencies/formatCurrencyUnit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const currencies_1 = require("@ledgerhq/cryptoassets/currencies");
|
|
4
|
+
const formatCurrencyUnit_1 = require("./formatCurrencyUnit");
|
|
5
|
+
const bignumber_js_1 = require("bignumber.js");
|
|
6
|
+
const testCases = Object.values(currencies_1.cryptocurrenciesById).map(currency => {
|
|
7
|
+
return {
|
|
8
|
+
name: currency.name,
|
|
9
|
+
unit: currency.units[0],
|
|
10
|
+
};
|
|
11
|
+
});
|
|
12
|
+
const localeTestCases = [
|
|
13
|
+
"en-US",
|
|
14
|
+
"fr-FR",
|
|
15
|
+
"es-ES",
|
|
16
|
+
"de-DE",
|
|
17
|
+
"ja-JP",
|
|
18
|
+
"ko-KR",
|
|
19
|
+
"pt-BR",
|
|
20
|
+
"ru-RU",
|
|
21
|
+
"tr-TR",
|
|
22
|
+
"zh-CN",
|
|
23
|
+
];
|
|
24
|
+
describe("formatCurrencyUnit", () => {
|
|
25
|
+
describe("with default options", () => {
|
|
26
|
+
test.each(testCases)("should correctly format $name unit ($unit.name)", ({ unit }) => {
|
|
27
|
+
const value = new bignumber_js_1.BigNumber("12345678900000000");
|
|
28
|
+
expect((0, formatCurrencyUnit_1.formatCurrencyUnit)(unit, value)).toMatchSnapshot();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe("with custom options", () => {
|
|
32
|
+
describe.each(localeTestCases)("with locale %s", locale => {
|
|
33
|
+
test.each(testCases)("should correctly format $name unit ($unit.name)", ({ unit }) => {
|
|
34
|
+
const value = new bignumber_js_1.BigNumber("12345678900000000");
|
|
35
|
+
const options = {
|
|
36
|
+
joinFragmentsSeparator: "-",
|
|
37
|
+
showCode: true,
|
|
38
|
+
showAllDigits: true,
|
|
39
|
+
locale,
|
|
40
|
+
};
|
|
41
|
+
expect((0, formatCurrencyUnit_1.formatCurrencyUnit)(unit, value, options)).toMatchSnapshot();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=formatCurrencyUnit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatCurrencyUnit.test.js","sourceRoot":"","sources":["../../src/currencies/formatCurrencyUnit.test.ts"],"names":[],"mappings":";;AAAA,kEAAyE;AACzE,6DAA0D;AAC1D,+CAAyC;AAGzC,MAAM,SAAS,GAAmC,MAAM,CAAC,MAAM,CAAC,iCAAoB,CAAC,CAAC,GAAG,CACvF,QAAQ,CAAC,EAAE;IACT,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;KACxB,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;CACR,CAAC;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,iDAAiD,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACnF,MAAM,KAAK,GAAG,IAAI,wBAAS,CAAC,mBAAmB,CAAC,CAAC;YACjD,MAAM,CAAC,IAAA,uCAAkB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE;YACxD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,iDAAiD,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gBACnF,MAAM,KAAK,GAAG,IAAI,wBAAS,CAAC,mBAAmB,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG;oBACd,sBAAsB,EAAE,GAAG;oBAC3B,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,IAAI;oBACnB,MAAM;iBACP,CAAC;gBACF,MAAM,CAAC,IAAA,uCAAkB,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;YACrE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/lib/operation.d.ts
CHANGED
|
@@ -22,10 +22,10 @@ export declare const getOperationConfirmationNumber: (operation: Operation, acco
|
|
|
22
22
|
export declare const getOperationConfirmationDisplayableNumber: (operation: Operation, account: Account) => string;
|
|
23
23
|
export declare const isConfirmedOperation: (operation: Operation, account: Account, confirmationsNb: number) => boolean;
|
|
24
24
|
export declare const isAddressPoisoningOperation: (operation: Operation, account: AccountLike) => boolean;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
/**
|
|
26
|
+
* @param account The account of the transaction to edit
|
|
27
|
+
* @param nonce The nouce of the transaction to edit
|
|
28
|
+
* @returns true if the nonce corresponds to the oldest pending operation
|
|
29
|
+
*/
|
|
30
|
+
export declare const isOldestPendingOperation: (account: Account, nonce: number) => boolean;
|
|
31
31
|
//# sourceMappingURL=operation.d.ts.map
|
package/lib/operation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAe,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAe,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAUzF,wBAAgB,sBAAsB,CACpC,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,WAAW,EAC9C,WAAW,EAAE,MAAM,GAClB,SAAS,GAAG,IAAI,GAAG,SAAS,CAyC9B;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAOA;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAQA;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAiCpF;AAED,wBAAgB,oCAAoC,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,EAAE,CAmB/E;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CA0CjE;AAED,wBAAgB,qCAAqC,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAK9E;AAED,eAAO,MAAM,8BAA8B,cAAe,SAAS,WAAW,OAAO,KAAG,MACX,CAAC;AAE9E,eAAO,MAAM,yCAAyC,cACzC,SAAS,WACX,OAAO,KACf,MAGK,CAAC;AAET,eAAO,MAAM,oBAAoB,cACpB,SAAS,WACX,OAAO,mBACC,MAAM,KACtB,OAGQ,CAAC;AAEZ,eAAO,MAAM,2BAA2B,cAC3B,SAAS,WACX,WAAW,KACnB,OASF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,YAAa,OAAO,SAAS,MAAM,KAAG,OAiB1E,CAAC"}
|
package/lib/operation.js
CHANGED
|
@@ -3,12 +3,11 @@ 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.isOldestPendingOperation = exports.isAddressPoisoningOperation = exports.isConfirmedOperation = exports.getOperationConfirmationDisplayableNumber = exports.getOperationConfirmationNumber = exports.getOperationAmountNumberWithInternals = exports.getOperationAmountNumber = exports.flattenOperationWithInternalsAndNfts = exports.patchOperationWithHash = exports.decodeSubOperationId = exports.encodeSubOperationId = exports.decodeOperationId = exports.encodeOperationId = exports.findOperationInAccount = void 0;
|
|
7
7
|
const invariant_1 = __importDefault(require("invariant"));
|
|
8
8
|
const bignumber_js_1 = require("bignumber.js");
|
|
9
9
|
const live_env_1 = require("@ledgerhq/live-env");
|
|
10
10
|
const nftOperationId_1 = require("./nft/nftOperationId");
|
|
11
|
-
const helpers_1 = require("./account/helpers");
|
|
12
11
|
const account_1 = require("./account");
|
|
13
12
|
const nftId_1 = require("./nft/nftId");
|
|
14
13
|
const nftOperationIdEncoderPerStandard = {
|
|
@@ -174,56 +173,24 @@ const isAddressPoisoningOperation = (operation, account) => {
|
|
|
174
173
|
operation.value.isZero());
|
|
175
174
|
};
|
|
176
175
|
exports.isAddressPoisoningOperation = isAddressPoisoningOperation;
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
const SUPPORTED_FAMILIES = ["evm"];
|
|
195
|
-
if (!SUPPORTED_FAMILIES.includes(mainAccount.currency.family)) {
|
|
196
|
-
return undefined;
|
|
197
|
-
}
|
|
198
|
-
const now = new Date().getTime();
|
|
199
|
-
const stuckOperations = mainAccount.pendingOperations.filter(pendingOp => isEditableOperation(mainAccount, pendingOp) &&
|
|
200
|
-
now - pendingOp.date.getTime() > (0, live_env_1.getEnv)("ETHEREUM_STUCK_TRANSACTION_TIMEOUT"));
|
|
201
|
-
if (stuckOperations.length === 0) {
|
|
202
|
-
return undefined;
|
|
203
|
-
}
|
|
204
|
-
const oldestStuckOperation = stuckOperations.reduce((oldestOp, currentOp) => {
|
|
205
|
-
if (!oldestOp)
|
|
206
|
-
return currentOp;
|
|
207
|
-
return oldestOp.transactionSequenceNumber !== undefined &&
|
|
208
|
-
currentOp.transactionSequenceNumber !== undefined &&
|
|
209
|
-
oldestOp.transactionSequenceNumber > currentOp.transactionSequenceNumber
|
|
210
|
-
? currentOp
|
|
211
|
-
: oldestOp;
|
|
176
|
+
/**
|
|
177
|
+
* @param account The account of the transaction to edit
|
|
178
|
+
* @param nonce The nouce of the transaction to edit
|
|
179
|
+
* @returns true if the nonce corresponds to the oldest pending operation
|
|
180
|
+
*/
|
|
181
|
+
const isOldestPendingOperation = (account, nonce) => {
|
|
182
|
+
/**
|
|
183
|
+
* The selected pending operation is the oldest if there is no pending
|
|
184
|
+
* operation with a lower transactionSequenceNumber
|
|
185
|
+
*/
|
|
186
|
+
return !account.pendingOperations.some(pendingOp => {
|
|
187
|
+
/**
|
|
188
|
+
* the pending operation must have a transactionSequenceNumberat this stage
|
|
189
|
+
* since it should have previously been broadcasted
|
|
190
|
+
*/
|
|
191
|
+
(0, invariant_1.default)(pendingOp.transactionSequenceNumber !== undefined, "transactionSequenceNumber required");
|
|
192
|
+
return pendingOp.transactionSequenceNumber < nonce;
|
|
212
193
|
});
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
stuckParentAccount = mainAccount;
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
stuckAccount = mainAccount;
|
|
219
|
-
stuckParentAccount = undefined;
|
|
220
|
-
}
|
|
221
|
-
(0, invariant_1.default)(stuckAccount, "stuckAccount required");
|
|
222
|
-
return {
|
|
223
|
-
account: stuckAccount,
|
|
224
|
-
parentAccount: stuckParentAccount,
|
|
225
|
-
operation: oldestStuckOperation,
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
exports.getStuckAccountAndOperation = getStuckAccountAndOperation;
|
|
194
|
+
};
|
|
195
|
+
exports.isOldestPendingOperation = isOldestPendingOperation;
|
|
229
196
|
//# sourceMappingURL=operation.js.map
|
package/lib/operation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAkC;AAClC,+CAAyC;AACzC,iDAA4C;AAE5C,yDAAyF;AACzF
|
|
1
|
+
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"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"}
|
package/lib/operation.test.js
CHANGED
|
@@ -3,11 +3,11 @@ 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
|
-
const prando_1 = __importDefault(require("prando"));
|
|
7
6
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
7
|
+
const prando_1 = __importDefault(require("prando"));
|
|
8
8
|
const currencies_1 = require("./currencies");
|
|
9
|
-
const operation_1 = require("./operation");
|
|
10
9
|
const account_1 = require("./mocks/account");
|
|
10
|
+
const operation_1 = require("./operation");
|
|
11
11
|
const ethereum = (0, currencies_1.getCryptoCurrencyById)("ethereum");
|
|
12
12
|
const usdc = (0, currencies_1.getTokenById)("ethereum/erc20/usd__coin");
|
|
13
13
|
const cardano = (0, currencies_1.getCryptoCurrencyById)("cardano");
|
|
@@ -45,71 +45,35 @@ describe("Operation.ts", () => {
|
|
|
45
45
|
expect((0, operation_1.isAddressPoisoningOperation)(operation, account)).toBe(false);
|
|
46
46
|
});
|
|
47
47
|
});
|
|
48
|
-
describe("
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
describe("isOldestPendingOperation", () => {
|
|
49
|
+
const account = (0, account_1.genAccount)("myAccount", { currency: ethereum });
|
|
50
|
+
const transactionRaw = {
|
|
51
|
+
family: "evm",
|
|
52
|
+
amount: "1",
|
|
53
|
+
recipient: "MockRecipient",
|
|
54
|
+
};
|
|
55
|
+
const pendingCoinOperation0 = Object.assign(Object.assign({}, (0, account_1.genOperation)(account, account, account.operations, new prando_1.default(""))), { transactionRaw, blockHeight: null, value: new bignumber_js_1.default(0), date: new Date(1986, 0, 1), transactionSequenceNumber: 0 });
|
|
56
|
+
const pendingCoinOperation1 = Object.assign(Object.assign({}, pendingCoinOperation0), { transactionSequenceNumber: 1 });
|
|
57
|
+
const pendingCoinOperation2 = Object.assign(Object.assign({}, pendingCoinOperation1), { transactionSequenceNumber: 2 });
|
|
58
|
+
it("should return true if there are no pending operations", () => {
|
|
59
|
+
const testAccount = Object.assign(Object.assign({}, account), { pendingOperations: [] });
|
|
60
|
+
expect((0, operation_1.isOldestPendingOperation)(testAccount, 0)).toBe(true);
|
|
55
61
|
});
|
|
56
|
-
it("should return true if the
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
const operation = Object.assign(Object.assign({}, (0, account_1.genOperation)(account, tokenAccount, account.operations, new prando_1.default(""))), { value: new bignumber_js_1.default(0), blockHeight: null });
|
|
60
|
-
const transactionRaw = {
|
|
61
|
-
family: "evm",
|
|
62
|
-
amount: "1",
|
|
63
|
-
recipient: "MockRecipient",
|
|
64
|
-
};
|
|
65
|
-
expect((0, operation_1.isEditableOperation)(account, operation)).toBe(false);
|
|
66
|
-
expect((0, operation_1.isEditableOperation)(tokenAccount, operation)).toBe(false);
|
|
67
|
-
operation.transactionRaw = transactionRaw;
|
|
68
|
-
expect((0, operation_1.isEditableOperation)(account, operation)).toBe(true);
|
|
69
|
-
expect((0, operation_1.isEditableOperation)(tokenAccount, operation)).toBe(true);
|
|
62
|
+
it("should return true if the given nonce is the same as the transactionSequenceNumber of the only pending operation", () => {
|
|
63
|
+
const testAccount = Object.assign(Object.assign({}, account), { pendingOperations: [pendingCoinOperation0] });
|
|
64
|
+
expect((0, operation_1.isOldestPendingOperation)(testAccount, 0)).toBe(true);
|
|
70
65
|
});
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const account = (0, account_1.genAccount)("myAccount", { currency: ethereum });
|
|
75
|
-
const tokenAccount = (0, account_1.genTokenAccount)(0, account, usdc);
|
|
76
|
-
const transactionRaw = {
|
|
77
|
-
family: "evm",
|
|
78
|
-
amount: "1",
|
|
79
|
-
recipient: "MockRecipient",
|
|
80
|
-
};
|
|
81
|
-
const pendingOperation = Object.assign(Object.assign({}, (0, account_1.genOperation)(account, tokenAccount, account.operations, new prando_1.default(""))), { transactionRaw, blockHeight: null, value: new bignumber_js_1.default(0), date: new Date() });
|
|
82
|
-
account.pendingOperations.push(pendingOperation);
|
|
83
|
-
expect((0, operation_1.getStuckAccountAndOperation)(account, undefined)).toBe(undefined);
|
|
66
|
+
it("should return true if the given nonce is less than the transactionSequenceNumber of any pending operation", () => {
|
|
67
|
+
const testAccount = Object.assign(Object.assign({}, account), { pendingOperations: [pendingCoinOperation1, pendingCoinOperation2] });
|
|
68
|
+
expect((0, operation_1.isOldestPendingOperation)(testAccount, 0)).toBe(true);
|
|
84
69
|
});
|
|
85
|
-
it("should return
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const tokenAccount = (0, account_1.genTokenAccount)(0, account, usdc);
|
|
89
|
-
const transactionRaw = {
|
|
90
|
-
family: "evm",
|
|
91
|
-
amount: "1",
|
|
92
|
-
recipient: "MockRecipient",
|
|
93
|
-
};
|
|
94
|
-
const pendingOperation = Object.assign(Object.assign({}, (0, account_1.genOperation)(account, tokenAccount, account.operations, new prando_1.default(""))), { transactionRaw, blockHeight: null, value: new bignumber_js_1.default(0), date: new Date(1986, 0, 1), transactionSequenceNumber: 0 });
|
|
95
|
-
account.pendingOperations.push(pendingOperation);
|
|
96
|
-
expect((_a = (0, operation_1.getStuckAccountAndOperation)(account, undefined)) === null || _a === void 0 ? void 0 : _a.operation.transactionSequenceNumber).toBe(0);
|
|
70
|
+
it("should return false if the given nonce is greater than the transactionSequenceNumber of all pending operations", () => {
|
|
71
|
+
const testAccount = Object.assign(Object.assign({}, account), { pendingOperations: [pendingCoinOperation0, pendingCoinOperation1] });
|
|
72
|
+
expect((0, operation_1.isOldestPendingOperation)(testAccount, 2)).toBe(false);
|
|
97
73
|
});
|
|
98
|
-
it("should return
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const tokenAccount = (0, account_1.genTokenAccount)(0, account, usdc);
|
|
102
|
-
const transactionRaw = {
|
|
103
|
-
family: "evm",
|
|
104
|
-
amount: "1",
|
|
105
|
-
recipient: "MockRecipient",
|
|
106
|
-
};
|
|
107
|
-
const pendingOperation1 = Object.assign(Object.assign({}, (0, account_1.genOperation)(account, tokenAccount, account.operations, new prando_1.default(""))), { transactionRaw, blockHeight: null, value: new bignumber_js_1.default(0), date: new Date(1986, 0, 1), transactionSequenceNumber: 1 });
|
|
108
|
-
const pendingOperation2 = Object.assign(Object.assign({}, pendingOperation1), { transactionSequenceNumber: 0 });
|
|
109
|
-
const pendingOperation3 = Object.assign(Object.assign({}, pendingOperation1), { transactionSequenceNumber: 2 });
|
|
110
|
-
account.pendingOperations.push(pendingOperation1, pendingOperation2, pendingOperation3);
|
|
111
|
-
expect(account.pendingOperations.length).toBe(3);
|
|
112
|
-
expect((_a = (0, operation_1.getStuckAccountAndOperation)(account, undefined)) === null || _a === void 0 ? void 0 : _a.operation.transactionSequenceNumber).toBe(0);
|
|
74
|
+
it("should return false if there is a pending operation with a lower transactionSequenceNumber than the given nonce", () => {
|
|
75
|
+
const testAccount = Object.assign(Object.assign({}, account), { pendingOperations: [pendingCoinOperation0, pendingCoinOperation1] });
|
|
76
|
+
expect((0, operation_1.isOldestPendingOperation)(testAccount, 1)).toBe(false);
|
|
113
77
|
});
|
|
114
78
|
});
|
|
115
79
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.test.js","sourceRoot":"","sources":["../src/operation.test.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"operation.test.js","sourceRoot":"","sources":["../src/operation.test.ts"],"names":[],"mappings":";;;;;AACA,gEAAqC;AACrC,oDAA4B;AAC5B,6CAAmE;AACnE,6CAA4E;AAC5E,2CAAoF;AAEpF,MAAM,QAAQ,GAAG,IAAA,kCAAqB,EAAC,UAAU,CAAC,CAAC;AACnD,MAAM,IAAI,GAAG,IAAA,yBAAY,EAAC,0BAA0B,CAAC,CAAC;AACtD,MAAM,OAAO,GAAG,IAAA,kCAAqB,EAAC,SAAS,CAAC,CAAC;AACjD,MAAM,OAAO,GAAG,IAAA,yBAAY,EAC1B,uFAAuF,CACxF,CAAC;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;YACjF,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,IAAA,yBAAe,EAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvD,MAAM,SAAS,mCACV,IAAA,sBAAY,EAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,gBAAM,CAAC,EAAE,CAAC,CAAC,KAC1E,KAAK,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC,GACxB,CAAC;YAEF,MAAM,CAAC,IAAA,uCAA2B,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAClF,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/D,MAAM,YAAY,GAAG,IAAA,yBAAe,EAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,SAAS,mCACV,IAAA,sBAAY,EAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,gBAAM,CAAC,EAAE,CAAC,CAAC,KAC1E,KAAK,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC,GACxB,CAAC;YAEF,MAAM,CAAC,IAAA,uCAA2B,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;YAC9F,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,IAAA,yBAAe,EAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvD,MAAM,SAAS,mCACV,IAAA,sBAAY,EAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,gBAAM,CAAC,EAAE,CAAC,CAAC,KAC1E,KAAK,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC,GACxB,CAAC;YAEF,MAAM,CAAC,IAAA,uCAA2B,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;YAC5F,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/D,MAAM,YAAY,GAAG,IAAA,yBAAe,EAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,SAAS,mCACV,IAAA,sBAAY,EAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,gBAAM,CAAC,EAAE,CAAC,CAAC,KAC1E,KAAK,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC,GACxB,CAAC;YAEF,MAAM,CAAC,IAAA,uCAA2B,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,IAAA,yBAAe,EAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,SAAS,mCACV,IAAA,sBAAY,EAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,gBAAM,CAAC,EAAE,CAAC,CAAC,KAC1E,KAAK,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC,GACxB,CAAC;YAEF,MAAM,CAAC,IAAA,uCAA2B,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEhE,MAAM,cAAc,GAAG;YACrB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,GAAG;YACX,SAAS,EAAE,eAAe;SAC3B,CAAC;QACF,MAAM,qBAAqB,mCACtB,IAAA,sBAAY,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,gBAAM,CAAC,EAAE,CAAC,CAAC,KACrE,cAAc,EACd,WAAW,EAAE,IAAI,EACjB,KAAK,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAC1B,yBAAyB,EAAE,CAAC,GAC7B,CAAC;QACF,MAAM,qBAAqB,mCACtB,qBAAqB,KACxB,yBAAyB,EAAE,CAAC,GAC7B,CAAC;QACF,MAAM,qBAAqB,mCACtB,qBAAqB,KACxB,yBAAyB,EAAE,CAAC,GAC7B,CAAC;QACF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,WAAW,mCAAQ,OAAO,KAAE,iBAAiB,EAAE,EAAE,GAAE,CAAC;YAE1D,MAAM,CAAC,IAAA,oCAAwB,EAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kHAAkH,EAAE,GAAG,EAAE;YAC1H,MAAM,WAAW,mCAAQ,OAAO,KAAE,iBAAiB,EAAE,CAAC,qBAAqB,CAAC,GAAE,CAAC;YAE/E,MAAM,CAAC,IAAA,oCAAwB,EAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2GAA2G,EAAE,GAAG,EAAE;YACnH,MAAM,WAAW,mCACZ,OAAO,KACV,iBAAiB,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,GAClE,CAAC;YAEF,MAAM,CAAC,IAAA,oCAAwB,EAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gHAAgH,EAAE,GAAG,EAAE;YACxH,MAAM,WAAW,mCACZ,OAAO,KACV,iBAAiB,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,GAClE,CAAC;YAEF,MAAM,CAAC,IAAA,oCAAwB,EAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iHAAiH,EAAE,GAAG,EAAE;YACzH,MAAM,WAAW,mCACZ,OAAO,KACV,iBAAiB,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,GAClE,CAAC;YAEF,MAAM,CAAC,IAAA,oCAAwB,EAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BigNumber } from "bignumber.js";
|
|
2
2
|
import type { Account, AccountLike, AccountLikeArray, SubAccount, TokenAccount, ChildAccount } from "@ledgerhq/types-live";
|
|
3
3
|
import { CryptoCurrency, TokenCurrency, Unit } from "@ledgerhq/types-cryptoassets";
|
|
4
|
-
export declare const getMainAccount: <A extends Account>(account:
|
|
4
|
+
export declare const getMainAccount: <A extends Account>(account: SubAccount | A, parentAccount?: A | null | undefined) => A;
|
|
5
5
|
export declare const getFeesCurrency: (account?: AccountLike) => TokenCurrency | CryptoCurrency;
|
|
6
6
|
export declare const getFeesUnit: (currency: TokenCurrency | CryptoCurrency) => Unit;
|
|
7
7
|
export declare const getAccountCurrency: (account?: AccountLike) => TokenCurrency | CryptoCurrency;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatCurrencyUnit.test.d.ts","sourceRoot":"","sources":["../../src/currencies/formatCurrencyUnit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { cryptocurrenciesById } from "@ledgerhq/cryptoassets/currencies";
|
|
2
|
+
import { formatCurrencyUnit } from "./formatCurrencyUnit";
|
|
3
|
+
import { BigNumber } from "bignumber.js";
|
|
4
|
+
const testCases = Object.values(cryptocurrenciesById).map(currency => {
|
|
5
|
+
return {
|
|
6
|
+
name: currency.name,
|
|
7
|
+
unit: currency.units[0],
|
|
8
|
+
};
|
|
9
|
+
});
|
|
10
|
+
const localeTestCases = [
|
|
11
|
+
"en-US",
|
|
12
|
+
"fr-FR",
|
|
13
|
+
"es-ES",
|
|
14
|
+
"de-DE",
|
|
15
|
+
"ja-JP",
|
|
16
|
+
"ko-KR",
|
|
17
|
+
"pt-BR",
|
|
18
|
+
"ru-RU",
|
|
19
|
+
"tr-TR",
|
|
20
|
+
"zh-CN",
|
|
21
|
+
];
|
|
22
|
+
describe("formatCurrencyUnit", () => {
|
|
23
|
+
describe("with default options", () => {
|
|
24
|
+
test.each(testCases)("should correctly format $name unit ($unit.name)", ({ unit }) => {
|
|
25
|
+
const value = new BigNumber("12345678900000000");
|
|
26
|
+
expect(formatCurrencyUnit(unit, value)).toMatchSnapshot();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe("with custom options", () => {
|
|
30
|
+
describe.each(localeTestCases)("with locale %s", locale => {
|
|
31
|
+
test.each(testCases)("should correctly format $name unit ($unit.name)", ({ unit }) => {
|
|
32
|
+
const value = new BigNumber("12345678900000000");
|
|
33
|
+
const options = {
|
|
34
|
+
joinFragmentsSeparator: "-",
|
|
35
|
+
showCode: true,
|
|
36
|
+
showAllDigits: true,
|
|
37
|
+
locale,
|
|
38
|
+
};
|
|
39
|
+
expect(formatCurrencyUnit(unit, value, options)).toMatchSnapshot();
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=formatCurrencyUnit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatCurrencyUnit.test.js","sourceRoot":"","sources":["../../src/currencies/formatCurrencyUnit.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,MAAM,SAAS,GAAmC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CACvF,QAAQ,CAAC,EAAE;IACT,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;KACxB,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;CACR,CAAC;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,iDAAiD,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACnF,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE;YACxD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,iDAAiD,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gBACnF,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG;oBACd,sBAAsB,EAAE,GAAG;oBAC3B,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,IAAI;oBACnB,MAAM;iBACP,CAAC;gBACF,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;YACrE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/lib-es/operation.d.ts
CHANGED
|
@@ -22,10 +22,10 @@ export declare const getOperationConfirmationNumber: (operation: Operation, acco
|
|
|
22
22
|
export declare const getOperationConfirmationDisplayableNumber: (operation: Operation, account: Account) => string;
|
|
23
23
|
export declare const isConfirmedOperation: (operation: Operation, account: Account, confirmationsNb: number) => boolean;
|
|
24
24
|
export declare const isAddressPoisoningOperation: (operation: Operation, account: AccountLike) => boolean;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
/**
|
|
26
|
+
* @param account The account of the transaction to edit
|
|
27
|
+
* @param nonce The nouce of the transaction to edit
|
|
28
|
+
* @returns true if the nonce corresponds to the oldest pending operation
|
|
29
|
+
*/
|
|
30
|
+
export declare const isOldestPendingOperation: (account: Account, nonce: number) => boolean;
|
|
31
31
|
//# sourceMappingURL=operation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAe,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAe,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAUzF,wBAAgB,sBAAsB,CACpC,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,WAAW,EAC9C,WAAW,EAAE,MAAM,GAClB,SAAS,GAAG,IAAI,GAAG,SAAS,CAyC9B;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAOA;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAQA;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAiCpF;AAED,wBAAgB,oCAAoC,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,EAAE,CAmB/E;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CA0CjE;AAED,wBAAgB,qCAAqC,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAK9E;AAED,eAAO,MAAM,8BAA8B,cAAe,SAAS,WAAW,OAAO,KAAG,MACX,CAAC;AAE9E,eAAO,MAAM,yCAAyC,cACzC,SAAS,WACX,OAAO,KACf,MAGK,CAAC;AAET,eAAO,MAAM,oBAAoB,cACpB,SAAS,WACX,OAAO,mBACC,MAAM,KACtB,OAGQ,CAAC;AAEZ,eAAO,MAAM,2BAA2B,cAC3B,SAAS,WACX,WAAW,KACnB,OASF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,YAAa,OAAO,SAAS,MAAM,KAAG,OAiB1E,CAAC"}
|
package/lib-es/operation.js
CHANGED
|
@@ -2,7 +2,6 @@ import invariant from "invariant";
|
|
|
2
2
|
import { BigNumber } from "bignumber.js";
|
|
3
3
|
import { getEnv } from "@ledgerhq/live-env";
|
|
4
4
|
import { encodeERC1155OperationId, encodeERC721OperationId } from "./nft/nftOperationId";
|
|
5
|
-
import { findSubAccountById, getMainAccount } from "./account/helpers";
|
|
6
5
|
import { decodeAccountId } from "./account";
|
|
7
6
|
import { encodeNftId } from "./nft/nftId";
|
|
8
7
|
const nftOperationIdEncoderPerStandard = {
|
|
@@ -155,54 +154,23 @@ export const isAddressPoisoningOperation = (operation, account) => {
|
|
|
155
154
|
impactedFamilies.includes(account.token.parentCurrency.family) &&
|
|
156
155
|
operation.value.isZero());
|
|
157
156
|
};
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (!SUPPORTED_FAMILIES.includes(mainAccount.currency.family)) {
|
|
176
|
-
return undefined;
|
|
177
|
-
}
|
|
178
|
-
const now = new Date().getTime();
|
|
179
|
-
const stuckOperations = mainAccount.pendingOperations.filter(pendingOp => isEditableOperation(mainAccount, pendingOp) &&
|
|
180
|
-
now - pendingOp.date.getTime() > getEnv("ETHEREUM_STUCK_TRANSACTION_TIMEOUT"));
|
|
181
|
-
if (stuckOperations.length === 0) {
|
|
182
|
-
return undefined;
|
|
183
|
-
}
|
|
184
|
-
const oldestStuckOperation = stuckOperations.reduce((oldestOp, currentOp) => {
|
|
185
|
-
if (!oldestOp)
|
|
186
|
-
return currentOp;
|
|
187
|
-
return oldestOp.transactionSequenceNumber !== undefined &&
|
|
188
|
-
currentOp.transactionSequenceNumber !== undefined &&
|
|
189
|
-
oldestOp.transactionSequenceNumber > currentOp.transactionSequenceNumber
|
|
190
|
-
? currentOp
|
|
191
|
-
: oldestOp;
|
|
157
|
+
/**
|
|
158
|
+
* @param account The account of the transaction to edit
|
|
159
|
+
* @param nonce The nouce of the transaction to edit
|
|
160
|
+
* @returns true if the nonce corresponds to the oldest pending operation
|
|
161
|
+
*/
|
|
162
|
+
export const isOldestPendingOperation = (account, nonce) => {
|
|
163
|
+
/**
|
|
164
|
+
* The selected pending operation is the oldest if there is no pending
|
|
165
|
+
* operation with a lower transactionSequenceNumber
|
|
166
|
+
*/
|
|
167
|
+
return !account.pendingOperations.some(pendingOp => {
|
|
168
|
+
/**
|
|
169
|
+
* the pending operation must have a transactionSequenceNumberat this stage
|
|
170
|
+
* since it should have previously been broadcasted
|
|
171
|
+
*/
|
|
172
|
+
invariant(pendingOp.transactionSequenceNumber !== undefined, "transactionSequenceNumber required");
|
|
173
|
+
return pendingOp.transactionSequenceNumber < nonce;
|
|
192
174
|
});
|
|
193
|
-
|
|
194
|
-
stuckAccount = findSubAccountById(mainAccount, oldestStuckOperation.transactionRaw.subAccountId);
|
|
195
|
-
stuckParentAccount = mainAccount;
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
stuckAccount = mainAccount;
|
|
199
|
-
stuckParentAccount = undefined;
|
|
200
|
-
}
|
|
201
|
-
invariant(stuckAccount, "stuckAccount required");
|
|
202
|
-
return {
|
|
203
|
-
account: stuckAccount,
|
|
204
|
-
parentAccount: stuckParentAccount,
|
|
205
|
-
operation: oldestStuckOperation,
|
|
206
|
-
};
|
|
207
|
-
}
|
|
175
|
+
};
|
|
208
176
|
//# sourceMappingURL=operation.js.map
|