@ledgerhq/coin-hedera 1.13.0-nightly.2 → 1.13.0-nightly.20251030160608
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/.unimportedrc.json +1 -1
- package/CHANGELOG.md +16 -22
- package/jest.config.js +1 -1
- package/jest.integ.config.js +8 -0
- package/lib/api/index.d.ts +4 -0
- package/lib/api/index.d.ts.map +1 -0
- package/lib/api/index.js +119 -0
- package/lib/api/index.js.map +1 -0
- package/lib/bridge/broadcast.d.ts +1 -1
- package/lib/bridge/broadcast.d.ts.map +1 -1
- package/lib/bridge/broadcast.js +6 -9
- package/lib/bridge/broadcast.js.map +1 -1
- package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -1
- package/lib/bridge/buildOptimisticOperation.js +14 -11
- package/lib/bridge/buildOptimisticOperation.js.map +1 -1
- package/lib/bridge/createTransaction.d.ts +1 -1
- package/lib/bridge/createTransaction.d.ts.map +1 -1
- package/lib/bridge/createTransaction.js +2 -0
- package/lib/bridge/createTransaction.js.map +1 -1
- package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -1
- package/lib/bridge/estimateMaxSpendable.js +2 -2
- package/lib/bridge/estimateMaxSpendable.js.map +1 -1
- package/lib/bridge/getTransactionStatus.d.ts.map +1 -1
- package/lib/bridge/getTransactionStatus.js +11 -10
- package/lib/bridge/getTransactionStatus.js.map +1 -1
- package/lib/bridge/prepareTransaction.d.ts.map +1 -1
- package/lib/bridge/prepareTransaction.js +6 -5
- package/lib/bridge/prepareTransaction.js.map +1 -1
- package/lib/bridge/signOperation.d.ts +1 -1
- package/lib/bridge/signOperation.d.ts.map +1 -1
- package/lib/bridge/signOperation.js +53 -14
- package/lib/bridge/signOperation.js.map +1 -1
- package/lib/bridge/synchronisation.d.ts.map +1 -1
- package/lib/bridge/synchronisation.js +25 -12
- package/lib/bridge/synchronisation.js.map +1 -1
- package/lib/bridge/utils.d.ts +2 -14
- package/lib/bridge/utils.d.ts.map +1 -1
- package/lib/bridge/utils.js +26 -148
- package/lib/bridge/utils.js.map +1 -1
- package/lib/config.d.ts +8 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +9 -0
- package/lib/config.js.map +1 -0
- package/lib/constants.d.ts +11 -8
- package/lib/constants.d.ts.map +1 -1
- package/lib/constants.js +17 -13
- package/lib/constants.js.map +1 -1
- package/lib/deviceTransactionConfig.d.ts +1 -1
- package/lib/deviceTransactionConfig.d.ts.map +1 -1
- package/lib/deviceTransactionConfig.js +3 -3
- package/lib/deviceTransactionConfig.js.map +1 -1
- package/lib/logic/broadcast.d.ts +3 -0
- package/lib/logic/broadcast.d.ts.map +1 -0
- package/lib/logic/broadcast.js +11 -0
- package/lib/logic/broadcast.js.map +1 -0
- package/lib/logic/combine.d.ts +2 -0
- package/lib/logic/combine.d.ts.map +1 -0
- package/lib/logic/combine.js +19 -0
- package/lib/logic/combine.js.map +1 -0
- package/lib/logic/craftTransaction.d.ts +8 -0
- package/lib/logic/craftTransaction.d.ts.map +1 -0
- package/lib/logic/craftTransaction.js +107 -0
- package/lib/logic/craftTransaction.js.map +1 -0
- package/lib/logic/estimateFees.d.ts +5 -0
- package/lib/logic/estimateFees.d.ts.map +1 -0
- package/lib/logic/estimateFees.js +25 -0
- package/lib/logic/estimateFees.js.map +1 -0
- package/lib/logic/getAssetFromToken.d.ts +4 -0
- package/lib/logic/getAssetFromToken.d.ts.map +1 -0
- package/lib/logic/getAssetFromToken.js +14 -0
- package/lib/logic/getAssetFromToken.js.map +1 -0
- package/lib/logic/getBalance.d.ts +4 -0
- package/lib/logic/getBalance.d.ts.map +1 -0
- package/lib/logic/getBalance.js +36 -0
- package/lib/logic/getBalance.js.map +1 -0
- package/lib/logic/getTokenFromAsset.d.ts +4 -0
- package/lib/logic/getTokenFromAsset.d.ts.map +1 -0
- package/lib/logic/getTokenFromAsset.js +13 -0
- package/lib/logic/getTokenFromAsset.js.map +1 -0
- package/lib/logic/index.d.ts +10 -0
- package/lib/logic/index.d.ts.map +1 -0
- package/lib/logic/index.js +22 -0
- package/lib/logic/index.js.map +1 -0
- package/lib/logic/lastBlock.d.ts +12 -0
- package/lib/logic/lastBlock.d.ts.map +1 -0
- package/lib/logic/lastBlock.js +25 -0
- package/lib/logic/lastBlock.js.map +1 -0
- package/lib/logic/listOperations.d.ts +19 -0
- package/lib/logic/listOperations.d.ts.map +1 -0
- package/lib/logic/listOperations.js +179 -0
- package/lib/logic/listOperations.js.map +1 -0
- package/lib/logic/utils.d.ts +55 -0
- package/lib/logic/utils.d.ts.map +1 -0
- package/lib/logic/utils.js +197 -0
- package/lib/logic/utils.js.map +1 -0
- package/lib/network/api.d.ts +24 -0
- package/lib/network/api.d.ts.map +1 -0
- package/lib/network/api.js +119 -0
- package/lib/network/api.js.map +1 -0
- package/lib/network/rpc.d.ts +12 -0
- package/lib/network/rpc.d.ts.map +1 -0
- package/lib/network/rpc.js +22 -0
- package/lib/network/rpc.js.map +1 -0
- package/lib/{api → network}/utils.d.ts +1 -5
- package/lib/network/utils.d.ts.map +1 -0
- package/lib/network/utils.js +52 -0
- package/lib/network/utils.js.map +1 -0
- package/lib/test/bridgeDatasetTest.d.ts.map +1 -1
- package/lib/test/bridgeDatasetTest.js +5 -1
- package/lib/test/bridgeDatasetTest.js.map +1 -1
- package/lib/test/fixtures/account.fixture.d.ts +17 -0
- package/lib/test/fixtures/account.fixture.d.ts.map +1 -1
- package/lib/test/fixtures/account.fixture.js +18 -1
- package/lib/test/fixtures/account.fixture.js.map +1 -1
- package/lib/test/fixtures/currency.fixture.d.ts.map +1 -1
- package/lib/test/fixtures/currency.fixture.js +1 -1
- package/lib/test/fixtures/currency.fixture.js.map +1 -1
- package/lib/test/fixtures/mirror.fixture.d.ts +1 -1
- package/lib/test/fixtures/mirror.fixture.d.ts.map +1 -1
- package/lib/test/fixtures/network.fixture.d.ts +3 -0
- package/lib/test/fixtures/network.fixture.d.ts.map +1 -0
- package/lib/test/fixtures/network.fixture.js +9 -0
- package/lib/test/fixtures/network.fixture.js.map +1 -0
- package/lib/test/fixtures/transaction.fixture.d.ts.map +1 -1
- package/lib/test/fixtures/transaction.fixture.js +3 -0
- package/lib/test/fixtures/transaction.fixture.js.map +1 -1
- package/lib/transaction.d.ts +1 -1
- package/lib/transaction.d.ts.map +1 -1
- package/lib/transaction.js +35 -6
- package/lib/transaction.js.map +1 -1
- package/lib/types/alpaca.d.ts +3 -0
- package/lib/types/alpaca.d.ts.map +1 -0
- package/lib/{api/types.js → types/alpaca.js} +1 -1
- package/lib/types/alpaca.js.map +1 -0
- package/lib/types/bridge.d.ts +28 -9
- package/lib/types/bridge.d.ts.map +1 -1
- package/lib/types/index.d.ts +2 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +2 -0
- package/lib/types/index.js.map +1 -1
- package/lib/{api/types.d.ts → types/mirror.d.ts} +21 -2
- package/lib/types/mirror.d.ts.map +1 -0
- package/lib/types/mirror.js +3 -0
- package/lib/types/mirror.js.map +1 -0
- package/lib-es/api/index.d.ts +4 -0
- package/lib-es/api/index.d.ts.map +1 -0
- package/lib-es/api/index.js +112 -0
- package/lib-es/api/index.js.map +1 -0
- package/lib-es/bridge/broadcast.d.ts +1 -1
- package/lib-es/bridge/broadcast.d.ts.map +1 -1
- package/lib-es/bridge/broadcast.js +4 -7
- package/lib-es/bridge/broadcast.js.map +1 -1
- package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -1
- package/lib-es/bridge/buildOptimisticOperation.js +12 -9
- package/lib-es/bridge/buildOptimisticOperation.js.map +1 -1
- package/lib-es/bridge/createTransaction.d.ts +1 -1
- package/lib-es/bridge/createTransaction.d.ts.map +1 -1
- package/lib-es/bridge/createTransaction.js +2 -0
- package/lib-es/bridge/createTransaction.js.map +1 -1
- package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -1
- package/lib-es/bridge/estimateMaxSpendable.js +2 -2
- package/lib-es/bridge/estimateMaxSpendable.js.map +1 -1
- package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -1
- package/lib-es/bridge/getTransactionStatus.js +7 -6
- 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 +4 -3
- package/lib-es/bridge/prepareTransaction.js.map +1 -1
- package/lib-es/bridge/signOperation.d.ts +1 -1
- package/lib-es/bridge/signOperation.d.ts.map +1 -1
- package/lib-es/bridge/signOperation.js +53 -14
- package/lib-es/bridge/signOperation.js.map +1 -1
- package/lib-es/bridge/synchronisation.d.ts.map +1 -1
- package/lib-es/bridge/synchronisation.js +27 -14
- package/lib-es/bridge/synchronisation.js.map +1 -1
- package/lib-es/bridge/utils.d.ts +2 -14
- package/lib-es/bridge/utils.d.ts.map +1 -1
- package/lib-es/bridge/utils.js +22 -140
- package/lib-es/bridge/utils.js.map +1 -1
- package/lib-es/config.d.ts +8 -0
- package/lib-es/config.d.ts.map +1 -0
- package/lib-es/config.js +4 -0
- package/lib-es/config.js.map +1 -0
- package/lib-es/constants.d.ts +11 -8
- package/lib-es/constants.d.ts.map +1 -1
- package/lib-es/constants.js +13 -9
- package/lib-es/constants.js.map +1 -1
- package/lib-es/deviceTransactionConfig.d.ts +1 -1
- package/lib-es/deviceTransactionConfig.d.ts.map +1 -1
- package/lib-es/deviceTransactionConfig.js +1 -1
- package/lib-es/deviceTransactionConfig.js.map +1 -1
- package/lib-es/logic/broadcast.d.ts +3 -0
- package/lib-es/logic/broadcast.d.ts.map +1 -0
- package/lib-es/logic/broadcast.js +7 -0
- package/lib-es/logic/broadcast.js.map +1 -0
- package/lib-es/logic/combine.d.ts +2 -0
- package/lib-es/logic/combine.d.ts.map +1 -0
- package/lib-es/logic/combine.js +12 -0
- package/lib-es/logic/combine.js.map +1 -0
- package/lib-es/logic/craftTransaction.d.ts +8 -0
- package/lib-es/logic/craftTransaction.d.ts.map +1 -0
- package/lib-es/logic/craftTransaction.js +100 -0
- package/lib-es/logic/craftTransaction.js.map +1 -0
- package/lib-es/logic/estimateFees.d.ts +5 -0
- package/lib-es/logic/estimateFees.d.ts.map +1 -0
- package/lib-es/logic/estimateFees.js +18 -0
- package/lib-es/logic/estimateFees.js.map +1 -0
- package/lib-es/logic/getAssetFromToken.d.ts +4 -0
- package/lib-es/logic/getAssetFromToken.d.ts.map +1 -0
- package/lib-es/logic/getAssetFromToken.js +10 -0
- package/lib-es/logic/getAssetFromToken.js.map +1 -0
- package/lib-es/logic/getBalance.d.ts +4 -0
- package/lib-es/logic/getBalance.d.ts.map +1 -0
- package/lib-es/logic/getBalance.js +32 -0
- package/lib-es/logic/getBalance.js.map +1 -0
- package/lib-es/logic/getTokenFromAsset.d.ts +4 -0
- package/lib-es/logic/getTokenFromAsset.d.ts.map +1 -0
- package/lib-es/logic/getTokenFromAsset.js +9 -0
- package/lib-es/logic/getTokenFromAsset.js.map +1 -0
- package/lib-es/logic/index.d.ts +10 -0
- package/lib-es/logic/index.d.ts.map +1 -0
- package/lib-es/logic/index.js +10 -0
- package/lib-es/logic/index.js.map +1 -0
- package/lib-es/logic/lastBlock.d.ts +12 -0
- package/lib-es/logic/lastBlock.d.ts.map +1 -0
- package/lib-es/logic/lastBlock.js +21 -0
- package/lib-es/logic/lastBlock.js.map +1 -0
- package/lib-es/logic/listOperations.d.ts +19 -0
- package/lib-es/logic/listOperations.d.ts.map +1 -0
- package/lib-es/logic/listOperations.js +172 -0
- package/lib-es/logic/listOperations.js.map +1 -0
- package/lib-es/logic/utils.d.ts +55 -0
- package/lib-es/logic/utils.d.ts.map +1 -0
- package/lib-es/logic/utils.js +174 -0
- package/lib-es/logic/utils.js.map +1 -0
- package/lib-es/network/api.d.ts +24 -0
- package/lib-es/network/api.d.ts.map +1 -0
- package/lib-es/network/api.js +113 -0
- package/lib-es/network/api.js.map +1 -0
- package/lib-es/network/rpc.d.ts +12 -0
- package/lib-es/network/rpc.d.ts.map +1 -0
- package/lib-es/network/rpc.js +19 -0
- package/lib-es/network/rpc.js.map +1 -0
- package/lib-es/{api → network}/utils.d.ts +1 -5
- package/lib-es/network/utils.d.ts.map +1 -0
- package/lib-es/network/utils.js +45 -0
- package/lib-es/network/utils.js.map +1 -0
- package/lib-es/test/bridgeDatasetTest.d.ts.map +1 -1
- package/lib-es/test/bridgeDatasetTest.js +5 -1
- package/lib-es/test/bridgeDatasetTest.js.map +1 -1
- package/lib-es/test/fixtures/account.fixture.d.ts +17 -0
- package/lib-es/test/fixtures/account.fixture.d.ts.map +1 -1
- package/lib-es/test/fixtures/account.fixture.js +17 -0
- package/lib-es/test/fixtures/account.fixture.js.map +1 -1
- package/lib-es/test/fixtures/currency.fixture.d.ts.map +1 -1
- package/lib-es/test/fixtures/currency.fixture.js +1 -1
- package/lib-es/test/fixtures/currency.fixture.js.map +1 -1
- package/lib-es/test/fixtures/mirror.fixture.d.ts +1 -1
- package/lib-es/test/fixtures/mirror.fixture.d.ts.map +1 -1
- package/lib-es/test/fixtures/network.fixture.d.ts +3 -0
- package/lib-es/test/fixtures/network.fixture.d.ts.map +1 -0
- package/lib-es/test/fixtures/network.fixture.js +5 -0
- package/lib-es/test/fixtures/network.fixture.js.map +1 -0
- package/lib-es/test/fixtures/transaction.fixture.d.ts.map +1 -1
- package/lib-es/test/fixtures/transaction.fixture.js +3 -0
- package/lib-es/test/fixtures/transaction.fixture.js.map +1 -1
- package/lib-es/transaction.d.ts +1 -1
- package/lib-es/transaction.d.ts.map +1 -1
- package/lib-es/transaction.js +35 -6
- package/lib-es/transaction.js.map +1 -1
- package/lib-es/types/alpaca.d.ts +3 -0
- package/lib-es/types/alpaca.d.ts.map +1 -0
- package/lib-es/types/alpaca.js +2 -0
- package/lib-es/types/alpaca.js.map +1 -0
- package/lib-es/types/bridge.d.ts +28 -9
- package/lib-es/types/bridge.d.ts.map +1 -1
- package/lib-es/types/index.d.ts +2 -0
- package/lib-es/types/index.d.ts.map +1 -1
- package/lib-es/types/index.js +2 -0
- package/lib-es/types/index.js.map +1 -1
- package/lib-es/{api/types.d.ts → types/mirror.d.ts} +21 -2
- package/lib-es/types/mirror.d.ts.map +1 -0
- package/lib-es/types/mirror.js +2 -0
- package/lib-es/types/mirror.js.map +1 -0
- package/package.json +12 -13
- package/src/api/index.integ.test.ts +406 -0
- package/src/api/index.test.ts +30 -0
- package/src/api/index.ts +149 -0
- package/src/bridge/broadcast.ts +5 -10
- package/src/bridge/buildOptimisticOperation.integration.test.ts +8 -8
- package/src/bridge/buildOptimisticOperation.ts +13 -10
- package/src/bridge/createTransaction.ts +3 -1
- package/src/bridge/estimateMaxSpendable.ts +6 -3
- package/src/bridge/getTransactionStatus.test.ts +11 -10
- package/src/bridge/getTransactionStatus.ts +12 -11
- package/src/bridge/js-estimateMaxSpendable.integration.test.ts +6 -3
- package/src/bridge/prepareTransaction.test.ts +9 -17
- package/src/bridge/prepareTransaction.ts +5 -4
- package/src/bridge/serialization.test.ts +6 -6
- package/src/bridge/signOperation.ts +69 -16
- package/src/bridge/synchronisation.ts +26 -23
- package/src/bridge/utils.integration.test.ts +23 -269
- package/src/bridge/utils.ts +40 -207
- package/src/config.ts +7 -0
- package/src/constants.ts +15 -9
- package/src/deviceTransactionConfig.ts +2 -2
- package/src/logic/broadcast.test.ts +58 -0
- package/src/logic/broadcast.ts +8 -0
- package/src/logic/combine.test.ts +119 -0
- package/src/logic/combine.ts +14 -0
- package/src/logic/craftTransaction.test.ts +215 -0
- package/src/logic/craftTransaction.ts +175 -0
- package/src/logic/estimateFees.test.ts +99 -0
- package/src/logic/estimateFees.ts +28 -0
- package/src/logic/getAssetFromToken.test.ts +27 -0
- package/src/logic/getAssetFromToken.ts +12 -0
- package/src/logic/getBalance.test.ts +205 -0
- package/src/logic/getBalance.ts +42 -0
- package/src/logic/getTokenFromAsset.test.ts +33 -0
- package/src/logic/getTokenFromAsset.ts +17 -0
- package/src/logic/index.ts +9 -0
- package/src/logic/lastBlock.test.ts +23 -0
- package/src/logic/lastBlock.ts +23 -0
- package/src/logic/listOperations.test.ts +392 -0
- package/src/logic/listOperations.ts +247 -0
- package/src/logic/utils.test.ts +432 -0
- package/src/logic/utils.ts +255 -0
- package/src/{api/mirror.test.ts → network/api.test.ts} +81 -35
- package/src/network/api.ts +159 -0
- package/src/network/rpc.test.ts +68 -0
- package/src/network/rpc.ts +25 -0
- package/src/network/utils.test.ts +175 -0
- package/src/network/utils.ts +58 -0
- package/src/test/bridgeDatasetTest.ts +6 -2
- package/src/test/fixtures/account.fixture.ts +18 -0
- package/src/test/fixtures/currency.fixture.ts +1 -1
- package/src/test/fixtures/mirror.fixture.ts +1 -1
- package/src/test/fixtures/network.fixture.ts +6 -0
- package/src/test/fixtures/transaction.fixture.ts +5 -2
- package/src/transaction.ts +40 -9
- package/src/types/alpaca.ts +3 -0
- package/src/types/bridge.ts +36 -10
- package/src/types/index.ts +2 -0
- package/src/{api/types.ts → types/mirror.ts} +23 -1
- package/lib/api/mirror.d.ts +0 -6
- package/lib/api/mirror.d.ts.map +0 -1
- package/lib/api/mirror.js +0 -84
- package/lib/api/mirror.js.map +0 -1
- package/lib/api/network.d.ts +0 -11
- package/lib/api/network.d.ts.map +0 -1
- package/lib/api/network.js +0 -80
- package/lib/api/network.js.map +0 -1
- package/lib/api/types.d.ts.map +0 -1
- package/lib/api/types.js.map +0 -1
- package/lib/api/utils.d.ts.map +0 -1
- package/lib/api/utils.js +0 -132
- package/lib/api/utils.js.map +0 -1
- package/lib/logic.d.ts +0 -11
- package/lib/logic.d.ts.map +0 -1
- package/lib/logic.js +0 -37
- package/lib/logic.js.map +0 -1
- package/lib-es/api/mirror.d.ts +0 -6
- package/lib-es/api/mirror.d.ts.map +0 -1
- package/lib-es/api/mirror.js +0 -74
- package/lib-es/api/mirror.js.map +0 -1
- package/lib-es/api/network.d.ts +0 -11
- package/lib-es/api/network.d.ts.map +0 -1
- package/lib-es/api/network.js +0 -71
- package/lib-es/api/network.js.map +0 -1
- package/lib-es/api/types.d.ts.map +0 -1
- package/lib-es/api/types.js +0 -2
- package/lib-es/api/types.js.map +0 -1
- package/lib-es/api/utils.d.ts.map +0 -1
- package/lib-es/api/utils.js +0 -124
- package/lib-es/api/utils.js.map +0 -1
- package/lib-es/logic.d.ts +0 -11
- package/lib-es/logic.d.ts.map +0 -1
- package/lib-es/logic.js +0 -29
- package/lib-es/logic.js.map +0 -1
- package/src/api/mirror.ts +0 -91
- package/src/api/network.test.ts +0 -49
- package/src/api/network.ts +0 -125
- package/src/api/utils.ts +0 -150
- package/src/logic.test.ts +0 -152
- package/src/logic.ts +0 -66
|
@@ -1,50 +1,37 @@
|
|
|
1
1
|
import BigNumber from "bignumber.js";
|
|
2
|
-
import { InvalidAddress } from "@ledgerhq/errors";
|
|
3
|
-
import cvsApi from "@ledgerhq/live-countervalues/api/index";
|
|
4
2
|
import { encodeTokenAccountId } from "@ledgerhq/coin-framework/account";
|
|
3
|
+
import { setCryptoAssetsStore } from "@ledgerhq/coin-framework/crypto-assets/index";
|
|
4
|
+
import { legacyCryptoAssetsStore } from "@ledgerhq/cryptoassets/legacy/legacy-store";
|
|
5
|
+
import { HEDERA_OPERATION_TYPES, HEDERA_TRANSACTION_MODES } from "../constants";
|
|
6
|
+
import { estimateFees } from "../logic/estimateFees";
|
|
5
7
|
import { getMockedAccount, getMockedTokenAccount } from "../test/fixtures/account.fixture";
|
|
8
|
+
import { getMockedTokenCurrency, getTokenCurrencyFromCAL } from "../test/fixtures/currency.fixture";
|
|
6
9
|
import { getMockedTransaction } from "../test/fixtures/transaction.fixture";
|
|
10
|
+
import { getMockedOperation } from "../test/fixtures/operation.fixture";
|
|
11
|
+
import { getMockedMirrorToken } from "../test/fixtures/mirror.fixture";
|
|
12
|
+
import type { HederaOperationExtra } from "../types";
|
|
7
13
|
import {
|
|
8
14
|
applyPendingExtras,
|
|
9
15
|
calculateAmount,
|
|
10
|
-
checkAccountTokenAssociationStatus,
|
|
11
|
-
getCurrencyToUSDRate,
|
|
12
|
-
getEstimatedFees,
|
|
13
16
|
getSubAccounts,
|
|
14
|
-
getSyncHash,
|
|
15
17
|
mergeSubAccounts,
|
|
16
|
-
safeParseAccountId,
|
|
17
18
|
patchOperationWithExtra,
|
|
18
19
|
prepareOperations,
|
|
19
20
|
} from "./utils";
|
|
20
|
-
import {
|
|
21
|
-
getMockedCurrency,
|
|
22
|
-
getMockedTokenCurrency,
|
|
23
|
-
getTokenCurrencyFromCAL,
|
|
24
|
-
} from "../test/fixtures/currency.fixture";
|
|
25
|
-
import { getMockedOperation } from "../test/fixtures/operation.fixture";
|
|
26
|
-
import { HederaOperationExtra } from "../types";
|
|
27
|
-
import { getAccount } from "../api/mirror";
|
|
28
|
-
import { HederaRecipientInvalidChecksum } from "../errors";
|
|
29
|
-
import { isValidExtra } from "../logic";
|
|
30
|
-
import { getMockedMirrorToken } from "../test/fixtures/mirror.fixture";
|
|
31
|
-
import { HEDERA_OPERATION_TYPES, HEDERA_TRANSACTION_KINDS } from "../constants";
|
|
32
|
-
|
|
33
|
-
jest.mock("../api/mirror");
|
|
34
|
-
jest.mock("@ledgerhq/live-countervalues/api/index");
|
|
35
|
-
|
|
36
|
-
const mockedFetchLatest = cvsApi.fetchLatest as jest.MockedFunction<typeof cvsApi.fetchLatest>;
|
|
37
|
-
const mockedGetAccount = getAccount as jest.MockedFunction<typeof getAccount>;
|
|
38
21
|
|
|
39
22
|
describe("utils", () => {
|
|
23
|
+
beforeAll(() => {
|
|
24
|
+
setCryptoAssetsStore(legacyCryptoAssetsStore);
|
|
25
|
+
});
|
|
26
|
+
|
|
40
27
|
describe("calculateAmount", () => {
|
|
41
28
|
let estimatedFees: Record<"crypto" | "associate", BigNumber>;
|
|
42
29
|
|
|
43
30
|
beforeAll(async () => {
|
|
44
31
|
const mockedAccount = getMockedAccount();
|
|
45
32
|
const [crypto, associate] = await Promise.all([
|
|
46
|
-
|
|
47
|
-
|
|
33
|
+
estimateFees(mockedAccount.currency, HEDERA_OPERATION_TYPES.CryptoTransfer),
|
|
34
|
+
estimateFees(mockedAccount.currency, HEDERA_OPERATION_TYPES.TokenAssociate),
|
|
48
35
|
]);
|
|
49
36
|
|
|
50
37
|
estimatedFees = { crypto, associate };
|
|
@@ -131,8 +118,8 @@ describe("utils", () => {
|
|
|
131
118
|
const mockedTransaction = getMockedTransaction({
|
|
132
119
|
useAllAmount: false,
|
|
133
120
|
amount: new BigNumber(1),
|
|
121
|
+
mode: HEDERA_TRANSACTION_MODES.TokenAssociate,
|
|
134
122
|
properties: {
|
|
135
|
-
name: HEDERA_TRANSACTION_KINDS.TokenAssociate.name,
|
|
136
123
|
token: mockedTokenCurrency,
|
|
137
124
|
},
|
|
138
125
|
});
|
|
@@ -149,101 +136,6 @@ describe("utils", () => {
|
|
|
149
136
|
});
|
|
150
137
|
});
|
|
151
138
|
|
|
152
|
-
describe("getEstimatedFees", () => {
|
|
153
|
-
const mockedAccount = getMockedAccount();
|
|
154
|
-
|
|
155
|
-
beforeEach(() => {
|
|
156
|
-
jest.clearAllMocks();
|
|
157
|
-
// reset LRU cache to make sure all tests receive correct mocks from mockedFetchLatest
|
|
158
|
-
getCurrencyToUSDRate.clear(mockedAccount.currency.ticker);
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
test("returns estimated fee based on USD rate for CryptoTransfer", async () => {
|
|
162
|
-
// 1 HBAR = 1 USD
|
|
163
|
-
const usdRate = 1;
|
|
164
|
-
mockedFetchLatest.mockResolvedValueOnce([usdRate]);
|
|
165
|
-
|
|
166
|
-
const result = await getEstimatedFees(mockedAccount, HEDERA_OPERATION_TYPES.CryptoTransfer);
|
|
167
|
-
|
|
168
|
-
const baseFeeTinybar = 0.0001 * 10 ** 8;
|
|
169
|
-
const expectedFee = new BigNumber(baseFeeTinybar)
|
|
170
|
-
.div(usdRate)
|
|
171
|
-
.integerValue(BigNumber.ROUND_CEIL)
|
|
172
|
-
.multipliedBy(2); // safety rate
|
|
173
|
-
|
|
174
|
-
expect(result.toFixed()).toBe(expectedFee.toFixed());
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
test("returns estimated fee based on USD rate for TokenTransfer", async () => {
|
|
178
|
-
// 1 HBAR = 0.5 USD
|
|
179
|
-
const usdRate = 0.5;
|
|
180
|
-
mockedFetchLatest.mockResolvedValueOnce([usdRate]);
|
|
181
|
-
|
|
182
|
-
const result = await getEstimatedFees(mockedAccount, HEDERA_OPERATION_TYPES.TokenTransfer);
|
|
183
|
-
|
|
184
|
-
const baseFeeTinybar = 0.001 * 10 ** 8;
|
|
185
|
-
const expectedFee = new BigNumber(baseFeeTinybar)
|
|
186
|
-
.div(usdRate)
|
|
187
|
-
.integerValue(BigNumber.ROUND_CEIL)
|
|
188
|
-
.multipliedBy(2);
|
|
189
|
-
|
|
190
|
-
expect(result.toFixed()).toBe(expectedFee.toFixed());
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
test("returns estimated fee based on USD rate for TokenAssociate", async () => {
|
|
194
|
-
// 1 HBAR = 2 USD
|
|
195
|
-
const usdRate = 2;
|
|
196
|
-
mockedFetchLatest.mockResolvedValueOnce([usdRate]);
|
|
197
|
-
|
|
198
|
-
const result = await getEstimatedFees(mockedAccount, HEDERA_OPERATION_TYPES.TokenAssociate);
|
|
199
|
-
|
|
200
|
-
const baseFeeTinybar = 0.05 * 10 ** 8;
|
|
201
|
-
const expectedFee = new BigNumber(baseFeeTinybar)
|
|
202
|
-
.div(usdRate)
|
|
203
|
-
.integerValue(BigNumber.ROUND_CEIL)
|
|
204
|
-
.multipliedBy(2);
|
|
205
|
-
|
|
206
|
-
expect(result.toFixed()).toBe(expectedFee.toFixed());
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
test("falls back to default estimate when cvs api returns null", async () => {
|
|
210
|
-
const usdRate = null;
|
|
211
|
-
mockedFetchLatest.mockResolvedValueOnce([usdRate]);
|
|
212
|
-
|
|
213
|
-
const result = await getEstimatedFees(mockedAccount, HEDERA_OPERATION_TYPES.CryptoTransfer);
|
|
214
|
-
|
|
215
|
-
const expected = new BigNumber("150200").multipliedBy(2);
|
|
216
|
-
expect(result.toFixed()).toBe(expected.toFixed());
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
test("falls back to default estimate on cvs api failure", async () => {
|
|
220
|
-
mockedFetchLatest.mockRejectedValueOnce(new Error("Network error"));
|
|
221
|
-
|
|
222
|
-
const result = await getEstimatedFees(mockedAccount, HEDERA_OPERATION_TYPES.CryptoTransfer);
|
|
223
|
-
|
|
224
|
-
const expected = new BigNumber("150200").multipliedBy(2);
|
|
225
|
-
expect(result.toFixed()).toBe(expected.toFixed());
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
describe("getSyncHash", () => {
|
|
230
|
-
const mockedCurrency = getMockedCurrency();
|
|
231
|
-
|
|
232
|
-
test("returns a consistent hash for same input", () => {
|
|
233
|
-
const hash1 = getSyncHash(mockedCurrency, []);
|
|
234
|
-
const hash2 = getSyncHash(mockedCurrency, []);
|
|
235
|
-
|
|
236
|
-
expect(hash2).toBe(hash1);
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
test("produces different hash if blacklistedTokenIds changes", () => {
|
|
240
|
-
const hash1 = getSyncHash(mockedCurrency, []);
|
|
241
|
-
const hash2 = getSyncHash(mockedCurrency, ["random_token"]);
|
|
242
|
-
|
|
243
|
-
expect(hash1).not.toBe(hash2);
|
|
244
|
-
});
|
|
245
|
-
});
|
|
246
|
-
|
|
247
139
|
describe("getSubAccounts", () => {
|
|
248
140
|
test("returns sub account based on operations and mirror tokens", async () => {
|
|
249
141
|
const firstTokenCurrencyFromCAL = getTokenCurrencyFromCAL(0);
|
|
@@ -307,14 +199,14 @@ describe("utils", () => {
|
|
|
307
199
|
expect(result).toHaveLength(1);
|
|
308
200
|
expect(result[0].token).toEqual(tokenCurrencyFromCAL);
|
|
309
201
|
expect(result[0].operations).toHaveLength(0);
|
|
310
|
-
expect(result[0].balance
|
|
202
|
+
expect(result[0].balance).toEqual(new BigNumber(42));
|
|
311
203
|
});
|
|
312
204
|
});
|
|
313
205
|
|
|
314
206
|
describe("prepareOperations", () => {
|
|
315
207
|
const tokenCurrencyFromCAL = getTokenCurrencyFromCAL(0);
|
|
316
208
|
|
|
317
|
-
test("links token operation to existing coin operation with matching hash", () => {
|
|
209
|
+
test("links token operation to existing coin operation with matching hash", async () => {
|
|
318
210
|
const mockedTokenAccount = getMockedTokenAccount(tokenCurrencyFromCAL);
|
|
319
211
|
const mockedCoinOperation = getMockedOperation({ hash: "shared" });
|
|
320
212
|
const mockedTokenOperation = getMockedOperation({
|
|
@@ -322,20 +214,20 @@ describe("utils", () => {
|
|
|
322
214
|
accountId: encodeTokenAccountId(mockedTokenAccount.parentId, tokenCurrencyFromCAL),
|
|
323
215
|
});
|
|
324
216
|
|
|
325
|
-
const result = prepareOperations([mockedCoinOperation], [mockedTokenOperation]
|
|
217
|
+
const result = await prepareOperations([mockedCoinOperation], [mockedTokenOperation]);
|
|
326
218
|
|
|
327
219
|
expect(result).toHaveLength(1);
|
|
328
220
|
expect(result[0].subOperations).toEqual([mockedTokenOperation]);
|
|
329
221
|
});
|
|
330
222
|
|
|
331
|
-
test("creates NONE coin operation as parent if no coin op with matching hash exists", () => {
|
|
223
|
+
test("creates NONE coin operation as parent if no coin op with matching hash exists", async () => {
|
|
332
224
|
const mockedTokenAccount = getMockedTokenAccount(tokenCurrencyFromCAL);
|
|
333
225
|
const mockedOrphanTokenOperation = getMockedOperation({
|
|
334
226
|
hash: "unknown-hash",
|
|
335
227
|
accountId: encodeTokenAccountId(mockedTokenAccount.parentId, tokenCurrencyFromCAL),
|
|
336
228
|
});
|
|
337
229
|
|
|
338
|
-
const result = prepareOperations([], [mockedOrphanTokenOperation]
|
|
230
|
+
const result = await prepareOperations([], [mockedOrphanTokenOperation]);
|
|
339
231
|
const noneOp = result.find(op => op.type === "NONE");
|
|
340
232
|
|
|
341
233
|
expect(typeof noneOp).toBe("object");
|
|
@@ -343,42 +235,6 @@ describe("utils", () => {
|
|
|
343
235
|
expect(noneOp?.subOperations?.[0]).toEqual(mockedOrphanTokenOperation);
|
|
344
236
|
expect(noneOp?.hash).toBe("unknown-hash");
|
|
345
237
|
});
|
|
346
|
-
|
|
347
|
-
test("adds associatedTokenId to ASSOCIATE_TOKEN coin operation based on consensusTimestamp", () => {
|
|
348
|
-
const mockedCoinOperation = getMockedOperation({
|
|
349
|
-
type: "ASSOCIATE_TOKEN",
|
|
350
|
-
extra: { consensusTimestamp: "123" },
|
|
351
|
-
});
|
|
352
|
-
const mockedMirrorToken = getMockedMirrorToken({
|
|
353
|
-
token_id: "0.0.1001",
|
|
354
|
-
created_timestamp: "123",
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
const result = prepareOperations([mockedCoinOperation], [], [mockedMirrorToken]);
|
|
358
|
-
const extra = isValidExtra(result[0].extra) ? result[0].extra : null;
|
|
359
|
-
|
|
360
|
-
expect(typeof extra).toBe("object");
|
|
361
|
-
expect(extra).not.toBeNull();
|
|
362
|
-
expect(extra?.associatedTokenId).toBe("0.0.1001");
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
test("ignores enrichment of ASSOCIATE_TOKEN operation if consensusTimestamp mismatches", () => {
|
|
366
|
-
const mockedCoinOperation = getMockedOperation({
|
|
367
|
-
type: "ASSOCIATE_TOKEN",
|
|
368
|
-
extra: { consensusTimestamp: "123" },
|
|
369
|
-
});
|
|
370
|
-
const mockedMirrorToken = getMockedMirrorToken({
|
|
371
|
-
token_id: "0.0.1001",
|
|
372
|
-
created_timestamp: "999",
|
|
373
|
-
});
|
|
374
|
-
|
|
375
|
-
const result = prepareOperations([mockedCoinOperation], [], [mockedMirrorToken]);
|
|
376
|
-
const extra = isValidExtra(result[0].extra) ? result[0].extra : null;
|
|
377
|
-
|
|
378
|
-
expect(typeof extra).toBe("object");
|
|
379
|
-
expect(extra).not.toBeNull();
|
|
380
|
-
expect(extra?.associatedTokenId).toBeUndefined();
|
|
381
|
-
});
|
|
382
238
|
});
|
|
383
239
|
|
|
384
240
|
describe("mergeSubAccounts", () => {
|
|
@@ -450,6 +306,7 @@ describe("utils", () => {
|
|
|
450
306
|
|
|
451
307
|
const result = applyPendingExtras([mockedOperation1], [mockedPendingOperation1]);
|
|
452
308
|
|
|
309
|
+
expect(result).toHaveLength(1);
|
|
453
310
|
expect(result[0].extra).toEqual({
|
|
454
311
|
...mockedOperation1.extra,
|
|
455
312
|
...mockedPendingOperation1.extra,
|
|
@@ -464,6 +321,7 @@ describe("utils", () => {
|
|
|
464
321
|
const mockedPendingOperation = getMockedOperation({ hash: "op1", extra: pendingExtra });
|
|
465
322
|
|
|
466
323
|
const result = applyPendingExtras([mockedOperation], [mockedPendingOperation]);
|
|
324
|
+
expect(result).toHaveLength(1);
|
|
467
325
|
expect(result[0].extra).toEqual(mockedOperation.extra);
|
|
468
326
|
});
|
|
469
327
|
});
|
|
@@ -484,112 +342,8 @@ describe("utils", () => {
|
|
|
484
342
|
const patched = patchOperationWithExtra(mockedOperation, extra);
|
|
485
343
|
|
|
486
344
|
expect(patched.extra).toEqual(extra);
|
|
345
|
+
expect(patched.subOperations).toHaveLength(1);
|
|
487
346
|
expect(patched.subOperations?.[0].extra).toEqual(extra);
|
|
488
347
|
});
|
|
489
348
|
});
|
|
490
|
-
|
|
491
|
-
describe("checkAccountTokenAssociationStatus", () => {
|
|
492
|
-
const accountId = "0.0.1234";
|
|
493
|
-
const tokenId = "0.0.5678";
|
|
494
|
-
|
|
495
|
-
beforeEach(() => {
|
|
496
|
-
jest.clearAllMocks();
|
|
497
|
-
// reset LRU cache to make sure all tests receive correct mocks from mockedGetAccount
|
|
498
|
-
checkAccountTokenAssociationStatus.clear(`${accountId}-${tokenId}`);
|
|
499
|
-
});
|
|
500
|
-
|
|
501
|
-
test("returns true if max_automatic_token_associations === -1", async () => {
|
|
502
|
-
mockedGetAccount.mockResolvedValueOnce({
|
|
503
|
-
account: accountId,
|
|
504
|
-
max_automatic_token_associations: -1,
|
|
505
|
-
balance: {
|
|
506
|
-
balance: 0,
|
|
507
|
-
timestamp: "",
|
|
508
|
-
tokens: [],
|
|
509
|
-
},
|
|
510
|
-
});
|
|
511
|
-
|
|
512
|
-
const result = await checkAccountTokenAssociationStatus(accountId, tokenId);
|
|
513
|
-
expect(result).toBe(true);
|
|
514
|
-
});
|
|
515
|
-
|
|
516
|
-
test("returns true if token is already associated", async () => {
|
|
517
|
-
mockedGetAccount.mockResolvedValueOnce({
|
|
518
|
-
account: accountId,
|
|
519
|
-
max_automatic_token_associations: 0,
|
|
520
|
-
balance: {
|
|
521
|
-
balance: 1,
|
|
522
|
-
timestamp: "",
|
|
523
|
-
tokens: [{ token_id: tokenId, balance: 1 }],
|
|
524
|
-
},
|
|
525
|
-
});
|
|
526
|
-
|
|
527
|
-
const result = await checkAccountTokenAssociationStatus(accountId, tokenId);
|
|
528
|
-
expect(result).toBe(true);
|
|
529
|
-
});
|
|
530
|
-
|
|
531
|
-
test("returns false if token is not associated", async () => {
|
|
532
|
-
mockedGetAccount.mockResolvedValueOnce({
|
|
533
|
-
account: accountId,
|
|
534
|
-
max_automatic_token_associations: 0,
|
|
535
|
-
balance: {
|
|
536
|
-
balance: 1,
|
|
537
|
-
timestamp: "",
|
|
538
|
-
tokens: [{ token_id: "0.0.9999", balance: 1 }],
|
|
539
|
-
},
|
|
540
|
-
});
|
|
541
|
-
|
|
542
|
-
const result = await checkAccountTokenAssociationStatus(accountId, tokenId);
|
|
543
|
-
expect(result).toBe(false);
|
|
544
|
-
});
|
|
545
|
-
|
|
546
|
-
test("supports addresses with checksum", async () => {
|
|
547
|
-
const addressWithChecksum = "0.0.9124531-xrxlv";
|
|
548
|
-
|
|
549
|
-
mockedGetAccount.mockResolvedValueOnce({
|
|
550
|
-
account: accountId,
|
|
551
|
-
max_automatic_token_associations: 0,
|
|
552
|
-
balance: {
|
|
553
|
-
balance: 1,
|
|
554
|
-
timestamp: "",
|
|
555
|
-
tokens: [{ token_id: "0.0.9999", balance: 1 }],
|
|
556
|
-
},
|
|
557
|
-
});
|
|
558
|
-
|
|
559
|
-
await checkAccountTokenAssociationStatus(addressWithChecksum, tokenId);
|
|
560
|
-
expect(mockedGetAccount).toHaveBeenCalledWith("0.0.9124531");
|
|
561
|
-
});
|
|
562
|
-
});
|
|
563
|
-
|
|
564
|
-
describe("safeParseAccountId", () => {
|
|
565
|
-
test("returns account id and no checksum for valid address without checksum", () => {
|
|
566
|
-
const [error, result] = safeParseAccountId("0.0.9124531");
|
|
567
|
-
|
|
568
|
-
expect(error).toBeNull();
|
|
569
|
-
expect(result?.accountId).toBe("0.0.9124531");
|
|
570
|
-
expect(result?.checksum).toBeNull();
|
|
571
|
-
});
|
|
572
|
-
|
|
573
|
-
test("returns account id and checksum for valid address with correct checksum", () => {
|
|
574
|
-
const [error, result] = safeParseAccountId("0.0.9124531-xrxlv");
|
|
575
|
-
|
|
576
|
-
expect(error).toBeNull();
|
|
577
|
-
expect(result?.accountId).toBe("0.0.9124531");
|
|
578
|
-
expect(result?.checksum).toBe("xrxlv");
|
|
579
|
-
});
|
|
580
|
-
|
|
581
|
-
test("returns error for valid address with incorrect checksum", () => {
|
|
582
|
-
const [error, accountId] = safeParseAccountId("0.0.9124531-invld");
|
|
583
|
-
|
|
584
|
-
expect(error).toBeInstanceOf(HederaRecipientInvalidChecksum);
|
|
585
|
-
expect(accountId).toBeNull();
|
|
586
|
-
});
|
|
587
|
-
|
|
588
|
-
test("returns error for invalid address format", () => {
|
|
589
|
-
const [error, accountId] = safeParseAccountId("not-a-valid-address");
|
|
590
|
-
|
|
591
|
-
expect(error).toBeInstanceOf(InvalidAddress);
|
|
592
|
-
expect(accountId).toBeNull();
|
|
593
|
-
});
|
|
594
|
-
});
|
|
595
349
|
});
|