@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
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.buildSignOperation = exports.applyEIP155 = void 0;
|
|
13
|
+
const rxjs_1 = require("rxjs");
|
|
14
|
+
const hw_app_eth_1 = require("@ledgerhq/hw-app-eth");
|
|
15
|
+
const buildOptimisticOperation_1 = require("./buildOptimisticOperation");
|
|
16
|
+
const prepareTransaction_1 = require("./prepareTransaction");
|
|
17
|
+
const transaction_1 = require("./transaction");
|
|
18
|
+
/**
|
|
19
|
+
* Transforms the ECDSA signature paremeter v hexadecimal string received
|
|
20
|
+
* from the nano into an EIP155 compatible number.
|
|
21
|
+
*
|
|
22
|
+
* Reminder EIP155 transforms v this way:
|
|
23
|
+
* v = chainId * 2 + 35
|
|
24
|
+
* (+ parity 1 or 0)
|
|
25
|
+
*/
|
|
26
|
+
const applyEIP155 = (vAsHex, chainId) => {
|
|
27
|
+
const v = parseInt(vAsHex, 16);
|
|
28
|
+
if (v === 0 || v === 1) {
|
|
29
|
+
// if v is 0 or 1, it's already representing parity
|
|
30
|
+
return chainId * 2 + 35 + v;
|
|
31
|
+
}
|
|
32
|
+
else if (v === 27 || v === 28) {
|
|
33
|
+
const parity = v - 27; // transforming v into 0 or 1 to become the parity
|
|
34
|
+
return chainId * 2 + 35 + parity;
|
|
35
|
+
}
|
|
36
|
+
// When chainId is lower than 109, hw-app-eth *can* return a v with EIP155 already applied
|
|
37
|
+
// e.g. bsc's chainId is 56 -> v then equals to 147/148
|
|
38
|
+
// optimism's chainId is 10 -> v equals to 55/56
|
|
39
|
+
// ethereum's chainId is 1 -> v equals to 0/1
|
|
40
|
+
// goerli's chainId is 5 -> v equals to 0/1
|
|
41
|
+
return v;
|
|
42
|
+
};
|
|
43
|
+
exports.applyEIP155 = applyEIP155;
|
|
44
|
+
/**
|
|
45
|
+
* Sign Transaction with Ledger hardware
|
|
46
|
+
*/
|
|
47
|
+
const buildSignOperation = (signerContext) => ({ account, deviceId, transaction, }) => new rxjs_1.Observable(o => {
|
|
48
|
+
function main() {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const preparedTransaction = yield (0, prepareTransaction_1.prepareForSignOperation)(account, transaction);
|
|
51
|
+
const serializedTxHexString = (0, transaction_1.getSerializedTransaction)(preparedTransaction).slice(2); // Remove 0x prefix
|
|
52
|
+
// Configure type of resolutions necessary for the clear signing
|
|
53
|
+
const resolutionConfig = {
|
|
54
|
+
externalPlugins: true,
|
|
55
|
+
erc20: true,
|
|
56
|
+
domains: transaction.recipientDomain ? [transaction.recipientDomain] : [],
|
|
57
|
+
};
|
|
58
|
+
// Look for resolutions for external plugins and ERC20
|
|
59
|
+
const resolution = yield hw_app_eth_1.ledgerService.resolveTransaction(serializedTxHexString, {}, resolutionConfig);
|
|
60
|
+
o.next({
|
|
61
|
+
type: "device-signature-requested",
|
|
62
|
+
});
|
|
63
|
+
const sig = (yield signerContext(deviceId, signer =>
|
|
64
|
+
// Request signature on the nano
|
|
65
|
+
signer.signTransaction(account.freshAddressPath, serializedTxHexString, resolution)));
|
|
66
|
+
o.next({ type: "device-signature-granted" }); // Signature is done
|
|
67
|
+
const { chainId = 0 } = account.currency.ethereumLikeInfo || {};
|
|
68
|
+
// Create a new serialized tx with the signature now
|
|
69
|
+
const signature = yield (0, transaction_1.getSerializedTransaction)(preparedTransaction, {
|
|
70
|
+
r: "0x" + sig.r,
|
|
71
|
+
s: "0x" + sig.s,
|
|
72
|
+
v: (0, exports.applyEIP155)(sig.v, chainId),
|
|
73
|
+
});
|
|
74
|
+
const operation = (0, buildOptimisticOperation_1.buildOptimisticOperation)(account, Object.assign(Object.assign({}, transaction), { nonce: preparedTransaction.nonce }));
|
|
75
|
+
o.next({
|
|
76
|
+
type: "signed",
|
|
77
|
+
signedOperation: {
|
|
78
|
+
operation,
|
|
79
|
+
signature,
|
|
80
|
+
expirationDate: null,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
main().then(() => o.complete(), e => o.error(e));
|
|
86
|
+
});
|
|
87
|
+
exports.buildSignOperation = buildSignOperation;
|
|
88
|
+
//# sourceMappingURL=signOperation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"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"}
|
package/lib/signer.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { DomainServiceResolution } from "@ledgerhq/domain-service/types";
|
|
2
|
+
export type EvmAddress = {
|
|
3
|
+
publicKey: string;
|
|
4
|
+
address: string;
|
|
5
|
+
chainCode?: string;
|
|
6
|
+
};
|
|
7
|
+
export type EvmSignature = {
|
|
8
|
+
s: string;
|
|
9
|
+
v: string;
|
|
10
|
+
r: string;
|
|
11
|
+
};
|
|
12
|
+
type LedgerEthTransactionResolution = {
|
|
13
|
+
erc20Tokens: Array<string>;
|
|
14
|
+
nfts: Array<string>;
|
|
15
|
+
externalPlugin: Array<{
|
|
16
|
+
payload: string;
|
|
17
|
+
signature: string;
|
|
18
|
+
}>;
|
|
19
|
+
plugin: Array<string>;
|
|
20
|
+
domains: DomainServiceResolution[];
|
|
21
|
+
};
|
|
22
|
+
export interface EvmSigner {
|
|
23
|
+
getAddress(path: string, boolDisplay?: boolean, boolChaincode?: boolean): Promise<EvmAddress>;
|
|
24
|
+
signTransaction(path: string, rawTxHex: string, resolution?: LedgerEthTransactionResolution | null): Promise<EvmSignature>;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAGF,KAAK,8BAA8B,GAAG;IAEpC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEpB,cAAc,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE9D,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEtB,OAAO,EAAE,uBAAuB,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9F,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,8BAA8B,GAAG,IAAI,GACjD,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1B"}
|
package/lib/signer.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":""}
|
package/lib/specs.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specs.d.ts","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":";AA0SA,wBAoBS"}
|
package/lib/specs.js
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const expect_1 = __importDefault(require("expect"));
|
|
7
|
+
const invariant_1 = __importDefault(require("invariant"));
|
|
8
|
+
const sample_1 = __importDefault(require("lodash/sample"));
|
|
9
|
+
const devices_1 = require("@ledgerhq/devices");
|
|
10
|
+
const currencies_1 = require("@ledgerhq/cryptoassets/currencies");
|
|
11
|
+
const specs_1 = require("@ledgerhq/coin-framework/bot/specs");
|
|
12
|
+
const index_1 = require("@ledgerhq/coin-framework/currencies/index");
|
|
13
|
+
const speculos_deviceActions_1 = require("./speculos-deviceActions");
|
|
14
|
+
const testTimeout = 10 * 60 * 1000;
|
|
15
|
+
const ETH_UNIT = { code: "ETH", name: "ETH", magnitude: 18 };
|
|
16
|
+
const MBTC_UNIT = { name: "mBTC", code: "mBTC", magnitude: 5 };
|
|
17
|
+
const minBalancePerCurrencyId = {
|
|
18
|
+
arbitrum: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.001"),
|
|
19
|
+
arbitrum_goerli: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.001"),
|
|
20
|
+
optimism: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.001"),
|
|
21
|
+
optimism_goerli: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.001"),
|
|
22
|
+
boba: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.001"),
|
|
23
|
+
metis: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.01"),
|
|
24
|
+
moonriver: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.1"),
|
|
25
|
+
rsk: (0, index_1.parseCurrencyUnit)(MBTC_UNIT, "0.05"),
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Method in charge of verifying that both the recipient and sender of a *coin* transaction
|
|
29
|
+
* have received/lost the expected amount and have now the right balances
|
|
30
|
+
*
|
|
31
|
+
* ⚠️ Some blockchains specific rules are included
|
|
32
|
+
*/
|
|
33
|
+
const testCoinDestination = (args) => {
|
|
34
|
+
const { sendingAccount } = args;
|
|
35
|
+
const { currency } = sendingAccount;
|
|
36
|
+
// Because Arbitrum is an L2, gas is used in a specific way to ensure both the L2 and the L1 are getting paid.
|
|
37
|
+
// But as of right now the `arbiscan.io` API is only returning the proposed gas price of
|
|
38
|
+
// the transaction and not the effectively used gas price, which might differ.
|
|
39
|
+
// This leads to not being able to correctly cost an operation and
|
|
40
|
+
// therefore makes it impossible infer the sender's balance
|
|
41
|
+
if (["arbitrum", "arbitrum_goerli"].includes(currency.id)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
return (0, specs_1.genericTestDestination)(args);
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Method in charge of verifying the balance of a coin account after
|
|
48
|
+
* the transaction has been confirmed
|
|
49
|
+
*
|
|
50
|
+
* ⚠️ Some blockchains specific rules are included
|
|
51
|
+
*/
|
|
52
|
+
const testCoinBalance = ({ account, accountBeforeTransaction, operation, }) => {
|
|
53
|
+
// Optimism works in a way where a transaction as a L2 cost and a L1 settlement cost
|
|
54
|
+
// The explorer API is not capable of returning the L1 cost, therefore
|
|
55
|
+
// the operation value will always be less than what
|
|
56
|
+
// has been removed from the account balance
|
|
57
|
+
//
|
|
58
|
+
// Remark is also true for Abritrum but because of the arbiscan API not returning the
|
|
59
|
+
// effectively used gas but the "bid"/proposition of gas of the transaction
|
|
60
|
+
// resulting in inconsistencies regarding the cumulated value of a tx.
|
|
61
|
+
// value + gasLimit * gasPrice <-- gasPrice can be wrong here.
|
|
62
|
+
const underValuedFeesCurrencies = ["optimism", "optimism_goerli"];
|
|
63
|
+
const overValuedFeesCurrencies = ["arbitrum", "arbitrum_goerli"];
|
|
64
|
+
const currenciesWithFlakyBehaviour = [...underValuedFeesCurrencies, ...overValuedFeesCurrencies];
|
|
65
|
+
// Classic test verifying exactly the balance
|
|
66
|
+
if (!currenciesWithFlakyBehaviour.includes(account.currency.id)) {
|
|
67
|
+
(0, specs_1.botTest)("account balance moved with operation value", () => (0, expect_1.default)(account.balance.toString()).toBe(accountBeforeTransaction.balance.minus(operation.value).toString()));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// fallback test verifying the balance moved between the maximum and minimum possible values of the operation
|
|
71
|
+
(0, specs_1.botTest)("account balance moved at least operation value and less than operation value plus fees", () => {
|
|
72
|
+
// If the fee is undervalued like it is for optimism for example
|
|
73
|
+
// the only doable check is to verify that the account
|
|
74
|
+
// has lost *at least* the operation value + fee
|
|
75
|
+
if (underValuedFeesCurrencies.includes(account.currency.id)) {
|
|
76
|
+
const maxBalance = accountBeforeTransaction.balance.minus(operation.value.minus(operation.fee));
|
|
77
|
+
(0, expect_1.default)({
|
|
78
|
+
lessThanMaxBalance: account.balance.lte(maxBalance),
|
|
79
|
+
}).toEqual({
|
|
80
|
+
lessThanMaxBalance: true,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
// If the fee is overvalue like it is for arbitrum for example
|
|
84
|
+
// we make sure the account has now a balance between
|
|
85
|
+
// previous balance minus only operation value &
|
|
86
|
+
// previous balance minus operation value + fee
|
|
87
|
+
if (overValuedFeesCurrencies.includes(account.currency.id)) {
|
|
88
|
+
const minBalance = accountBeforeTransaction.balance.minus(operation.value);
|
|
89
|
+
const maxBalance = accountBeforeTransaction.balance.minus(operation.value.minus(operation.fee));
|
|
90
|
+
(0, expect_1.default)({
|
|
91
|
+
greaterThanMinBalance: account.balance.gte(minBalance),
|
|
92
|
+
lessThanMaxBalance: account.balance.lte(maxBalance),
|
|
93
|
+
}).toEqual({
|
|
94
|
+
greaterThanMinBalance: true,
|
|
95
|
+
lessThanMaxBalance: true,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const transactionCheck = (currencyId) => ({ maxSpendable }) => {
|
|
102
|
+
const currency = (0, index_1.getCryptoCurrencyById)(currencyId);
|
|
103
|
+
(0, invariant_1.default)(maxSpendable.gt(minBalancePerCurrencyId[currency.id] || (0, index_1.parseCurrencyUnit)(currency.units[0], "1")), `${currencyId} balance is too low`);
|
|
104
|
+
};
|
|
105
|
+
const evmBasicMutations = ({ maxAccount }) => [
|
|
106
|
+
{
|
|
107
|
+
name: "move 50%",
|
|
108
|
+
maxRun: 2,
|
|
109
|
+
testDestination: testCoinDestination,
|
|
110
|
+
transaction: ({ account, siblings, bridge, maxSpendable }) => {
|
|
111
|
+
const sibling = (0, specs_1.pickSiblings)(siblings, maxAccount);
|
|
112
|
+
const recipient = sibling.freshAddress;
|
|
113
|
+
const amount = maxSpendable.div(2).integerValue();
|
|
114
|
+
return {
|
|
115
|
+
transaction: bridge.createTransaction(account),
|
|
116
|
+
updates: [
|
|
117
|
+
{
|
|
118
|
+
recipient,
|
|
119
|
+
amount,
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
};
|
|
123
|
+
},
|
|
124
|
+
test: ({ account, accountBeforeTransaction, operation, transaction, status, optimisticOperation, }) => {
|
|
125
|
+
// workaround for buggy explorer behavior (nodes desync)
|
|
126
|
+
(0, invariant_1.default)(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
|
|
127
|
+
const estimatedGas = transaction.gasLimit.times(transaction.gasPrice || transaction.maxFeePerGas || 0);
|
|
128
|
+
(0, specs_1.botTest)("operation fee is not exceeding estimated gas", () => (0, expect_1.default)(operation.fee.toNumber()).toBeLessThanOrEqual(estimatedGas.toNumber()));
|
|
129
|
+
testCoinBalance({
|
|
130
|
+
account,
|
|
131
|
+
accountBeforeTransaction,
|
|
132
|
+
operation,
|
|
133
|
+
transaction,
|
|
134
|
+
status,
|
|
135
|
+
optimisticOperation,
|
|
136
|
+
});
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: "send max",
|
|
141
|
+
maxRun: 1,
|
|
142
|
+
testDestination: testCoinDestination,
|
|
143
|
+
transaction: ({ account, siblings, bridge }) => {
|
|
144
|
+
const sibling = (0, specs_1.pickSiblings)(siblings, maxAccount);
|
|
145
|
+
const recipient = sibling.freshAddress;
|
|
146
|
+
return {
|
|
147
|
+
transaction: bridge.createTransaction(account),
|
|
148
|
+
updates: [
|
|
149
|
+
{
|
|
150
|
+
recipient,
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
useAllAmount: true,
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
};
|
|
157
|
+
},
|
|
158
|
+
test: ({ account, accountBeforeTransaction, operation, transaction, status, optimisticOperation, }) => {
|
|
159
|
+
// workaround for buggy explorer behavior (nodes desync)
|
|
160
|
+
(0, invariant_1.default)(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
|
|
161
|
+
const estimatedGas = transaction.gasLimit.times(transaction.gasPrice || transaction.maxFeePerGas || 0);
|
|
162
|
+
(0, specs_1.botTest)("operation fee is not exceeding estimated gas", () => (0, expect_1.default)(operation.fee.toNumber()).toBeLessThanOrEqual(estimatedGas.toNumber()));
|
|
163
|
+
testCoinBalance({
|
|
164
|
+
account,
|
|
165
|
+
accountBeforeTransaction,
|
|
166
|
+
operation,
|
|
167
|
+
transaction,
|
|
168
|
+
status,
|
|
169
|
+
optimisticOperation,
|
|
170
|
+
});
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
name: "move some ERC20",
|
|
175
|
+
maxRun: 1,
|
|
176
|
+
transaction: ({ account, siblings, bridge }) => {
|
|
177
|
+
const erc20Account = (0, sample_1.default)((account.subAccounts || []).filter(a => a.balance.gt(0)));
|
|
178
|
+
(0, invariant_1.default)(erc20Account, "no erc20 account");
|
|
179
|
+
const sibling = (0, specs_1.pickSiblings)(siblings, 3);
|
|
180
|
+
const recipient = sibling.freshAddress;
|
|
181
|
+
return {
|
|
182
|
+
transaction: bridge.createTransaction(account),
|
|
183
|
+
updates: [
|
|
184
|
+
{
|
|
185
|
+
recipient,
|
|
186
|
+
subAccountId: erc20Account.id,
|
|
187
|
+
},
|
|
188
|
+
Math.random() < 0.5
|
|
189
|
+
? {
|
|
190
|
+
useAllAmount: true,
|
|
191
|
+
}
|
|
192
|
+
: {
|
|
193
|
+
amount: erc20Account.balance.times(Math.random()).integerValue(),
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
};
|
|
197
|
+
},
|
|
198
|
+
test: ({ accountBeforeTransaction, account, transaction, operation }) => {
|
|
199
|
+
var _a;
|
|
200
|
+
// workaround for buggy explorer behavior (nodes desync)
|
|
201
|
+
(0, invariant_1.default)(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
|
|
202
|
+
(0, invariant_1.default)(accountBeforeTransaction.subAccounts, "sub accounts before");
|
|
203
|
+
const erc20accountBefore = (_a = accountBeforeTransaction.subAccounts) === null || _a === void 0 ? void 0 : _a.find(s => s.id === transaction.subAccountId);
|
|
204
|
+
(0, invariant_1.default)(erc20accountBefore, "erc20 acc was here before");
|
|
205
|
+
(0, invariant_1.default)(account.subAccounts, "sub accounts");
|
|
206
|
+
const erc20account = account.subAccounts.find(s => s.id === transaction.subAccountId);
|
|
207
|
+
(0, invariant_1.default)(erc20account, "erc20 acc is still here");
|
|
208
|
+
if (transaction.useAllAmount) {
|
|
209
|
+
(0, specs_1.botTest)("erc20 account is empty", () => (0, expect_1.default)(erc20account.balance.toString()).toBe("0"));
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
(0, specs_1.botTest)("account balance moved with tx amount", () => (0, expect_1.default)(erc20account.balance.toString()).toBe(erc20accountBefore.balance.minus(transaction.amount).toString()));
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
];
|
|
217
|
+
exports.default = Object.values(currencies_1.cryptocurrenciesById)
|
|
218
|
+
.filter(currency => currency.family === "evm")
|
|
219
|
+
.reduce((acc, currency) => {
|
|
220
|
+
// @ts-expect-error FIXME: fix typings
|
|
221
|
+
acc[currency.id] = {
|
|
222
|
+
name: currency.name,
|
|
223
|
+
currency,
|
|
224
|
+
appQuery: {
|
|
225
|
+
model: devices_1.DeviceModelId.nanoS,
|
|
226
|
+
appName: "Ethereum",
|
|
227
|
+
appVersion: "1.10.2",
|
|
228
|
+
},
|
|
229
|
+
testTimeout,
|
|
230
|
+
transactionCheck: transactionCheck(currency.id),
|
|
231
|
+
mutations: evmBasicMutations({
|
|
232
|
+
maxAccount: 3,
|
|
233
|
+
}),
|
|
234
|
+
genericDeviceAction: speculos_deviceActions_1.acceptTransaction,
|
|
235
|
+
};
|
|
236
|
+
return acc;
|
|
237
|
+
}, {});
|
|
238
|
+
//# sourceMappingURL=specs.js.map
|
package/lib/specs.js.map
ADDED
|
@@ -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,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.acceptTransaction = void 0;
|
|
4
|
+
const index_1 = require("@ledgerhq/coin-framework/account/index");
|
|
5
|
+
const specs_1 = require("@ledgerhq/coin-framework/bot/specs");
|
|
6
|
+
// FIXME: fix types
|
|
7
|
+
const maxFeesExpectedValue = ({ account, status }) => (0, specs_1.formatDeviceAmount)(account.currency, status.estimatedFees);
|
|
8
|
+
exports.acceptTransaction = (0, specs_1.deviceActionFlow)({
|
|
9
|
+
steps: [
|
|
10
|
+
{
|
|
11
|
+
title: "Review",
|
|
12
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
title: "Type",
|
|
16
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
title: "Amount",
|
|
20
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
21
|
+
expectedValue: ({ account, status, transaction }) => {
|
|
22
|
+
const subAccount = (0, index_1.findSubAccountById)(account, transaction.subAccountId || "");
|
|
23
|
+
if (subAccount && subAccount.type === "TokenAccount") {
|
|
24
|
+
return (0, specs_1.formatDeviceAmount)(subAccount.token, status.amount);
|
|
25
|
+
}
|
|
26
|
+
return (0, specs_1.formatDeviceAmount)(account.currency, status.amount);
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
title: "Contract",
|
|
31
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
title: "Network",
|
|
35
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
title: "Max fees",
|
|
39
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
40
|
+
expectedValue: maxFeesExpectedValue,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
// Legacy (ETC..)
|
|
44
|
+
title: "Max Fees",
|
|
45
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
46
|
+
expectedValue: maxFeesExpectedValue,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
title: "Address",
|
|
50
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
51
|
+
expectedValue: ({ transaction }) => transaction.recipient,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
title: "Accept",
|
|
55
|
+
button: specs_1.SpeculosButton.BOTH,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
title: "Approve",
|
|
59
|
+
button: specs_1.SpeculosButton.BOTH,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
});
|
|
63
|
+
exports.default = {
|
|
64
|
+
acceptTransaction: exports.acceptTransaction,
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=speculos-deviceActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speculos-deviceActions.js","sourceRoot":"","sources":["../src/speculos-deviceActions.ts"],"names":[],"mappings":";;;AAAA,kEAA4E;AAC5E,8DAI4C;AAI5C,mBAAmB;AACnB,MAAM,oBAAoB,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAiC,EAAE,EAAE,CAClF,IAAA,0BAAkB,EAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AAEhD,QAAA,iBAAiB,GAAmC,IAAA,wBAAgB,EAAC;IAChF,KAAK,EAAE;QACL;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,sBAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,sBAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE;gBAClD,MAAM,UAAU,GAAG,IAAA,0BAAkB,EAAC,OAAO,EAAE,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;gBAE/E,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE;oBACpD,OAAO,IAAA,0BAAkB,EAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;iBAC5D;gBAED,OAAO,IAAA,0BAAkB,EAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC;SACF;QACD;YACE,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,sBAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,sBAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,oBAAoB;SACpC;QACD;YACE,iBAAiB;YACjB,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,oBAAoB;SACpC;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;SAC1D;QACD;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,sBAAc,CAAC,IAAI;SAC5B;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,sBAAc,CAAC,IAAI;SAC5B;KACF;CACF,CAAC,CAAC;AAEH,kBAAe;IACb,iBAAiB,EAAjB,yBAAiB;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"}
|