@lifi/sdk 3.2.0 → 3.3.0-alpha.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/package.json +10 -2
- package/src/_cjs/core/EVM/EVMStepExecutor.js +2 -1
- package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -1
- package/src/_cjs/core/EVM/getAllowance.js +5 -5
- package/src/_cjs/core/EVM/getAllowance.js.map +1 -1
- package/src/_cjs/core/EVM/getEVMBalance.js +5 -5
- package/src/_cjs/core/EVM/getEVMBalance.js.map +1 -1
- package/src/_cjs/core/EVM/setAllowance.js +5 -5
- package/src/_cjs/core/EVM/setAllowance.js.map +1 -1
- package/src/_cjs/core/Solana/Solana.js +2 -2
- package/src/_cjs/core/Solana/Solana.js.map +1 -1
- package/src/_cjs/core/Solana/SolanaStepExecutor.js +7 -10
- package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -1
- package/src/_cjs/core/Solana/getSNSAddress.js +2 -2
- package/src/_cjs/core/Solana/getSNSAddress.js.map +1 -1
- package/src/_cjs/core/Solana/{isAddress.js → isSVMAddress.js} +3 -3
- package/src/_cjs/core/Solana/isSVMAddress.js.map +1 -0
- package/src/_cjs/core/UTXO/UTXO.js +38 -0
- package/src/_cjs/core/UTXO/UTXO.js.map +1 -0
- package/src/_cjs/core/UTXO/UTXOStepExecutor.js +219 -0
- package/src/_cjs/core/UTXO/UTXOStepExecutor.js.map +1 -0
- package/src/_cjs/core/UTXO/blockchairApi.js +169 -0
- package/src/_cjs/core/UTXO/blockchairApi.js.map +1 -0
- package/src/_cjs/core/UTXO/blockchairApiTypes.js +26 -0
- package/src/_cjs/core/UTXO/blockchairApiTypes.js.map +1 -0
- package/src/_cjs/core/UTXO/getUTXOAPIPublicClient.js +48 -0
- package/src/_cjs/core/UTXO/getUTXOAPIPublicClient.js.map +1 -0
- package/src/_cjs/core/UTXO/getUTXOBalance.js +30 -0
- package/src/_cjs/core/UTXO/getUTXOBalance.js.map +1 -0
- package/src/_cjs/core/UTXO/getUTXOPublicClient.js +36 -0
- package/src/_cjs/core/UTXO/getUTXOPublicClient.js.map +1 -0
- package/src/_cjs/core/UTXO/isUTXOAddress.js +133 -0
- package/src/_cjs/core/UTXO/isUTXOAddress.js.map +1 -0
- package/src/_cjs/core/UTXO/parseUTXOErrors.js +30 -0
- package/src/_cjs/core/UTXO/parseUTXOErrors.js.map +1 -0
- package/src/_cjs/core/UTXO/requestClient.js +63 -0
- package/src/_cjs/core/UTXO/requestClient.js.map +1 -0
- package/src/_cjs/core/UTXO/types.js +8 -0
- package/src/_cjs/core/UTXO/types.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getBalance.js +11 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getBalance.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getBlockCount.js +11 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getBlockCount.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getUTXOTransaction.js +15 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getUTXOTransaction.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js +15 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/signPsbt.js +11 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/signPsbt.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/clients/types.js +3 -0
- package/src/_cjs/core/UTXO/utxo-stack/clients/types.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js +10 -0
- package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOActions.js +14 -0
- package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOActions.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/ankr.js +21 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/ankr.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockchair.js +24 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockchair.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockcypher.js +21 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockcypher.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js +77 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js +22 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/mempool.js +17 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/mempool.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/types.js +3 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/types.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/utxo.js +56 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/utxo.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/types/transaction.js +3 -0
- package/src/_cjs/core/UTXO/utxo-stack/types/transaction.js.map +1 -0
- package/src/_cjs/core/checkBalance.js +3 -3
- package/src/_cjs/core/checkBalance.js.map +1 -1
- package/src/_cjs/core/utils.js +0 -6
- package/src/_cjs/core/utils.js.map +1 -1
- package/src/_cjs/core/waitForReceivingTransaction.js +4 -4
- package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -1
- package/src/_cjs/createConfig.js +3 -1
- package/src/_cjs/createConfig.js.map +1 -1
- package/src/_cjs/index.js +10 -3
- package/src/_cjs/index.js.map +1 -1
- package/src/_cjs/request.js +3 -3
- package/src/_cjs/request.js.map +1 -1
- package/src/_cjs/services/api.js +8 -4
- package/src/_cjs/services/api.js.map +1 -1
- package/src/_cjs/services/balance.js +7 -3
- package/src/_cjs/services/balance.js.map +1 -1
- package/src/_cjs/utils/index.js +1 -1
- package/src/_cjs/utils/index.js.map +1 -1
- package/src/_cjs/utils/{utils.js → isZeroAddress.js} +2 -19
- package/src/_cjs/utils/isZeroAddress.js.map +1 -0
- package/src/_cjs/utils/sleep.js +9 -0
- package/src/_cjs/utils/sleep.js.map +1 -0
- package/src/_cjs/utils/waitForResult.js +16 -0
- package/src/_cjs/utils/waitForResult.js.map +1 -0
- package/src/_cjs/utils/withDedupe.js +37 -0
- package/src/_cjs/utils/withDedupe.js.map +1 -0
- package/src/_cjs/version.js +1 -1
- package/src/_cjs/version.js.map +1 -1
- package/src/_esm/core/EVM/EVMStepExecutor.js +2 -1
- package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -1
- package/src/_esm/core/EVM/getAllowance.js +1 -1
- package/src/_esm/core/EVM/getAllowance.js.map +1 -1
- package/src/_esm/core/EVM/getEVMBalance.js +1 -1
- package/src/_esm/core/EVM/getEVMBalance.js.map +1 -1
- package/src/_esm/core/EVM/setAllowance.js +1 -1
- package/src/_esm/core/EVM/setAllowance.js.map +1 -1
- package/src/_esm/core/Solana/Solana.js +2 -2
- package/src/_esm/core/Solana/Solana.js.map +1 -1
- package/src/_esm/core/Solana/SolanaStepExecutor.js +6 -9
- package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -1
- package/src/_esm/core/Solana/getSNSAddress.js +2 -2
- package/src/_esm/core/Solana/getSNSAddress.js.map +1 -1
- package/src/_esm/core/Solana/{isAddress.js → isSVMAddress.js} +2 -2
- package/src/_esm/core/Solana/isSVMAddress.js.map +1 -0
- package/src/_esm/core/UTXO/UTXO.js +36 -0
- package/src/_esm/core/UTXO/UTXO.js.map +1 -0
- package/src/_esm/core/UTXO/UTXOStepExecutor.js +243 -0
- package/src/_esm/core/UTXO/UTXOStepExecutor.js.map +1 -0
- package/src/_esm/core/UTXO/blockchairApi.js +167 -0
- package/src/_esm/core/UTXO/blockchairApi.js.map +1 -0
- package/src/_esm/core/UTXO/blockchairApiTypes.js +23 -0
- package/src/_esm/core/UTXO/blockchairApiTypes.js.map +1 -0
- package/src/_esm/core/UTXO/getUTXOAPIPublicClient.js +50 -0
- package/src/_esm/core/UTXO/getUTXOAPIPublicClient.js.map +1 -0
- package/src/_esm/core/UTXO/getUTXOBalance.js +26 -0
- package/src/_esm/core/UTXO/getUTXOBalance.js.map +1 -0
- package/src/_esm/core/UTXO/getUTXOPublicClient.js +38 -0
- package/src/_esm/core/UTXO/getUTXOPublicClient.js.map +1 -0
- package/src/_esm/core/UTXO/isUTXOAddress.js +128 -0
- package/src/_esm/core/UTXO/isUTXOAddress.js.map +1 -0
- package/src/_esm/core/UTXO/parseUTXOErrors.js +26 -0
- package/src/_esm/core/UTXO/parseUTXOErrors.js.map +1 -0
- package/src/_esm/core/UTXO/requestClient.js +59 -0
- package/src/_esm/core/UTXO/requestClient.js.map +1 -0
- package/src/_esm/core/UTXO/types.js +6 -0
- package/src/_esm/core/UTXO/types.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getBalance.js +9 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getBalance.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getBlockCount.js +9 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getBlockCount.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getUTXOTransaction.js +13 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getUTXOTransaction.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js +13 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/signPsbt.js +9 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/signPsbt.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/clients/types.js +2 -0
- package/src/_esm/core/UTXO/utxo-stack/clients/types.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js +7 -0
- package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOActions.js +11 -0
- package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOActions.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/ankr.js +18 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/ankr.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockchair.js +21 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockchair.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockcypher.js +18 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockcypher.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js +74 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js +19 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/mempool.js +14 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/mempool.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/types.js +2 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/types.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/utxo.js +53 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/utxo.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/types/transaction.js +2 -0
- package/src/_esm/core/UTXO/utxo-stack/types/transaction.js.map +1 -0
- package/src/_esm/core/checkBalance.js +2 -2
- package/src/_esm/core/checkBalance.js.map +1 -1
- package/src/_esm/core/utils.js +0 -5
- package/src/_esm/core/utils.js.map +1 -1
- package/src/_esm/core/waitForReceivingTransaction.js +4 -4
- package/src/_esm/core/waitForReceivingTransaction.js.map +1 -1
- package/src/_esm/createConfig.js +3 -1
- package/src/_esm/createConfig.js.map +1 -1
- package/src/_esm/index.js +7 -3
- package/src/_esm/index.js.map +1 -1
- package/src/_esm/request.js +3 -3
- package/src/_esm/request.js.map +1 -1
- package/src/_esm/services/api.js +8 -4
- package/src/_esm/services/api.js.map +1 -1
- package/src/_esm/services/balance.js +9 -5
- package/src/_esm/services/balance.js.map +1 -1
- package/src/_esm/utils/index.js +1 -1
- package/src/_esm/utils/index.js.map +1 -1
- package/src/_esm/utils/isZeroAddress.js +17 -0
- package/src/_esm/utils/isZeroAddress.js.map +1 -0
- package/src/_esm/utils/sleep.js +6 -0
- package/src/_esm/utils/sleep.js.map +1 -0
- package/src/_esm/utils/waitForResult.js +18 -0
- package/src/_esm/utils/waitForResult.js.map +1 -0
- package/src/_esm/utils/withDedupe.js +40 -0
- package/src/_esm/utils/withDedupe.js.map +1 -0
- package/src/_esm/version.js +1 -1
- package/src/_esm/version.js.map +1 -1
- package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -1
- package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -1
- package/src/_types/core/Solana/isSVMAddress.d.ts +2 -0
- package/src/_types/core/Solana/isSVMAddress.d.ts.map +1 -0
- package/src/_types/core/UTXO/UTXO.d.ts +3 -0
- package/src/_types/core/UTXO/UTXO.d.ts.map +1 -0
- package/src/_types/core/UTXO/UTXOStepExecutor.d.ts +13 -0
- package/src/_types/core/UTXO/UTXOStepExecutor.d.ts.map +1 -0
- package/src/_types/core/UTXO/blockchairApi.d.ts +37 -0
- package/src/_types/core/UTXO/blockchairApi.d.ts.map +1 -0
- package/src/_types/core/UTXO/blockchairApiTypes.d.ts +229 -0
- package/src/_types/core/UTXO/blockchairApiTypes.d.ts.map +1 -0
- package/src/_types/core/UTXO/getUTXOAPIPublicClient.d.ts +10 -0
- package/src/_types/core/UTXO/getUTXOAPIPublicClient.d.ts.map +1 -0
- package/src/_types/core/UTXO/getUTXOBalance.d.ts +3 -0
- package/src/_types/core/UTXO/getUTXOBalance.d.ts.map +1 -0
- package/src/_types/core/UTXO/getUTXOPublicClient.d.ts +10 -0
- package/src/_types/core/UTXO/getUTXOPublicClient.d.ts.map +1 -0
- package/src/_types/core/UTXO/isUTXOAddress.d.ts +21 -0
- package/src/_types/core/UTXO/isUTXOAddress.d.ts.map +1 -0
- package/src/_types/core/UTXO/parseUTXOErrors.d.ts +4 -0
- package/src/_types/core/UTXO/parseUTXOErrors.d.ts.map +1 -0
- package/src/_types/core/UTXO/requestClient.d.ts +22 -0
- package/src/_types/core/UTXO/requestClient.d.ts.map +1 -0
- package/src/_types/core/UTXO/types.d.ts +10 -0
- package/src/_types/core/UTXO/types.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getBalance.d.ts +9 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getBalance.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getBlockCount.d.ts +5 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getBlockCount.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getUTXOTransaction.d.ts +12 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getUTXOTransaction.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/actions/sendUTXOTransaction.d.ts +11 -0
- package/src/_types/core/UTXO/utxo-stack/actions/sendUTXOTransaction.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/actions/signPsbt.d.ts +4 -0
- package/src/_types/core/UTXO/utxo-stack/actions/signPsbt.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/clients/types.d.ts +44 -0
- package/src/_types/core/UTXO/utxo-stack/clients/types.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/decorators/UTXOAPIActions.d.ts +7 -0
- package/src/_types/core/UTXO/utxo-stack/decorators/UTXOAPIActions.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/decorators/UTXOActions.d.ts +11 -0
- package/src/_types/core/UTXO/utxo-stack/decorators/UTXOActions.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/ankr.d.ts +3 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/ankr.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockchair.d.ts +3 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockchair.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockcypher.d.ts +3 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockcypher.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.d.ts +25 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.d.ts +3 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/mempool.d.ts +3 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/mempool.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/types.d.ts +45 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/types.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/utxo.d.ts +7 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/utxo.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/types/transaction.d.ts +42 -0
- package/src/_types/core/UTXO/utxo-stack/types/transaction.d.ts.map +1 -0
- package/src/_types/core/utils.d.ts +0 -1
- package/src/_types/core/utils.d.ts.map +1 -1
- package/src/_types/core/waitForReceivingTransaction.d.ts +1 -1
- package/src/_types/core/waitForReceivingTransaction.d.ts.map +1 -1
- package/src/_types/createConfig.d.ts.map +1 -1
- package/src/_types/index.d.ts +7 -3
- package/src/_types/index.d.ts.map +1 -1
- package/src/_types/request.d.ts.map +1 -1
- package/src/_types/services/api.d.ts.map +1 -1
- package/src/_types/services/balance.d.ts +3 -3
- package/src/_types/services/balance.d.ts.map +1 -1
- package/src/_types/utils/index.d.ts +1 -1
- package/src/_types/utils/index.d.ts.map +1 -1
- package/src/_types/utils/isZeroAddress.d.ts +3 -0
- package/src/_types/utils/isZeroAddress.d.ts.map +1 -0
- package/src/_types/utils/sleep.d.ts +2 -0
- package/src/_types/utils/sleep.d.ts.map +1 -0
- package/src/_types/utils/waitForResult.d.ts +8 -0
- package/src/_types/utils/waitForResult.d.ts.map +1 -0
- package/src/_types/utils/withDedupe.d.ts +20 -0
- package/src/_types/utils/withDedupe.d.ts.map +1 -0
- package/src/_types/version.d.ts +1 -1
- package/src/_types/version.d.ts.map +1 -1
- package/src/core/EVM/EVMStepExecutor.ts +2 -4
- package/src/core/EVM/getAllowance.ts +1 -1
- package/src/core/EVM/getEVMBalance.ts +1 -1
- package/src/core/EVM/setAllowance.ts +1 -1
- package/src/core/Solana/Solana.ts +2 -2
- package/src/core/Solana/SolanaStepExecutor.ts +14 -17
- package/src/core/Solana/getSNSAddress.ts +2 -2
- package/src/core/Solana/{isAddress.ts → isSVMAddress.ts} +1 -1
- package/src/core/UTXO/UTXO.ts +43 -0
- package/src/core/UTXO/UTXOStepExecutor.ts +351 -0
- package/src/core/UTXO/blockchairApi.ts +273 -0
- package/src/core/UTXO/blockchairApiTypes.ts +253 -0
- package/src/core/UTXO/getUTXOAPIPublicClient.ts +71 -0
- package/src/core/UTXO/getUTXOBalance.ts +31 -0
- package/src/core/UTXO/getUTXOPublicClient.ts +60 -0
- package/src/core/UTXO/isUTXOAddress.ts +166 -0
- package/src/core/UTXO/parseUTXOErrors.ts +36 -0
- package/src/core/UTXO/requestClient.ts +84 -0
- package/src/core/UTXO/types.ts +15 -0
- package/src/core/UTXO/utxo-stack/actions/getBalance.ts +26 -0
- package/src/core/UTXO/utxo-stack/actions/getBlockCount.ts +20 -0
- package/src/core/UTXO/utxo-stack/actions/getUTXOTransaction.ts +30 -0
- package/src/core/UTXO/utxo-stack/actions/sendUTXOTransaction.ts +29 -0
- package/src/core/UTXO/utxo-stack/actions/signPsbt.ts +23 -0
- package/src/core/UTXO/utxo-stack/clients/types.ts +48 -0
- package/src/core/UTXO/utxo-stack/decorators/UTXOAPIActions.ts +21 -0
- package/src/core/UTXO/utxo-stack/decorators/UTXOActions.ts +37 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/ankr.ts +30 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/blockchair.ts +27 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/blockcypher.ts +32 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.ts +122 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.ts +22 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/mempool.ts +34 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/types.ts +55 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/utxo.ts +84 -0
- package/src/core/UTXO/utxo-stack/types/transaction.ts +43 -0
- package/src/core/checkBalance.ts +2 -2
- package/src/core/utils.ts +0 -6
- package/src/core/waitForReceivingTransaction.ts +5 -4
- package/src/createConfig.ts +3 -1
- package/src/index.ts +7 -3
- package/src/request.ts +3 -3
- package/src/services/api.ts +26 -16
- package/src/services/balance.ts +11 -6
- package/src/utils/index.ts +1 -1
- package/src/utils/isZeroAddress.ts +20 -0
- package/src/utils/sleep.ts +5 -0
- package/src/utils/waitForResult.ts +21 -0
- package/src/utils/withDedupe.ts +46 -0
- package/src/version.ts +1 -1
- package/src/_cjs/core/Solana/isAddress.js.map +0 -1
- package/src/_cjs/utils/utils.js.map +0 -1
- package/src/_esm/core/Solana/isAddress.js.map +0 -1
- package/src/_esm/utils/utils.js +0 -38
- package/src/_esm/utils/utils.js.map +0 -1
- package/src/_types/core/Solana/isAddress.d.ts +0 -2
- package/src/_types/core/Solana/isAddress.d.ts.map +0 -1
- package/src/_types/utils/utils.d.ts +0 -11
- package/src/_types/utils/utils.d.ts.map +0 -1
- package/src/utils/utils.ts +0 -48
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UTXOStepExecutor = void 0;
|
|
4
|
+
const types_1 = require("@lifi/types");
|
|
5
|
+
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
6
|
+
const viem_1 = require("viem");
|
|
7
|
+
const config_js_1 = require("../../config.js");
|
|
8
|
+
const constants_js_1 = require("../../errors/constants.js");
|
|
9
|
+
const errors_js_1 = require("../../errors/errors.js");
|
|
10
|
+
const api_js_1 = require("../../services/api.js");
|
|
11
|
+
const index_js_1 = require("../../utils/index.js");
|
|
12
|
+
const BaseStepExecutor_js_1 = require("../BaseStepExecutor.js");
|
|
13
|
+
const checkBalance_js_1 = require("../checkBalance.js");
|
|
14
|
+
const processMessages_js_1 = require("../processMessages.js");
|
|
15
|
+
const stepComparison_js_1 = require("../stepComparison.js");
|
|
16
|
+
const waitForReceivingTransaction_js_1 = require("../waitForReceivingTransaction.js");
|
|
17
|
+
const getUTXOPublicClient_js_1 = require("./getUTXOPublicClient.js");
|
|
18
|
+
const parseUTXOErrors_js_1 = require("./parseUTXOErrors.js");
|
|
19
|
+
const signPsbt_js_1 = require("./utxo-stack/actions/signPsbt.js");
|
|
20
|
+
class UTXOStepExecutor extends BaseStepExecutor_js_1.BaseStepExecutor {
|
|
21
|
+
constructor(options) {
|
|
22
|
+
super(options);
|
|
23
|
+
Object.defineProperty(this, "client", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: void 0
|
|
28
|
+
});
|
|
29
|
+
Object.defineProperty(this, "checkClient", {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
configurable: true,
|
|
32
|
+
writable: true,
|
|
33
|
+
value: (step) => {
|
|
34
|
+
if (this.client.account?.address !== step.action.fromAddress) {
|
|
35
|
+
throw new errors_js_1.TransactionError(constants_js_1.LiFiErrorCode.WalletChangedDuringExecution, 'The wallet address that requested the quote does not match the wallet address attempting to sign the transaction.');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(this, "executeStep", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true,
|
|
43
|
+
value: async (step) => {
|
|
44
|
+
step.execution = this.statusManager.initExecutionObject(step);
|
|
45
|
+
const fromChain = await config_js_1.config.getChainById(step.action.fromChainId);
|
|
46
|
+
const toChain = await config_js_1.config.getChainById(step.action.toChainId);
|
|
47
|
+
const isBridgeExecution = fromChain.id !== toChain.id;
|
|
48
|
+
const currentProcessType = isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP';
|
|
49
|
+
let process = this.statusManager.findOrCreateProcess(step, currentProcessType);
|
|
50
|
+
const publicClient = await (0, getUTXOPublicClient_js_1.getUTXOPublicClient)(types_1.ChainId.BTC);
|
|
51
|
+
if (process.status !== 'DONE') {
|
|
52
|
+
try {
|
|
53
|
+
let txHash;
|
|
54
|
+
if (process.txHash) {
|
|
55
|
+
this.checkClient(step);
|
|
56
|
+
txHash = process.txHash;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
process = this.statusManager.updateProcess(step, process.type, 'STARTED');
|
|
60
|
+
await (0, checkBalance_js_1.checkBalance)(this.client.account.address, step);
|
|
61
|
+
if (!step.transactionRequest) {
|
|
62
|
+
const { execution, ...stepBase } = step;
|
|
63
|
+
const updatedStep = await (0, api_js_1.getStepTransaction)(stepBase);
|
|
64
|
+
const comparedStep = await (0, stepComparison_js_1.stepComparison)(this.statusManager, step, updatedStep, this.allowUserInteraction, this.executionOptions);
|
|
65
|
+
step = {
|
|
66
|
+
...comparedStep,
|
|
67
|
+
execution: step.execution,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (!step.transactionRequest?.data) {
|
|
71
|
+
throw new errors_js_1.TransactionError(constants_js_1.LiFiErrorCode.TransactionUnprepared, 'Unable to prepare transaction.');
|
|
72
|
+
}
|
|
73
|
+
process = this.statusManager.updateProcess(step, process.type, 'ACTION_REQUIRED');
|
|
74
|
+
if (!this.allowUserInteraction) {
|
|
75
|
+
return step;
|
|
76
|
+
}
|
|
77
|
+
let transactionRequest = {
|
|
78
|
+
data: step.transactionRequest.data,
|
|
79
|
+
};
|
|
80
|
+
if (this.executionOptions?.updateTransactionRequestHook) {
|
|
81
|
+
const customizedTransactionRequest = await this.executionOptions.updateTransactionRequestHook({
|
|
82
|
+
requestType: 'transaction',
|
|
83
|
+
...transactionRequest,
|
|
84
|
+
});
|
|
85
|
+
transactionRequest = {
|
|
86
|
+
...transactionRequest,
|
|
87
|
+
...customizedTransactionRequest,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (!transactionRequest.data) {
|
|
91
|
+
throw new errors_js_1.TransactionError(constants_js_1.LiFiErrorCode.TransactionUnprepared, 'Unable to prepare transaction.');
|
|
92
|
+
}
|
|
93
|
+
this.checkClient(step);
|
|
94
|
+
let psbtHex = transactionRequest.data;
|
|
95
|
+
const psbt = bitcoinjs_lib_1.Psbt.fromHex(psbtHex, { network: bitcoinjs_lib_1.networks.bitcoin });
|
|
96
|
+
const inputsToSign = Array.from(psbt.data.inputs
|
|
97
|
+
.reduce((map, input, index) => {
|
|
98
|
+
const accountAddress = input.witnessUtxo
|
|
99
|
+
? bitcoinjs_lib_1.address.fromOutputScript(input.witnessUtxo.script, bitcoinjs_lib_1.networks.bitcoin)
|
|
100
|
+
: this.client.account?.address;
|
|
101
|
+
if (map.has(accountAddress)) {
|
|
102
|
+
map.get(accountAddress).signingIndexes.push(index);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
map.set(accountAddress, {
|
|
106
|
+
address: accountAddress,
|
|
107
|
+
sigHash: 1,
|
|
108
|
+
signingIndexes: [index],
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return map;
|
|
112
|
+
}, new Map())
|
|
113
|
+
.values());
|
|
114
|
+
psbt.txInputs.forEach((_, index) => {
|
|
115
|
+
psbt.setInputSequence(index, 0xfffffffd);
|
|
116
|
+
});
|
|
117
|
+
psbtHex = psbt.toHex();
|
|
118
|
+
const signedPsbtHex = await (0, viem_1.withTimeout)(() => (0, signPsbt_js_1.signPsbt)(this.client, {
|
|
119
|
+
psbt: psbtHex,
|
|
120
|
+
inputsToSign: inputsToSign,
|
|
121
|
+
finalize: false,
|
|
122
|
+
}), {
|
|
123
|
+
timeout: 600_000,
|
|
124
|
+
errorInstance: new errors_js_1.TransactionError(constants_js_1.LiFiErrorCode.TransactionExpired, 'Transaction has expired.'),
|
|
125
|
+
});
|
|
126
|
+
const signedPsbt = bitcoinjs_lib_1.Psbt.fromHex(signedPsbtHex).finalizeAllInputs();
|
|
127
|
+
const transactionHex = signedPsbt.extractTransaction().toHex();
|
|
128
|
+
txHash = await publicClient.sendUTXOTransaction({
|
|
129
|
+
hex: transactionHex,
|
|
130
|
+
});
|
|
131
|
+
process = this.statusManager.updateProcess(step, process.type, 'PENDING', {
|
|
132
|
+
txHash: txHash,
|
|
133
|
+
txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${txHash}`,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
await (0, index_js_1.waitForResult)(() => (0, viem_1.withRetry)(async () => {
|
|
137
|
+
const tx = await publicClient.getUTXOTransaction({
|
|
138
|
+
txId: txHash,
|
|
139
|
+
});
|
|
140
|
+
if (!tx.confirmations) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
return tx;
|
|
144
|
+
}, {
|
|
145
|
+
retryCount: 10,
|
|
146
|
+
delay: 1000,
|
|
147
|
+
}), 10_000);
|
|
148
|
+
if (isBridgeExecution) {
|
|
149
|
+
process = this.statusManager.updateProcess(step, process.type, 'DONE');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
const error = await (0, parseUTXOErrors_js_1.parseUTXOErrors)(e, step, process);
|
|
154
|
+
process = this.statusManager.updateProcess(step, process.type, 'FAILED', {
|
|
155
|
+
error: {
|
|
156
|
+
message: error.cause.message,
|
|
157
|
+
code: error.code,
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
this.statusManager.updateExecution(step, 'FAILED');
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const processTxHash = process.txHash;
|
|
165
|
+
if (isBridgeExecution) {
|
|
166
|
+
process = this.statusManager.findOrCreateProcess(step, 'RECEIVING_CHAIN', 'PENDING');
|
|
167
|
+
}
|
|
168
|
+
let statusResponse;
|
|
169
|
+
try {
|
|
170
|
+
if (!processTxHash) {
|
|
171
|
+
throw new Error('Transaction hash is undefined.');
|
|
172
|
+
}
|
|
173
|
+
statusResponse = (await (0, waitForReceivingTransaction_js_1.waitForReceivingTransaction)(processTxHash, this.statusManager, process.type, step, 10_000));
|
|
174
|
+
const statusReceiving = statusResponse.receiving;
|
|
175
|
+
process = this.statusManager.updateProcess(step, process.type, 'DONE', {
|
|
176
|
+
substatus: statusResponse.substatus,
|
|
177
|
+
substatusMessage: statusResponse.substatusMessage ||
|
|
178
|
+
(0, processMessages_js_1.getSubstatusMessage)(statusResponse.status, statusResponse.substatus),
|
|
179
|
+
txHash: statusReceiving?.txHash,
|
|
180
|
+
txLink: `${toChain.metamask.blockExplorerUrls[0]}tx/${statusReceiving?.txHash}`,
|
|
181
|
+
});
|
|
182
|
+
this.statusManager.updateExecution(step, 'DONE', {
|
|
183
|
+
fromAmount: statusResponse.sending.amount,
|
|
184
|
+
toAmount: statusReceiving?.amount,
|
|
185
|
+
toToken: statusReceiving?.token,
|
|
186
|
+
gasCosts: [
|
|
187
|
+
{
|
|
188
|
+
amount: statusResponse.sending.gasAmount,
|
|
189
|
+
amountUSD: statusResponse.sending.gasAmountUSD,
|
|
190
|
+
token: statusResponse.sending.gasToken,
|
|
191
|
+
estimate: statusResponse.sending.gasUsed,
|
|
192
|
+
limit: statusResponse.sending.gasUsed,
|
|
193
|
+
price: statusResponse.sending.gasPrice,
|
|
194
|
+
type: 'SEND',
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
const htmlMessage = await (0, index_js_1.getTransactionFailedMessage)(step, process.txLink);
|
|
201
|
+
process = this.statusManager.updateProcess(step, process.type, 'FAILED', {
|
|
202
|
+
error: {
|
|
203
|
+
code: constants_js_1.LiFiErrorCode.TransactionFailed,
|
|
204
|
+
message: 'Failed while waiting for receiving chain.',
|
|
205
|
+
htmlMessage,
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
this.statusManager.updateExecution(step, 'FAILED');
|
|
209
|
+
console.warn(e);
|
|
210
|
+
throw e;
|
|
211
|
+
}
|
|
212
|
+
return step;
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
this.client = options.client;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
exports.UTXOStepExecutor = UTXOStepExecutor;
|
|
219
|
+
//# sourceMappingURL=UTXOStepExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UTXOStepExecutor.js","sourceRoot":"","sources":["../../../core/UTXO/UTXOStepExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.blockchairApi = void 0;
|
|
4
|
+
const blockchairApiTypes_js_1 = require("./blockchairApiTypes.js");
|
|
5
|
+
const requestClient_js_1 = require("./requestClient.js");
|
|
6
|
+
const baseUrl = (chain) => `https://api.blockchair.com/${mapChainToBlockchairChain(chain)}`;
|
|
7
|
+
const getDefaultTxFeeByChain = (chain) => {
|
|
8
|
+
switch (chain) {
|
|
9
|
+
case blockchairApiTypes_js_1.Chain.Bitcoin:
|
|
10
|
+
return 5;
|
|
11
|
+
case blockchairApiTypes_js_1.Chain.Dogecoin:
|
|
12
|
+
return 10000;
|
|
13
|
+
case blockchairApiTypes_js_1.Chain.Litecoin:
|
|
14
|
+
return 1;
|
|
15
|
+
default:
|
|
16
|
+
return 2;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const mapChainToBlockchairChain = (chain) => {
|
|
20
|
+
switch (chain) {
|
|
21
|
+
case blockchairApiTypes_js_1.Chain.BitcoinCash:
|
|
22
|
+
return 'bitcoin-cash';
|
|
23
|
+
case blockchairApiTypes_js_1.Chain.Litecoin:
|
|
24
|
+
return 'litecoin';
|
|
25
|
+
case blockchairApiTypes_js_1.Chain.Dash:
|
|
26
|
+
return 'dash';
|
|
27
|
+
case blockchairApiTypes_js_1.Chain.Dogecoin:
|
|
28
|
+
return 'dogecoin';
|
|
29
|
+
case blockchairApiTypes_js_1.Chain.Polkadot:
|
|
30
|
+
return 'polkadot';
|
|
31
|
+
default:
|
|
32
|
+
return 'bitcoin';
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const getSuggestedTxFee = async (chain) => {
|
|
36
|
+
try {
|
|
37
|
+
const { feePerKb } = await requestClient_js_1.RequestClient.get(`https://app.bitgo.com/api/v2/${chain.toLowerCase()}/tx/fee`);
|
|
38
|
+
const suggestedFee = feePerKb / 1000;
|
|
39
|
+
return Math.max(suggestedFee, getDefaultTxFeeByChain(chain));
|
|
40
|
+
}
|
|
41
|
+
catch (_error) {
|
|
42
|
+
return getDefaultTxFeeByChain(chain);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const blockchairRequest = async (url, apiKey) => {
|
|
46
|
+
try {
|
|
47
|
+
const response = await requestClient_js_1.RequestClient.get(url);
|
|
48
|
+
if (!response || response.context.code !== 200) {
|
|
49
|
+
throw new Error(`failed to query ${url}`);
|
|
50
|
+
}
|
|
51
|
+
return response.data;
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (!apiKey) {
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
const response = await requestClient_js_1.RequestClient.get(`${url}${apiKey ? `&key=${apiKey}` : ''}`);
|
|
58
|
+
if (!response || response.context.code !== 200) {
|
|
59
|
+
throw new Error(`failed to query ${url}`);
|
|
60
|
+
}
|
|
61
|
+
return response.data;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const baseAddressData = {
|
|
65
|
+
utxo: [],
|
|
66
|
+
address: { balance: 0, transaction_count: 0 },
|
|
67
|
+
};
|
|
68
|
+
const getAddressData = async ({ address, chain, apiKey, }) => {
|
|
69
|
+
if (!address) {
|
|
70
|
+
throw new Error('address is required');
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const response = await blockchairRequest(`${baseUrl(chain)}/dashboards/address/${address}?transaction_details=true`, apiKey);
|
|
74
|
+
return response[address];
|
|
75
|
+
}
|
|
76
|
+
catch (_error) {
|
|
77
|
+
return baseAddressData;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const getUnconfirmedBalance = async ({ address, chain, apiKey, }) => {
|
|
81
|
+
const response = await getAddressData({ address, chain, apiKey });
|
|
82
|
+
return response?.address.balance;
|
|
83
|
+
};
|
|
84
|
+
const getConfirmedBalance = async ({ chain, address, apiKey, }) => {
|
|
85
|
+
if (!address) {
|
|
86
|
+
throw new Error('address is required');
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const response = await blockchairRequest(`${baseUrl(chain)}/addresses/balances?addresses=${address}`, apiKey);
|
|
90
|
+
return response[address] || 0;
|
|
91
|
+
}
|
|
92
|
+
catch (_error) {
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const getRawTx = async ({ chain, apiKey, txHash, }) => {
|
|
97
|
+
if (!txHash) {
|
|
98
|
+
throw new Error('txHash is required');
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const rawTxResponse = await blockchairRequest(`${baseUrl(chain)}/raw/transaction/${txHash}`, apiKey);
|
|
102
|
+
return rawTxResponse?.[txHash]?.raw_transaction;
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.error(error);
|
|
106
|
+
return '';
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const getUnspentTxs = async ({ chain, address, apiKey, offset = 0, }) => {
|
|
110
|
+
if (!address) {
|
|
111
|
+
throw new Error('address is required');
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const response = await blockchairRequest(`${baseUrl(chain)}/outputs?q=is_spent(false),recipient(${address})&limit=100&offset=${offset}`, apiKey);
|
|
115
|
+
const txs = response
|
|
116
|
+
.filter(({ is_spent }) => !is_spent)
|
|
117
|
+
.map(({ script_hex, block_id, transaction_hash, index, value, spending_signature_hex, }) => ({
|
|
118
|
+
hash: transaction_hash,
|
|
119
|
+
index,
|
|
120
|
+
value,
|
|
121
|
+
txHex: spending_signature_hex,
|
|
122
|
+
script_hex,
|
|
123
|
+
is_confirmed: block_id !== -1,
|
|
124
|
+
}));
|
|
125
|
+
if (response.length !== 100) {
|
|
126
|
+
return txs;
|
|
127
|
+
}
|
|
128
|
+
const nextBatch = await getUnspentTxs({
|
|
129
|
+
address,
|
|
130
|
+
chain,
|
|
131
|
+
apiKey,
|
|
132
|
+
offset: response?.[99]?.transaction_id,
|
|
133
|
+
});
|
|
134
|
+
return txs.concat(nextBatch);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
console.error(error);
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
const scanUTXOs = async ({ address, chain, apiKey, fetchTxHex = true, }) => {
|
|
142
|
+
const utxos = await getUnspentTxs({ chain, address, apiKey });
|
|
143
|
+
const results = [];
|
|
144
|
+
for (const { hash, index, script_hex, value } of utxos) {
|
|
145
|
+
let txHex;
|
|
146
|
+
if (fetchTxHex) {
|
|
147
|
+
txHex = await getRawTx({ txHash: hash, chain, apiKey });
|
|
148
|
+
}
|
|
149
|
+
results.push({
|
|
150
|
+
address,
|
|
151
|
+
hash,
|
|
152
|
+
index,
|
|
153
|
+
txHex,
|
|
154
|
+
value,
|
|
155
|
+
witnessUtxo: { value, script: Buffer.from(script_hex, 'hex') },
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return results;
|
|
159
|
+
};
|
|
160
|
+
const blockchairApi = ({ apiKey, chain, }) => ({
|
|
161
|
+
getConfirmedBalance: (address) => getConfirmedBalance({ chain, address, apiKey }),
|
|
162
|
+
getRawTx: (txHash) => getRawTx({ txHash, chain, apiKey }),
|
|
163
|
+
getSuggestedTxFee: () => getSuggestedTxFee(chain),
|
|
164
|
+
getBalance: (address) => getUnconfirmedBalance({ address, chain, apiKey }),
|
|
165
|
+
getAddressData: (address) => getAddressData({ address, chain, apiKey }),
|
|
166
|
+
scanUTXOs: (params) => scanUTXOs({ ...params, chain, apiKey }),
|
|
167
|
+
});
|
|
168
|
+
exports.blockchairApi = blockchairApi;
|
|
169
|
+
//# sourceMappingURL=blockchairApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blockchairApi.js","sourceRoot":"","sources":["../../../core/UTXO/blockchairApi.ts"],"names":[],"mappings":";;;AASA,mEAA+C;AAC/C,yDAAkD;AAIlD,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE,CAC/B,8BAA8B,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAA;AAElE,MAAM,sBAAsB,GAAG,CAAC,KAAY,EAAE,EAAE;IAC9C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,6BAAK,CAAC,OAAO;YAChB,OAAO,CAAC,CAAA;QACV,KAAK,6BAAK,CAAC,QAAQ;YACjB,OAAO,KAAK,CAAA;QACd,KAAK,6BAAK,CAAC,QAAQ;YACjB,OAAO,CAAC,CAAA;QACV;YACE,OAAO,CAAC,CAAA;IACZ,CAAC;AACH,CAAC,CAAA;AAED,MAAM,yBAAyB,GAAG,CAAC,KAAY,EAAE,EAAE;IACjD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,6BAAK,CAAC,WAAW;YACpB,OAAO,cAAc,CAAA;QACvB,KAAK,6BAAK,CAAC,QAAQ;YACjB,OAAO,UAAU,CAAA;QACnB,KAAK,6BAAK,CAAC,IAAI;YACb,OAAO,MAAM,CAAA;QACf,KAAK,6BAAK,CAAC,QAAQ;YACjB,OAAO,UAAU,CAAA;QACnB,KAAK,6BAAK,CAAC,QAAQ;YACjB,OAAO,UAAU,CAAA;QACnB;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,KAAK,EAAE,KAAY,EAAE,EAAE;IAC/C,IAAI,CAAC;QAGH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,gCAAa,CAAC,GAAG,CAKzC,gCAAgC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;QAChE,MAAM,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAA;QAEpC,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9D,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;AACH,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,KAAK,EAC7B,GAAW,EACX,MAAe,EACH,EAAE;IACd,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,gCAAa,CAAC,GAAG,CAAwB,GAAG,CAAC,CAAA;QACpE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO,QAAQ,CAAC,IAAS,CAAA;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,KAAK,CAAA;QACb,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,gCAAa,CAAC,GAAG,CACtC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1C,CAAA;QAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO,QAAQ,CAAC,IAAS,CAAA;IAC3B,CAAC;AACH,CAAC,CAAA;AAED,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE;CAC9C,CAAA;AACD,MAAM,cAAc,GAAG,KAAK,EAAE,EAC5B,OAAO,EACP,KAAK,EACL,MAAM,GACiC,EAAE,EAAE;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,OAAO,2BAA2B,EAC1E,MAAM,CACP,CAAA;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,eAAe,CAAA;IACxB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,KAAK,EAAE,EACnC,OAAO,EACP,KAAK,EACL,MAAM,GACiC,EAAE,EAAE;IAC3C,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAEjE,OAAO,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACjC,KAAK,EACL,OAAO,EACP,MAAM,GACiC,EAAE,EAAE;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GACZ,MAAM,iBAAiB,CACrB,GAAG,OAAO,CAAC,KAAK,CAAC,iCAAiC,OAAO,EAAE,EAC3D,MAAM,CACP,CAAA;QAEH,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,CAAA;IACV,CAAC;AACH,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,KAAK,EAAE,EACtB,KAAK,EACL,MAAM,EACN,MAAM,GACgC,EAAE,EAAE;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACvC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GACjB,MAAM,iBAAiB,CACrB,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,MAAM,EAAE,EAC7C,MAAM,CACP,CAAA;QACH,OAAO,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,CAAA;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACpB,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,KAAK,EAAE,EAC3B,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,GAAG,CAAC,GAC6C,EAEvD,EAAE;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC,GAAG,OAAO,CACR,KAAK,CACN,wCAAwC,OAAO,sBAAsB,MAAM,EAAE,EAC9E,MAAM,CACP,CAAA;QAED,MAAM,GAAG,GAAG,QAAQ;aACjB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;aACnC,GAAG,CACF,CAAC,EACC,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,KAAK,EACL,KAAK,EACL,sBAAsB,GACvB,EAAE,EAAE,CAAC,CAAC;YACL,IAAI,EAAE,gBAAgB;YACtB,KAAK;YACL,KAAK;YACL,KAAK,EAAE,sBAAsB;YAC7B,UAAU;YACV,YAAY,EAAE,QAAQ,KAAK,CAAC,CAAC;SAC9B,CAAC,CAC6D,CAAA;QAEnE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAA;QACZ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC;YACpC,OAAO;YACP,KAAK;YACL,MAAM;YACN,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc;SACvC,CAAC,CAAA;QAEF,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACpB,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,KAAK,EAAE,EACvB,OAAO,EACP,KAAK,EACL,MAAM,EACN,UAAU,GAAG,IAAI,GAC2C,EAAE,EAAE;IAChE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,EAAE,CAAA;IAElB,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;QACvD,IAAI,KAAyB,CAAA;QAC7B,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,GAAG,MAAM,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACzD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,OAAO;YACP,IAAI;YACJ,KAAK;YACL,KAAK;YACL,KAAK;YACL,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;SAC/D,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAEM,MAAM,aAAa,GAAG,CAAC,EAC5B,MAAM,EACN,KAAK,GAIN,EAAE,EAAE,CAAC,CAAC;IACL,mBAAmB,EAAE,CAAC,OAAe,EAAE,EAAE,CACvC,mBAAmB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACjD,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACjE,iBAAiB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC;IACjD,UAAU,EAAE,CAAC,OAAe,EAAE,EAAE,CAC9B,qBAAqB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACnD,cAAc,EAAE,CAAC,OAAe,EAAE,EAAE,CAClC,cAAc,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC5C,SAAS,EAAE,CAAC,MAAiD,EAAE,EAAE,CAC/D,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;CAC1C,CAAC,CAAA;AAjBW,QAAA,aAAa,iBAiBxB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Chain = void 0;
|
|
4
|
+
var Chain;
|
|
5
|
+
(function (Chain) {
|
|
6
|
+
Chain["Arbitrum"] = "ARB";
|
|
7
|
+
Chain["Avalanche"] = "AVAX";
|
|
8
|
+
Chain["BinanceSmartChain"] = "BSC";
|
|
9
|
+
Chain["Bitcoin"] = "BTC";
|
|
10
|
+
Chain["BitcoinCash"] = "BCH";
|
|
11
|
+
Chain["Cosmos"] = "GAIA";
|
|
12
|
+
Chain["Dash"] = "DASH";
|
|
13
|
+
Chain["Dogecoin"] = "DOGE";
|
|
14
|
+
Chain["Ethereum"] = "ETH";
|
|
15
|
+
Chain["Kujira"] = "KUJI";
|
|
16
|
+
Chain["Litecoin"] = "LTC";
|
|
17
|
+
Chain["Maya"] = "MAYA";
|
|
18
|
+
Chain["Optimism"] = "OP";
|
|
19
|
+
Chain["Polkadot"] = "DOT";
|
|
20
|
+
Chain["Chainflip"] = "FLIP";
|
|
21
|
+
Chain["Polygon"] = "MATIC";
|
|
22
|
+
Chain["Radix"] = "XRD";
|
|
23
|
+
Chain["THORChain"] = "THOR";
|
|
24
|
+
Chain["Solana"] = "SOL";
|
|
25
|
+
})(Chain || (exports.Chain = Chain = {}));
|
|
26
|
+
//# sourceMappingURL=blockchairApiTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blockchairApiTypes.js","sourceRoot":"","sources":["../../../core/UTXO/blockchairApiTypes.ts"],"names":[],"mappings":";;;AAAA,IAAY,KAoBX;AApBD,WAAY,KAAK;IACf,yBAAgB,CAAA;IAChB,2BAAkB,CAAA;IAClB,kCAAyB,CAAA;IACzB,wBAAe,CAAA;IACf,4BAAmB,CAAA;IACnB,wBAAe,CAAA;IACf,sBAAa,CAAA;IACb,0BAAiB,CAAA;IACjB,yBAAgB,CAAA;IAChB,wBAAe,CAAA;IACf,yBAAgB,CAAA;IAChB,sBAAa,CAAA;IACb,wBAAe,CAAA;IACf,yBAAgB,CAAA;IAChB,2BAAkB,CAAA;IAClB,0BAAiB,CAAA;IACjB,sBAAa,CAAA;IACb,2BAAkB,CAAA;IAClB,uBAAc,CAAA;AAChB,CAAC,EApBW,KAAK,qBAAL,KAAK,QAoBhB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUTXOAPIPublicClient = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const config_js_1 = require("../../config.js");
|
|
6
|
+
const UTXOAPIActions_js_1 = require("./utxo-stack/decorators/UTXOAPIActions.js");
|
|
7
|
+
const utxo_js_1 = require("./utxo-stack/transports/utxo/utxo.js");
|
|
8
|
+
const publicAPIClients = {};
|
|
9
|
+
const getUTXOAPIPublicClient = async (chainId) => {
|
|
10
|
+
if (!publicAPIClients[chainId]) {
|
|
11
|
+
const _chain = await config_js_1.config.getChainById(chainId);
|
|
12
|
+
const chain = {
|
|
13
|
+
..._chain,
|
|
14
|
+
..._chain.metamask,
|
|
15
|
+
name: _chain.metamask.chainName,
|
|
16
|
+
rpcUrls: {
|
|
17
|
+
default: { http: _chain.metamask.rpcUrls },
|
|
18
|
+
public: { http: _chain.metamask.rpcUrls },
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
const client = (0, viem_1.createClient)({
|
|
22
|
+
chain,
|
|
23
|
+
rpcSchema: (0, viem_1.rpcSchema)(),
|
|
24
|
+
transport: (0, viem_1.fallback)([
|
|
25
|
+
(0, utxo_js_1.utxo)('https://api.blockchair.com', {
|
|
26
|
+
key: 'blockchair',
|
|
27
|
+
includeChainToURL: true,
|
|
28
|
+
}),
|
|
29
|
+
(0, utxo_js_1.utxo)('https://rpc.ankr.com/http/btc_blockbook/api/v2', {
|
|
30
|
+
key: 'ankr',
|
|
31
|
+
}),
|
|
32
|
+
(0, utxo_js_1.utxo)('https://api.blockcypher.com/v1/btc/main', {
|
|
33
|
+
key: 'blockcypher',
|
|
34
|
+
}),
|
|
35
|
+
(0, utxo_js_1.utxo)('https://mempool.space/api', {
|
|
36
|
+
key: 'mempool',
|
|
37
|
+
}),
|
|
38
|
+
]),
|
|
39
|
+
}).extend(UTXOAPIActions_js_1.UTXOAPIActions);
|
|
40
|
+
publicAPIClients[chainId] = client;
|
|
41
|
+
}
|
|
42
|
+
if (!publicAPIClients[chainId]) {
|
|
43
|
+
throw new Error(`Unable to configure provider for chain ${chainId}`);
|
|
44
|
+
}
|
|
45
|
+
return publicAPIClients[chainId];
|
|
46
|
+
};
|
|
47
|
+
exports.getUTXOAPIPublicClient = getUTXOAPIPublicClient;
|
|
48
|
+
//# sourceMappingURL=getUTXOAPIPublicClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUTXOAPIPublicClient.js","sourceRoot":"","sources":["../../../core/UTXO/getUTXOAPIPublicClient.ts"],"names":[],"mappings":";;;AAAA,+BAQa;AACb,+CAAwC;AACxC,iFAA0E;AAE1E,kEAA2D;AAG3D,MAAM,gBAAgB,GASlB,EAAE,CAAA;AAOC,MAAM,sBAAsB,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;IAC9D,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,kBAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,KAAK,GAAU;YACnB,GAAG,MAAM;YACT,GAAG,MAAM,CAAC,QAAQ;YAClB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;YAC/B,OAAO,EAAE;gBACP,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;gBAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;aAC1C;SACF,CAAA;QACD,MAAM,MAAM,GAAG,IAAA,mBAAY,EAAC;YAC1B,KAAK;YACL,SAAS,EAAE,IAAA,gBAAS,GAAiB;YACrC,SAAS,EAAE,IAAA,eAAQ,EAAC;gBAClB,IAAA,cAAI,EAAC,4BAA4B,EAAE;oBACjC,GAAG,EAAE,YAAY;oBACjB,iBAAiB,EAAE,IAAI;iBACxB,CAAC;gBACF,IAAA,cAAI,EAAC,gDAAgD,EAAE;oBACrD,GAAG,EAAE,MAAM;iBACZ,CAAC;gBACF,IAAA,cAAI,EAAC,yCAAyC,EAAE;oBAC9C,GAAG,EAAE,aAAa;iBACnB,CAAC;gBACF,IAAA,cAAI,EAAC,2BAA2B,EAAE;oBAChC,GAAG,EAAE,SAAS;iBACf,CAAC;aACH,CAAC;SACH,CAAC,CAAC,MAAM,CAAC,kCAAc,CAAC,CAAA;QACzB,gBAAgB,CAAC,OAAO,CAAC,GAAG,MAAM,CAAA;IACpC,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAA;AAClC,CAAC,CAAA;AAvCY,QAAA,sBAAsB,0BAuClC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUTXOBalance = void 0;
|
|
4
|
+
const types_1 = require("@lifi/types");
|
|
5
|
+
const getUTXOAPIPublicClient_js_1 = require("./getUTXOAPIPublicClient.js");
|
|
6
|
+
const getUTXOPublicClient_js_1 = require("./getUTXOPublicClient.js");
|
|
7
|
+
const getUTXOBalance = async (walletAddress, tokens) => {
|
|
8
|
+
if (tokens.length === 0) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
const { chainId } = tokens[0];
|
|
12
|
+
tokens.forEach((token) => {
|
|
13
|
+
if (token.chainId !== chainId) {
|
|
14
|
+
console.warn(`Requested tokens have to be on the same chain.`);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
const apiClient = await (0, getUTXOAPIPublicClient_js_1.getUTXOAPIPublicClient)(types_1.ChainId.BTC);
|
|
18
|
+
const client = await (0, getUTXOPublicClient_js_1.getUTXOPublicClient)(types_1.ChainId.BTC);
|
|
19
|
+
const [balance, blockCount] = await Promise.all([
|
|
20
|
+
apiClient.getBalance({ address: walletAddress }),
|
|
21
|
+
client.getBlockCount(),
|
|
22
|
+
]);
|
|
23
|
+
return tokens.map((token) => ({
|
|
24
|
+
...token,
|
|
25
|
+
amount: balance,
|
|
26
|
+
blockNumber: BigInt(blockCount),
|
|
27
|
+
}));
|
|
28
|
+
};
|
|
29
|
+
exports.getUTXOBalance = getUTXOBalance;
|
|
30
|
+
//# sourceMappingURL=getUTXOBalance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUTXOBalance.js","sourceRoot":"","sources":["../../../core/UTXO/getUTXOBalance.ts"],"names":[],"mappings":";;;AAAA,uCAAmE;AACnE,2EAAoE;AACpE,qEAA8D;AAEvD,MAAM,cAAc,GAAG,KAAK,EACjC,aAAqB,EACrB,MAAe,EACS,EAAE;IAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;QAChE,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,MAAM,IAAA,kDAAsB,EAAC,eAAO,CAAC,GAAG,CAAC,CAAA;IAC3D,MAAM,MAAM,GAAG,MAAM,IAAA,4CAAmB,EAAC,eAAO,CAAC,GAAG,CAAC,CAAA;IACrD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QAChD,MAAM,CAAC,aAAa,EAAE;KACvB,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,GAAG,KAAK;QACR,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;KAChC,CAAC,CAAC,CAAA;AACL,CAAC,CAAA;AA1BY,QAAA,cAAc,kBA0B1B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUTXOPublicClient = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const config_js_1 = require("../../config.js");
|
|
6
|
+
const rpc_js_1 = require("../rpc.js");
|
|
7
|
+
const UTXOActions_js_1 = require("./utxo-stack/decorators/UTXOActions.js");
|
|
8
|
+
const publicClients = {};
|
|
9
|
+
const getUTXOPublicClient = async (chainId) => {
|
|
10
|
+
if (!publicClients[chainId]) {
|
|
11
|
+
const urls = await (0, rpc_js_1.getRpcUrls)(chainId);
|
|
12
|
+
const fallbackTransports = urls.map((url) => (0, viem_1.http)(url));
|
|
13
|
+
const _chain = await config_js_1.config.getChainById(chainId);
|
|
14
|
+
const chain = {
|
|
15
|
+
..._chain,
|
|
16
|
+
..._chain.metamask,
|
|
17
|
+
name: _chain.metamask.chainName,
|
|
18
|
+
rpcUrls: {
|
|
19
|
+
default: { http: _chain.metamask.rpcUrls },
|
|
20
|
+
public: { http: _chain.metamask.rpcUrls },
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
const client = (0, viem_1.createClient)({
|
|
24
|
+
chain,
|
|
25
|
+
rpcSchema: (0, viem_1.rpcSchema)(),
|
|
26
|
+
transport: (0, viem_1.fallback)(fallbackTransports),
|
|
27
|
+
}).extend(UTXOActions_js_1.UTXOActions);
|
|
28
|
+
publicClients[chainId] = client;
|
|
29
|
+
}
|
|
30
|
+
if (!publicClients[chainId]) {
|
|
31
|
+
throw new Error(`Unable to configure provider for chain ${chainId}`);
|
|
32
|
+
}
|
|
33
|
+
return publicClients[chainId];
|
|
34
|
+
};
|
|
35
|
+
exports.getUTXOPublicClient = getUTXOPublicClient;
|
|
36
|
+
//# sourceMappingURL=getUTXOPublicClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUTXOPublicClient.js","sourceRoot":"","sources":["../../../core/UTXO/getUTXOPublicClient.ts"],"names":[],"mappings":";;;AAAA,+BASa;AACb,+CAAwC;AACxC,sCAAsC;AACtC,2EAAoE;AAIpE,MAAM,aAAa,GASf,EAAE,CAAA;AAOC,MAAM,mBAAmB,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;IAC3D,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAA;QACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,kBAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,KAAK,GAAU;YACnB,GAAG,MAAM;YACT,GAAG,MAAM,CAAC,QAAQ;YAClB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;YAC/B,OAAO,EAAE;gBACP,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;gBAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;aAC1C;SACF,CAAA;QACD,MAAM,MAAM,GAAG,IAAA,mBAAY,EAAC;YAC1B,KAAK;YACL,SAAS,EAAE,IAAA,gBAAS,GAAc;YAClC,SAAS,EAAE,IAAA,eAAQ,EAAC,kBAAkB,CAAC;SACxC,CAAC,CAAC,MAAM,CAAC,4BAAW,CAAC,CAAA;QACtB,aAAa,CAAC,OAAO,CAAC,GAAG,MAAM,CAAA;IACjC,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,aAAa,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC,CAAA;AA3BY,QAAA,mBAAmB,uBA2B/B"}
|