@atomiqlabs/sdk 8.9.1 → 8.9.2
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/LICENSE +201 -201
- package/README.md +1760 -1760
- package/api/index.d.ts +1 -1
- package/api/index.js +3 -3
- package/dist/ApiList.d.ts +37 -37
- package/dist/ApiList.js +30 -30
- package/dist/SmartChainAssets.d.ts +181 -181
- package/dist/SmartChainAssets.js +181 -181
- package/dist/api/ApiEndpoints.d.ts +393 -393
- package/dist/api/ApiEndpoints.js +2 -2
- package/dist/api/ApiParser.d.ts +10 -10
- package/dist/api/ApiParser.js +134 -134
- package/dist/api/ApiTypes.d.ts +157 -157
- package/dist/api/ApiTypes.js +75 -75
- package/dist/api/SerializedAction.d.ts +40 -40
- package/dist/api/SerializedAction.js +59 -59
- package/dist/api/SwapperApi.d.ts +50 -50
- package/dist/api/SwapperApi.js +431 -431
- package/dist/api/index.d.ts +5 -5
- package/dist/api/index.js +24 -24
- package/dist/bitcoin/coinselect2/accumulative.d.ts +7 -7
- package/dist/bitcoin/coinselect2/accumulative.js +52 -52
- package/dist/bitcoin/coinselect2/blackjack.d.ts +7 -7
- package/dist/bitcoin/coinselect2/blackjack.js +38 -38
- package/dist/bitcoin/coinselect2/index.d.ts +20 -20
- package/dist/bitcoin/coinselect2/index.js +69 -69
- package/dist/bitcoin/coinselect2/utils.d.ts +82 -82
- package/dist/bitcoin/coinselect2/utils.js +158 -158
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +113 -113
- package/dist/bitcoin/wallet/BitcoinWallet.js +335 -335
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +116 -116
- package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -21
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +106 -106
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +196 -196
- package/dist/enums/FeeType.d.ts +15 -15
- package/dist/enums/FeeType.js +19 -19
- package/dist/enums/SwapAmountType.d.ts +15 -15
- package/dist/enums/SwapAmountType.js +19 -19
- package/dist/enums/SwapDirection.d.ts +15 -15
- package/dist/enums/SwapDirection.js +19 -19
- package/dist/enums/SwapSide.d.ts +15 -15
- package/dist/enums/SwapSide.js +19 -19
- package/dist/enums/SwapType.d.ts +75 -75
- package/dist/enums/SwapType.js +79 -79
- package/dist/errors/IntermediaryError.d.ts +13 -13
- package/dist/errors/IntermediaryError.js +27 -27
- package/dist/errors/RequestError.d.ts +32 -32
- package/dist/errors/RequestError.js +54 -54
- package/dist/errors/UserError.d.ts +8 -8
- package/dist/errors/UserError.js +16 -16
- package/dist/events/UnifiedSwapEventListener.d.ts +24 -24
- package/dist/events/UnifiedSwapEventListener.js +138 -138
- package/dist/http/HttpUtils.d.ts +29 -29
- package/dist/http/HttpUtils.js +97 -97
- package/dist/http/paramcoders/IParamReader.d.ts +8 -8
- package/dist/http/paramcoders/IParamReader.js +2 -2
- package/dist/http/paramcoders/ParamDecoder.d.ts +44 -44
- package/dist/http/paramcoders/ParamDecoder.js +137 -137
- package/dist/http/paramcoders/ParamEncoder.d.ts +20 -20
- package/dist/http/paramcoders/ParamEncoder.js +36 -36
- package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
- package/dist/http/paramcoders/SchemaVerifier.js +145 -145
- package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
- package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
- package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -13
- package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
- package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +17 -17
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +175 -175
- package/dist/index.d.ts +86 -86
- package/dist/index.js +159 -159
- package/dist/intermediaries/Intermediary.d.ts +178 -178
- package/dist/intermediaries/Intermediary.js +166 -166
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +216 -216
- package/dist/intermediaries/IntermediaryDiscovery.js +424 -424
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +607 -607
- package/dist/intermediaries/apis/IntermediaryAPI.js +764 -764
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
- package/dist/intermediaries/auth/SignedKeyBasedAuth.d.ts +14 -14
- package/dist/intermediaries/auth/SignedKeyBasedAuth.js +68 -68
- package/dist/lnurl/LNURL.d.ts +102 -102
- package/dist/lnurl/LNURL.js +321 -321
- package/dist/prices/RedundantSwapPrice.d.ts +110 -110
- package/dist/prices/RedundantSwapPrice.js +222 -222
- package/dist/prices/SingleSwapPrice.d.ts +34 -34
- package/dist/prices/SingleSwapPrice.js +44 -44
- package/dist/prices/SwapPriceWithChain.d.ts +107 -107
- package/dist/prices/SwapPriceWithChain.js +128 -128
- package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
- package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
- package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
- package/dist/prices/abstract/IPriceProvider.js +74 -74
- package/dist/prices/abstract/ISwapPrice.d.ts +168 -168
- package/dist/prices/abstract/ISwapPrice.js +279 -279
- package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
- package/dist/prices/providers/BinancePriceProvider.js +30 -30
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
- package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
- package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
- package/dist/prices/providers/CustomPriceProvider.js +35 -35
- package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
- package/dist/prices/providers/KrakenPriceProvider.js +45 -45
- package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
- package/dist/prices/providers/OKXPriceProvider.js +29 -29
- package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
- package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
- package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
- package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
- package/dist/storage/IUnifiedStorage.d.ts +127 -127
- package/dist/storage/IUnifiedStorage.js +2 -2
- package/dist/storage/UnifiedSwapStorage.d.ts +120 -120
- package/dist/storage/UnifiedSwapStorage.js +154 -154
- package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
- package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
- package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
- package/dist/storage-browser/LocalStorageManager.js +93 -93
- package/dist/swapper/Swapper.d.ts +765 -770
- package/dist/swapper/Swapper.js +1749 -1758
- package/dist/swapper/SwapperFactory.d.ts +135 -135
- package/dist/swapper/SwapperFactory.js +162 -162
- package/dist/swapper/SwapperUtils.d.ts +222 -222
- package/dist/swapper/SwapperUtils.js +519 -519
- package/dist/swapper/SwapperWithChain.d.ts +404 -404
- package/dist/swapper/SwapperWithChain.js +469 -469
- package/dist/swapper/SwapperWithSigner.d.ts +322 -322
- package/dist/swapper/SwapperWithSigner.js +318 -318
- package/dist/swaps/IAddressSwap.d.ts +22 -22
- package/dist/swaps/IAddressSwap.js +14 -14
- package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
- package/dist/swaps/IBTCWalletSwap.js +18 -18
- package/dist/swaps/IClaimableSwap.d.ts +49 -49
- package/dist/swaps/IClaimableSwap.js +15 -15
- package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
- package/dist/swaps/IClaimableSwapWrapper.js +2 -2
- package/dist/swaps/IRefundableSwap.d.ts +43 -43
- package/dist/swaps/IRefundableSwap.js +14 -14
- package/dist/swaps/ISwap.d.ts +453 -453
- package/dist/swaps/ISwap.js +371 -371
- package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
- package/dist/swaps/ISwapWithGasDrop.js +12 -12
- package/dist/swaps/ISwapWrapper.d.ts +295 -295
- package/dist/swaps/ISwapWrapper.js +373 -373
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
- package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +139 -139
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +172 -172
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +129 -129
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +167 -167
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +107 -107
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +130 -130
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +64 -64
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +82 -82
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +547 -547
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1419 -1419
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +192 -192
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +432 -432
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +650 -650
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1577 -1577
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +237 -237
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +525 -525
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +491 -491
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1463 -1463
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +204 -204
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +406 -406
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +446 -446
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +1097 -1097
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +68 -68
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +117 -117
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +127 -127
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +252 -252
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +535 -535
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +134 -134
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +286 -286
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +694 -694
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1687 -1687
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +259 -259
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -947
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +302 -302
- package/dist/swaps/trusted/ln/LnForGasSwap.js +625 -625
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +82 -82
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +343 -343
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +698 -698
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +71 -71
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +93 -93
- package/dist/types/AmountData.d.ts +10 -10
- package/dist/types/AmountData.js +2 -2
- package/dist/types/CustomPriceFunction.d.ts +11 -11
- package/dist/types/CustomPriceFunction.js +2 -2
- package/dist/types/PriceInfoType.d.ts +28 -28
- package/dist/types/PriceInfoType.js +57 -57
- package/dist/types/SwapExecutionAction.d.ts +195 -195
- package/dist/types/SwapExecutionAction.js +106 -106
- package/dist/types/SwapExecutionStep.d.ts +144 -144
- package/dist/types/SwapExecutionStep.js +87 -87
- package/dist/types/SwapStateInfo.d.ts +5 -5
- package/dist/types/SwapStateInfo.js +2 -2
- package/dist/types/SwapWithSigner.d.ts +17 -17
- package/dist/types/SwapWithSigner.js +43 -43
- package/dist/types/Token.d.ts +99 -99
- package/dist/types/Token.js +76 -76
- package/dist/types/TokenAmount.d.ts +75 -75
- package/dist/types/TokenAmount.js +85 -85
- package/dist/types/fees/Fee.d.ts +50 -50
- package/dist/types/fees/Fee.js +2 -2
- package/dist/types/fees/FeeBreakdown.d.ts +11 -11
- package/dist/types/fees/FeeBreakdown.js +2 -2
- package/dist/types/fees/PercentagePPM.d.ts +17 -17
- package/dist/types/fees/PercentagePPM.js +18 -18
- package/dist/types/lnurl/LNURLPay.d.ts +61 -61
- package/dist/types/lnurl/LNURLPay.js +31 -31
- package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
- package/dist/types/lnurl/LNURLWithdraw.js +27 -27
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
- package/dist/types/wallets/LightningInvoiceCreateService.js +15 -15
- package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
- package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
- package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
- package/dist/utils/AutomaticClockDriftCorrection.js +70 -70
- package/dist/utils/BitcoinUtils.d.ts +18 -18
- package/dist/utils/BitcoinUtils.js +174 -174
- package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
- package/dist/utils/BitcoinWalletUtils.js +14 -14
- package/dist/utils/Logger.d.ts +7 -7
- package/dist/utils/Logger.js +12 -12
- package/dist/utils/RetryUtils.d.ts +22 -22
- package/dist/utils/RetryUtils.js +67 -67
- package/dist/utils/SwapUtils.d.ts +88 -88
- package/dist/utils/SwapUtils.js +72 -72
- package/dist/utils/TimeoutUtils.d.ts +17 -17
- package/dist/utils/TimeoutUtils.js +55 -55
- package/dist/utils/TokenUtils.d.ts +19 -19
- package/dist/utils/TokenUtils.js +37 -37
- package/dist/utils/TypeUtils.d.ts +7 -7
- package/dist/utils/TypeUtils.js +2 -2
- package/dist/utils/Utils.d.ts +69 -69
- package/dist/utils/Utils.js +214 -214
- package/package.json +46 -46
- package/src/SmartChainAssets.ts +186 -186
- package/src/api/ApiEndpoints.ts +427 -427
- package/src/api/ApiParser.ts +138 -138
- package/src/api/ApiTypes.ts +229 -229
- package/src/api/SerializedAction.ts +97 -97
- package/src/api/SwapperApi.ts +545 -545
- package/src/api/index.ts +5 -5
- package/src/bitcoin/coinselect2/accumulative.ts +69 -69
- package/src/bitcoin/coinselect2/blackjack.ts +50 -50
- package/src/bitcoin/coinselect2/index.ts +93 -93
- package/src/bitcoin/coinselect2/utils.ts +236 -236
- package/src/bitcoin/wallet/BitcoinWallet.ts +439 -439
- package/src/bitcoin/wallet/IBitcoinWallet.ts +140 -140
- package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +225 -225
- package/src/enums/FeeType.ts +15 -15
- package/src/enums/SwapAmountType.ts +16 -16
- package/src/enums/SwapDirection.ts +15 -15
- package/src/enums/SwapSide.ts +16 -16
- package/src/enums/SwapType.ts +75 -75
- package/src/errors/IntermediaryError.ts +28 -28
- package/src/errors/RequestError.ts +64 -64
- package/src/errors/UserError.ts +15 -15
- package/src/events/UnifiedSwapEventListener.ts +181 -181
- package/src/http/HttpUtils.ts +97 -97
- package/src/http/paramcoders/IParamReader.ts +9 -9
- package/src/http/paramcoders/ParamDecoder.ts +145 -145
- package/src/http/paramcoders/ParamEncoder.ts +40 -40
- package/src/http/paramcoders/SchemaVerifier.ts +153 -153
- package/src/http/paramcoders/client/ResponseParamDecoder.ts +57 -57
- package/src/http/paramcoders/client/StreamParamEncoder.ts +28 -28
- package/src/http/paramcoders/client/StreamingFetchPromise.ts +194 -194
- package/src/index.ts +141 -141
- package/src/intermediaries/Intermediary.ts +280 -280
- package/src/intermediaries/IntermediaryDiscovery.ts +548 -548
- package/src/intermediaries/apis/IntermediaryAPI.ts +1247 -1247
- package/src/intermediaries/auth/SignedKeyBasedAuth.ts +69 -69
- package/src/lnurl/LNURL.ts +402 -402
- package/src/prices/RedundantSwapPrice.ts +264 -264
- package/src/prices/SingleSwapPrice.ts +50 -50
- package/src/prices/SwapPriceWithChain.ts +194 -194
- package/src/prices/abstract/ICachedSwapPrice.ts +85 -85
- package/src/prices/abstract/IPriceProvider.ts +127 -127
- package/src/prices/abstract/ISwapPrice.ts +390 -390
- package/src/prices/providers/BinancePriceProvider.ts +48 -48
- package/src/prices/providers/CoinGeckoPriceProvider.ts +46 -46
- package/src/prices/providers/CoinPaprikaPriceProvider.ts +49 -49
- package/src/prices/providers/CustomPriceProvider.ts +40 -40
- package/src/prices/providers/KrakenPriceProvider.ts +83 -83
- package/src/prices/providers/OKXPriceProvider.ts +59 -59
- package/src/prices/providers/abstract/ExchangePriceProvider.ts +31 -31
- package/src/prices/providers/abstract/HttpPriceProvider.ts +14 -14
- package/src/storage/IUnifiedStorage.ts +136 -136
- package/src/storage/UnifiedSwapStorage.ts +175 -175
- package/src/storage-browser/IndexedDBUnifiedStorage.ts +350 -350
- package/src/storage-browser/LocalStorageManager.ts +106 -106
- package/src/swapper/Swapper.ts +2557 -2570
- package/src/swapper/SwapperFactory.ts +307 -307
- package/src/swapper/SwapperUtils.ts +610 -610
- package/src/swapper/SwapperWithChain.ts +707 -707
- package/src/swapper/SwapperWithSigner.ts +511 -511
- package/src/swaps/IAddressSwap.ts +30 -30
- package/src/swaps/IBTCWalletSwap.ts +92 -92
- package/src/swaps/IClaimableSwap.ts +65 -65
- package/src/swaps/IClaimableSwapWrapper.ts +17 -17
- package/src/swaps/IRefundableSwap.ts +58 -58
- package/src/swaps/ISwap.ts +775 -775
- package/src/swaps/ISwapWithGasDrop.ts +25 -25
- package/src/swaps/ISwapWrapper.ts +564 -564
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +217 -217
- package/src/swaps/escrow_swaps/IEscrowSwap.ts +271 -271
- package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +284 -284
- package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +172 -172
- package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +300 -300
- package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +107 -107
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1670 -1671
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +603 -603
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1883 -1883
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +752 -752
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +1753 -1753
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +612 -612
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +1327 -1327
- package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +138 -138
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +304 -304
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +787 -787
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +206 -206
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +403 -403
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +2148 -2148
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1238 -1238
- package/src/swaps/trusted/ln/LnForGasSwap.ts +753 -753
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +90 -90
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +843 -843
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +133 -133
- package/src/types/AmountData.ts +9 -9
- package/src/types/CustomPriceFunction.ts +11 -11
- package/src/types/PriceInfoType.ts +66 -66
- package/src/types/SwapExecutionAction.ts +323 -323
- package/src/types/SwapExecutionStep.ts +224 -224
- package/src/types/SwapStateInfo.ts +6 -6
- package/src/types/SwapWithSigner.ts +61 -61
- package/src/types/Token.ts +163 -163
- package/src/types/TokenAmount.ts +167 -167
- package/src/types/fees/Fee.ts +56 -56
- package/src/types/fees/FeeBreakdown.ts +11 -11
- package/src/types/fees/PercentagePPM.ts +26 -26
- package/src/types/lnurl/LNURLPay.ts +79 -79
- package/src/types/lnurl/LNURLWithdraw.ts +61 -61
- package/src/types/wallets/LightningInvoiceCreateService.ts +30 -30
- package/src/types/wallets/MinimalBitcoinWalletInterface.ts +21 -21
- package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +9 -9
- package/src/utils/AutomaticClockDriftCorrection.ts +71 -71
- package/src/utils/BitcoinUtils.ts +164 -164
- package/src/utils/BitcoinWalletUtils.ts +15 -15
- package/src/utils/Logger.ts +14 -14
- package/src/utils/RetryUtils.ts +78 -78
- package/src/utils/SwapUtils.ts +99 -99
- package/src/utils/TimeoutUtils.ts +49 -49
- package/src/utils/TokenUtils.ts +33 -33
- package/src/utils/TypeUtils.ts +8 -8
- package/src/utils/Utils.ts +221 -221
|
@@ -1,158 +1,158 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.utils = exports.DUST_THRESHOLDS = void 0;
|
|
4
|
-
const Logger_1 = require("../../utils/Logger");
|
|
5
|
-
const logger = (0, Logger_1.getLogger)("CoinSelect: ");
|
|
6
|
-
// baseline estimates, used to improve performance
|
|
7
|
-
const TX_EMPTY_SIZE = 4 + 1 + 1 + 4;
|
|
8
|
-
const TX_INPUT_BASE = 32 + 4 + 1 + 4;
|
|
9
|
-
const WITNESS_OVERHEAD = 2 / 4;
|
|
10
|
-
const P2WPKH_WITNESS = (1 + 1 + 72 + 1 + 33) / 4;
|
|
11
|
-
const P2TR_WITNESS = (1 + 1 + 65) / 4;
|
|
12
|
-
const TX_INPUT_PUBKEYHASH = 107;
|
|
13
|
-
const TX_INPUT_P2SH_P2WPKH = 23 + P2WPKH_WITNESS + 1;
|
|
14
|
-
const TX_INPUT_P2WPKH = 0 + P2WPKH_WITNESS;
|
|
15
|
-
const TX_INPUT_P2WSH = 0 + (1 + 1 + 64) / 4;
|
|
16
|
-
const TX_INPUT_P2TR = 0 + P2TR_WITNESS;
|
|
17
|
-
const TX_OUTPUT_BASE = 8 + 1;
|
|
18
|
-
const TX_OUTPUT_PUBKEYHASH = 25;
|
|
19
|
-
const TX_OUTPUT_P2SH_P2WPKH = 23;
|
|
20
|
-
const TX_OUTPUT_P2WPKH = 22;
|
|
21
|
-
const TX_OUTPUT_P2WSH = 34;
|
|
22
|
-
const TX_OUTPUT_P2TR = 34;
|
|
23
|
-
const INPUT_BYTES = {
|
|
24
|
-
"p2sh-p2wpkh": TX_INPUT_P2SH_P2WPKH,
|
|
25
|
-
"p2wpkh": TX_INPUT_P2WPKH,
|
|
26
|
-
"p2tr": TX_INPUT_P2TR,
|
|
27
|
-
"p2pkh": TX_INPUT_PUBKEYHASH,
|
|
28
|
-
"p2wsh": TX_INPUT_P2WSH
|
|
29
|
-
};
|
|
30
|
-
function inputBytes(input) {
|
|
31
|
-
if (input.script == null && input.type == null)
|
|
32
|
-
throw new Error("Needs either script or type defined!");
|
|
33
|
-
return TX_INPUT_BASE + (input.script ? input.script.length : INPUT_BYTES[input.type]);
|
|
34
|
-
}
|
|
35
|
-
const OUTPUT_BYTES = {
|
|
36
|
-
"p2sh-p2wpkh": TX_OUTPUT_P2SH_P2WPKH,
|
|
37
|
-
"p2wpkh": TX_OUTPUT_P2WPKH,
|
|
38
|
-
"p2tr": TX_OUTPUT_P2TR,
|
|
39
|
-
"p2pkh": TX_OUTPUT_PUBKEYHASH,
|
|
40
|
-
"p2wsh": TX_OUTPUT_P2WSH
|
|
41
|
-
};
|
|
42
|
-
function outputBytes(output) {
|
|
43
|
-
if (output.script == null && output.type == null)
|
|
44
|
-
throw new Error("Needs either script or type defined!");
|
|
45
|
-
return TX_OUTPUT_BASE + (output.script ? output.script.length : OUTPUT_BYTES[output.type]);
|
|
46
|
-
}
|
|
47
|
-
exports.DUST_THRESHOLDS = {
|
|
48
|
-
"p2sh-p2wpkh": 540,
|
|
49
|
-
"p2wpkh": 294,
|
|
50
|
-
"p2tr": 330,
|
|
51
|
-
"p2pkh": 546,
|
|
52
|
-
"p2wsh": 330
|
|
53
|
-
};
|
|
54
|
-
function dustThreshold(output) {
|
|
55
|
-
return exports.DUST_THRESHOLDS[output.type];
|
|
56
|
-
}
|
|
57
|
-
function transactionBytes(inputs, outputs, changeType) {
|
|
58
|
-
let size = TX_EMPTY_SIZE;
|
|
59
|
-
let isSegwit = false;
|
|
60
|
-
if (changeType != null && changeType !== "p2pkh") {
|
|
61
|
-
size += WITNESS_OVERHEAD;
|
|
62
|
-
isSegwit = true;
|
|
63
|
-
}
|
|
64
|
-
for (let input of inputs) {
|
|
65
|
-
if (!isSegwit && (input.type !== "p2pkh")) {
|
|
66
|
-
isSegwit = true;
|
|
67
|
-
size += WITNESS_OVERHEAD;
|
|
68
|
-
}
|
|
69
|
-
size += inputBytes(input);
|
|
70
|
-
}
|
|
71
|
-
for (let output of outputs) {
|
|
72
|
-
size += outputBytes(output);
|
|
73
|
-
}
|
|
74
|
-
return Math.ceil(size);
|
|
75
|
-
}
|
|
76
|
-
function numberOrNaN(v) {
|
|
77
|
-
if (typeof v !== 'number')
|
|
78
|
-
return NaN;
|
|
79
|
-
if (!isFinite(v))
|
|
80
|
-
return NaN;
|
|
81
|
-
if (v < 0)
|
|
82
|
-
return NaN;
|
|
83
|
-
return v;
|
|
84
|
-
}
|
|
85
|
-
function uintOrNaN(v) {
|
|
86
|
-
if (typeof v !== 'number')
|
|
87
|
-
return NaN;
|
|
88
|
-
if (!isFinite(v))
|
|
89
|
-
return NaN;
|
|
90
|
-
if (Math.floor(v) !== v)
|
|
91
|
-
return NaN;
|
|
92
|
-
if (v < 0)
|
|
93
|
-
return NaN;
|
|
94
|
-
return v;
|
|
95
|
-
}
|
|
96
|
-
function sumForgiving(range) {
|
|
97
|
-
return range.reduce((a, x) => a + (isFinite(x.value) ? x.value : 0), 0);
|
|
98
|
-
}
|
|
99
|
-
function sumOrNaN(range) {
|
|
100
|
-
return range.reduce((a, x) => a + uintOrNaN(x.value), 0);
|
|
101
|
-
}
|
|
102
|
-
function finalize(inputs, outputs, feeRate, changeType, cpfpAddFee = 0) {
|
|
103
|
-
const bytesAccum = transactionBytes(inputs, outputs, changeType ?? undefined);
|
|
104
|
-
logger.debug("finalize(): Transaction bytes: ", bytesAccum);
|
|
105
|
-
if (changeType != null) {
|
|
106
|
-
const feeAfterExtraOutput = (feeRate * (bytesAccum + outputBytes({ type: changeType }))) + cpfpAddFee;
|
|
107
|
-
logger.debug("finalize(): TX fee after adding change output: ", feeAfterExtraOutput);
|
|
108
|
-
const remainderAfterExtraOutput = Math.floor(sumOrNaN(inputs) - (sumOrNaN(outputs) + feeAfterExtraOutput));
|
|
109
|
-
logger.debug("finalize(): Leaves change (changeType=" + changeType + ") value: ", remainderAfterExtraOutput);
|
|
110
|
-
// is it worth a change output?
|
|
111
|
-
if (remainderAfterExtraOutput >= dustThreshold({ type: changeType })) {
|
|
112
|
-
outputs = outputs.concat({ value: remainderAfterExtraOutput, type: changeType });
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
const fee = sumOrNaN(inputs) - sumOrNaN(outputs);
|
|
116
|
-
logger.debug("finalize(): Re-calculated total fee: ", fee);
|
|
117
|
-
if (!isFinite(fee) || fee < 0)
|
|
118
|
-
return { fee: (feeRate * bytesAccum) + cpfpAddFee };
|
|
119
|
-
let txVSize = exports.utils.transactionBytes(inputs, outputs);
|
|
120
|
-
let txFee = fee;
|
|
121
|
-
const cpfpSortedInputs = [...inputs].sort((a, b) => (b.cpfp?.txEffectiveFeeRate ?? 0) - (a.cpfp?.txEffectiveFeeRate ?? 0));
|
|
122
|
-
cpfpSortedInputs.forEach(input => {
|
|
123
|
-
if (input.cpfp == null)
|
|
124
|
-
return;
|
|
125
|
-
const currentEffectiveFeeRate = txFee / txVSize;
|
|
126
|
-
if (currentEffectiveFeeRate > input.cpfp.txEffectiveFeeRate) {
|
|
127
|
-
txVSize += input.cpfp.txVsize;
|
|
128
|
-
txFee += input.cpfp.txVsize * input.cpfp.txEffectiveFeeRate;
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
return {
|
|
132
|
-
inputs: inputs,
|
|
133
|
-
outputs: outputs,
|
|
134
|
-
effectiveFeeRate: txFee / txVSize,
|
|
135
|
-
fee: fee
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
function isDetrimentalInput(feeRate, utxo) {
|
|
139
|
-
const utxoBytes = exports.utils.inputBytes(utxo);
|
|
140
|
-
const utxoFee = feeRate * utxoBytes;
|
|
141
|
-
let cpfpFee = 0;
|
|
142
|
-
if (utxo.cpfp != null && utxo.cpfp.txEffectiveFeeRate < feeRate)
|
|
143
|
-
cpfpFee = Math.ceil(utxo.cpfp.txVsize * (feeRate - utxo.cpfp.txEffectiveFeeRate));
|
|
144
|
-
// skip detrimental input
|
|
145
|
-
return utxoFee + cpfpFee > utxo.value;
|
|
146
|
-
}
|
|
147
|
-
exports.utils = {
|
|
148
|
-
dustThreshold: dustThreshold,
|
|
149
|
-
finalize: finalize,
|
|
150
|
-
inputBytes: inputBytes,
|
|
151
|
-
outputBytes: outputBytes,
|
|
152
|
-
sumOrNaN: sumOrNaN,
|
|
153
|
-
sumForgiving: sumForgiving,
|
|
154
|
-
transactionBytes: transactionBytes,
|
|
155
|
-
uintOrNaN: uintOrNaN,
|
|
156
|
-
numberOrNaN: numberOrNaN,
|
|
157
|
-
isDetrimentalInput
|
|
158
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.utils = exports.DUST_THRESHOLDS = void 0;
|
|
4
|
+
const Logger_1 = require("../../utils/Logger");
|
|
5
|
+
const logger = (0, Logger_1.getLogger)("CoinSelect: ");
|
|
6
|
+
// baseline estimates, used to improve performance
|
|
7
|
+
const TX_EMPTY_SIZE = 4 + 1 + 1 + 4;
|
|
8
|
+
const TX_INPUT_BASE = 32 + 4 + 1 + 4;
|
|
9
|
+
const WITNESS_OVERHEAD = 2 / 4;
|
|
10
|
+
const P2WPKH_WITNESS = (1 + 1 + 72 + 1 + 33) / 4;
|
|
11
|
+
const P2TR_WITNESS = (1 + 1 + 65) / 4;
|
|
12
|
+
const TX_INPUT_PUBKEYHASH = 107;
|
|
13
|
+
const TX_INPUT_P2SH_P2WPKH = 23 + P2WPKH_WITNESS + 1;
|
|
14
|
+
const TX_INPUT_P2WPKH = 0 + P2WPKH_WITNESS;
|
|
15
|
+
const TX_INPUT_P2WSH = 0 + (1 + 1 + 64) / 4;
|
|
16
|
+
const TX_INPUT_P2TR = 0 + P2TR_WITNESS;
|
|
17
|
+
const TX_OUTPUT_BASE = 8 + 1;
|
|
18
|
+
const TX_OUTPUT_PUBKEYHASH = 25;
|
|
19
|
+
const TX_OUTPUT_P2SH_P2WPKH = 23;
|
|
20
|
+
const TX_OUTPUT_P2WPKH = 22;
|
|
21
|
+
const TX_OUTPUT_P2WSH = 34;
|
|
22
|
+
const TX_OUTPUT_P2TR = 34;
|
|
23
|
+
const INPUT_BYTES = {
|
|
24
|
+
"p2sh-p2wpkh": TX_INPUT_P2SH_P2WPKH,
|
|
25
|
+
"p2wpkh": TX_INPUT_P2WPKH,
|
|
26
|
+
"p2tr": TX_INPUT_P2TR,
|
|
27
|
+
"p2pkh": TX_INPUT_PUBKEYHASH,
|
|
28
|
+
"p2wsh": TX_INPUT_P2WSH
|
|
29
|
+
};
|
|
30
|
+
function inputBytes(input) {
|
|
31
|
+
if (input.script == null && input.type == null)
|
|
32
|
+
throw new Error("Needs either script or type defined!");
|
|
33
|
+
return TX_INPUT_BASE + (input.script ? input.script.length : INPUT_BYTES[input.type]);
|
|
34
|
+
}
|
|
35
|
+
const OUTPUT_BYTES = {
|
|
36
|
+
"p2sh-p2wpkh": TX_OUTPUT_P2SH_P2WPKH,
|
|
37
|
+
"p2wpkh": TX_OUTPUT_P2WPKH,
|
|
38
|
+
"p2tr": TX_OUTPUT_P2TR,
|
|
39
|
+
"p2pkh": TX_OUTPUT_PUBKEYHASH,
|
|
40
|
+
"p2wsh": TX_OUTPUT_P2WSH
|
|
41
|
+
};
|
|
42
|
+
function outputBytes(output) {
|
|
43
|
+
if (output.script == null && output.type == null)
|
|
44
|
+
throw new Error("Needs either script or type defined!");
|
|
45
|
+
return TX_OUTPUT_BASE + (output.script ? output.script.length : OUTPUT_BYTES[output.type]);
|
|
46
|
+
}
|
|
47
|
+
exports.DUST_THRESHOLDS = {
|
|
48
|
+
"p2sh-p2wpkh": 540,
|
|
49
|
+
"p2wpkh": 294,
|
|
50
|
+
"p2tr": 330,
|
|
51
|
+
"p2pkh": 546,
|
|
52
|
+
"p2wsh": 330
|
|
53
|
+
};
|
|
54
|
+
function dustThreshold(output) {
|
|
55
|
+
return exports.DUST_THRESHOLDS[output.type];
|
|
56
|
+
}
|
|
57
|
+
function transactionBytes(inputs, outputs, changeType) {
|
|
58
|
+
let size = TX_EMPTY_SIZE;
|
|
59
|
+
let isSegwit = false;
|
|
60
|
+
if (changeType != null && changeType !== "p2pkh") {
|
|
61
|
+
size += WITNESS_OVERHEAD;
|
|
62
|
+
isSegwit = true;
|
|
63
|
+
}
|
|
64
|
+
for (let input of inputs) {
|
|
65
|
+
if (!isSegwit && (input.type !== "p2pkh")) {
|
|
66
|
+
isSegwit = true;
|
|
67
|
+
size += WITNESS_OVERHEAD;
|
|
68
|
+
}
|
|
69
|
+
size += inputBytes(input);
|
|
70
|
+
}
|
|
71
|
+
for (let output of outputs) {
|
|
72
|
+
size += outputBytes(output);
|
|
73
|
+
}
|
|
74
|
+
return Math.ceil(size);
|
|
75
|
+
}
|
|
76
|
+
function numberOrNaN(v) {
|
|
77
|
+
if (typeof v !== 'number')
|
|
78
|
+
return NaN;
|
|
79
|
+
if (!isFinite(v))
|
|
80
|
+
return NaN;
|
|
81
|
+
if (v < 0)
|
|
82
|
+
return NaN;
|
|
83
|
+
return v;
|
|
84
|
+
}
|
|
85
|
+
function uintOrNaN(v) {
|
|
86
|
+
if (typeof v !== 'number')
|
|
87
|
+
return NaN;
|
|
88
|
+
if (!isFinite(v))
|
|
89
|
+
return NaN;
|
|
90
|
+
if (Math.floor(v) !== v)
|
|
91
|
+
return NaN;
|
|
92
|
+
if (v < 0)
|
|
93
|
+
return NaN;
|
|
94
|
+
return v;
|
|
95
|
+
}
|
|
96
|
+
function sumForgiving(range) {
|
|
97
|
+
return range.reduce((a, x) => a + (isFinite(x.value) ? x.value : 0), 0);
|
|
98
|
+
}
|
|
99
|
+
function sumOrNaN(range) {
|
|
100
|
+
return range.reduce((a, x) => a + uintOrNaN(x.value), 0);
|
|
101
|
+
}
|
|
102
|
+
function finalize(inputs, outputs, feeRate, changeType, cpfpAddFee = 0) {
|
|
103
|
+
const bytesAccum = transactionBytes(inputs, outputs, changeType ?? undefined);
|
|
104
|
+
logger.debug("finalize(): Transaction bytes: ", bytesAccum);
|
|
105
|
+
if (changeType != null) {
|
|
106
|
+
const feeAfterExtraOutput = (feeRate * (bytesAccum + outputBytes({ type: changeType }))) + cpfpAddFee;
|
|
107
|
+
logger.debug("finalize(): TX fee after adding change output: ", feeAfterExtraOutput);
|
|
108
|
+
const remainderAfterExtraOutput = Math.floor(sumOrNaN(inputs) - (sumOrNaN(outputs) + feeAfterExtraOutput));
|
|
109
|
+
logger.debug("finalize(): Leaves change (changeType=" + changeType + ") value: ", remainderAfterExtraOutput);
|
|
110
|
+
// is it worth a change output?
|
|
111
|
+
if (remainderAfterExtraOutput >= dustThreshold({ type: changeType })) {
|
|
112
|
+
outputs = outputs.concat({ value: remainderAfterExtraOutput, type: changeType });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const fee = sumOrNaN(inputs) - sumOrNaN(outputs);
|
|
116
|
+
logger.debug("finalize(): Re-calculated total fee: ", fee);
|
|
117
|
+
if (!isFinite(fee) || fee < 0)
|
|
118
|
+
return { fee: (feeRate * bytesAccum) + cpfpAddFee };
|
|
119
|
+
let txVSize = exports.utils.transactionBytes(inputs, outputs);
|
|
120
|
+
let txFee = fee;
|
|
121
|
+
const cpfpSortedInputs = [...inputs].sort((a, b) => (b.cpfp?.txEffectiveFeeRate ?? 0) - (a.cpfp?.txEffectiveFeeRate ?? 0));
|
|
122
|
+
cpfpSortedInputs.forEach(input => {
|
|
123
|
+
if (input.cpfp == null)
|
|
124
|
+
return;
|
|
125
|
+
const currentEffectiveFeeRate = txFee / txVSize;
|
|
126
|
+
if (currentEffectiveFeeRate > input.cpfp.txEffectiveFeeRate) {
|
|
127
|
+
txVSize += input.cpfp.txVsize;
|
|
128
|
+
txFee += input.cpfp.txVsize * input.cpfp.txEffectiveFeeRate;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
inputs: inputs,
|
|
133
|
+
outputs: outputs,
|
|
134
|
+
effectiveFeeRate: txFee / txVSize,
|
|
135
|
+
fee: fee
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function isDetrimentalInput(feeRate, utxo) {
|
|
139
|
+
const utxoBytes = exports.utils.inputBytes(utxo);
|
|
140
|
+
const utxoFee = feeRate * utxoBytes;
|
|
141
|
+
let cpfpFee = 0;
|
|
142
|
+
if (utxo.cpfp != null && utxo.cpfp.txEffectiveFeeRate < feeRate)
|
|
143
|
+
cpfpFee = Math.ceil(utxo.cpfp.txVsize * (feeRate - utxo.cpfp.txEffectiveFeeRate));
|
|
144
|
+
// skip detrimental input
|
|
145
|
+
return utxoFee + cpfpFee > utxo.value;
|
|
146
|
+
}
|
|
147
|
+
exports.utils = {
|
|
148
|
+
dustThreshold: dustThreshold,
|
|
149
|
+
finalize: finalize,
|
|
150
|
+
inputBytes: inputBytes,
|
|
151
|
+
outputBytes: outputBytes,
|
|
152
|
+
sumOrNaN: sumOrNaN,
|
|
153
|
+
sumForgiving: sumForgiving,
|
|
154
|
+
transactionBytes: transactionBytes,
|
|
155
|
+
uintOrNaN: uintOrNaN,
|
|
156
|
+
numberOrNaN: numberOrNaN,
|
|
157
|
+
isDetrimentalInput
|
|
158
|
+
};
|
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
import { CoinselectAddressTypes } from "../coinselect2";
|
|
2
|
-
import { BTC_NETWORK } from "@scure/btc-signer/utils";
|
|
3
|
-
import { Transaction } from "@scure/btc-signer";
|
|
4
|
-
import { BitcoinWalletUtxo, BitcoinWalletUtxoBase, IBitcoinWallet } from "./IBitcoinWallet";
|
|
5
|
-
import { BitcoinNetwork, BitcoinRpcWithAddressIndex } from "@atomiqlabs/base";
|
|
6
|
-
/**
|
|
7
|
-
* Identifies the address type of a Bitcoin address
|
|
8
|
-
*
|
|
9
|
-
* @category Bitcoin
|
|
10
|
-
*/
|
|
11
|
-
export declare function identifyAddressType(address: string, network: BTC_NETWORK): CoinselectAddressTypes;
|
|
12
|
-
/**
|
|
13
|
-
* Abstract base class for Bitcoin wallet implementations, using bitcoin rpc with address index
|
|
14
|
-
* as a backend for fetching balances, UTXOs, etc.
|
|
15
|
-
*
|
|
16
|
-
* @category Bitcoin
|
|
17
|
-
*/
|
|
18
|
-
export declare abstract class BitcoinWallet implements IBitcoinWallet {
|
|
19
|
-
protected readonly rpc: BitcoinRpcWithAddressIndex<any>;
|
|
20
|
-
protected readonly network: BTC_NETWORK;
|
|
21
|
-
protected feeMultiplier: number;
|
|
22
|
-
protected feeOverride?: number;
|
|
23
|
-
constructor(mempoolApi: BitcoinRpcWithAddressIndex<any>, network: BitcoinNetwork | BTC_NETWORK, feeMultiplier?: number, feeOverride?: number);
|
|
24
|
-
/**
|
|
25
|
-
* @inheritDoc
|
|
26
|
-
*/
|
|
27
|
-
getFeeRate(): Promise<number>;
|
|
28
|
-
/**
|
|
29
|
-
* Internal helper function for sending a raw transaction through the underlying RPC
|
|
30
|
-
*
|
|
31
|
-
* @param rawHex Serialized bitcoin transaction in hexadecimal format
|
|
32
|
-
* @returns txId Transaction ID of the submitted bitcoin transaction
|
|
33
|
-
*
|
|
34
|
-
* @protected
|
|
35
|
-
*/
|
|
36
|
-
protected _sendTransaction(rawHex: string): Promise<string>;
|
|
37
|
-
/**
|
|
38
|
-
* Internal helper function for fetching the balance of the wallet given a specific bitcoin wallet address
|
|
39
|
-
*
|
|
40
|
-
* @param address
|
|
41
|
-
* @protected
|
|
42
|
-
*/
|
|
43
|
-
protected _getBalance(address: string): Promise<{
|
|
44
|
-
confirmedBalance: bigint;
|
|
45
|
-
unconfirmedBalance: bigint;
|
|
46
|
-
}>;
|
|
47
|
-
/**
|
|
48
|
-
* Internal helper function for fetching the UTXO set of a given wallet address
|
|
49
|
-
*
|
|
50
|
-
* @param sendingAddress
|
|
51
|
-
* @param sendingAddressType
|
|
52
|
-
* @protected
|
|
53
|
-
*/
|
|
54
|
-
protected _getUtxoPool(sendingAddress: string, sendingAddressType: CoinselectAddressTypes): Promise<BitcoinWalletUtxo[]>;
|
|
55
|
-
/**
|
|
56
|
-
*
|
|
57
|
-
* @param sendingAccounts
|
|
58
|
-
* @param recipient
|
|
59
|
-
* @param amount
|
|
60
|
-
* @param feeRate
|
|
61
|
-
* @protected
|
|
62
|
-
*/
|
|
63
|
-
protected _getPsbt(sendingAccounts: {
|
|
64
|
-
pubkey: string;
|
|
65
|
-
address: string;
|
|
66
|
-
addressType: CoinselectAddressTypes;
|
|
67
|
-
}[], recipient: string, amount: number, feeRate?: number): Promise<{
|
|
68
|
-
fee: number;
|
|
69
|
-
psbt?: Transaction;
|
|
70
|
-
inputAddressIndexes?: {
|
|
71
|
-
[address: string]: number[];
|
|
72
|
-
};
|
|
73
|
-
}>;
|
|
74
|
-
protected _fundPsbt(sendingAccounts: {
|
|
75
|
-
pubkey: string;
|
|
76
|
-
address: string;
|
|
77
|
-
addressType: CoinselectAddressTypes;
|
|
78
|
-
}[], psbt: Transaction, _feeRate?: number, utxos?: BitcoinWalletUtxo[], spendFully?: boolean): Promise<{
|
|
79
|
-
fee: number;
|
|
80
|
-
psbt?: Transaction;
|
|
81
|
-
inputAddressIndexes?: {
|
|
82
|
-
[address: string]: number[];
|
|
83
|
-
};
|
|
84
|
-
}>;
|
|
85
|
-
protected _getSpendableBalance(sendingAccounts: {
|
|
86
|
-
address: string;
|
|
87
|
-
addressType: CoinselectAddressTypes;
|
|
88
|
-
}[], psbt?: Transaction, feeRate?: number, outputAddressType?: CoinselectAddressTypes, utxoPool?: BitcoinWalletUtxoBase[]): Promise<{
|
|
89
|
-
balance: bigint;
|
|
90
|
-
feeRate: number;
|
|
91
|
-
totalFee: number;
|
|
92
|
-
}>;
|
|
93
|
-
abstract sendTransaction(address: string, amount: bigint, feeRate?: number): Promise<string>;
|
|
94
|
-
abstract fundPsbt(psbt: Transaction, feeRate?: number, utxos?: BitcoinWalletUtxo[], spendFully?: boolean): Promise<Transaction>;
|
|
95
|
-
abstract signPsbt(psbt: Transaction, signInputs: number[]): Promise<Transaction>;
|
|
96
|
-
abstract getTransactionFee(address: string, amount: bigint, feeRate?: number): Promise<number>;
|
|
97
|
-
abstract getFundedPsbtFee(psbt: Transaction, feeRate?: number): Promise<number>;
|
|
98
|
-
abstract getReceiveAddress(): string;
|
|
99
|
-
abstract getBalance(): Promise<{
|
|
100
|
-
confirmedBalance: bigint;
|
|
101
|
-
unconfirmedBalance: bigint;
|
|
102
|
-
}>;
|
|
103
|
-
abstract getSpendableBalance(psbt?: Transaction, feeRate?: number): Promise<{
|
|
104
|
-
balance: bigint;
|
|
105
|
-
feeRate: number;
|
|
106
|
-
totalFee: number;
|
|
107
|
-
}>;
|
|
108
|
-
static bitcoinNetworkToObject(network: BitcoinNetwork): BTC_NETWORK;
|
|
109
|
-
static getSpendableBalance(utxoPool: BitcoinWalletUtxoBase[], feeRate: number, psbt?: Transaction, outputAddressType?: CoinselectAddressTypes): {
|
|
110
|
-
balance: bigint;
|
|
111
|
-
totalFee: number;
|
|
112
|
-
};
|
|
113
|
-
}
|
|
1
|
+
import { CoinselectAddressTypes } from "../coinselect2";
|
|
2
|
+
import { BTC_NETWORK } from "@scure/btc-signer/utils";
|
|
3
|
+
import { Transaction } from "@scure/btc-signer";
|
|
4
|
+
import { BitcoinWalletUtxo, BitcoinWalletUtxoBase, IBitcoinWallet } from "./IBitcoinWallet";
|
|
5
|
+
import { BitcoinNetwork, BitcoinRpcWithAddressIndex } from "@atomiqlabs/base";
|
|
6
|
+
/**
|
|
7
|
+
* Identifies the address type of a Bitcoin address
|
|
8
|
+
*
|
|
9
|
+
* @category Bitcoin
|
|
10
|
+
*/
|
|
11
|
+
export declare function identifyAddressType(address: string, network: BTC_NETWORK): CoinselectAddressTypes;
|
|
12
|
+
/**
|
|
13
|
+
* Abstract base class for Bitcoin wallet implementations, using bitcoin rpc with address index
|
|
14
|
+
* as a backend for fetching balances, UTXOs, etc.
|
|
15
|
+
*
|
|
16
|
+
* @category Bitcoin
|
|
17
|
+
*/
|
|
18
|
+
export declare abstract class BitcoinWallet implements IBitcoinWallet {
|
|
19
|
+
protected readonly rpc: BitcoinRpcWithAddressIndex<any>;
|
|
20
|
+
protected readonly network: BTC_NETWORK;
|
|
21
|
+
protected feeMultiplier: number;
|
|
22
|
+
protected feeOverride?: number;
|
|
23
|
+
constructor(mempoolApi: BitcoinRpcWithAddressIndex<any>, network: BitcoinNetwork | BTC_NETWORK, feeMultiplier?: number, feeOverride?: number);
|
|
24
|
+
/**
|
|
25
|
+
* @inheritDoc
|
|
26
|
+
*/
|
|
27
|
+
getFeeRate(): Promise<number>;
|
|
28
|
+
/**
|
|
29
|
+
* Internal helper function for sending a raw transaction through the underlying RPC
|
|
30
|
+
*
|
|
31
|
+
* @param rawHex Serialized bitcoin transaction in hexadecimal format
|
|
32
|
+
* @returns txId Transaction ID of the submitted bitcoin transaction
|
|
33
|
+
*
|
|
34
|
+
* @protected
|
|
35
|
+
*/
|
|
36
|
+
protected _sendTransaction(rawHex: string): Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Internal helper function for fetching the balance of the wallet given a specific bitcoin wallet address
|
|
39
|
+
*
|
|
40
|
+
* @param address
|
|
41
|
+
* @protected
|
|
42
|
+
*/
|
|
43
|
+
protected _getBalance(address: string): Promise<{
|
|
44
|
+
confirmedBalance: bigint;
|
|
45
|
+
unconfirmedBalance: bigint;
|
|
46
|
+
}>;
|
|
47
|
+
/**
|
|
48
|
+
* Internal helper function for fetching the UTXO set of a given wallet address
|
|
49
|
+
*
|
|
50
|
+
* @param sendingAddress
|
|
51
|
+
* @param sendingAddressType
|
|
52
|
+
* @protected
|
|
53
|
+
*/
|
|
54
|
+
protected _getUtxoPool(sendingAddress: string, sendingAddressType: CoinselectAddressTypes): Promise<BitcoinWalletUtxo[]>;
|
|
55
|
+
/**
|
|
56
|
+
*
|
|
57
|
+
* @param sendingAccounts
|
|
58
|
+
* @param recipient
|
|
59
|
+
* @param amount
|
|
60
|
+
* @param feeRate
|
|
61
|
+
* @protected
|
|
62
|
+
*/
|
|
63
|
+
protected _getPsbt(sendingAccounts: {
|
|
64
|
+
pubkey: string;
|
|
65
|
+
address: string;
|
|
66
|
+
addressType: CoinselectAddressTypes;
|
|
67
|
+
}[], recipient: string, amount: number, feeRate?: number): Promise<{
|
|
68
|
+
fee: number;
|
|
69
|
+
psbt?: Transaction;
|
|
70
|
+
inputAddressIndexes?: {
|
|
71
|
+
[address: string]: number[];
|
|
72
|
+
};
|
|
73
|
+
}>;
|
|
74
|
+
protected _fundPsbt(sendingAccounts: {
|
|
75
|
+
pubkey: string;
|
|
76
|
+
address: string;
|
|
77
|
+
addressType: CoinselectAddressTypes;
|
|
78
|
+
}[], psbt: Transaction, _feeRate?: number, utxos?: BitcoinWalletUtxo[], spendFully?: boolean): Promise<{
|
|
79
|
+
fee: number;
|
|
80
|
+
psbt?: Transaction;
|
|
81
|
+
inputAddressIndexes?: {
|
|
82
|
+
[address: string]: number[];
|
|
83
|
+
};
|
|
84
|
+
}>;
|
|
85
|
+
protected _getSpendableBalance(sendingAccounts: {
|
|
86
|
+
address: string;
|
|
87
|
+
addressType: CoinselectAddressTypes;
|
|
88
|
+
}[], psbt?: Transaction, feeRate?: number, outputAddressType?: CoinselectAddressTypes, utxoPool?: BitcoinWalletUtxoBase[]): Promise<{
|
|
89
|
+
balance: bigint;
|
|
90
|
+
feeRate: number;
|
|
91
|
+
totalFee: number;
|
|
92
|
+
}>;
|
|
93
|
+
abstract sendTransaction(address: string, amount: bigint, feeRate?: number): Promise<string>;
|
|
94
|
+
abstract fundPsbt(psbt: Transaction, feeRate?: number, utxos?: BitcoinWalletUtxo[], spendFully?: boolean): Promise<Transaction>;
|
|
95
|
+
abstract signPsbt(psbt: Transaction, signInputs: number[]): Promise<Transaction>;
|
|
96
|
+
abstract getTransactionFee(address: string, amount: bigint, feeRate?: number): Promise<number>;
|
|
97
|
+
abstract getFundedPsbtFee(psbt: Transaction, feeRate?: number): Promise<number>;
|
|
98
|
+
abstract getReceiveAddress(): string;
|
|
99
|
+
abstract getBalance(): Promise<{
|
|
100
|
+
confirmedBalance: bigint;
|
|
101
|
+
unconfirmedBalance: bigint;
|
|
102
|
+
}>;
|
|
103
|
+
abstract getSpendableBalance(psbt?: Transaction, feeRate?: number): Promise<{
|
|
104
|
+
balance: bigint;
|
|
105
|
+
feeRate: number;
|
|
106
|
+
totalFee: number;
|
|
107
|
+
}>;
|
|
108
|
+
static bitcoinNetworkToObject(network: BitcoinNetwork): BTC_NETWORK;
|
|
109
|
+
static getSpendableBalance(utxoPool: BitcoinWalletUtxoBase[], feeRate: number, psbt?: Transaction, outputAddressType?: CoinselectAddressTypes): {
|
|
110
|
+
balance: bigint;
|
|
111
|
+
totalFee: number;
|
|
112
|
+
};
|
|
113
|
+
}
|