@lifi/sdk 3.2.0 → 3.3.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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,166 @@
|
|
|
1
|
+
import { sha256 } from '@noble/hashes/sha256'
|
|
2
|
+
import { bech32, bech32m } from 'bech32'
|
|
3
|
+
import bs58 from 'bs58'
|
|
4
|
+
|
|
5
|
+
export enum UTXONetwork {
|
|
6
|
+
Mainnet = 'mainnet',
|
|
7
|
+
Testnet = 'testnet',
|
|
8
|
+
Regtest = 'regtest',
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export enum UTXOAddressType {
|
|
12
|
+
p2pkh = 'p2pkh',
|
|
13
|
+
p2sh = 'p2sh',
|
|
14
|
+
p2wpkh = 'p2wpkh',
|
|
15
|
+
p2wsh = 'p2wsh',
|
|
16
|
+
p2tr = 'p2tr',
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type UTXOAddress = {
|
|
20
|
+
bech32: boolean
|
|
21
|
+
network: UTXONetwork
|
|
22
|
+
address: string
|
|
23
|
+
type: UTXOAddressType
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const addressTypes: {
|
|
27
|
+
[key: number]: { type: UTXOAddressType; network: UTXONetwork }
|
|
28
|
+
} = {
|
|
29
|
+
0x00: {
|
|
30
|
+
type: UTXOAddressType.p2pkh,
|
|
31
|
+
network: UTXONetwork.Mainnet,
|
|
32
|
+
},
|
|
33
|
+
0x6f: {
|
|
34
|
+
type: UTXOAddressType.p2pkh,
|
|
35
|
+
network: UTXONetwork.Testnet,
|
|
36
|
+
},
|
|
37
|
+
0x05: {
|
|
38
|
+
type: UTXOAddressType.p2sh,
|
|
39
|
+
network: UTXONetwork.Mainnet,
|
|
40
|
+
},
|
|
41
|
+
0xc4: {
|
|
42
|
+
type: UTXOAddressType.p2sh,
|
|
43
|
+
network: UTXONetwork.Testnet,
|
|
44
|
+
},
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const parseBech32 = (address: string): UTXOAddress => {
|
|
48
|
+
let decoded
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
if (
|
|
52
|
+
address.startsWith('bc1p') ||
|
|
53
|
+
address.startsWith('tb1p') ||
|
|
54
|
+
address.startsWith('bcrt1p')
|
|
55
|
+
) {
|
|
56
|
+
decoded = bech32m.decode(address)
|
|
57
|
+
} else {
|
|
58
|
+
decoded = bech32.decode(address)
|
|
59
|
+
}
|
|
60
|
+
} catch (error) {
|
|
61
|
+
throw new Error('Invalid address')
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const mapPrefixToNetwork: { [key: string]: UTXONetwork } = {
|
|
65
|
+
bc: UTXONetwork.Mainnet,
|
|
66
|
+
tb: UTXONetwork.Testnet,
|
|
67
|
+
bcrt: UTXONetwork.Regtest,
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const network: UTXONetwork = mapPrefixToNetwork[decoded.prefix]
|
|
71
|
+
|
|
72
|
+
if (network === undefined) {
|
|
73
|
+
throw new Error('Invalid address')
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const witnessVersion = decoded.words[0]
|
|
77
|
+
|
|
78
|
+
if (witnessVersion < 0 || witnessVersion > 16) {
|
|
79
|
+
throw new Error('Invalid address')
|
|
80
|
+
}
|
|
81
|
+
const data = bech32.fromWords(decoded.words.slice(1))
|
|
82
|
+
|
|
83
|
+
let type
|
|
84
|
+
|
|
85
|
+
if (data.length === 20) {
|
|
86
|
+
type = UTXOAddressType.p2wpkh
|
|
87
|
+
} else if (witnessVersion === 1) {
|
|
88
|
+
type = UTXOAddressType.p2tr
|
|
89
|
+
} else {
|
|
90
|
+
type = UTXOAddressType.p2wsh
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
bech32: true,
|
|
95
|
+
network,
|
|
96
|
+
address,
|
|
97
|
+
type,
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export const getUTXOAddress = (address: string): UTXOAddress => {
|
|
102
|
+
let decoded: Uint8Array
|
|
103
|
+
const prefix = address.substring(0, 2).toLowerCase()
|
|
104
|
+
|
|
105
|
+
if (prefix === 'bc' || prefix === 'tb') {
|
|
106
|
+
return parseBech32(address)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
try {
|
|
110
|
+
decoded = bs58.decode(address)
|
|
111
|
+
} catch (error) {
|
|
112
|
+
throw new Error('Invalid address')
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const { length } = decoded
|
|
116
|
+
|
|
117
|
+
if (length !== 25) {
|
|
118
|
+
throw new Error('Invalid address')
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const version = decoded[0]
|
|
122
|
+
|
|
123
|
+
const checksum = decoded.slice(length - 4, length)
|
|
124
|
+
const body = decoded.slice(0, length - 4)
|
|
125
|
+
|
|
126
|
+
const expectedChecksum = sha256(sha256(body)).slice(0, 4)
|
|
127
|
+
|
|
128
|
+
if (
|
|
129
|
+
checksum.some(
|
|
130
|
+
(value: number, index: number) => value !== expectedChecksum[index]
|
|
131
|
+
)
|
|
132
|
+
) {
|
|
133
|
+
throw new Error('Invalid address')
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const validVersions = Object.keys(addressTypes).map(Number)
|
|
137
|
+
|
|
138
|
+
if (!validVersions.includes(version)) {
|
|
139
|
+
throw new Error('Invalid address')
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const addressType = addressTypes[version]
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
...addressType,
|
|
146
|
+
address,
|
|
147
|
+
bech32: false,
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export const isUTXOAddress = (
|
|
152
|
+
address: string,
|
|
153
|
+
network?: UTXONetwork
|
|
154
|
+
): boolean => {
|
|
155
|
+
try {
|
|
156
|
+
const utxoAddress = getUTXOAddress(address)
|
|
157
|
+
|
|
158
|
+
if (network) {
|
|
159
|
+
return network === utxoAddress.network
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return true
|
|
163
|
+
} catch (error) {
|
|
164
|
+
return false
|
|
165
|
+
}
|
|
166
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { LiFiStep, Process } from '@lifi/types'
|
|
2
|
+
import { BaseError } from '../../errors/baseError.js'
|
|
3
|
+
import { ErrorMessage, LiFiErrorCode } from '../../errors/constants.js'
|
|
4
|
+
import { TransactionError, UnknownError } from '../../errors/errors.js'
|
|
5
|
+
import { SDKError } from '../../errors/SDKError.js'
|
|
6
|
+
|
|
7
|
+
export const parseUTXOErrors = async (
|
|
8
|
+
e: Error,
|
|
9
|
+
step?: LiFiStep,
|
|
10
|
+
process?: Process
|
|
11
|
+
): Promise<SDKError> => {
|
|
12
|
+
if (e instanceof SDKError) {
|
|
13
|
+
e.step = e.step ?? step
|
|
14
|
+
e.process = e.process ?? process
|
|
15
|
+
return e
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const baseError = handleSpecificErrors(e)
|
|
19
|
+
|
|
20
|
+
return new SDKError(baseError, step, process)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const handleSpecificErrors = (e: any) => {
|
|
24
|
+
if (e.code === 4001 || e.code === -32000) {
|
|
25
|
+
return new TransactionError(LiFiErrorCode.SignatureRejected, e.message, e)
|
|
26
|
+
}
|
|
27
|
+
if (e.code === -5 || e.code === -32700 || e.code === -32064) {
|
|
28
|
+
return new TransactionError(LiFiErrorCode.NotFound, e.message, e)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (e instanceof BaseError) {
|
|
32
|
+
return e
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return new UnknownError(e.message || ErrorMessage.UnknownError, e)
|
|
36
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
type Options = Parameters<typeof fetch>[1] & {
|
|
2
|
+
headers?: Record<string, string>
|
|
3
|
+
apiKey?: string
|
|
4
|
+
method?: 'GET' | 'POST'
|
|
5
|
+
onError?: (error: any) => any
|
|
6
|
+
responseHandler?: (response: any) => any
|
|
7
|
+
searchParams?: Record<string, string>
|
|
8
|
+
json?: unknown
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let clientConfig: Options = {}
|
|
12
|
+
|
|
13
|
+
export const defaultRequestHeaders =
|
|
14
|
+
typeof window !== 'undefined'
|
|
15
|
+
? ({} as Record<string, string>)
|
|
16
|
+
: {
|
|
17
|
+
referrer: 'https://sk.thorswap.net',
|
|
18
|
+
referer: 'https://sk.thorswap.net',
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function setRequestClientConfig({ apiKey, ...config }: Options) {
|
|
22
|
+
clientConfig = { ...config, apiKey }
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async function fetchWithConfig(url: string, options: Options) {
|
|
26
|
+
const { apiKey, ...config } = clientConfig
|
|
27
|
+
const { searchParams, json, body } = options
|
|
28
|
+
const headers = {
|
|
29
|
+
...defaultRequestHeaders,
|
|
30
|
+
...config.headers,
|
|
31
|
+
...options.headers,
|
|
32
|
+
} as Record<string, string>
|
|
33
|
+
|
|
34
|
+
const bodyToSend = json ? JSON.stringify(json) : body
|
|
35
|
+
|
|
36
|
+
const urlInstance = new URL(url)
|
|
37
|
+
if (searchParams) {
|
|
38
|
+
urlInstance.search = new URLSearchParams(searchParams).toString()
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (apiKey) {
|
|
42
|
+
headers['x-api-key'] = apiKey
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
const response = await fetch(urlInstance.toString(), {
|
|
47
|
+
...config,
|
|
48
|
+
...options,
|
|
49
|
+
body: bodyToSend,
|
|
50
|
+
headers,
|
|
51
|
+
})
|
|
52
|
+
const body = await response.json()
|
|
53
|
+
|
|
54
|
+
if (options.responseHandler) {
|
|
55
|
+
return options.responseHandler(body)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return body
|
|
59
|
+
} catch (error) {
|
|
60
|
+
if (options.onError) {
|
|
61
|
+
return options.onError(error)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
console.error(error)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const RequestClient = {
|
|
69
|
+
get: async <T>(url: string, options?: Options): Promise<T> =>
|
|
70
|
+
fetchWithConfig(url, { ...options, method: 'GET' }),
|
|
71
|
+
post: async <T>(url: string, options?: Options): Promise<T> =>
|
|
72
|
+
fetchWithConfig(url, { ...options, method: 'POST' }),
|
|
73
|
+
extend: (options: Options) => {
|
|
74
|
+
const extendedConfig = { ...clientConfig, ...options }
|
|
75
|
+
return {
|
|
76
|
+
get: async <T>(url: string, options?: Options): Promise<T> =>
|
|
77
|
+
fetchWithConfig(url, { ...extendedConfig, ...options, method: 'GET' }),
|
|
78
|
+
post: async <T>(url: string, options?: Options): Promise<T> =>
|
|
79
|
+
fetchWithConfig(url, { ...extendedConfig, ...options, method: 'POST' }),
|
|
80
|
+
extend: (newOptions: Options) =>
|
|
81
|
+
RequestClient.extend({ ...extendedConfig, ...newOptions }),
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ChainType } from '@lifi/types'
|
|
2
|
+
import type { Client } from 'viem'
|
|
3
|
+
import { type SDKProvider } from '../types.js'
|
|
4
|
+
|
|
5
|
+
export interface UTXOProviderOptions {
|
|
6
|
+
getWalletClient?: () => Promise<Client>
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface UTXOProvider extends SDKProvider {
|
|
10
|
+
setOptions(options: UTXOProviderOptions): void
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function isUTXO(provider: SDKProvider): provider is UTXOProvider {
|
|
14
|
+
return provider.type === ChainType.UTXO
|
|
15
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Account, type Chain, type Client, type Transport } from 'viem'
|
|
2
|
+
import type { UTXOAPISchema } from '../transports/utxo/types.js'
|
|
3
|
+
|
|
4
|
+
export type GetBalanceParameters = {
|
|
5
|
+
/** The address of the account. */
|
|
6
|
+
address: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type GetBalanceReturnType = bigint
|
|
10
|
+
|
|
11
|
+
export async function getBalance<
|
|
12
|
+
C extends Chain | undefined,
|
|
13
|
+
A extends Account | undefined = Account | undefined,
|
|
14
|
+
>(
|
|
15
|
+
client: Client<Transport, C, A, UTXOAPISchema>,
|
|
16
|
+
params: GetBalanceParameters
|
|
17
|
+
): Promise<GetBalanceReturnType> {
|
|
18
|
+
const data = await client.request(
|
|
19
|
+
{
|
|
20
|
+
method: 'getBalance',
|
|
21
|
+
params,
|
|
22
|
+
},
|
|
23
|
+
{ dedupe: true }
|
|
24
|
+
)
|
|
25
|
+
return data
|
|
26
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type Account, type Chain, type Client, type Transport } from 'viem'
|
|
2
|
+
import type { UTXOSchema } from '../transports/utxo/types.js'
|
|
3
|
+
|
|
4
|
+
export type GetBlockCountReturnType = number
|
|
5
|
+
|
|
6
|
+
export async function getBlockCount<
|
|
7
|
+
C extends Chain | undefined,
|
|
8
|
+
A extends Account | undefined = Account | undefined,
|
|
9
|
+
>(
|
|
10
|
+
client: Client<Transport, C, A, UTXOSchema>
|
|
11
|
+
): Promise<GetBlockCountReturnType> {
|
|
12
|
+
const data = await client.request(
|
|
13
|
+
{
|
|
14
|
+
method: 'getblockcount',
|
|
15
|
+
params: [],
|
|
16
|
+
},
|
|
17
|
+
{ dedupe: true }
|
|
18
|
+
)
|
|
19
|
+
return data
|
|
20
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Account, type Chain, type Client, type Transport } from 'viem'
|
|
2
|
+
import type { UTXOSchema } from '../transports/utxo/types.js'
|
|
3
|
+
import type { UTXOTransaction } from '../types/transaction.js'
|
|
4
|
+
|
|
5
|
+
export type GetUTXOTransactionParameters = {
|
|
6
|
+
/** The Id of the transaction */
|
|
7
|
+
txId: string
|
|
8
|
+
/** The block in which to look for the transaction */
|
|
9
|
+
blockhash?: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type GetUTXOTransactionReturnType = UTXOTransaction
|
|
13
|
+
|
|
14
|
+
export async function getUTXOTransaction<
|
|
15
|
+
C extends Chain | undefined,
|
|
16
|
+
A extends Account | undefined = Account | undefined,
|
|
17
|
+
>(
|
|
18
|
+
client: Client<Transport, C, A, UTXOSchema>,
|
|
19
|
+
{ txId, blockhash }: GetUTXOTransactionParameters
|
|
20
|
+
): Promise<GetUTXOTransactionReturnType> {
|
|
21
|
+
const params: [string, boolean, string?] = [txId, true]
|
|
22
|
+
if (blockhash) {
|
|
23
|
+
params.push(blockhash)
|
|
24
|
+
}
|
|
25
|
+
const data = await client.request({
|
|
26
|
+
method: 'getrawtransaction',
|
|
27
|
+
params: params,
|
|
28
|
+
})
|
|
29
|
+
return data
|
|
30
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Account, type Chain, type Client, type Transport } from 'viem'
|
|
2
|
+
import type { UTXOSchema } from '../transports/utxo/types.js'
|
|
3
|
+
|
|
4
|
+
export type SendUTXOTransactionParameters = {
|
|
5
|
+
/** The hex string of the raw transaction */
|
|
6
|
+
hex: string
|
|
7
|
+
/** Rejects transactions whose fee rate is higher than the specified value, expressed in BTC/kB. Set to 0 to accept any fee rate. Default = 0.10 */
|
|
8
|
+
maxFeeRate?: number
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type SendUTXOTransactionReturnType = string
|
|
12
|
+
|
|
13
|
+
export async function sendUTXOTransaction<
|
|
14
|
+
C extends Chain | undefined,
|
|
15
|
+
A extends Account | undefined = Account | undefined,
|
|
16
|
+
>(
|
|
17
|
+
client: Client<Transport, C, A, UTXOSchema>,
|
|
18
|
+
{ hex, maxFeeRate }: SendUTXOTransactionParameters
|
|
19
|
+
): Promise<SendUTXOTransactionReturnType> {
|
|
20
|
+
const params: [string, number?] = [hex]
|
|
21
|
+
if (maxFeeRate) {
|
|
22
|
+
params.push(maxFeeRate)
|
|
23
|
+
}
|
|
24
|
+
const data = await client.request({
|
|
25
|
+
method: 'sendrawtransaction',
|
|
26
|
+
params: params,
|
|
27
|
+
})
|
|
28
|
+
return data
|
|
29
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Account, type Chain, type Client, type Transport } from 'viem'
|
|
2
|
+
import type {
|
|
3
|
+
SignPsbtParameters,
|
|
4
|
+
SignPsbtReturnType,
|
|
5
|
+
UTXOWalletSchema,
|
|
6
|
+
} from '../clients/types.js'
|
|
7
|
+
|
|
8
|
+
export async function signPsbt<
|
|
9
|
+
C extends Chain | undefined,
|
|
10
|
+
A extends Account | undefined = Account | undefined,
|
|
11
|
+
>(
|
|
12
|
+
client: Client<Transport, C, A, UTXOWalletSchema>,
|
|
13
|
+
params: SignPsbtParameters
|
|
14
|
+
): Promise<SignPsbtReturnType> {
|
|
15
|
+
const data = await client.request(
|
|
16
|
+
{
|
|
17
|
+
method: 'signPsbt',
|
|
18
|
+
params: params,
|
|
19
|
+
},
|
|
20
|
+
{ dedupe: true }
|
|
21
|
+
)
|
|
22
|
+
return data
|
|
23
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { EIP1193RequestFn } from 'viem'
|
|
2
|
+
|
|
3
|
+
export type UTXOWalletSchema = readonly [
|
|
4
|
+
{
|
|
5
|
+
Method: 'signPsbt'
|
|
6
|
+
Parameters: SignPsbtParameters
|
|
7
|
+
ReturnType: SignPsbtReturnType
|
|
8
|
+
},
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
export type SignPsbtParameters = {
|
|
12
|
+
/** The PSBT encoded as a hexadecimal string */
|
|
13
|
+
psbt: string
|
|
14
|
+
/**
|
|
15
|
+
* Array of objects specifying details about the inputs to be signed
|
|
16
|
+
*/
|
|
17
|
+
inputsToSign: {
|
|
18
|
+
/**
|
|
19
|
+
* The SigHash type to use for signing (e.g., SIGHASH_ALL).
|
|
20
|
+
* If not specified, a default value is used.
|
|
21
|
+
*/
|
|
22
|
+
sigHash?: number
|
|
23
|
+
/** The Bitcoin address associated with the input that will be signed */
|
|
24
|
+
address: string
|
|
25
|
+
/** An array of indexes in the PSBT corresponding to the inputs that need to be signed */
|
|
26
|
+
signingIndexes: number[]
|
|
27
|
+
}[]
|
|
28
|
+
/**
|
|
29
|
+
* Whether to finalize the PSBT after signing.
|
|
30
|
+
* If `true`, the PSBT will be completed and ready for broadcasting.
|
|
31
|
+
* If `false` or omitted, the PSBT remains partially signed.
|
|
32
|
+
* Some wallets does not support it.
|
|
33
|
+
*/
|
|
34
|
+
finalize?: boolean
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export type SignPsbtReturnType = string
|
|
38
|
+
|
|
39
|
+
export type UTXOWalletProvider = {
|
|
40
|
+
request: EIP1193RequestFn<UTXOWalletSchema>
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export type BtcAccount = {
|
|
44
|
+
address: string
|
|
45
|
+
addressType: 'p2tr' | 'p2wpkh' | 'p2wsh' | 'p2sh' | 'p2pkh'
|
|
46
|
+
publicKey: string
|
|
47
|
+
purpose: 'payment' | 'ordinals'
|
|
48
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import type { Account, Chain, Client, Transport } from 'viem'
|
|
3
|
+
import {
|
|
4
|
+
getBalance,
|
|
5
|
+
type GetBalanceParameters,
|
|
6
|
+
type GetBalanceReturnType,
|
|
7
|
+
} from '../actions/getBalance.js'
|
|
8
|
+
|
|
9
|
+
export type UTXOAPIActions = {
|
|
10
|
+
getBalance: (args: GetBalanceParameters) => Promise<GetBalanceReturnType>
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function UTXOAPIActions<
|
|
14
|
+
transport extends Transport = Transport,
|
|
15
|
+
chain extends Chain | undefined = Chain | undefined,
|
|
16
|
+
account extends Account | undefined = Account | undefined,
|
|
17
|
+
>(client: Client<transport, chain, account>): UTXOAPIActions {
|
|
18
|
+
return {
|
|
19
|
+
getBalance: (args) => getBalance(client, args),
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Account, Chain, Client, Transport } from 'viem'
|
|
2
|
+
import {
|
|
3
|
+
getBlockCount,
|
|
4
|
+
type GetBlockCountReturnType,
|
|
5
|
+
} from '../actions/getBlockCount.js'
|
|
6
|
+
import {
|
|
7
|
+
getUTXOTransaction,
|
|
8
|
+
type GetUTXOTransactionParameters,
|
|
9
|
+
type GetUTXOTransactionReturnType,
|
|
10
|
+
} from '../actions/getUTXOTransaction.js'
|
|
11
|
+
import {
|
|
12
|
+
sendUTXOTransaction,
|
|
13
|
+
type SendUTXOTransactionParameters,
|
|
14
|
+
type SendUTXOTransactionReturnType,
|
|
15
|
+
} from '../actions/sendUTXOTransaction.js'
|
|
16
|
+
|
|
17
|
+
export type UTXOActions = {
|
|
18
|
+
getBlockCount: () => Promise<GetBlockCountReturnType>
|
|
19
|
+
sendUTXOTransaction: (
|
|
20
|
+
args: SendUTXOTransactionParameters
|
|
21
|
+
) => Promise<SendUTXOTransactionReturnType>
|
|
22
|
+
getUTXOTransaction: (
|
|
23
|
+
args: GetUTXOTransactionParameters
|
|
24
|
+
) => Promise<GetUTXOTransactionReturnType>
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function UTXOActions<
|
|
28
|
+
transport extends Transport = Transport,
|
|
29
|
+
chain extends Chain | undefined = Chain | undefined,
|
|
30
|
+
account extends Account | undefined = Account | undefined,
|
|
31
|
+
>(client: Client<transport, chain, account>): UTXOActions {
|
|
32
|
+
return {
|
|
33
|
+
getBlockCount: () => getBlockCount(client),
|
|
34
|
+
sendUTXOTransaction: (args) => sendUTXOTransaction(client, args),
|
|
35
|
+
getUTXOTransaction: (args) => getUTXOTransaction(client, args),
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { RpcMethods } from './types.js'
|
|
2
|
+
|
|
3
|
+
type AnkrBalanceResponse = {
|
|
4
|
+
address: string
|
|
5
|
+
balance: string
|
|
6
|
+
totalReceived: string
|
|
7
|
+
totalSent: string
|
|
8
|
+
unconfirmedBalance: string
|
|
9
|
+
unconfirmedTxs: number
|
|
10
|
+
txs: number
|
|
11
|
+
error: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const ankrMethods: RpcMethods = {
|
|
15
|
+
getBalance: async (client, baseUrl, { address }) => {
|
|
16
|
+
const apiUrl = `${baseUrl}/address/${address}?details=basic`
|
|
17
|
+
const response = (await client.request({
|
|
18
|
+
url: apiUrl,
|
|
19
|
+
fetchOptions: { method: 'GET' },
|
|
20
|
+
})) as unknown as AnkrBalanceResponse
|
|
21
|
+
if (response.error) {
|
|
22
|
+
return {
|
|
23
|
+
error: { code: -1, message: response.error },
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
result: BigInt(response.balance),
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RpcMethods } from './types.js'
|
|
2
|
+
|
|
3
|
+
type BlockchairBalanceResponse = {
|
|
4
|
+
data: Record<string, any>
|
|
5
|
+
context: { code: number; error: string }
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const blockchairMethods: RpcMethods = {
|
|
9
|
+
getBalance: async (client, baseUrl, { address }) => {
|
|
10
|
+
const apiUrl = `${baseUrl}/addresses/balances/?addresses=${address}`
|
|
11
|
+
const response = (await client.request({
|
|
12
|
+
url: apiUrl,
|
|
13
|
+
fetchOptions: { method: 'GET' },
|
|
14
|
+
})) as unknown as BlockchairBalanceResponse
|
|
15
|
+
if (response.context?.code !== 200) {
|
|
16
|
+
return {
|
|
17
|
+
error: {
|
|
18
|
+
code: response.context?.code,
|
|
19
|
+
message: response.context?.error,
|
|
20
|
+
},
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
result: BigInt(response.data[address]),
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { RpcMethods } from './types.js'
|
|
2
|
+
|
|
3
|
+
type BlockcypherBalanceResponse = {
|
|
4
|
+
address: string
|
|
5
|
+
total_received: number
|
|
6
|
+
total_sent: number
|
|
7
|
+
balance: number
|
|
8
|
+
unconfirmed_balance: number
|
|
9
|
+
final_balance: number
|
|
10
|
+
n_tx: number
|
|
11
|
+
unconfirmed_n_tx: number
|
|
12
|
+
final_n_tx: number
|
|
13
|
+
error?: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const blockcypherMethods: RpcMethods = {
|
|
17
|
+
getBalance: async (client, baseUrl, { address }) => {
|
|
18
|
+
const apiUrl = `${baseUrl}/addrs/${address}`
|
|
19
|
+
const response = (await client.request({
|
|
20
|
+
url: apiUrl,
|
|
21
|
+
fetchOptions: { method: 'GET' },
|
|
22
|
+
})) as unknown as BlockcypherBalanceResponse
|
|
23
|
+
if (response.error) {
|
|
24
|
+
return {
|
|
25
|
+
error: { code: -1, message: response.error },
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
result: BigInt(response.balance),
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
}
|