@ledgerhq/coin-evm 0.2.1 → 0.2.2-nightly.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +11 -46
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +29 -1
- package/lib/__tests__/adapters.unit.test.d.ts +2 -0
- package/lib/__tests__/adapters.unit.test.d.ts.map +1 -0
- package/lib/__tests__/adapters.unit.test.js +455 -0
- package/lib/__tests__/adapters.unit.test.js.map +1 -0
- package/lib/__tests__/broadcast.unit.test.d.ts +2 -0
- package/lib/__tests__/broadcast.unit.test.d.ts.map +1 -0
- package/lib/__tests__/broadcast.unit.test.js +181 -0
- package/lib/__tests__/broadcast.unit.test.js.map +1 -0
- package/lib/__tests__/buildOptimisticOperation.unit.test.d.ts +2 -0
- package/lib/__tests__/buildOptimisticOperation.unit.test.d.ts.map +1 -0
- package/lib/__tests__/buildOptimisticOperation.unit.test.js +166 -0
- package/lib/__tests__/buildOptimisticOperation.unit.test.js.map +1 -0
- package/lib/__tests__/createTransaction.unit.test.d.ts +2 -0
- package/lib/__tests__/createTransaction.unit.test.d.ts.map +1 -0
- package/lib/__tests__/createTransaction.unit.test.js +50 -0
- package/lib/__tests__/createTransaction.unit.test.js.map +1 -0
- package/lib/__tests__/deviceTransactionConfig.unit.test.d.ts +2 -0
- package/lib/__tests__/deviceTransactionConfig.unit.test.d.ts.map +1 -0
- package/lib/__tests__/deviceTransactionConfig.unit.test.js +231 -0
- package/lib/__tests__/deviceTransactionConfig.unit.test.js.map +1 -0
- package/lib/__tests__/estimateMaxSpendable.unit.test.d.ts +2 -0
- package/lib/__tests__/estimateMaxSpendable.unit.test.d.ts.map +1 -0
- package/lib/__tests__/estimateMaxSpendable.unit.test.js +145 -0
- package/lib/__tests__/estimateMaxSpendable.unit.test.js.map +1 -0
- package/lib/__tests__/gasTracker/index.unit.test.d.ts +2 -0
- package/lib/__tests__/gasTracker/index.unit.test.d.ts.map +1 -0
- package/lib/__tests__/gasTracker/index.unit.test.js +35 -0
- package/lib/__tests__/gasTracker/index.unit.test.js.map +1 -0
- package/lib/__tests__/gasTracker/ledger.unit.test.d.ts +2 -0
- package/lib/__tests__/gasTracker/ledger.unit.test.d.ts.map +1 -0
- package/lib/__tests__/gasTracker/ledger.unit.test.js +110 -0
- package/lib/__tests__/gasTracker/ledger.unit.test.js.map +1 -0
- package/lib/__tests__/getTransactionStatus.unit.test.d.ts +2 -0
- package/lib/__tests__/getTransactionStatus.unit.test.d.ts.map +1 -0
- package/lib/__tests__/getTransactionStatus.unit.test.js +216 -0
- package/lib/__tests__/getTransactionStatus.unit.test.js.map +1 -0
- package/lib/__tests__/hw-getAddress.unit.test.d.ts +2 -0
- package/lib/__tests__/hw-getAddress.unit.test.d.ts.map +1 -0
- package/lib/__tests__/hw-getAddress.unit.test.js +47 -0
- package/lib/__tests__/hw-getAddress.unit.test.js.map +1 -0
- package/lib/__tests__/logic.unit.test.d.ts +2 -0
- package/lib/__tests__/logic.unit.test.d.ts.map +1 -0
- package/lib/__tests__/logic.unit.test.js +296 -0
- package/lib/__tests__/logic.unit.test.js.map +1 -0
- package/lib/__tests__/preload.unit.test.d.ts +2 -0
- package/lib/__tests__/preload.unit.test.d.ts.map +1 -0
- package/lib/__tests__/preload.unit.test.js +149 -0
- package/lib/__tests__/preload.unit.test.js.map +1 -0
- package/lib/__tests__/prepareTransaction.unit.test.d.ts +2 -0
- package/lib/__tests__/prepareTransaction.unit.test.d.ts.map +1 -0
- package/lib/__tests__/prepareTransaction.unit.test.js +248 -0
- package/lib/__tests__/prepareTransaction.unit.test.js.map +1 -0
- package/lib/__tests__/rpc.unit.test.d.ts +2 -0
- package/lib/__tests__/rpc.unit.test.d.ts.map +1 -0
- package/lib/__tests__/rpc.unit.test.js +444 -0
- package/lib/__tests__/rpc.unit.test.js.map +1 -0
- package/lib/__tests__/signOperation.unit.test.d.ts +2 -0
- package/lib/__tests__/signOperation.unit.test.d.ts.map +1 -0
- package/lib/__tests__/signOperation.unit.test.js +160 -0
- package/lib/__tests__/signOperation.unit.test.js.map +1 -0
- package/lib/__tests__/synchronization.unit.test.d.ts +2 -0
- package/lib/__tests__/synchronization.unit.test.d.ts.map +1 -0
- package/lib/__tests__/synchronization.unit.test.js +499 -0
- package/lib/__tests__/synchronization.unit.test.js.map +1 -0
- package/lib/__tests__/transaction.unit.test.d.ts +2 -0
- package/lib/__tests__/transaction.unit.test.d.ts.map +1 -0
- package/lib/__tests__/transaction.unit.test.js +201 -0
- package/lib/__tests__/transaction.unit.test.js.map +1 -0
- package/lib/abis/erc20.abi.json +222 -0
- package/lib/abis/optimismGasPriceOracle.abi.json +252 -0
- package/lib/adapters.d.ts +21 -0
- package/lib/adapters.d.ts.map +1 -0
- package/lib/adapters.js +118 -0
- package/lib/adapters.js.map +1 -0
- package/lib/api/explorer/etherscan.d.ts +24 -0
- package/lib/api/explorer/etherscan.d.ts.map +1 -0
- package/lib/api/explorer/etherscan.js +90 -0
- package/lib/api/explorer/etherscan.js.map +1 -0
- package/lib/api/explorer/index.d.ts +26 -0
- package/lib/api/explorer/index.d.ts.map +1 -0
- package/lib/api/explorer/index.js +23 -0
- package/lib/api/explorer/index.js.map +1 -0
- package/lib/api/gasTracker/index.d.ts +13 -0
- package/lib/api/gasTracker/index.d.ts.map +1 -0
- package/lib/api/gasTracker/index.js +21 -0
- package/lib/api/gasTracker/index.js.map +1 -0
- package/lib/api/gasTracker/ledger.d.ts +9 -0
- package/lib/api/gasTracker/ledger.d.ts.map +1 -0
- package/lib/api/gasTracker/ledger.js +90 -0
- package/lib/api/gasTracker/ledger.js.map +1 -0
- package/lib/api/rpc/index.d.ts +3 -0
- package/lib/api/rpc/index.d.ts.map +1 -0
- package/lib/api/rpc/index.js +32 -0
- package/lib/api/rpc/index.js.map +1 -0
- package/lib/api/rpc/rpc.common.d.ts +93 -0
- package/lib/api/rpc/rpc.common.d.ts.map +1 -0
- package/lib/api/rpc/rpc.common.js +284 -0
- package/lib/api/rpc/rpc.common.js.map +1 -0
- package/lib/api/rpc/rpc.native.d.ts +6 -0
- package/lib/api/rpc/rpc.native.d.ts.map +1 -0
- package/lib/api/rpc/rpc.native.js +35 -0
- package/lib/api/rpc/rpc.native.js.map +1 -0
- package/lib/bridge/js.d.ts +11 -0
- package/lib/bridge/js.d.ts.map +1 -0
- package/lib/bridge/js.js +58 -0
- package/lib/bridge/js.js.map +1 -0
- package/lib/bridge.integration.test.d.ts +14 -0
- package/lib/bridge.integration.test.d.ts.map +1 -0
- package/lib/bridge.integration.test.js +85 -0
- package/lib/bridge.integration.test.js.map +1 -0
- package/lib/broadcast.d.ts +8 -0
- package/lib/broadcast.d.ts.map +1 -0
- package/lib/broadcast.js +25 -0
- package/lib/broadcast.js.map +1 -0
- package/lib/buildOptimisticOperation.d.ts +16 -0
- package/lib/buildOptimisticOperation.d.ts.map +1 -0
- package/lib/buildOptimisticOperation.js +80 -0
- package/lib/buildOptimisticOperation.js.map +1 -0
- package/lib/cli-transaction.d.ts +2 -0
- package/lib/cli-transaction.d.ts.map +1 -0
- package/lib/cli-transaction.js +9 -0
- package/lib/cli-transaction.js.map +1 -0
- package/lib/createTransaction.d.ts +9 -0
- package/lib/createTransaction.d.ts.map +1 -0
- package/lib/createTransaction.js +32 -0
- package/lib/createTransaction.js.map +1 -0
- package/lib/datasets/ethereum.scanAccounts.1.d.ts +7 -0
- package/lib/datasets/ethereum.scanAccounts.1.d.ts.map +1 -0
- package/lib/datasets/ethereum.scanAccounts.1.js +51 -0
- package/lib/datasets/ethereum.scanAccounts.1.js.map +1 -0
- package/lib/datasets/ethereum1.d.ts +3 -0
- package/lib/datasets/ethereum1.d.ts.map +1 -0
- package/lib/datasets/ethereum1.js +22 -0
- package/lib/datasets/ethereum1.js.map +1 -0
- package/lib/datasets/ethereum2.d.ts +3 -0
- package/lib/datasets/ethereum2.d.ts.map +1 -0
- package/lib/datasets/ethereum2.js +22 -0
- package/lib/datasets/ethereum2.js.map +1 -0
- package/lib/datasets/ethereum_classic.d.ts +5 -0
- package/lib/datasets/ethereum_classic.d.ts.map +1 -0
- package/lib/datasets/ethereum_classic.js +69 -0
- package/lib/datasets/ethereum_classic.js.map +1 -0
- package/lib/deviceTransactionConfig.d.ts +15 -0
- package/lib/deviceTransactionConfig.d.ts.map +1 -0
- package/lib/deviceTransactionConfig.js +44 -0
- package/lib/deviceTransactionConfig.js.map +1 -0
- package/lib/errors.d.ts +16 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +11 -0
- package/lib/errors.js.map +1 -0
- package/lib/estimateMaxSpendable.d.ts +4 -0
- package/lib/estimateMaxSpendable.d.ts.map +1 -0
- package/lib/estimateMaxSpendable.js +23 -0
- package/lib/estimateMaxSpendable.js.map +1 -0
- package/lib/getTransactionStatus.d.ts +23 -0
- package/lib/getTransactionStatus.d.ts.map +1 -0
- package/lib/getTransactionStatus.js +132 -0
- package/lib/getTransactionStatus.js.map +1 -0
- package/lib/hw-getAddress.d.ts +6 -0
- package/lib/hw-getAddress.d.ts.map +1 -0
- package/lib/hw-getAddress.js +28 -0
- package/lib/hw-getAddress.js.map +1 -0
- package/lib/logic.d.ts +31 -0
- package/lib/logic.d.ts.map +1 -0
- package/lib/logic.js +131 -0
- package/lib/logic.js.map +1 -0
- package/lib/preload.d.ts +6 -0
- package/lib/preload.d.ts.map +1 -0
- package/lib/preload.js +58 -0
- package/lib/preload.js.map +1 -0
- package/lib/prepareTransaction.d.ts +26 -0
- package/lib/prepareTransaction.d.ts.map +1 -0
- package/lib/prepareTransaction.js +128 -0
- package/lib/prepareTransaction.js.map +1 -0
- package/lib/signOperation.d.ts +18 -0
- package/lib/signOperation.d.ts.map +1 -0
- package/lib/signOperation.js +88 -0
- package/lib/signOperation.js.map +1 -0
- package/lib/signer.d.ts +27 -0
- package/lib/signer.d.ts.map +1 -0
- package/lib/signer.js +3 -0
- package/lib/signer.js.map +1 -0
- package/lib/specs.d.ts +3 -0
- package/lib/specs.d.ts.map +1 -0
- package/lib/specs.js +238 -0
- package/lib/specs.js.map +1 -0
- package/lib/speculos-deviceActions.d.ts +8 -0
- package/lib/speculos-deviceActions.d.ts.map +1 -0
- package/lib/speculos-deviceActions.js +66 -0
- package/lib/speculos-deviceActions.js.map +1 -0
- package/lib/synchronization.d.ts +27 -0
- package/lib/synchronization.d.ts.map +1 -0
- package/lib/synchronization.js +220 -0
- package/lib/synchronization.js.map +1 -0
- package/lib/testUtils.d.ts +6 -0
- package/lib/testUtils.d.ts.map +1 -0
- package/lib/testUtils.js +111 -0
- package/lib/testUtils.js.map +1 -0
- package/lib/transaction.d.ts +43 -0
- package/lib/transaction.d.ts.map +1 -0
- package/lib/transaction.js +124 -0
- package/lib/transaction.js.map +1 -0
- package/lib/types.d.ts +111 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib-es/__tests__/adapters.unit.test.d.ts +2 -0
- package/lib-es/__tests__/adapters.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/adapters.unit.test.js +450 -0
- package/lib-es/__tests__/adapters.unit.test.js.map +1 -0
- package/lib-es/__tests__/broadcast.unit.test.d.ts +2 -0
- package/lib-es/__tests__/broadcast.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/broadcast.unit.test.js +153 -0
- package/lib-es/__tests__/broadcast.unit.test.js.map +1 -0
- package/lib-es/__tests__/buildOptimisticOperation.unit.test.d.ts +2 -0
- package/lib-es/__tests__/buildOptimisticOperation.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/buildOptimisticOperation.unit.test.js +161 -0
- package/lib-es/__tests__/buildOptimisticOperation.unit.test.js.map +1 -0
- package/lib-es/__tests__/createTransaction.unit.test.d.ts +2 -0
- package/lib-es/__tests__/createTransaction.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/createTransaction.unit.test.js +45 -0
- package/lib-es/__tests__/createTransaction.unit.test.js.map +1 -0
- package/lib-es/__tests__/deviceTransactionConfig.unit.test.d.ts +2 -0
- package/lib-es/__tests__/deviceTransactionConfig.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/deviceTransactionConfig.unit.test.js +226 -0
- package/lib-es/__tests__/deviceTransactionConfig.unit.test.js.map +1 -0
- package/lib-es/__tests__/estimateMaxSpendable.unit.test.d.ts +2 -0
- package/lib-es/__tests__/estimateMaxSpendable.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/estimateMaxSpendable.unit.test.js +117 -0
- package/lib-es/__tests__/estimateMaxSpendable.unit.test.js.map +1 -0
- package/lib-es/__tests__/gasTracker/index.unit.test.d.ts +2 -0
- package/lib-es/__tests__/gasTracker/index.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/gasTracker/index.unit.test.js +33 -0
- package/lib-es/__tests__/gasTracker/index.unit.test.js.map +1 -0
- package/lib-es/__tests__/gasTracker/ledger.unit.test.d.ts +2 -0
- package/lib-es/__tests__/gasTracker/ledger.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/gasTracker/ledger.unit.test.js +105 -0
- package/lib-es/__tests__/gasTracker/ledger.unit.test.js.map +1 -0
- package/lib-es/__tests__/getTransactionStatus.unit.test.d.ts +2 -0
- package/lib-es/__tests__/getTransactionStatus.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/getTransactionStatus.unit.test.js +211 -0
- package/lib-es/__tests__/getTransactionStatus.unit.test.js.map +1 -0
- package/lib-es/__tests__/hw-getAddress.unit.test.d.ts +2 -0
- package/lib-es/__tests__/hw-getAddress.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/hw-getAddress.unit.test.js +42 -0
- package/lib-es/__tests__/hw-getAddress.unit.test.js.map +1 -0
- package/lib-es/__tests__/logic.unit.test.d.ts +2 -0
- package/lib-es/__tests__/logic.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/logic.unit.test.js +268 -0
- package/lib-es/__tests__/logic.unit.test.js.map +1 -0
- package/lib-es/__tests__/preload.unit.test.d.ts +2 -0
- package/lib-es/__tests__/preload.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/preload.unit.test.js +121 -0
- package/lib-es/__tests__/preload.unit.test.js.map +1 -0
- package/lib-es/__tests__/prepareTransaction.unit.test.d.ts +2 -0
- package/lib-es/__tests__/prepareTransaction.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/prepareTransaction.unit.test.js +220 -0
- package/lib-es/__tests__/prepareTransaction.unit.test.js.map +1 -0
- package/lib-es/__tests__/rpc.unit.test.d.ts +2 -0
- package/lib-es/__tests__/rpc.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/rpc.unit.test.js +416 -0
- package/lib-es/__tests__/rpc.unit.test.js.map +1 -0
- package/lib-es/__tests__/signOperation.unit.test.d.ts +2 -0
- package/lib-es/__tests__/signOperation.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/signOperation.unit.test.js +132 -0
- package/lib-es/__tests__/signOperation.unit.test.js.map +1 -0
- package/lib-es/__tests__/synchronization.unit.test.d.ts +2 -0
- package/lib-es/__tests__/synchronization.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/synchronization.unit.test.js +471 -0
- package/lib-es/__tests__/synchronization.unit.test.js.map +1 -0
- package/lib-es/__tests__/transaction.unit.test.d.ts +2 -0
- package/lib-es/__tests__/transaction.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/transaction.unit.test.js +173 -0
- package/lib-es/__tests__/transaction.unit.test.js.map +1 -0
- package/lib-es/abis/erc20.abi.json +222 -0
- package/lib-es/abis/optimismGasPriceOracle.abi.json +252 -0
- package/lib-es/adapters.d.ts +21 -0
- package/lib-es/adapters.d.ts.map +1 -0
- package/lib-es/adapters.js +109 -0
- package/lib-es/adapters.js.map +1 -0
- package/lib-es/api/explorer/etherscan.d.ts +24 -0
- package/lib-es/api/explorer/etherscan.d.ts.map +1 -0
- package/lib-es/api/explorer/etherscan.js +84 -0
- package/lib-es/api/explorer/etherscan.js.map +1 -0
- package/lib-es/api/explorer/index.d.ts +26 -0
- package/lib-es/api/explorer/index.d.ts.map +1 -0
- package/lib-es/api/explorer/index.js +16 -0
- package/lib-es/api/explorer/index.js.map +1 -0
- package/lib-es/api/gasTracker/index.d.ts +13 -0
- package/lib-es/api/gasTracker/index.d.ts.map +1 -0
- package/lib-es/api/gasTracker/index.js +17 -0
- package/lib-es/api/gasTracker/index.js.map +1 -0
- package/lib-es/api/gasTracker/ledger.d.ts +9 -0
- package/lib-es/api/gasTracker/ledger.d.ts.map +1 -0
- package/lib-es/api/gasTracker/ledger.js +83 -0
- package/lib-es/api/gasTracker/ledger.js.map +1 -0
- package/lib-es/api/rpc/index.d.ts +3 -0
- package/lib-es/api/rpc/index.d.ts.map +1 -0
- package/lib-es/api/rpc/index.js +4 -0
- package/lib-es/api/rpc/index.js.map +1 -0
- package/lib-es/api/rpc/rpc.common.d.ts +93 -0
- package/lib-es/api/rpc/rpc.common.d.ts.map +1 -0
- package/lib-es/api/rpc/rpc.common.js +267 -0
- package/lib-es/api/rpc/rpc.common.js.map +1 -0
- package/lib-es/api/rpc/rpc.native.d.ts +6 -0
- package/lib-es/api/rpc/rpc.native.d.ts.map +1 -0
- package/lib-es/api/rpc/rpc.native.js +7 -0
- package/lib-es/api/rpc/rpc.native.js.map +1 -0
- package/lib-es/bridge/js.d.ts +11 -0
- package/lib-es/bridge/js.d.ts.map +1 -0
- package/lib-es/bridge/js.js +49 -0
- package/lib-es/bridge/js.js.map +1 -0
- package/lib-es/bridge.integration.test.d.ts +14 -0
- package/lib-es/bridge.integration.test.d.ts.map +1 -0
- package/lib-es/bridge.integration.test.js +79 -0
- package/lib-es/bridge.integration.test.js.map +1 -0
- package/lib-es/broadcast.d.ts +8 -0
- package/lib-es/broadcast.d.ts.map +1 -0
- package/lib-es/broadcast.js +21 -0
- package/lib-es/broadcast.js.map +1 -0
- package/lib-es/buildOptimisticOperation.d.ts +16 -0
- package/lib-es/buildOptimisticOperation.d.ts.map +1 -0
- package/lib-es/buildOptimisticOperation.js +71 -0
- package/lib-es/buildOptimisticOperation.js.map +1 -0
- package/lib-es/cli-transaction.d.ts +2 -0
- package/lib-es/cli-transaction.d.ts.map +1 -0
- package/lib-es/cli-transaction.js +6 -0
- package/lib-es/cli-transaction.js.map +1 -0
- package/lib-es/createTransaction.d.ts +9 -0
- package/lib-es/createTransaction.d.ts.map +1 -0
- package/lib-es/createTransaction.js +25 -0
- package/lib-es/createTransaction.js.map +1 -0
- package/lib-es/datasets/ethereum.scanAccounts.1.d.ts +7 -0
- package/lib-es/datasets/ethereum.scanAccounts.1.d.ts.map +1 -0
- package/lib-es/datasets/ethereum.scanAccounts.1.js +49 -0
- package/lib-es/datasets/ethereum.scanAccounts.1.js.map +1 -0
- package/lib-es/datasets/ethereum1.d.ts +3 -0
- package/lib-es/datasets/ethereum1.d.ts.map +1 -0
- package/lib-es/datasets/ethereum1.js +19 -0
- package/lib-es/datasets/ethereum1.js.map +1 -0
- package/lib-es/datasets/ethereum2.d.ts +3 -0
- package/lib-es/datasets/ethereum2.d.ts.map +1 -0
- package/lib-es/datasets/ethereum2.js +19 -0
- package/lib-es/datasets/ethereum2.js.map +1 -0
- package/lib-es/datasets/ethereum_classic.d.ts +5 -0
- package/lib-es/datasets/ethereum_classic.d.ts.map +1 -0
- package/lib-es/datasets/ethereum_classic.js +67 -0
- package/lib-es/datasets/ethereum_classic.js.map +1 -0
- package/lib-es/deviceTransactionConfig.d.ts +15 -0
- package/lib-es/deviceTransactionConfig.d.ts.map +1 -0
- package/lib-es/deviceTransactionConfig.js +42 -0
- package/lib-es/deviceTransactionConfig.js.map +1 -0
- package/lib-es/errors.d.ts +16 -0
- package/lib-es/errors.d.ts.map +1 -0
- package/lib-es/errors.js +8 -0
- package/lib-es/errors.js.map +1 -0
- package/lib-es/estimateMaxSpendable.d.ts +4 -0
- package/lib-es/estimateMaxSpendable.d.ts.map +1 -0
- package/lib-es/estimateMaxSpendable.js +19 -0
- package/lib-es/estimateMaxSpendable.js.map +1 -0
- package/lib-es/getTransactionStatus.d.ts +23 -0
- package/lib-es/getTransactionStatus.d.ts.map +1 -0
- package/lib-es/getTransactionStatus.js +125 -0
- package/lib-es/getTransactionStatus.js.map +1 -0
- package/lib-es/hw-getAddress.d.ts +6 -0
- package/lib-es/hw-getAddress.d.ts.map +1 -0
- package/lib-es/hw-getAddress.js +23 -0
- package/lib-es/hw-getAddress.js.map +1 -0
- package/lib-es/logic.d.ts +31 -0
- package/lib-es/logic.d.ts.map +1 -0
- package/lib-es/logic.js +119 -0
- package/lib-es/logic.js.map +1 -0
- package/lib-es/preload.d.ts +6 -0
- package/lib-es/preload.d.ts.map +1 -0
- package/lib-es/preload.js +49 -0
- package/lib-es/preload.js.map +1 -0
- package/lib-es/prepareTransaction.d.ts +26 -0
- package/lib-es/prepareTransaction.d.ts.map +1 -0
- package/lib-es/prepareTransaction.js +118 -0
- package/lib-es/prepareTransaction.js.map +1 -0
- package/lib-es/signOperation.d.ts +18 -0
- package/lib-es/signOperation.d.ts.map +1 -0
- package/lib-es/signOperation.js +83 -0
- package/lib-es/signOperation.js.map +1 -0
- package/lib-es/signer.d.ts +27 -0
- package/lib-es/signer.d.ts.map +1 -0
- package/lib-es/signer.js +2 -0
- package/lib-es/signer.js.map +1 -0
- package/lib-es/specs.d.ts +3 -0
- package/lib-es/specs.d.ts.map +1 -0
- package/lib-es/specs.js +233 -0
- package/lib-es/specs.js.map +1 -0
- package/lib-es/speculos-deviceActions.d.ts +8 -0
- package/lib-es/speculos-deviceActions.d.ts.map +1 -0
- package/lib-es/speculos-deviceActions.js +63 -0
- package/lib-es/speculos-deviceActions.js.map +1 -0
- package/lib-es/synchronization.d.ts +27 -0
- package/lib-es/synchronization.d.ts.map +1 -0
- package/lib-es/synchronization.js +212 -0
- package/lib-es/synchronization.js.map +1 -0
- package/lib-es/testUtils.d.ts +6 -0
- package/lib-es/testUtils.d.ts.map +1 -0
- package/lib-es/testUtils.js +102 -0
- package/lib-es/testUtils.js.map +1 -0
- package/lib-es/transaction.d.ts +43 -0
- package/lib-es/transaction.d.ts.map +1 -0
- package/lib-es/transaction.js +112 -0
- package/lib-es/transaction.js.map +1 -0
- package/lib-es/types.d.ts +111 -0
- package/lib-es/types.d.ts.map +1 -0
- package/lib-es/types.js +2 -0
- package/lib-es/types.js.map +1 -0
- package/package.json +8 -23
- package/src/__tests__/adapters.unit.test.ts +22 -52
- package/src/__tests__/broadcast.unit.test.ts +9 -27
- package/src/__tests__/buildOptimisticOperation.unit.test.ts +4 -4
- package/src/__tests__/deviceTransactionConfig.unit.test.ts +7 -7
- package/src/__tests__/estimateMaxSpendable.unit.test.ts +2 -4
- package/src/__tests__/gasTracker/index.unit.test.ts +36 -0
- package/src/__tests__/gasTracker/ledger.unit.test.ts +108 -0
- package/src/__tests__/getTransactionStatus.unit.test.ts +35 -40
- package/src/__tests__/hw-getAddress.unit.test.ts +15 -2
- package/src/__tests__/logic.unit.test.ts +25 -72
- package/src/__tests__/preload.unit.test.ts +3 -9
- package/src/__tests__/prepareTransaction.unit.test.ts +131 -76
- package/src/__tests__/rpc.unit.test.ts +46 -80
- package/src/__tests__/signOperation.unit.test.ts +27 -25
- package/src/__tests__/synchronization.unit.test.ts +101 -153
- package/src/__tests__/transaction.unit.test.ts +6 -14
- package/src/adapters.ts +8 -18
- package/src/api/{etherscan.ts → explorer/etherscan.ts} +14 -29
- package/src/api/explorer/index.ts +34 -0
- package/src/api/gasTracker/index.ts +31 -0
- package/src/api/gasTracker/ledger.ts +103 -0
- package/src/api/{rpc.common.ts → rpc/rpc.common.ts} +41 -64
- package/src/bridge/js.ts +15 -22
- package/src/bridge.integration.test.ts +3 -10
- package/src/broadcast.ts +3 -7
- package/src/buildOptimisticOperation.ts +7 -17
- package/src/cli-transaction.ts +1 -7
- package/src/createTransaction.ts +14 -15
- package/src/deviceTransactionConfig.ts +1 -1
- package/src/errors.ts +6 -0
- package/src/estimateMaxSpendable.ts +14 -11
- package/src/getTransactionStatus.ts +41 -52
- package/src/hw-getAddress.ts +18 -19
- package/src/logic.ts +5 -15
- package/src/preload.ts +6 -16
- package/src/prepareTransaction.ts +30 -31
- package/src/signOperation.ts +57 -69
- package/src/signer.ts +35 -0
- package/src/specs.ts +27 -52
- package/src/speculos-deviceActions.ts +56 -65
- package/src/synchronization.ts +21 -60
- package/src/testUtils.ts +5 -19
- package/src/transaction.ts +6 -10
- package/src/types.ts +6 -0
- /package/src/api/{rpc.ts → rpc/index.ts} +0 -0
- /package/src/api/{rpc.native.ts → rpc/rpc.native.ts} +0 -0
package/lib-es/specs.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import expect from "expect";
|
|
2
|
+
import invariant from "invariant";
|
|
3
|
+
import sample from "lodash/sample";
|
|
4
|
+
import { DeviceModelId } from "@ledgerhq/devices";
|
|
5
|
+
import { cryptocurrenciesById } from "@ledgerhq/cryptoassets/currencies";
|
|
6
|
+
import { botTest, genericTestDestination, pickSiblings } from "@ledgerhq/coin-framework/bot/specs";
|
|
7
|
+
import { getCryptoCurrencyById, parseCurrencyUnit, } from "@ledgerhq/coin-framework/currencies/index";
|
|
8
|
+
import { acceptTransaction } from "./speculos-deviceActions";
|
|
9
|
+
const testTimeout = 10 * 60 * 1000;
|
|
10
|
+
const ETH_UNIT = { code: "ETH", name: "ETH", magnitude: 18 };
|
|
11
|
+
const MBTC_UNIT = { name: "mBTC", code: "mBTC", magnitude: 5 };
|
|
12
|
+
const minBalancePerCurrencyId = {
|
|
13
|
+
arbitrum: parseCurrencyUnit(ETH_UNIT, "0.001"),
|
|
14
|
+
arbitrum_goerli: parseCurrencyUnit(ETH_UNIT, "0.001"),
|
|
15
|
+
optimism: parseCurrencyUnit(ETH_UNIT, "0.001"),
|
|
16
|
+
optimism_goerli: parseCurrencyUnit(ETH_UNIT, "0.001"),
|
|
17
|
+
boba: parseCurrencyUnit(ETH_UNIT, "0.001"),
|
|
18
|
+
metis: parseCurrencyUnit(ETH_UNIT, "0.01"),
|
|
19
|
+
moonriver: parseCurrencyUnit(ETH_UNIT, "0.1"),
|
|
20
|
+
rsk: parseCurrencyUnit(MBTC_UNIT, "0.05"),
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Method in charge of verifying that both the recipient and sender of a *coin* transaction
|
|
24
|
+
* have received/lost the expected amount and have now the right balances
|
|
25
|
+
*
|
|
26
|
+
* ⚠️ Some blockchains specific rules are included
|
|
27
|
+
*/
|
|
28
|
+
const testCoinDestination = (args) => {
|
|
29
|
+
const { sendingAccount } = args;
|
|
30
|
+
const { currency } = sendingAccount;
|
|
31
|
+
// Because Arbitrum is an L2, gas is used in a specific way to ensure both the L2 and the L1 are getting paid.
|
|
32
|
+
// But as of right now the `arbiscan.io` API is only returning the proposed gas price of
|
|
33
|
+
// the transaction and not the effectively used gas price, which might differ.
|
|
34
|
+
// This leads to not being able to correctly cost an operation and
|
|
35
|
+
// therefore makes it impossible infer the sender's balance
|
|
36
|
+
if (["arbitrum", "arbitrum_goerli"].includes(currency.id)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
return genericTestDestination(args);
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Method in charge of verifying the balance of a coin account after
|
|
43
|
+
* the transaction has been confirmed
|
|
44
|
+
*
|
|
45
|
+
* ⚠️ Some blockchains specific rules are included
|
|
46
|
+
*/
|
|
47
|
+
const testCoinBalance = ({ account, accountBeforeTransaction, operation, }) => {
|
|
48
|
+
// Optimism works in a way where a transaction as a L2 cost and a L1 settlement cost
|
|
49
|
+
// The explorer API is not capable of returning the L1 cost, therefore
|
|
50
|
+
// the operation value will always be less than what
|
|
51
|
+
// has been removed from the account balance
|
|
52
|
+
//
|
|
53
|
+
// Remark is also true for Abritrum but because of the arbiscan API not returning the
|
|
54
|
+
// effectively used gas but the "bid"/proposition of gas of the transaction
|
|
55
|
+
// resulting in inconsistencies regarding the cumulated value of a tx.
|
|
56
|
+
// value + gasLimit * gasPrice <-- gasPrice can be wrong here.
|
|
57
|
+
const underValuedFeesCurrencies = ["optimism", "optimism_goerli"];
|
|
58
|
+
const overValuedFeesCurrencies = ["arbitrum", "arbitrum_goerli"];
|
|
59
|
+
const currenciesWithFlakyBehaviour = [...underValuedFeesCurrencies, ...overValuedFeesCurrencies];
|
|
60
|
+
// Classic test verifying exactly the balance
|
|
61
|
+
if (!currenciesWithFlakyBehaviour.includes(account.currency.id)) {
|
|
62
|
+
botTest("account balance moved with operation value", () => expect(account.balance.toString()).toBe(accountBeforeTransaction.balance.minus(operation.value).toString()));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// fallback test verifying the balance moved between the maximum and minimum possible values of the operation
|
|
66
|
+
botTest("account balance moved at least operation value and less than operation value plus fees", () => {
|
|
67
|
+
// If the fee is undervalued like it is for optimism for example
|
|
68
|
+
// the only doable check is to verify that the account
|
|
69
|
+
// has lost *at least* the operation value + fee
|
|
70
|
+
if (underValuedFeesCurrencies.includes(account.currency.id)) {
|
|
71
|
+
const maxBalance = accountBeforeTransaction.balance.minus(operation.value.minus(operation.fee));
|
|
72
|
+
expect({
|
|
73
|
+
lessThanMaxBalance: account.balance.lte(maxBalance),
|
|
74
|
+
}).toEqual({
|
|
75
|
+
lessThanMaxBalance: true,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// If the fee is overvalue like it is for arbitrum for example
|
|
79
|
+
// we make sure the account has now a balance between
|
|
80
|
+
// previous balance minus only operation value &
|
|
81
|
+
// previous balance minus operation value + fee
|
|
82
|
+
if (overValuedFeesCurrencies.includes(account.currency.id)) {
|
|
83
|
+
const minBalance = accountBeforeTransaction.balance.minus(operation.value);
|
|
84
|
+
const maxBalance = accountBeforeTransaction.balance.minus(operation.value.minus(operation.fee));
|
|
85
|
+
expect({
|
|
86
|
+
greaterThanMinBalance: account.balance.gte(minBalance),
|
|
87
|
+
lessThanMaxBalance: account.balance.lte(maxBalance),
|
|
88
|
+
}).toEqual({
|
|
89
|
+
greaterThanMinBalance: true,
|
|
90
|
+
lessThanMaxBalance: true,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const transactionCheck = (currencyId) => ({ maxSpendable }) => {
|
|
97
|
+
const currency = getCryptoCurrencyById(currencyId);
|
|
98
|
+
invariant(maxSpendable.gt(minBalancePerCurrencyId[currency.id] || parseCurrencyUnit(currency.units[0], "1")), `${currencyId} balance is too low`);
|
|
99
|
+
};
|
|
100
|
+
const evmBasicMutations = ({ maxAccount }) => [
|
|
101
|
+
{
|
|
102
|
+
name: "move 50%",
|
|
103
|
+
maxRun: 2,
|
|
104
|
+
testDestination: testCoinDestination,
|
|
105
|
+
transaction: ({ account, siblings, bridge, maxSpendable }) => {
|
|
106
|
+
const sibling = pickSiblings(siblings, maxAccount);
|
|
107
|
+
const recipient = sibling.freshAddress;
|
|
108
|
+
const amount = maxSpendable.div(2).integerValue();
|
|
109
|
+
return {
|
|
110
|
+
transaction: bridge.createTransaction(account),
|
|
111
|
+
updates: [
|
|
112
|
+
{
|
|
113
|
+
recipient,
|
|
114
|
+
amount,
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
},
|
|
119
|
+
test: ({ account, accountBeforeTransaction, operation, transaction, status, optimisticOperation, }) => {
|
|
120
|
+
// workaround for buggy explorer behavior (nodes desync)
|
|
121
|
+
invariant(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
|
|
122
|
+
const estimatedGas = transaction.gasLimit.times(transaction.gasPrice || transaction.maxFeePerGas || 0);
|
|
123
|
+
botTest("operation fee is not exceeding estimated gas", () => expect(operation.fee.toNumber()).toBeLessThanOrEqual(estimatedGas.toNumber()));
|
|
124
|
+
testCoinBalance({
|
|
125
|
+
account,
|
|
126
|
+
accountBeforeTransaction,
|
|
127
|
+
operation,
|
|
128
|
+
transaction,
|
|
129
|
+
status,
|
|
130
|
+
optimisticOperation,
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: "send max",
|
|
136
|
+
maxRun: 1,
|
|
137
|
+
testDestination: testCoinDestination,
|
|
138
|
+
transaction: ({ account, siblings, bridge }) => {
|
|
139
|
+
const sibling = pickSiblings(siblings, maxAccount);
|
|
140
|
+
const recipient = sibling.freshAddress;
|
|
141
|
+
return {
|
|
142
|
+
transaction: bridge.createTransaction(account),
|
|
143
|
+
updates: [
|
|
144
|
+
{
|
|
145
|
+
recipient,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
useAllAmount: true,
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
};
|
|
152
|
+
},
|
|
153
|
+
test: ({ account, accountBeforeTransaction, operation, transaction, status, optimisticOperation, }) => {
|
|
154
|
+
// workaround for buggy explorer behavior (nodes desync)
|
|
155
|
+
invariant(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
|
|
156
|
+
const estimatedGas = transaction.gasLimit.times(transaction.gasPrice || transaction.maxFeePerGas || 0);
|
|
157
|
+
botTest("operation fee is not exceeding estimated gas", () => expect(operation.fee.toNumber()).toBeLessThanOrEqual(estimatedGas.toNumber()));
|
|
158
|
+
testCoinBalance({
|
|
159
|
+
account,
|
|
160
|
+
accountBeforeTransaction,
|
|
161
|
+
operation,
|
|
162
|
+
transaction,
|
|
163
|
+
status,
|
|
164
|
+
optimisticOperation,
|
|
165
|
+
});
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
name: "move some ERC20",
|
|
170
|
+
maxRun: 1,
|
|
171
|
+
transaction: ({ account, siblings, bridge }) => {
|
|
172
|
+
const erc20Account = sample((account.subAccounts || []).filter(a => a.balance.gt(0)));
|
|
173
|
+
invariant(erc20Account, "no erc20 account");
|
|
174
|
+
const sibling = pickSiblings(siblings, 3);
|
|
175
|
+
const recipient = sibling.freshAddress;
|
|
176
|
+
return {
|
|
177
|
+
transaction: bridge.createTransaction(account),
|
|
178
|
+
updates: [
|
|
179
|
+
{
|
|
180
|
+
recipient,
|
|
181
|
+
subAccountId: erc20Account.id,
|
|
182
|
+
},
|
|
183
|
+
Math.random() < 0.5
|
|
184
|
+
? {
|
|
185
|
+
useAllAmount: true,
|
|
186
|
+
}
|
|
187
|
+
: {
|
|
188
|
+
amount: erc20Account.balance.times(Math.random()).integerValue(),
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
};
|
|
192
|
+
},
|
|
193
|
+
test: ({ accountBeforeTransaction, account, transaction, operation }) => {
|
|
194
|
+
var _a;
|
|
195
|
+
// workaround for buggy explorer behavior (nodes desync)
|
|
196
|
+
invariant(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
|
|
197
|
+
invariant(accountBeforeTransaction.subAccounts, "sub accounts before");
|
|
198
|
+
const erc20accountBefore = (_a = accountBeforeTransaction.subAccounts) === null || _a === void 0 ? void 0 : _a.find(s => s.id === transaction.subAccountId);
|
|
199
|
+
invariant(erc20accountBefore, "erc20 acc was here before");
|
|
200
|
+
invariant(account.subAccounts, "sub accounts");
|
|
201
|
+
const erc20account = account.subAccounts.find(s => s.id === transaction.subAccountId);
|
|
202
|
+
invariant(erc20account, "erc20 acc is still here");
|
|
203
|
+
if (transaction.useAllAmount) {
|
|
204
|
+
botTest("erc20 account is empty", () => expect(erc20account.balance.toString()).toBe("0"));
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
botTest("account balance moved with tx amount", () => expect(erc20account.balance.toString()).toBe(erc20accountBefore.balance.minus(transaction.amount).toString()));
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
];
|
|
212
|
+
export default Object.values(cryptocurrenciesById)
|
|
213
|
+
.filter(currency => currency.family === "evm")
|
|
214
|
+
.reduce((acc, currency) => {
|
|
215
|
+
// @ts-expect-error FIXME: fix typings
|
|
216
|
+
acc[currency.id] = {
|
|
217
|
+
name: currency.name,
|
|
218
|
+
currency,
|
|
219
|
+
appQuery: {
|
|
220
|
+
model: DeviceModelId.nanoS,
|
|
221
|
+
appName: "Ethereum",
|
|
222
|
+
appVersion: "1.10.2",
|
|
223
|
+
},
|
|
224
|
+
testTimeout,
|
|
225
|
+
transactionCheck: transactionCheck(currency.id),
|
|
226
|
+
mutations: evmBasicMutations({
|
|
227
|
+
maxAccount: 3,
|
|
228
|
+
}),
|
|
229
|
+
genericDeviceAction: acceptTransaction,
|
|
230
|
+
};
|
|
231
|
+
return acc;
|
|
232
|
+
}, {});
|
|
233
|
+
//# sourceMappingURL=specs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DeviceAction } from "@ledgerhq/coin-framework/bot/types";
|
|
2
|
+
import type { Transaction } from "./types";
|
|
3
|
+
export declare const acceptTransaction: DeviceAction<Transaction, any>;
|
|
4
|
+
declare const _default: {
|
|
5
|
+
acceptTransaction: DeviceAction<Transaction, any>;
|
|
6
|
+
};
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=speculos-deviceActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speculos-deviceActions.d.ts","sourceRoot":"","sources":["../src/speculos-deviceActions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM3C,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,WAAW,EAAE,GAAG,CAwD3D,CAAC;;;;AAEH,wBAEE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { findSubAccountById } from "@ledgerhq/coin-framework/account/index";
|
|
2
|
+
import { deviceActionFlow, formatDeviceAmount, SpeculosButton, } from "@ledgerhq/coin-framework/bot/specs";
|
|
3
|
+
// FIXME: fix types
|
|
4
|
+
const maxFeesExpectedValue = ({ account, status }) => formatDeviceAmount(account.currency, status.estimatedFees);
|
|
5
|
+
export const acceptTransaction = deviceActionFlow({
|
|
6
|
+
steps: [
|
|
7
|
+
{
|
|
8
|
+
title: "Review",
|
|
9
|
+
button: SpeculosButton.RIGHT,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
title: "Type",
|
|
13
|
+
button: SpeculosButton.RIGHT,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
title: "Amount",
|
|
17
|
+
button: SpeculosButton.RIGHT,
|
|
18
|
+
expectedValue: ({ account, status, transaction }) => {
|
|
19
|
+
const subAccount = findSubAccountById(account, transaction.subAccountId || "");
|
|
20
|
+
if (subAccount && subAccount.type === "TokenAccount") {
|
|
21
|
+
return formatDeviceAmount(subAccount.token, status.amount);
|
|
22
|
+
}
|
|
23
|
+
return formatDeviceAmount(account.currency, status.amount);
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
title: "Contract",
|
|
28
|
+
button: SpeculosButton.RIGHT,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
title: "Network",
|
|
32
|
+
button: SpeculosButton.RIGHT,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
title: "Max fees",
|
|
36
|
+
button: SpeculosButton.RIGHT,
|
|
37
|
+
expectedValue: maxFeesExpectedValue,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
// Legacy (ETC..)
|
|
41
|
+
title: "Max Fees",
|
|
42
|
+
button: SpeculosButton.RIGHT,
|
|
43
|
+
expectedValue: maxFeesExpectedValue,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
title: "Address",
|
|
47
|
+
button: SpeculosButton.RIGHT,
|
|
48
|
+
expectedValue: ({ transaction }) => transaction.recipient,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
title: "Accept",
|
|
52
|
+
button: SpeculosButton.BOTH,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
title: "Approve",
|
|
56
|
+
button: SpeculosButton.BOTH,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
});
|
|
60
|
+
export default {
|
|
61
|
+
acceptTransaction,
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=speculos-deviceActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speculos-deviceActions.js","sourceRoot":"","sources":["../src/speculos-deviceActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,oCAAoC,CAAC;AAI5C,mBAAmB;AACnB,MAAM,oBAAoB,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAiC,EAAE,EAAE,CAClF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,iBAAiB,GAAmC,gBAAgB,CAAC;IAChF,KAAK,EAAE;QACL;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,cAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE;gBAClD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;gBAE/E,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE;oBACpD,OAAO,kBAAkB,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;iBAC5D;gBAED,OAAO,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC;SACF;QACD;YACE,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,cAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,oBAAoB;SACpC;QACD;YACE,iBAAiB;YACjB,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,cAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,oBAAoB;SACpC;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,cAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;SAC1D;QACD;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,cAAc,CAAC,IAAI;SAC5B;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,cAAc,CAAC,IAAI;SAC5B;KACF;CACF,CAAC,CAAC;AAEH,eAAe;IACb,iBAAiB;CAClB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AccountShapeInfo, GetAccountShape } from "@ledgerhq/coin-framework/bridge/jsHelpers";
|
|
2
|
+
import { CryptoCurrency, TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
3
|
+
import { Account, Operation, SubAccount } from "@ledgerhq/types-live";
|
|
4
|
+
/**
|
|
5
|
+
* Main synchronization process
|
|
6
|
+
* Get the main Account and the potential TokenAccounts linked to it
|
|
7
|
+
*/
|
|
8
|
+
export declare const getAccountShape: GetAccountShape;
|
|
9
|
+
/**
|
|
10
|
+
* Getting all token related operations in order to provide TokenAccounts
|
|
11
|
+
*/
|
|
12
|
+
export declare const getSubAccounts: (infos: AccountShapeInfo, accountId: string, shouldSyncFromScratch?: boolean) => Promise<Partial<SubAccount>[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Fetch the balance for a token and creates a TokenAccount based on this and the provided operations
|
|
15
|
+
*/
|
|
16
|
+
export declare const getSubAccountShape: (currency: CryptoCurrency, parentId: string, token: TokenCurrency, operations: Operation[]) => Promise<Partial<SubAccount>>;
|
|
17
|
+
/**
|
|
18
|
+
* Get a finalized operation depending on it status (confirmed or not)
|
|
19
|
+
*/
|
|
20
|
+
export declare const getOperationStatus: (currency: CryptoCurrency, op: Operation) => Promise<Operation | null>;
|
|
21
|
+
/**
|
|
22
|
+
* After each sync, it might be necessary to remove pending operations
|
|
23
|
+
* inside of subAccounts.
|
|
24
|
+
*/
|
|
25
|
+
export declare const postSync: (initial: Account, synced: Account) => Account;
|
|
26
|
+
export declare const sync: (initialAccount: Account, syncConfig: import("@ledgerhq/types-live").SyncConfig) => import("rxjs").Observable<(arg0: Account) => Account>;
|
|
27
|
+
//# sourceMappingURL=synchronization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synchronization.d.ts","sourceRoot":"","sources":["../src/synchronization.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,gBAAgB,EAChB,eAAe,EAGhB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAMtE;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,eAwE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,UAClB,gBAAgB,aACZ,MAAM,sCAEhB,QAAQ,QAAQ,UAAU,CAAC,EAAE,CAwD/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,aACnB,cAAc,YACd,MAAM,SACT,aAAa,cACR,SAAS,EAAE,KACtB,QAAQ,QAAQ,UAAU,CAAC,CAmB7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,aACnB,cAAc,MACpB,SAAS,KACZ,QAAQ,SAAS,GAAG,IAAI,CAkC1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,YAAa,OAAO,UAAU,OAAO,KAAG,OAgC5D,CAAC;AAEF,eAAO,MAAM,IAAI,2IAIf,CAAC"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { decodeAccountId, emptyHistoryCache, encodeAccountId, encodeTokenAccountId, shouldRetainPendingOperation, } from "@ledgerhq/coin-framework/account/index";
|
|
11
|
+
import { makeSync, mergeOps, } from "@ledgerhq/coin-framework/bridge/jsHelpers";
|
|
12
|
+
import { log } from "@ledgerhq/logs";
|
|
13
|
+
import { getBalanceAndBlock, getBlock, getTokenBalance, getTransaction } from "./api/rpc";
|
|
14
|
+
import { getSyncHash, mergeSubAccounts } from "./logic";
|
|
15
|
+
import { getExplorerApi } from "./api/explorer";
|
|
16
|
+
/**
|
|
17
|
+
* Main synchronization process
|
|
18
|
+
* Get the main Account and the potential TokenAccounts linked to it
|
|
19
|
+
*/
|
|
20
|
+
export const getAccountShape = (infos) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
var _a, _b;
|
|
22
|
+
const { initialAccount, address, derivationMode, currency } = infos;
|
|
23
|
+
const { blockHeight, balance } = yield getBalanceAndBlock(currency, address);
|
|
24
|
+
const accountId = encodeAccountId({
|
|
25
|
+
type: "js",
|
|
26
|
+
version: "2",
|
|
27
|
+
currencyId: currency.id,
|
|
28
|
+
xpubOrAddress: address,
|
|
29
|
+
derivationMode,
|
|
30
|
+
});
|
|
31
|
+
const syncHash = getSyncHash(currency);
|
|
32
|
+
// Due to some changes (as of now: new/updated tokens) we could need to force a sync from 0
|
|
33
|
+
const shouldSyncFromScratch = syncHash !== (initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.syncHash);
|
|
34
|
+
// Get the latest stored operation to know where to start the new sync
|
|
35
|
+
const latestSyncedOperation = shouldSyncFromScratch
|
|
36
|
+
? null
|
|
37
|
+
: (_a = initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.operations) === null || _a === void 0 ? void 0 : _a.reduce((acc, curr) => {
|
|
38
|
+
if (!acc) {
|
|
39
|
+
return curr;
|
|
40
|
+
}
|
|
41
|
+
return ((acc === null || acc === void 0 ? void 0 : acc.blockHeight) || 0) > ((curr === null || curr === void 0 ? void 0 : curr.blockHeight) || 0) ? acc : curr;
|
|
42
|
+
}, null);
|
|
43
|
+
// This method could not be working if the integration doesn't have an API to retreive the operations
|
|
44
|
+
const lastCoinOperations = yield (() => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
+
try {
|
|
46
|
+
const { getLastCoinOperations } = getExplorerApi(currency);
|
|
47
|
+
return yield getLastCoinOperations(currency, address, accountId, (latestSyncedOperation === null || latestSyncedOperation === void 0 ? void 0 : latestSyncedOperation.blockHeight) || 0);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
log("EVM Family", "Failed to get latest transactions", {
|
|
51
|
+
address,
|
|
52
|
+
currency,
|
|
53
|
+
error: e,
|
|
54
|
+
});
|
|
55
|
+
throw e;
|
|
56
|
+
}
|
|
57
|
+
}))();
|
|
58
|
+
const newSubAccounts = yield getSubAccounts(infos, accountId, shouldSyncFromScratch);
|
|
59
|
+
// Merging potential new subAccouns while preserving the reference (returned value will be initialAccount.subAccounts)
|
|
60
|
+
const subAccounts = mergeSubAccounts(initialAccount, newSubAccounts);
|
|
61
|
+
// Trying to confirm pending operations that we are sure of
|
|
62
|
+
// because they were made in the live
|
|
63
|
+
// Useful for integrations without explorers
|
|
64
|
+
const confirmPendingOperations = ((_b = initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.pendingOperations) === null || _b === void 0 ? void 0 : _b.map(op => getOperationStatus(currency, op))) || [];
|
|
65
|
+
const confirmedOperations = yield Promise.all(confirmPendingOperations).then(ops => ops.filter((op) => !!op));
|
|
66
|
+
const newOperations = [...confirmedOperations, ...lastCoinOperations];
|
|
67
|
+
const operations = mergeOps((initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.operations) || [], newOperations);
|
|
68
|
+
const lastSyncDate = new Date();
|
|
69
|
+
return {
|
|
70
|
+
type: "Account",
|
|
71
|
+
id: accountId,
|
|
72
|
+
syncHash,
|
|
73
|
+
balance,
|
|
74
|
+
spendableBalance: balance,
|
|
75
|
+
blockHeight,
|
|
76
|
+
operations,
|
|
77
|
+
operationsCount: operations.length,
|
|
78
|
+
subAccounts,
|
|
79
|
+
lastSyncDate,
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* Getting all token related operations in order to provide TokenAccounts
|
|
84
|
+
*/
|
|
85
|
+
export const getSubAccounts = (infos, accountId, shouldSyncFromScratch = false) => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
+
var _c;
|
|
87
|
+
const { initialAccount, address, currency } = infos;
|
|
88
|
+
// Get the latest operation from all subaccounts
|
|
89
|
+
const latestSyncedOperation = shouldSyncFromScratch
|
|
90
|
+
? null
|
|
91
|
+
: (_c = initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.subAccounts) === null || _c === void 0 ? void 0 : _c.flatMap(({ operations }) => operations).reduce((acc, curr) => {
|
|
92
|
+
if (!acc) {
|
|
93
|
+
return curr;
|
|
94
|
+
}
|
|
95
|
+
return ((acc === null || acc === void 0 ? void 0 : acc.blockHeight) || 0) > ((curr === null || curr === void 0 ? void 0 : curr.blockHeight) || 0) ? acc : curr;
|
|
96
|
+
}, null);
|
|
97
|
+
// This method could not be working if the integration doesn't have an API to retreive the operations
|
|
98
|
+
const lastERC20OperationsAndCurrencies = yield (() => __awaiter(void 0, void 0, void 0, function* () {
|
|
99
|
+
try {
|
|
100
|
+
const { getLastTokenOperations } = getExplorerApi(currency);
|
|
101
|
+
return yield getLastTokenOperations(currency, address, accountId, (latestSyncedOperation === null || latestSyncedOperation === void 0 ? void 0 : latestSyncedOperation.blockHeight) || 0);
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
log("EVM Family", "Failed to get latest ERC20 transactions", {
|
|
105
|
+
address,
|
|
106
|
+
currency,
|
|
107
|
+
error: e,
|
|
108
|
+
});
|
|
109
|
+
throw e;
|
|
110
|
+
}
|
|
111
|
+
}))();
|
|
112
|
+
// Creating a Map of Operations by TokenCurrencies in order to know which TokenAccounts should be synced as well
|
|
113
|
+
const erc20OperationsByToken = lastERC20OperationsAndCurrencies.reduce((acc, { tokenCurrency, operation }) => {
|
|
114
|
+
var _a;
|
|
115
|
+
if (!tokenCurrency)
|
|
116
|
+
return acc;
|
|
117
|
+
if (!acc.has(tokenCurrency)) {
|
|
118
|
+
acc.set(tokenCurrency, []);
|
|
119
|
+
}
|
|
120
|
+
(_a = acc.get(tokenCurrency)) === null || _a === void 0 ? void 0 : _a.push(operation);
|
|
121
|
+
return acc;
|
|
122
|
+
}, new Map());
|
|
123
|
+
// Fetching all TokenAccounts possible and providing already filtered operations
|
|
124
|
+
const subAccountsPromises = [];
|
|
125
|
+
for (const [token, ops] of erc20OperationsByToken.entries()) {
|
|
126
|
+
subAccountsPromises.push(getSubAccountShape(currency, accountId, token, ops));
|
|
127
|
+
}
|
|
128
|
+
return Promise.all(subAccountsPromises);
|
|
129
|
+
});
|
|
130
|
+
/**
|
|
131
|
+
* Fetch the balance for a token and creates a TokenAccount based on this and the provided operations
|
|
132
|
+
*/
|
|
133
|
+
export const getSubAccountShape = (currency, parentId, token, operations) => __awaiter(void 0, void 0, void 0, function* () {
|
|
134
|
+
const { xpubOrAddress: address } = decodeAccountId(parentId);
|
|
135
|
+
const tokenAccountId = encodeTokenAccountId(parentId, token);
|
|
136
|
+
const balance = yield getTokenBalance(currency, address, token.contractAddress);
|
|
137
|
+
return {
|
|
138
|
+
type: "TokenAccount",
|
|
139
|
+
id: tokenAccountId,
|
|
140
|
+
parentId,
|
|
141
|
+
token,
|
|
142
|
+
balance,
|
|
143
|
+
spendableBalance: balance,
|
|
144
|
+
creationDate: new Date(),
|
|
145
|
+
operations,
|
|
146
|
+
operationsCount: operations.length,
|
|
147
|
+
pendingOperations: [],
|
|
148
|
+
balanceHistoryCache: emptyHistoryCache,
|
|
149
|
+
swapHistory: [],
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
/**
|
|
153
|
+
* Get a finalized operation depending on it status (confirmed or not)
|
|
154
|
+
*/
|
|
155
|
+
export const getOperationStatus = (currency, op) => __awaiter(void 0, void 0, void 0, function* () {
|
|
156
|
+
try {
|
|
157
|
+
const { blockNumber: blockHeight, blockHash, timestamp, nonce, } = yield getTransaction(currency, op.hash);
|
|
158
|
+
if (!blockHeight) {
|
|
159
|
+
throw new Error("getOperationStatus: Transaction has no block");
|
|
160
|
+
}
|
|
161
|
+
const date = yield (() => __awaiter(void 0, void 0, void 0, function* () {
|
|
162
|
+
// timestamp can be missing depending on the node
|
|
163
|
+
if (timestamp) {
|
|
164
|
+
return new Date(timestamp * 1000);
|
|
165
|
+
}
|
|
166
|
+
// Without timestamp, we directly look for the block
|
|
167
|
+
const { timestamp: blockTimestamp } = yield getBlock(currency, blockHeight);
|
|
168
|
+
return new Date(blockTimestamp * 1000);
|
|
169
|
+
}))();
|
|
170
|
+
return Object.assign(Object.assign({}, op), { transactionSequenceNumber: nonce, blockHash,
|
|
171
|
+
blockHeight,
|
|
172
|
+
date });
|
|
173
|
+
}
|
|
174
|
+
catch (e) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
/**
|
|
179
|
+
* After each sync, it might be necessary to remove pending operations
|
|
180
|
+
* inside of subAccounts.
|
|
181
|
+
*/
|
|
182
|
+
export const postSync = (initial, synced) => {
|
|
183
|
+
var _a;
|
|
184
|
+
// Set of hashes from the pending operations of the main account
|
|
185
|
+
const coinPendingOperationsHashes = new Set();
|
|
186
|
+
for (const coinPendingOperation of synced.pendingOperations) {
|
|
187
|
+
coinPendingOperationsHashes.add(coinPendingOperation.hash);
|
|
188
|
+
}
|
|
189
|
+
// Set of ids from the already existing subAccount from previous sync
|
|
190
|
+
const initialSubAccountsIds = new Set();
|
|
191
|
+
for (const subAccount of initial.subAccounts || []) {
|
|
192
|
+
initialSubAccountsIds.add(subAccount.id);
|
|
193
|
+
}
|
|
194
|
+
return Object.assign(Object.assign({}, synced), { subAccounts: (_a = synced.subAccounts) === null || _a === void 0 ? void 0 : _a.map(subAccount => {
|
|
195
|
+
// If the subAccount is new, just return the freshly synced subAccount
|
|
196
|
+
if (!initialSubAccountsIds.has(subAccount.id))
|
|
197
|
+
return subAccount;
|
|
198
|
+
return Object.assign(Object.assign({}, subAccount), { pendingOperations: subAccount.pendingOperations.filter(tokenPendingOperation =>
|
|
199
|
+
// if the pending operation got removed from the main account, remove it as well
|
|
200
|
+
coinPendingOperationsHashes.has(tokenPendingOperation.hash) &&
|
|
201
|
+
// if the transaction has been confirmed, remove it
|
|
202
|
+
!subAccount.operations.some(op => op.hash === tokenPendingOperation.hash) &&
|
|
203
|
+
// common rule for pending operations retention in the live
|
|
204
|
+
shouldRetainPendingOperation(synced, tokenPendingOperation)) });
|
|
205
|
+
}) });
|
|
206
|
+
};
|
|
207
|
+
export const sync = makeSync({
|
|
208
|
+
getAccountShape,
|
|
209
|
+
postSync,
|
|
210
|
+
shouldMergeOps: false,
|
|
211
|
+
});
|
|
212
|
+
//# sourceMappingURL=synchronization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synchronization.js","sourceRoot":"","sources":["../src/synchronization.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAGL,QAAQ,EACR,QAAQ,GACT,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAIrC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoB,CAAM,KAAK,EAAC,EAAE;;IAC5D,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACpE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,eAAe,CAAC;QAChC,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,GAAG;QACZ,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,OAAO;QACtB,cAAc;KACf,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,2FAA2F;IAC3F,MAAM,qBAAqB,GAAG,QAAQ,MAAK,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,QAAQ,CAAA,CAAC;IAEpE,sEAAsE;IACtE,MAAM,qBAAqB,GAAG,qBAAqB;QACjD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,UAAU,0CAAE,MAAM,CAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACjE,IAAI,CAAC,GAAG,EAAE;gBACR,OAAO,IAAI,CAAC;aACb;YACD,OAAO,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,KAAI,CAAC,CAAC,GAAG,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACzE,CAAC,EAAE,IAAI,CAAC,CAAC;IAEb,qGAAqG;IACrG,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAS,EAAE;QAC3C,IAAI;YACF,MAAM,EAAE,qBAAqB,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC3D,OAAO,MAAM,qBAAqB,CAChC,QAAQ,EACR,OAAO,EACP,SAAS,EACT,CAAA,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,WAAW,KAAI,CAAC,CACxC,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,GAAG,CAAC,YAAY,EAAE,mCAAmC,EAAE;gBACrD,OAAO;gBACP,QAAQ;gBACR,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;IACH,CAAC,CAAA,CAAC,EAAE,CAAC;IAEL,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACrF,sHAAsH;IACtH,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAErE,2DAA2D;IAC3D,qCAAqC;IACrC,4CAA4C;IAC5C,MAAM,wBAAwB,GAC5B,CAAA,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,iBAAiB,0CAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAI,EAAE,CAAC;IACvF,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACjF,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC1C,CAAC;IACF,MAAM,aAAa,GAAG,CAAC,GAAG,mBAAmB,EAAE,GAAG,kBAAkB,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,UAAU,KAAI,EAAE,EAAE,aAAa,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;IAEhC,OAAO;QACL,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,SAAS;QACb,QAAQ;QACR,OAAO;QACP,gBAAgB,EAAE,OAAO;QACzB,WAAW;QACX,UAAU;QACV,eAAe,EAAE,UAAU,CAAC,MAAM;QAClC,WAAW;QACX,YAAY;KACO,CAAC;AACxB,CAAC,CAAA,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAuB,EACvB,SAAiB,EACjB,qBAAqB,GAAG,KAAK,EACG,EAAE;;IAClC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAEpD,gDAAgD;IAChD,MAAM,qBAAqB,GAAG,qBAAqB;QACjD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW,0CACvB,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,EACvC,MAAM,CAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACtC,IAAI,CAAC,GAAG,EAAE;gBACR,OAAO,IAAI,CAAC;aACb;YACD,OAAO,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,KAAI,CAAC,CAAC,GAAG,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACzE,CAAC,EAAE,IAAI,CAAC,CAAC;IAEf,qGAAqG;IACrG,MAAM,gCAAgC,GAAG,MAAM,CAAC,GAAS,EAAE;QACzD,IAAI;YACF,MAAM,EAAE,sBAAsB,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC5D,OAAO,MAAM,sBAAsB,CACjC,QAAQ,EACR,OAAO,EACP,SAAS,EACT,CAAA,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,WAAW,KAAI,CAAC,CACxC,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,GAAG,CAAC,YAAY,EAAE,yCAAyC,EAAE;gBAC3D,OAAO;gBACP,QAAQ;gBACR,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;IACH,CAAC,CAAA,CAAC,EAAE,CAAC;IAEL,gHAAgH;IAChH,MAAM,sBAAsB,GAAG,gCAAgC,CAAC,MAAM,CAEpE,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE;;QACtC,IAAI,CAAC,aAAa;YAAE,OAAO,GAAG,CAAC;QAE/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;YAC3B,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;SAC5B;QACD,MAAA,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,0CAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAExC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,IAAI,GAAG,EAA8B,CAAC,CAAC;IAE1C,gFAAgF;IAChF,MAAM,mBAAmB,GAAmC,EAAE,CAAC;IAC/D,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,sBAAsB,CAAC,OAAO,EAAE,EAAE;QAC3D,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;KAC/E;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAC1C,CAAC,CAAA,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAwB,EACxB,QAAgB,EAChB,KAAoB,EACpB,UAAuB,EACO,EAAE;IAChC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IAEhF,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,EAAE,EAAE,cAAc;QAClB,QAAQ;QACR,KAAK;QACL,OAAO;QACP,gBAAgB,EAAE,OAAO;QACzB,YAAY,EAAE,IAAI,IAAI,EAAE;QACxB,UAAU;QACV,eAAe,EAAE,UAAU,CAAC,MAAM;QAClC,iBAAiB,EAAE,EAAE;QACrB,mBAAmB,EAAE,iBAAiB;QACtC,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC,CAAA,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAwB,EACxB,EAAa,EACc,EAAE;IAC7B,IAAI;QACF,MAAM,EACJ,WAAW,EAAE,WAAW,EACxB,SAAS,EACT,SAAS,EACT,KAAK,GACN,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;SACjE;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,GAAS,EAAE;YAC7B,iDAAiD;YACjD,IAAI,SAAS,EAAE;gBACb,OAAO,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;aACnC;YAED,oDAAoD;YACpD,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC5E,OAAO,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;QACzC,CAAC,CAAA,CAAC,EAAE,CAAC;QAEL,OAAO,gCACF,EAAE,KACL,yBAAyB,EAAE,KAAK,EAChC,SAAS;YACT,WAAW;YACX,IAAI,GACQ,CAAC;KAChB;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,IAAI,CAAC;KACb;AACH,CAAC,CAAA,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAE,MAAe,EAAW,EAAE;;IACrE,gEAAgE;IAChE,MAAM,2BAA2B,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9C,KAAK,MAAM,oBAAoB,IAAI,MAAM,CAAC,iBAAiB,EAAE;QAC3D,2BAA2B,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;KAC5D;IACD,qEAAqE;IACrE,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;IACxC,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE;QAClD,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;KAC1C;IAED,uCACK,MAAM,KACT,WAAW,EAAE,MAAA,MAAM,CAAC,WAAW,0CAAE,GAAG,CAAC,UAAU,CAAC,EAAE;YAChD,sEAAsE;YACtE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAAE,OAAO,UAAU,CAAC;YAEjE,uCACK,UAAU,KACb,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,CAAC,MAAM,CACpD,qBAAqB,CAAC,EAAE;gBACtB,gFAAgF;gBAChF,2BAA2B,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC;oBAC3D,mDAAmD;oBACnD,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI,CAAC;oBACzE,2DAA2D;oBAC3D,4BAA4B,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAC9D,IACD;QACJ,CAAC,CAAC,IACF;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;IAC3B,eAAe;IACf,QAAQ;IACR,cAAc,EAAE,KAAK;CACtB,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CryptoCurrency, TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
2
|
+
import { Account, Operation, SubAccount, TokenAccount } from "@ledgerhq/types-live";
|
|
3
|
+
export declare const makeAccount: (address: string, currency: CryptoCurrency, subAccounts?: SubAccount[]) => Account;
|
|
4
|
+
export declare const makeTokenAccount: (address: string, tokenCurrency: TokenCurrency) => TokenAccount;
|
|
5
|
+
export declare const makeOperation: (partialOp?: Partial<Operation>) => Operation;
|
|
6
|
+
//# sourceMappingURL=testUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpF,eAAO,MAAM,WAAW,YACb,MAAM,YACL,cAAc,gBACX,UAAU,EAAE,KACxB,OAyDF,CAAC;AAEF,eAAO,MAAM,gBAAgB,YAAa,MAAM,iBAAiB,aAAa,KAAG,YAkChF,CAAC;AAEF,eAAO,MAAM,aAAa,eAAgB,QAAQ,SAAS,CAAC,KAAG,SAuB9D,CAAC"}
|