@ledgerhq/coin-evm 0.2.1 → 0.2.2-nightly.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +11 -46
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +36 -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,31 @@
|
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
|
|
3
|
+
import { Account, SubAccount } from "@ledgerhq/types-live";
|
|
4
|
+
import { Transaction as EvmTransaction, EvmTransactionEIP1559, EvmTransactionLegacy } from "./types";
|
|
5
|
+
/**
|
|
6
|
+
* Helper to check if a legacy transaction has the right fee property
|
|
7
|
+
*/
|
|
8
|
+
export declare const legacyTransactionHasFees: (tx: EvmTransactionLegacy) => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Helper to check if a legacy transaction has the right fee property
|
|
11
|
+
*/
|
|
12
|
+
export declare const eip1559TransactionHasFees: (tx: EvmTransactionEIP1559) => boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Helper to get total fee value for a tx depending on its type
|
|
15
|
+
*/
|
|
16
|
+
export declare const getEstimatedFees: (tx: EvmTransaction) => BigNumber;
|
|
17
|
+
/**
|
|
18
|
+
* Helper returning the potential additional fees necessary for layer twos
|
|
19
|
+
* to settle the transaction on layer 1.
|
|
20
|
+
*/
|
|
21
|
+
export declare const getAdditionalLayer2Fees: (currency: CryptoCurrency, transaction: EvmTransaction) => Promise<BigNumber | undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* In charge of smartly merging sub accounts while maintaining references as much as possible
|
|
24
|
+
*/
|
|
25
|
+
export declare const mergeSubAccounts: (initialAccount: Account | undefined, newSubAccounts: Partial<SubAccount>[]) => Array<Partial<SubAccount> | SubAccount>;
|
|
26
|
+
/**
|
|
27
|
+
* Method creating a hash that will help triggering or not a full synchronization on an account.
|
|
28
|
+
* As of now, it's checking if a token has been added, removed of changed regarding important properties
|
|
29
|
+
*/
|
|
30
|
+
export declare const getSyncHash: (currency: CryptoCurrency) => string;
|
|
31
|
+
//# sourceMappingURL=logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../src/logic.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EACL,WAAW,IAAI,cAAc,EAC7B,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,wBAAwB,OAAQ,oBAAoB,KAAG,OACjB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,yBAAyB,OAAQ,qBAAqB,KAAG,OACA,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,gBAAgB,OAAQ,cAAc,KAAG,SAKrD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,aACxB,cAAc,eACX,cAAc,KAC1B,QAAQ,SAAS,GAAG,SAAS,CAU/B,CAAC;AAcF;;GAEG;AACH,eAAO,MAAM,gBAAgB,mBACX,OAAO,GAAG,SAAS,kBACnB,QAAQ,UAAU,CAAC,EAAE,KACpC,MAAM,QAAQ,UAAU,CAAC,GAAG,UAAU,CAqDxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,aAAc,cAAc,KAAG,MAOtD,CAAC"}
|
package/lib-es/logic.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
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 { ethers } from "ethers";
|
|
11
|
+
import BigNumber from "bignumber.js";
|
|
12
|
+
import { mergeOps } from "@ledgerhq/coin-framework/bridge/jsHelpers";
|
|
13
|
+
import { listTokensForCryptoCurrency } from "@ledgerhq/cryptoassets/tokens";
|
|
14
|
+
import { getOptimismAdditionalFees } from "./api/rpc/rpc.common";
|
|
15
|
+
/**
|
|
16
|
+
* Helper to check if a legacy transaction has the right fee property
|
|
17
|
+
*/
|
|
18
|
+
export const legacyTransactionHasFees = (tx) => Boolean((!tx.type || tx.type < 2) && tx.gasPrice);
|
|
19
|
+
/**
|
|
20
|
+
* Helper to check if a legacy transaction has the right fee property
|
|
21
|
+
*/
|
|
22
|
+
export const eip1559TransactionHasFees = (tx) => Boolean(tx.type === 2 && tx.maxFeePerGas && tx.maxPriorityFeePerGas);
|
|
23
|
+
/**
|
|
24
|
+
* Helper to get total fee value for a tx depending on its type
|
|
25
|
+
*/
|
|
26
|
+
export const getEstimatedFees = (tx) => {
|
|
27
|
+
var _a, _b;
|
|
28
|
+
if (tx.type !== 2) {
|
|
29
|
+
return ((_a = tx.gasPrice) === null || _a === void 0 ? void 0 : _a.multipliedBy(tx.gasLimit)) || new BigNumber(0);
|
|
30
|
+
}
|
|
31
|
+
return ((_b = tx.maxFeePerGas) === null || _b === void 0 ? void 0 : _b.multipliedBy(tx.gasLimit)) || new BigNumber(0);
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Helper returning the potential additional fees necessary for layer twos
|
|
35
|
+
* to settle the transaction on layer 1.
|
|
36
|
+
*/
|
|
37
|
+
export const getAdditionalLayer2Fees = (currency, transaction) => __awaiter(void 0, void 0, void 0, function* () {
|
|
38
|
+
switch (currency.id) {
|
|
39
|
+
case "optimism":
|
|
40
|
+
case "optimism_goerli": {
|
|
41
|
+
const additionalFees = yield getOptimismAdditionalFees(currency, transaction);
|
|
42
|
+
return additionalFees;
|
|
43
|
+
}
|
|
44
|
+
default:
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* List of properties of a sub account that can be updated when 2 "identical" accounts are found
|
|
50
|
+
*/
|
|
51
|
+
const updatableSubAccountProperties = [
|
|
52
|
+
{ name: "balance", isOps: false },
|
|
53
|
+
{ name: "spendableBalance", isOps: false },
|
|
54
|
+
{ name: "balanceHistoryCache", isOps: false },
|
|
55
|
+
{ name: "swapHistory", isOps: false },
|
|
56
|
+
{ name: "operations", isOps: true },
|
|
57
|
+
{ name: "pendingOperations", isOps: true },
|
|
58
|
+
];
|
|
59
|
+
/**
|
|
60
|
+
* In charge of smartly merging sub accounts while maintaining references as much as possible
|
|
61
|
+
*/
|
|
62
|
+
export const mergeSubAccounts = (initialAccount, newSubAccounts) => {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
const oldSubAccounts = initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.subAccounts;
|
|
65
|
+
if (!oldSubAccounts) {
|
|
66
|
+
return newSubAccounts;
|
|
67
|
+
}
|
|
68
|
+
// Creating a map of already existing sub accounts by id
|
|
69
|
+
const oldSubAccountsById = {};
|
|
70
|
+
for (const oldSubAccount of oldSubAccounts) {
|
|
71
|
+
oldSubAccountsById[oldSubAccount.id] = oldSubAccount;
|
|
72
|
+
}
|
|
73
|
+
// Looping on new sub accounts to compare them with already existing ones
|
|
74
|
+
// Already existing will be updated if necessary (see `updatableSubAccountProperties`)
|
|
75
|
+
// Fresh new sub accounts will be added/pushed after already existing
|
|
76
|
+
const newSubAccountsToAdd = [];
|
|
77
|
+
for (const newSubAccount of newSubAccounts) {
|
|
78
|
+
const duplicatedAccount = oldSubAccountsById[newSubAccount.id];
|
|
79
|
+
// If this sub account was not already in the initialAccount
|
|
80
|
+
if (!duplicatedAccount) {
|
|
81
|
+
// We'll add it later
|
|
82
|
+
newSubAccountsToAdd.push(newSubAccount);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const updates = {};
|
|
86
|
+
for (const { name, isOps } of updatableSubAccountProperties) {
|
|
87
|
+
if (!isOps) {
|
|
88
|
+
// @ts-expect-error FIXME: fix typings
|
|
89
|
+
if (newSubAccount[name] !== duplicatedAccount[name]) {
|
|
90
|
+
// @ts-expect-error FIXME: fix typings
|
|
91
|
+
updates[name] = newSubAccount[name];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// @ts-expect-error FIXME: fix typings
|
|
96
|
+
updates[name] = mergeOps(duplicatedAccount[name], newSubAccount[name]);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Updating the operationsCount in case the mergeOps changed it
|
|
100
|
+
updates.operationsCount =
|
|
101
|
+
((_a = updates.operations) === null || _a === void 0 ? void 0 : _a.length) || ((_b = duplicatedAccount === null || duplicatedAccount === void 0 ? void 0 : duplicatedAccount.operations) === null || _b === void 0 ? void 0 : _b.length) || 0;
|
|
102
|
+
// Modifying the Map with the updated sub account with a new ref
|
|
103
|
+
oldSubAccountsById[newSubAccount.id] = Object.assign(Object.assign({}, duplicatedAccount), updates);
|
|
104
|
+
}
|
|
105
|
+
const updatedSubAccounts = Object.values(oldSubAccountsById);
|
|
106
|
+
return [...updatedSubAccounts, ...newSubAccountsToAdd];
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Method creating a hash that will help triggering or not a full synchronization on an account.
|
|
110
|
+
* As of now, it's checking if a token has been added, removed of changed regarding important properties
|
|
111
|
+
*/
|
|
112
|
+
export const getSyncHash = (currency) => {
|
|
113
|
+
const tokens = listTokensForCryptoCurrency(currency);
|
|
114
|
+
const basicTokensListString = tokens
|
|
115
|
+
.map(token => token.id + token.contractAddress + token.name + token.ticker + token.delisted)
|
|
116
|
+
.join("");
|
|
117
|
+
return ethers.utils.sha256(Buffer.from(basicTokensListString));
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=logic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logic.js","sourceRoot":"","sources":["../src/logic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ERC20Token } from "@ledgerhq/cryptoassets/types";
|
|
2
|
+
import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
|
|
3
|
+
export declare const fetchERC20Tokens: (currency: CryptoCurrency) => Promise<ERC20Token[]>;
|
|
4
|
+
export declare function preload(currency: CryptoCurrency): Promise<ERC20Token[]>;
|
|
5
|
+
export declare function hydrate(value: ERC20Token[] | null | undefined): void;
|
|
6
|
+
//# sourceMappingURL=preload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAM9D,eAAO,MAAM,gBAAgB,EAAE,CAC7B,QAAQ,EAAE,cAAc,KACrB,OAAO,CAAC,UAAU,EAAE,CAqBxB,CAAC;AAEF,wBAAsB,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAI7E;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAIpE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
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 { log } from "@ledgerhq/logs";
|
|
11
|
+
import { addTokens, convertERC20 } from "@ledgerhq/cryptoassets/tokens";
|
|
12
|
+
import { tokens as tokensByChainId } from "@ledgerhq/cryptoassets/data/evm/index";
|
|
13
|
+
import network from "@ledgerhq/live-network/network";
|
|
14
|
+
import { getEnv } from "@ledgerhq/live-env";
|
|
15
|
+
export const fetchERC20Tokens = (currency) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
const { ethereumLikeInfo } = currency;
|
|
17
|
+
const url = `${getEnv("DYNAMIC_CAL_BASE_URL")}/evm/${(ethereumLikeInfo === null || ethereumLikeInfo === void 0 ? void 0 : ethereumLikeInfo.chainId) || 0}/erc20.json`;
|
|
18
|
+
const dynamicTokens = yield network({
|
|
19
|
+
method: "GET",
|
|
20
|
+
url,
|
|
21
|
+
})
|
|
22
|
+
.then(({ data }) => (data.length ? data : null))
|
|
23
|
+
.catch(e => {
|
|
24
|
+
log("error", "EVM Family: Couldn't fetch dynamic CAL tokens from " + url, e);
|
|
25
|
+
return null;
|
|
26
|
+
});
|
|
27
|
+
if (dynamicTokens)
|
|
28
|
+
return dynamicTokens;
|
|
29
|
+
// @ts-expect-error FIXME: fix typings
|
|
30
|
+
const tokens = tokensByChainId[(ethereumLikeInfo === null || ethereumLikeInfo === void 0 ? void 0 : ethereumLikeInfo.chainId) || ""];
|
|
31
|
+
if (tokens)
|
|
32
|
+
return tokens;
|
|
33
|
+
log("warning", `EVM Family: No tokens found in CAL for currency: ${currency.id}`, currency);
|
|
34
|
+
return [];
|
|
35
|
+
});
|
|
36
|
+
export function preload(currency) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const erc20 = yield fetchERC20Tokens(currency);
|
|
39
|
+
addTokens(erc20.map(convertERC20));
|
|
40
|
+
return erc20;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export function hydrate(value) {
|
|
44
|
+
if (!Array.isArray(value))
|
|
45
|
+
return;
|
|
46
|
+
addTokens(value.map(convertERC20));
|
|
47
|
+
log("evm/preload", "hydrate " + value.length + " tokens");
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=preload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGrC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,OAAO,MAAM,gCAAgC,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,gBAAgB,GAEA,CAAM,QAAQ,EAAC,EAAE;IAC5C,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;IAEtC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,KAAI,CAAC,aAAa,CAAC;IACjG,MAAM,aAAa,GAAwB,MAAM,OAAO,CAAC;QACvD,MAAM,EAAE,KAAK;QACb,GAAG;KACJ,CAAC;SACC,IAAI,CAAC,CAAC,EAAE,IAAI,EAA0B,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACvE,KAAK,CAAC,CAAC,CAAC,EAAE;QACT,GAAG,CAAC,OAAO,EAAE,qDAAqD,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACL,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,sCAAsC;IACtC,MAAM,MAAM,GAAG,eAAe,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,KAAI,EAAE,CAAC,CAAC;IAChE,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,GAAG,CAAC,SAAS,EAAE,oDAAoD,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5F,OAAO,EAAE,CAAC;AACZ,CAAC,CAAA,CAAC;AAEF,MAAM,UAAgB,OAAO,CAAC,QAAwB;;QACpD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC/C,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;CAAA;AAED,MAAM,UAAU,OAAO,CAAC,KAAsC;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;IAClC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IACnC,GAAG,CAAC,aAAa,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Account, TokenAccount } from "@ledgerhq/types-live";
|
|
2
|
+
import { Transaction as EvmTransaction } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Prepare basic coin transactions or smart contract interactions (other than live ERC20 transfers)
|
|
5
|
+
* Should be used for transactions coming from the wallet API
|
|
6
|
+
* Handling addition of gas limit
|
|
7
|
+
*/
|
|
8
|
+
export declare const prepareCoinTransaction: (account: Account, typedTransaction: EvmTransaction) => Promise<EvmTransaction>;
|
|
9
|
+
/**
|
|
10
|
+
* Prepare ERC20 transactions.
|
|
11
|
+
* Handling addition of ERC20 transfer data and gas limit
|
|
12
|
+
*/
|
|
13
|
+
export declare const prepareTokenTransaction: (account: Account, tokenAccount: TokenAccount, typedTransaction: EvmTransaction) => Promise<EvmTransaction>;
|
|
14
|
+
/**
|
|
15
|
+
* Method called to update a transaction into a state that would make it valid
|
|
16
|
+
* (E.g. Adding fees, add smart contract data, etc...)
|
|
17
|
+
*/
|
|
18
|
+
export declare const prepareTransaction: (account: Account, transaction: EvmTransaction) => Promise<EvmTransaction>;
|
|
19
|
+
/**
|
|
20
|
+
* Prepare the transaction for the signOperation step.
|
|
21
|
+
* For now, used to changed the recipient for TokenAccount transfers
|
|
22
|
+
* with the smart contract address as recipient and add the nonce
|
|
23
|
+
* (which would change as well in the UI if it was done before that step)
|
|
24
|
+
*/
|
|
25
|
+
export declare const prepareForSignOperation: (account: Account, transaction: EvmTransaction) => Promise<EvmTransaction>;
|
|
26
|
+
//# sourceMappingURL=prepareTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../src/prepareTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAM7D,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,SAAS,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YACxB,OAAO,oBACE,cAAc,KAC/B,QAAQ,cAAc,CAgDxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,YACzB,OAAO,gBACF,YAAY,oBACR,cAAc,KAC/B,QAAQ,cAAc,CAiCxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YACpB,OAAO,eACH,cAAc,KAC1B,QAAQ,cAAc,CA4BxB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,YACzB,OAAO,eACH,cAAc,KAC1B,QAAQ,cAAc,CAkBxB,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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 { findSubAccountById } from "@ledgerhq/coin-framework/account/index";
|
|
11
|
+
import BigNumber from "bignumber.js";
|
|
12
|
+
import { getFeesEstimation, getGasEstimation, getTransactionCount } from "./api/rpc";
|
|
13
|
+
import { validateRecipient } from "./getTransactionStatus";
|
|
14
|
+
import { getAdditionalLayer2Fees, getEstimatedFees } from "./logic";
|
|
15
|
+
import { getTransactionData, getTypedTransaction } from "./transaction";
|
|
16
|
+
/**
|
|
17
|
+
* Prepare basic coin transactions or smart contract interactions (other than live ERC20 transfers)
|
|
18
|
+
* Should be used for transactions coming from the wallet API
|
|
19
|
+
* Handling addition of gas limit
|
|
20
|
+
*/
|
|
21
|
+
export const prepareCoinTransaction = (account, typedTransaction) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
// A `useAllAmount` transaction is a specific case of the live, and because we're in the
|
|
23
|
+
// context of a coinTransaction, no smart contract should be involed
|
|
24
|
+
if (typedTransaction.useAllAmount) {
|
|
25
|
+
// Since a gas estimation is done by simulating the transaction, we can't know in advanced how much
|
|
26
|
+
// we should put in the simulation.
|
|
27
|
+
// But as a coin transaction (no smart contract) should always consumme the same amount of gas, no matter
|
|
28
|
+
// the amount of coin transfered, we can infer the gasLimit with any amount.
|
|
29
|
+
const gasLimit = yield getGasEstimation(account, Object.assign(Object.assign({}, typedTransaction), { amount: new BigNumber(0) }));
|
|
30
|
+
const draftTransaction = Object.assign(Object.assign({}, typedTransaction), { gasLimit });
|
|
31
|
+
const estimatedFees = getEstimatedFees(draftTransaction);
|
|
32
|
+
const additionalFees = yield getAdditionalLayer2Fees(account.currency, draftTransaction);
|
|
33
|
+
const amount = BigNumber.max(account.balance.minus(estimatedFees).minus(additionalFees || 0), 0);
|
|
34
|
+
return Object.assign(Object.assign({}, draftTransaction), { amount,
|
|
35
|
+
additionalFees });
|
|
36
|
+
}
|
|
37
|
+
const gasLimit = yield getGasEstimation(account, typedTransaction).catch(
|
|
38
|
+
// in case of a smart contract interaction, the gas estimation
|
|
39
|
+
// (which is transaction simulation by the node) can fail.
|
|
40
|
+
// E.g. A DApp is creating an invalid transaction, swaping more Tokens than the user actually have -> fail
|
|
41
|
+
// This value of 0 should be catched by `getTransactionStatus`
|
|
42
|
+
// and displayed in the UI as `set the gas manually`
|
|
43
|
+
() => new BigNumber(0));
|
|
44
|
+
const additionalFees = yield getAdditionalLayer2Fees(account.currency, Object.assign(Object.assign({}, typedTransaction), { gasLimit }));
|
|
45
|
+
return Object.assign(Object.assign({}, typedTransaction), { gasLimit,
|
|
46
|
+
additionalFees });
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Prepare ERC20 transactions.
|
|
50
|
+
* Handling addition of ERC20 transfer data and gas limit
|
|
51
|
+
*/
|
|
52
|
+
export const prepareTokenTransaction = (account, tokenAccount, typedTransaction) => __awaiter(void 0, void 0, void 0, function* () {
|
|
53
|
+
const [recipientErrors] = validateRecipient(account, typedTransaction);
|
|
54
|
+
const amount = typedTransaction.useAllAmount ? tokenAccount.balance : typedTransaction.amount;
|
|
55
|
+
const data = !Object.keys(recipientErrors).length
|
|
56
|
+
? getTransactionData(Object.assign(Object.assign({}, typedTransaction), { amount }))
|
|
57
|
+
: undefined;
|
|
58
|
+
// As we're interacting with a smart contract,
|
|
59
|
+
// it's going to be the real recipient for the tx
|
|
60
|
+
const gasLimit = data
|
|
61
|
+
? yield getGasEstimation(account, Object.assign(Object.assign({}, typedTransaction), { amount: new BigNumber(0), recipient: tokenAccount.token.contractAddress, // recipient is then the token smart contract
|
|
62
|
+
data })).catch(() => new BigNumber(0)) // this catch returning 0 should be handled by the `getTransactionStatus` method
|
|
63
|
+
: new BigNumber(0);
|
|
64
|
+
const additionalFees = yield getAdditionalLayer2Fees(account.currency, Object.assign(Object.assign({}, typedTransaction), { amount: new BigNumber(0), recipient: tokenAccount.token.contractAddress, // recipient is then the token smart contract
|
|
65
|
+
data,
|
|
66
|
+
gasLimit }));
|
|
67
|
+
// Recipient isn't changed here as it would change on the UI end as well
|
|
68
|
+
// The change will be handled by the `prepareForSignOperation` method
|
|
69
|
+
return Object.assign(Object.assign({}, typedTransaction), { amount,
|
|
70
|
+
data,
|
|
71
|
+
gasLimit,
|
|
72
|
+
additionalFees });
|
|
73
|
+
});
|
|
74
|
+
/**
|
|
75
|
+
* Method called to update a transaction into a state that would make it valid
|
|
76
|
+
* (E.g. Adding fees, add smart contract data, etc...)
|
|
77
|
+
*/
|
|
78
|
+
export const prepareTransaction = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
+
const { currency } = account;
|
|
80
|
+
// Get the current network status fees
|
|
81
|
+
const feeData = yield (() => __awaiter(void 0, void 0, void 0, function* () {
|
|
82
|
+
var _a, _b, _c, _d;
|
|
83
|
+
if (transaction.feesStrategy === "custom") {
|
|
84
|
+
return {
|
|
85
|
+
gasPrice: (_a = transaction.gasPrice) !== null && _a !== void 0 ? _a : null,
|
|
86
|
+
maxFeePerGas: (_b = transaction.maxFeePerGas) !== null && _b !== void 0 ? _b : null,
|
|
87
|
+
maxPriorityFeePerGas: (_c = transaction.maxPriorityFeePerGas) !== null && _c !== void 0 ? _c : null,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (!transaction.feesStrategy) {
|
|
91
|
+
return getFeesEstimation(currency);
|
|
92
|
+
}
|
|
93
|
+
const gasOption = (_d = transaction.gasOptions) === null || _d === void 0 ? void 0 : _d[transaction.feesStrategy];
|
|
94
|
+
return gasOption !== null && gasOption !== void 0 ? gasOption : getFeesEstimation(currency);
|
|
95
|
+
}))();
|
|
96
|
+
const subAccount = findSubAccountById(account, transaction.subAccountId || "");
|
|
97
|
+
const isTokenTransaction = (subAccount === null || subAccount === void 0 ? void 0 : subAccount.type) === "TokenAccount";
|
|
98
|
+
const typedTransaction = getTypedTransaction(transaction, feeData);
|
|
99
|
+
return isTokenTransaction
|
|
100
|
+
? yield prepareTokenTransaction(account, subAccount, typedTransaction)
|
|
101
|
+
: yield prepareCoinTransaction(account, typedTransaction);
|
|
102
|
+
});
|
|
103
|
+
/**
|
|
104
|
+
* Prepare the transaction for the signOperation step.
|
|
105
|
+
* For now, used to changed the recipient for TokenAccount transfers
|
|
106
|
+
* with the smart contract address as recipient and add the nonce
|
|
107
|
+
* (which would change as well in the UI if it was done before that step)
|
|
108
|
+
*/
|
|
109
|
+
export const prepareForSignOperation = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
|
|
110
|
+
const nonce = yield getTransactionCount(account.currency, account.freshAddress);
|
|
111
|
+
const subAccount = findSubAccountById(account, transaction.subAccountId || "");
|
|
112
|
+
const isTokenTransaction = (subAccount === null || subAccount === void 0 ? void 0 : subAccount.type) === "TokenAccount";
|
|
113
|
+
return isTokenTransaction
|
|
114
|
+
? Object.assign(Object.assign({}, transaction), { amount: new BigNumber(0), recipient: subAccount.token.contractAddress, // recipient is then the token smart contract
|
|
115
|
+
// data as already been added by the `prepareTokenTransaction` method
|
|
116
|
+
nonce }) : Object.assign(Object.assign({}, transaction), { nonce });
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=prepareTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../src/prepareTransaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SignOperationFnSignature } from "@ledgerhq/types-live";
|
|
2
|
+
import { SignerContext } from "@ledgerhq/coin-framework/signer";
|
|
3
|
+
import { Transaction } from "./types";
|
|
4
|
+
import { EvmAddress, EvmSignature, EvmSigner } from "./signer";
|
|
5
|
+
/**
|
|
6
|
+
* Transforms the ECDSA signature paremeter v hexadecimal string received
|
|
7
|
+
* from the nano into an EIP155 compatible number.
|
|
8
|
+
*
|
|
9
|
+
* Reminder EIP155 transforms v this way:
|
|
10
|
+
* v = chainId * 2 + 35
|
|
11
|
+
* (+ parity 1 or 0)
|
|
12
|
+
*/
|
|
13
|
+
export declare const applyEIP155: (vAsHex: string, chainId: number) => number;
|
|
14
|
+
/**
|
|
15
|
+
* Sign Transaction with Ledger hardware
|
|
16
|
+
*/
|
|
17
|
+
export declare const buildSignOperation: (signerContext: SignerContext<EvmSigner, EvmAddress | EvmSignature>) => SignOperationFnSignature<Transaction>;
|
|
18
|
+
//# sourceMappingURL=signOperation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,wBAAwB,EAGzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAIhE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,WAAY,MAAM,WAAW,MAAM,KAAG,MAgB7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,kBAEZ,cAAc,SAAS,EAAE,UAAU,GAAG,YAAY,CAAC,KACjE,yBAAyB,WAAW,CAkEnC,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
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 { Observable } from "rxjs";
|
|
11
|
+
import { ledgerService } from "@ledgerhq/hw-app-eth";
|
|
12
|
+
import { buildOptimisticOperation } from "./buildOptimisticOperation";
|
|
13
|
+
import { prepareForSignOperation } from "./prepareTransaction";
|
|
14
|
+
import { getSerializedTransaction } from "./transaction";
|
|
15
|
+
/**
|
|
16
|
+
* Transforms the ECDSA signature paremeter v hexadecimal string received
|
|
17
|
+
* from the nano into an EIP155 compatible number.
|
|
18
|
+
*
|
|
19
|
+
* Reminder EIP155 transforms v this way:
|
|
20
|
+
* v = chainId * 2 + 35
|
|
21
|
+
* (+ parity 1 or 0)
|
|
22
|
+
*/
|
|
23
|
+
export const applyEIP155 = (vAsHex, chainId) => {
|
|
24
|
+
const v = parseInt(vAsHex, 16);
|
|
25
|
+
if (v === 0 || v === 1) {
|
|
26
|
+
// if v is 0 or 1, it's already representing parity
|
|
27
|
+
return chainId * 2 + 35 + v;
|
|
28
|
+
}
|
|
29
|
+
else if (v === 27 || v === 28) {
|
|
30
|
+
const parity = v - 27; // transforming v into 0 or 1 to become the parity
|
|
31
|
+
return chainId * 2 + 35 + parity;
|
|
32
|
+
}
|
|
33
|
+
// When chainId is lower than 109, hw-app-eth *can* return a v with EIP155 already applied
|
|
34
|
+
// e.g. bsc's chainId is 56 -> v then equals to 147/148
|
|
35
|
+
// optimism's chainId is 10 -> v equals to 55/56
|
|
36
|
+
// ethereum's chainId is 1 -> v equals to 0/1
|
|
37
|
+
// goerli's chainId is 5 -> v equals to 0/1
|
|
38
|
+
return v;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Sign Transaction with Ledger hardware
|
|
42
|
+
*/
|
|
43
|
+
export const buildSignOperation = (signerContext) => ({ account, deviceId, transaction, }) => new Observable(o => {
|
|
44
|
+
function main() {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const preparedTransaction = yield prepareForSignOperation(account, transaction);
|
|
47
|
+
const serializedTxHexString = getSerializedTransaction(preparedTransaction).slice(2); // Remove 0x prefix
|
|
48
|
+
// Configure type of resolutions necessary for the clear signing
|
|
49
|
+
const resolutionConfig = {
|
|
50
|
+
externalPlugins: true,
|
|
51
|
+
erc20: true,
|
|
52
|
+
domains: transaction.recipientDomain ? [transaction.recipientDomain] : [],
|
|
53
|
+
};
|
|
54
|
+
// Look for resolutions for external plugins and ERC20
|
|
55
|
+
const resolution = yield ledgerService.resolveTransaction(serializedTxHexString, {}, resolutionConfig);
|
|
56
|
+
o.next({
|
|
57
|
+
type: "device-signature-requested",
|
|
58
|
+
});
|
|
59
|
+
const sig = (yield signerContext(deviceId, signer =>
|
|
60
|
+
// Request signature on the nano
|
|
61
|
+
signer.signTransaction(account.freshAddressPath, serializedTxHexString, resolution)));
|
|
62
|
+
o.next({ type: "device-signature-granted" }); // Signature is done
|
|
63
|
+
const { chainId = 0 } = account.currency.ethereumLikeInfo || {};
|
|
64
|
+
// Create a new serialized tx with the signature now
|
|
65
|
+
const signature = yield getSerializedTransaction(preparedTransaction, {
|
|
66
|
+
r: "0x" + sig.r,
|
|
67
|
+
s: "0x" + sig.s,
|
|
68
|
+
v: applyEIP155(sig.v, chainId),
|
|
69
|
+
});
|
|
70
|
+
const operation = buildOptimisticOperation(account, Object.assign(Object.assign({}, transaction), { nonce: preparedTransaction.nonce }));
|
|
71
|
+
o.next({
|
|
72
|
+
type: "signed",
|
|
73
|
+
signedOperation: {
|
|
74
|
+
operation,
|
|
75
|
+
signature,
|
|
76
|
+
expirationDate: null,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
main().then(() => o.complete(), e => o.error(e));
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=signOperation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"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"}
|
|
@@ -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-es/signer.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specs.d.ts","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":";AA0SA,wBAoBS"}
|