@atomiqlabs/sdk 8.9.1 → 8.9.3
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 +770 -770
- package/dist/swapper/Swapper.js +1758 -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 +2570 -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
package/dist/api/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ApiAmount, ApiEndpoint, ApiLNURL, ApiLNURLPay, ApiLNURLWithdraw, ApiToken, InputSchema, InputSchemaField, toApiLNURL, toApiToken } from "./ApiTypes";
|
|
2
|
-
export { SerializedAction } from "./SerializedAction";
|
|
3
|
-
export * from "./SwapperApi";
|
|
4
|
-
export * from "./ApiEndpoints";
|
|
5
|
-
export { parseApiInput } from "./ApiParser";
|
|
1
|
+
export { ApiAmount, ApiEndpoint, ApiLNURL, ApiLNURLPay, ApiLNURLWithdraw, ApiToken, InputSchema, InputSchemaField, toApiLNURL, toApiToken } from "./ApiTypes";
|
|
2
|
+
export { SerializedAction } from "./SerializedAction";
|
|
3
|
+
export * from "./SwapperApi";
|
|
4
|
+
export * from "./ApiEndpoints";
|
|
5
|
+
export { parseApiInput } from "./ApiParser";
|
package/dist/api/index.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.parseApiInput = exports.toApiToken = exports.toApiLNURL = void 0;
|
|
18
|
-
var ApiTypes_1 = require("./ApiTypes");
|
|
19
|
-
Object.defineProperty(exports, "toApiLNURL", { enumerable: true, get: function () { return ApiTypes_1.toApiLNURL; } });
|
|
20
|
-
Object.defineProperty(exports, "toApiToken", { enumerable: true, get: function () { return ApiTypes_1.toApiToken; } });
|
|
21
|
-
__exportStar(require("./SwapperApi"), exports);
|
|
22
|
-
__exportStar(require("./ApiEndpoints"), exports);
|
|
23
|
-
var ApiParser_1 = require("./ApiParser");
|
|
24
|
-
Object.defineProperty(exports, "parseApiInput", { enumerable: true, get: function () { return ApiParser_1.parseApiInput; } });
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.parseApiInput = exports.toApiToken = exports.toApiLNURL = void 0;
|
|
18
|
+
var ApiTypes_1 = require("./ApiTypes");
|
|
19
|
+
Object.defineProperty(exports, "toApiLNURL", { enumerable: true, get: function () { return ApiTypes_1.toApiLNURL; } });
|
|
20
|
+
Object.defineProperty(exports, "toApiToken", { enumerable: true, get: function () { return ApiTypes_1.toApiToken; } });
|
|
21
|
+
__exportStar(require("./SwapperApi"), exports);
|
|
22
|
+
__exportStar(require("./ApiEndpoints"), exports);
|
|
23
|
+
var ApiParser_1 = require("./ApiParser");
|
|
24
|
+
Object.defineProperty(exports, "parseApiInput", { enumerable: true, get: function () { return ApiParser_1.parseApiInput; } });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { CoinselectAddressTypes, CoinselectTxInput, CoinselectTxOutput } from "./utils";
|
|
2
|
-
export declare function accumulative(utxos: CoinselectTxInput[], outputs: CoinselectTxOutput[], feeRate: number, type: CoinselectAddressTypes, requiredInputs?: CoinselectTxInput[]): {
|
|
3
|
-
inputs?: CoinselectTxInput[];
|
|
4
|
-
outputs?: CoinselectTxOutput[];
|
|
5
|
-
effectiveFeeRate?: number;
|
|
6
|
-
fee: number;
|
|
7
|
-
};
|
|
1
|
+
import { CoinselectAddressTypes, CoinselectTxInput, CoinselectTxOutput } from "./utils";
|
|
2
|
+
export declare function accumulative(utxos: CoinselectTxInput[], outputs: CoinselectTxOutput[], feeRate: number, type: CoinselectAddressTypes, requiredInputs?: CoinselectTxInput[]): {
|
|
3
|
+
inputs?: CoinselectTxInput[];
|
|
4
|
+
outputs?: CoinselectTxOutput[];
|
|
5
|
+
effectiveFeeRate?: number;
|
|
6
|
+
fee: number;
|
|
7
|
+
};
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.accumulative = void 0;
|
|
4
|
-
const utils_1 = require("./utils");
|
|
5
|
-
const Logger_1 = require("../../utils/Logger");
|
|
6
|
-
const logger = (0, Logger_1.getLogger)("CoinSelect: ");
|
|
7
|
-
// add inputs until we reach or surpass the target value (or deplete)
|
|
8
|
-
// worst-case: O(n)
|
|
9
|
-
function accumulative(utxos, outputs, feeRate, type, requiredInputs) {
|
|
10
|
-
if (!isFinite(utils_1.utils.numberOrNaN(feeRate)))
|
|
11
|
-
throw new Error("Invalid feeRate passed!");
|
|
12
|
-
const inputs = requiredInputs == null ? [] : [...requiredInputs];
|
|
13
|
-
let bytesAccum = utils_1.utils.transactionBytes(inputs, outputs, type);
|
|
14
|
-
let fee = feeRate * bytesAccum;
|
|
15
|
-
let cpfpAddFee = 0;
|
|
16
|
-
let inAccum = utils_1.utils.sumOrNaN(inputs);
|
|
17
|
-
const outAccum = utils_1.utils.sumOrNaN(outputs);
|
|
18
|
-
logger.debug("accumulative(): total output: ", outAccum);
|
|
19
|
-
for (let i = 0; i < utxos.length; ++i) {
|
|
20
|
-
const utxo = utxos[i];
|
|
21
|
-
const utxoBytes = utils_1.utils.inputBytes(utxo);
|
|
22
|
-
const utxoFee = feeRate * utxoBytes;
|
|
23
|
-
const utxoValue = utils_1.utils.uintOrNaN(utxo.value);
|
|
24
|
-
let cpfpFee = 0;
|
|
25
|
-
if (utxo.cpfp != null && utxo.cpfp.txEffectiveFeeRate < feeRate)
|
|
26
|
-
cpfpFee = Math.ceil(utxo.cpfp.txVsize * (feeRate - utxo.cpfp.txEffectiveFeeRate));
|
|
27
|
-
// skip detrimental input
|
|
28
|
-
if (utxoFee + cpfpFee > utxo.value) {
|
|
29
|
-
logger.debug("accumulative(" + i + "): Skipping detrimental output, cpfpFee: " + cpfpFee + " utxoFee: " + utxoFee + " value: " + utxo.value);
|
|
30
|
-
if (i === utxos.length - 1)
|
|
31
|
-
return { fee: (feeRate * (bytesAccum + utxoBytes)) + cpfpAddFee + cpfpFee };
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
bytesAccum += utxoBytes;
|
|
35
|
-
inAccum += utxoValue;
|
|
36
|
-
cpfpAddFee += cpfpFee;
|
|
37
|
-
inputs.push(utxo);
|
|
38
|
-
fee = Math.ceil((feeRate * bytesAccum) + cpfpAddFee);
|
|
39
|
-
logger.debug("accumulative(" + i + "): total fee: ", fee);
|
|
40
|
-
logger.debug("accumulative(" + i + "): input value: ", inAccum);
|
|
41
|
-
logger.debug("accumulative(" + i + "): cpfpAddFee: ", cpfpAddFee);
|
|
42
|
-
// go again?
|
|
43
|
-
if (inAccum < outAccum + fee)
|
|
44
|
-
continue;
|
|
45
|
-
logger.debug("accumulative(" + i + "): Finalizing transaction, inputs: ", inputs);
|
|
46
|
-
logger.debug("accumulative(" + i + "): Finalizing transaction, outputs: ", outputs);
|
|
47
|
-
logger.debug("accumulative(" + i + "): Finalizing transaction, feeRate: ", feeRate);
|
|
48
|
-
return utils_1.utils.finalize(inputs, outputs, feeRate, type, cpfpAddFee);
|
|
49
|
-
}
|
|
50
|
-
return { fee };
|
|
51
|
-
}
|
|
52
|
-
exports.accumulative = accumulative;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.accumulative = void 0;
|
|
4
|
+
const utils_1 = require("./utils");
|
|
5
|
+
const Logger_1 = require("../../utils/Logger");
|
|
6
|
+
const logger = (0, Logger_1.getLogger)("CoinSelect: ");
|
|
7
|
+
// add inputs until we reach or surpass the target value (or deplete)
|
|
8
|
+
// worst-case: O(n)
|
|
9
|
+
function accumulative(utxos, outputs, feeRate, type, requiredInputs) {
|
|
10
|
+
if (!isFinite(utils_1.utils.numberOrNaN(feeRate)))
|
|
11
|
+
throw new Error("Invalid feeRate passed!");
|
|
12
|
+
const inputs = requiredInputs == null ? [] : [...requiredInputs];
|
|
13
|
+
let bytesAccum = utils_1.utils.transactionBytes(inputs, outputs, type);
|
|
14
|
+
let fee = feeRate * bytesAccum;
|
|
15
|
+
let cpfpAddFee = 0;
|
|
16
|
+
let inAccum = utils_1.utils.sumOrNaN(inputs);
|
|
17
|
+
const outAccum = utils_1.utils.sumOrNaN(outputs);
|
|
18
|
+
logger.debug("accumulative(): total output: ", outAccum);
|
|
19
|
+
for (let i = 0; i < utxos.length; ++i) {
|
|
20
|
+
const utxo = utxos[i];
|
|
21
|
+
const utxoBytes = utils_1.utils.inputBytes(utxo);
|
|
22
|
+
const utxoFee = feeRate * utxoBytes;
|
|
23
|
+
const utxoValue = utils_1.utils.uintOrNaN(utxo.value);
|
|
24
|
+
let cpfpFee = 0;
|
|
25
|
+
if (utxo.cpfp != null && utxo.cpfp.txEffectiveFeeRate < feeRate)
|
|
26
|
+
cpfpFee = Math.ceil(utxo.cpfp.txVsize * (feeRate - utxo.cpfp.txEffectiveFeeRate));
|
|
27
|
+
// skip detrimental input
|
|
28
|
+
if (utxoFee + cpfpFee > utxo.value) {
|
|
29
|
+
logger.debug("accumulative(" + i + "): Skipping detrimental output, cpfpFee: " + cpfpFee + " utxoFee: " + utxoFee + " value: " + utxo.value);
|
|
30
|
+
if (i === utxos.length - 1)
|
|
31
|
+
return { fee: (feeRate * (bytesAccum + utxoBytes)) + cpfpAddFee + cpfpFee };
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
bytesAccum += utxoBytes;
|
|
35
|
+
inAccum += utxoValue;
|
|
36
|
+
cpfpAddFee += cpfpFee;
|
|
37
|
+
inputs.push(utxo);
|
|
38
|
+
fee = Math.ceil((feeRate * bytesAccum) + cpfpAddFee);
|
|
39
|
+
logger.debug("accumulative(" + i + "): total fee: ", fee);
|
|
40
|
+
logger.debug("accumulative(" + i + "): input value: ", inAccum);
|
|
41
|
+
logger.debug("accumulative(" + i + "): cpfpAddFee: ", cpfpAddFee);
|
|
42
|
+
// go again?
|
|
43
|
+
if (inAccum < outAccum + fee)
|
|
44
|
+
continue;
|
|
45
|
+
logger.debug("accumulative(" + i + "): Finalizing transaction, inputs: ", inputs);
|
|
46
|
+
logger.debug("accumulative(" + i + "): Finalizing transaction, outputs: ", outputs);
|
|
47
|
+
logger.debug("accumulative(" + i + "): Finalizing transaction, feeRate: ", feeRate);
|
|
48
|
+
return utils_1.utils.finalize(inputs, outputs, feeRate, type, cpfpAddFee);
|
|
49
|
+
}
|
|
50
|
+
return { fee };
|
|
51
|
+
}
|
|
52
|
+
exports.accumulative = accumulative;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { CoinselectAddressTypes, CoinselectTxInput, CoinselectTxOutput } from "./utils";
|
|
2
|
-
export declare function blackjack(utxos: CoinselectTxInput[], outputs: CoinselectTxOutput[], feeRate: number, type: CoinselectAddressTypes, requiredInputs?: CoinselectTxInput[]): {
|
|
3
|
-
inputs?: CoinselectTxInput[];
|
|
4
|
-
outputs?: CoinselectTxOutput[];
|
|
5
|
-
effectiveFeeRate?: number;
|
|
6
|
-
fee: number;
|
|
7
|
-
};
|
|
1
|
+
import { CoinselectAddressTypes, CoinselectTxInput, CoinselectTxOutput } from "./utils";
|
|
2
|
+
export declare function blackjack(utxos: CoinselectTxInput[], outputs: CoinselectTxOutput[], feeRate: number, type: CoinselectAddressTypes, requiredInputs?: CoinselectTxInput[]): {
|
|
3
|
+
inputs?: CoinselectTxInput[];
|
|
4
|
+
outputs?: CoinselectTxOutput[];
|
|
5
|
+
effectiveFeeRate?: number;
|
|
6
|
+
fee: number;
|
|
7
|
+
};
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.blackjack = void 0;
|
|
4
|
-
const utils_1 = require("./utils");
|
|
5
|
-
// add inputs until we reach or surpass the target value (or deplete)
|
|
6
|
-
// worst-case: O(n)
|
|
7
|
-
function blackjack(utxos, outputs, feeRate, type, requiredInputs) {
|
|
8
|
-
if (!isFinite(utils_1.utils.numberOrNaN(feeRate)))
|
|
9
|
-
throw new Error("Invalid feeRate passed!");
|
|
10
|
-
const inputs = requiredInputs == null ? [] : [...requiredInputs];
|
|
11
|
-
let bytesAccum = utils_1.utils.transactionBytes(inputs, outputs, type);
|
|
12
|
-
let inAccum = utils_1.utils.sumOrNaN(inputs);
|
|
13
|
-
let cpfpAddFee = 0;
|
|
14
|
-
const outAccum = utils_1.utils.sumOrNaN(outputs);
|
|
15
|
-
const threshold = utils_1.utils.dustThreshold({ type });
|
|
16
|
-
for (let i = 0; i < utxos.length; ++i) {
|
|
17
|
-
const input = utxos[i];
|
|
18
|
-
const inputBytes = utils_1.utils.inputBytes(input);
|
|
19
|
-
let cpfpFee = 0;
|
|
20
|
-
if (input.cpfp != null && input.cpfp.txEffectiveFeeRate < feeRate)
|
|
21
|
-
cpfpFee = Math.ceil(input.cpfp.txVsize * (feeRate - input.cpfp.txEffectiveFeeRate));
|
|
22
|
-
const fee = Math.ceil((feeRate * (bytesAccum + inputBytes)) + cpfpAddFee + cpfpFee);
|
|
23
|
-
const inputValue = utils_1.utils.uintOrNaN(input.value);
|
|
24
|
-
// would it waste value?
|
|
25
|
-
if ((inAccum + inputValue) > (outAccum + fee + threshold))
|
|
26
|
-
continue;
|
|
27
|
-
bytesAccum += inputBytes;
|
|
28
|
-
inAccum += inputValue;
|
|
29
|
-
cpfpAddFee += cpfpFee;
|
|
30
|
-
inputs.push(input);
|
|
31
|
-
// go again?
|
|
32
|
-
if (inAccum < outAccum + fee)
|
|
33
|
-
continue;
|
|
34
|
-
return utils_1.utils.finalize(inputs, outputs, feeRate, type, cpfpAddFee);
|
|
35
|
-
}
|
|
36
|
-
return { fee: (feeRate * bytesAccum) + cpfpAddFee };
|
|
37
|
-
}
|
|
38
|
-
exports.blackjack = blackjack;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.blackjack = void 0;
|
|
4
|
+
const utils_1 = require("./utils");
|
|
5
|
+
// add inputs until we reach or surpass the target value (or deplete)
|
|
6
|
+
// worst-case: O(n)
|
|
7
|
+
function blackjack(utxos, outputs, feeRate, type, requiredInputs) {
|
|
8
|
+
if (!isFinite(utils_1.utils.numberOrNaN(feeRate)))
|
|
9
|
+
throw new Error("Invalid feeRate passed!");
|
|
10
|
+
const inputs = requiredInputs == null ? [] : [...requiredInputs];
|
|
11
|
+
let bytesAccum = utils_1.utils.transactionBytes(inputs, outputs, type);
|
|
12
|
+
let inAccum = utils_1.utils.sumOrNaN(inputs);
|
|
13
|
+
let cpfpAddFee = 0;
|
|
14
|
+
const outAccum = utils_1.utils.sumOrNaN(outputs);
|
|
15
|
+
const threshold = utils_1.utils.dustThreshold({ type });
|
|
16
|
+
for (let i = 0; i < utxos.length; ++i) {
|
|
17
|
+
const input = utxos[i];
|
|
18
|
+
const inputBytes = utils_1.utils.inputBytes(input);
|
|
19
|
+
let cpfpFee = 0;
|
|
20
|
+
if (input.cpfp != null && input.cpfp.txEffectiveFeeRate < feeRate)
|
|
21
|
+
cpfpFee = Math.ceil(input.cpfp.txVsize * (feeRate - input.cpfp.txEffectiveFeeRate));
|
|
22
|
+
const fee = Math.ceil((feeRate * (bytesAccum + inputBytes)) + cpfpAddFee + cpfpFee);
|
|
23
|
+
const inputValue = utils_1.utils.uintOrNaN(input.value);
|
|
24
|
+
// would it waste value?
|
|
25
|
+
if ((inAccum + inputValue) > (outAccum + fee + threshold))
|
|
26
|
+
continue;
|
|
27
|
+
bytesAccum += inputBytes;
|
|
28
|
+
inAccum += inputValue;
|
|
29
|
+
cpfpAddFee += cpfpFee;
|
|
30
|
+
inputs.push(input);
|
|
31
|
+
// go again?
|
|
32
|
+
if (inAccum < outAccum + fee)
|
|
33
|
+
continue;
|
|
34
|
+
return utils_1.utils.finalize(inputs, outputs, feeRate, type, cpfpAddFee);
|
|
35
|
+
}
|
|
36
|
+
return { fee: (feeRate * bytesAccum) + cpfpAddFee };
|
|
37
|
+
}
|
|
38
|
+
exports.blackjack = blackjack;
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
import { CoinselectAddressTypes, CoinselectTxInput, CoinselectTxOutput, DUST_THRESHOLDS } from "./utils";
|
|
4
|
-
export { CoinselectAddressTypes, CoinselectTxInput, CoinselectTxOutput, DUST_THRESHOLDS };
|
|
5
|
-
export declare function coinSelect(utxos: CoinselectTxInput[], outputs: CoinselectTxOutput[], feeRate: number, type: CoinselectAddressTypes, requiredInputs?: CoinselectTxInput[]): {
|
|
6
|
-
inputs?: CoinselectTxInput[];
|
|
7
|
-
outputs?: CoinselectTxOutput[];
|
|
8
|
-
effectiveFeeRate?: number;
|
|
9
|
-
fee: number;
|
|
10
|
-
};
|
|
11
|
-
export declare function maxSendable(utxos: Omit<CoinselectTxInput, "txId" | "address" | "vout" | "outputScript">[], output: {
|
|
12
|
-
script: Buffer;
|
|
13
|
-
type: CoinselectAddressTypes;
|
|
14
|
-
}, feeRate: number, requiredInputs?: Omit<CoinselectTxInput, "txId" | "address" | "vout" | "outputScript">[], additionalOutputs?: {
|
|
15
|
-
script: Buffer;
|
|
16
|
-
value: number;
|
|
17
|
-
}[]): {
|
|
18
|
-
value: number;
|
|
19
|
-
fee: number;
|
|
20
|
-
};
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { CoinselectAddressTypes, CoinselectTxInput, CoinselectTxOutput, DUST_THRESHOLDS } from "./utils";
|
|
4
|
+
export { CoinselectAddressTypes, CoinselectTxInput, CoinselectTxOutput, DUST_THRESHOLDS };
|
|
5
|
+
export declare function coinSelect(utxos: CoinselectTxInput[], outputs: CoinselectTxOutput[], feeRate: number, type: CoinselectAddressTypes, requiredInputs?: CoinselectTxInput[]): {
|
|
6
|
+
inputs?: CoinselectTxInput[];
|
|
7
|
+
outputs?: CoinselectTxOutput[];
|
|
8
|
+
effectiveFeeRate?: number;
|
|
9
|
+
fee: number;
|
|
10
|
+
};
|
|
11
|
+
export declare function maxSendable(utxos: Omit<CoinselectTxInput, "txId" | "address" | "vout" | "outputScript">[], output: {
|
|
12
|
+
script: Buffer;
|
|
13
|
+
type: CoinselectAddressTypes;
|
|
14
|
+
}, feeRate: number, requiredInputs?: Omit<CoinselectTxInput, "txId" | "address" | "vout" | "outputScript">[], additionalOutputs?: {
|
|
15
|
+
script: Buffer;
|
|
16
|
+
value: number;
|
|
17
|
+
}[]): {
|
|
18
|
+
value: number;
|
|
19
|
+
fee: number;
|
|
20
|
+
};
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.maxSendable = exports.coinSelect = exports.DUST_THRESHOLDS = void 0;
|
|
4
|
-
const accumulative_1 = require("./accumulative");
|
|
5
|
-
const blackjack_1 = require("./blackjack");
|
|
6
|
-
const utils_1 = require("./utils");
|
|
7
|
-
Object.defineProperty(exports, "DUST_THRESHOLDS", { enumerable: true, get: function () { return utils_1.DUST_THRESHOLDS; } });
|
|
8
|
-
// order by descending value, minus the inputs approximate fee
|
|
9
|
-
function utxoScore(x, feeRate) {
|
|
10
|
-
let valueAfterFee = x.value - (feeRate * utils_1.utils.inputBytes(x));
|
|
11
|
-
if (x.cpfp != null && x.cpfp.txEffectiveFeeRate < feeRate)
|
|
12
|
-
valueAfterFee -= x.cpfp.txVsize * (feeRate - x.cpfp.txEffectiveFeeRate);
|
|
13
|
-
return valueAfterFee;
|
|
14
|
-
}
|
|
15
|
-
function coinSelect(utxos, outputs, feeRate, type, requiredInputs) {
|
|
16
|
-
// order by descending value, minus the inputs approximate fee
|
|
17
|
-
utxos = utxos.sort((a, b) => {
|
|
18
|
-
// if(a.cpfp!=null && b.cpfp==null) return 1;
|
|
19
|
-
// if(a.cpfp==null && b.cpfp!=null) return -1;
|
|
20
|
-
return utxoScore(b, feeRate) - utxoScore(a, feeRate);
|
|
21
|
-
});
|
|
22
|
-
// attempt to use the blackjack strategy first (no change output)
|
|
23
|
-
const base = (0, blackjack_1.blackjack)(utxos, outputs, feeRate, type, requiredInputs);
|
|
24
|
-
if (base.inputs)
|
|
25
|
-
return base;
|
|
26
|
-
// else, try the accumulative strategy
|
|
27
|
-
return (0, accumulative_1.accumulative)(utxos, outputs, feeRate, type, requiredInputs);
|
|
28
|
-
}
|
|
29
|
-
exports.coinSelect = coinSelect;
|
|
30
|
-
function maxSendable(utxos, output, feeRate, requiredInputs, additionalOutputs) {
|
|
31
|
-
if (!isFinite(utils_1.utils.numberOrNaN(feeRate)))
|
|
32
|
-
throw new Error("Invalid feeRate passed!");
|
|
33
|
-
const outputs = additionalOutputs ?? [];
|
|
34
|
-
const inputs = requiredInputs ?? [];
|
|
35
|
-
let bytesAccum = utils_1.utils.transactionBytes(inputs, outputs.concat([output]));
|
|
36
|
-
let cpfpAddFee = 0;
|
|
37
|
-
let inAccum = utils_1.utils.sumOrNaN(inputs);
|
|
38
|
-
let outAccum = utils_1.utils.sumOrNaN(outputs);
|
|
39
|
-
for (let i = 0; i < utxos.length; ++i) {
|
|
40
|
-
const utxo = utxos[i];
|
|
41
|
-
const utxoBytes = utils_1.utils.inputBytes(utxo);
|
|
42
|
-
const utxoFee = feeRate * utxoBytes;
|
|
43
|
-
let cpfpFee = 0;
|
|
44
|
-
if (utxo.cpfp != null && utxo.cpfp.txEffectiveFeeRate < feeRate)
|
|
45
|
-
cpfpFee = Math.ceil(utxo.cpfp.txVsize * (feeRate - utxo.cpfp.txEffectiveFeeRate));
|
|
46
|
-
const utxoValue = utils_1.utils.uintOrNaN(utxo.value);
|
|
47
|
-
// skip detrimental input
|
|
48
|
-
if (utxoFee + cpfpFee > utxo.value) {
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
bytesAccum += utxoBytes;
|
|
52
|
-
inAccum += utxoValue;
|
|
53
|
-
cpfpAddFee += cpfpFee;
|
|
54
|
-
inputs.push(utxo);
|
|
55
|
-
}
|
|
56
|
-
const fee = (feeRate * bytesAccum) + cpfpAddFee;
|
|
57
|
-
const outputValue = inAccum - fee - outAccum;
|
|
58
|
-
const dustThreshold = utils_1.DUST_THRESHOLDS[output.type];
|
|
59
|
-
if (outputValue < dustThreshold)
|
|
60
|
-
return {
|
|
61
|
-
fee,
|
|
62
|
-
value: 0
|
|
63
|
-
};
|
|
64
|
-
return {
|
|
65
|
-
fee,
|
|
66
|
-
value: outputValue
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
exports.maxSendable = maxSendable;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.maxSendable = exports.coinSelect = exports.DUST_THRESHOLDS = void 0;
|
|
4
|
+
const accumulative_1 = require("./accumulative");
|
|
5
|
+
const blackjack_1 = require("./blackjack");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
Object.defineProperty(exports, "DUST_THRESHOLDS", { enumerable: true, get: function () { return utils_1.DUST_THRESHOLDS; } });
|
|
8
|
+
// order by descending value, minus the inputs approximate fee
|
|
9
|
+
function utxoScore(x, feeRate) {
|
|
10
|
+
let valueAfterFee = x.value - (feeRate * utils_1.utils.inputBytes(x));
|
|
11
|
+
if (x.cpfp != null && x.cpfp.txEffectiveFeeRate < feeRate)
|
|
12
|
+
valueAfterFee -= x.cpfp.txVsize * (feeRate - x.cpfp.txEffectiveFeeRate);
|
|
13
|
+
return valueAfterFee;
|
|
14
|
+
}
|
|
15
|
+
function coinSelect(utxos, outputs, feeRate, type, requiredInputs) {
|
|
16
|
+
// order by descending value, minus the inputs approximate fee
|
|
17
|
+
utxos = utxos.sort((a, b) => {
|
|
18
|
+
// if(a.cpfp!=null && b.cpfp==null) return 1;
|
|
19
|
+
// if(a.cpfp==null && b.cpfp!=null) return -1;
|
|
20
|
+
return utxoScore(b, feeRate) - utxoScore(a, feeRate);
|
|
21
|
+
});
|
|
22
|
+
// attempt to use the blackjack strategy first (no change output)
|
|
23
|
+
const base = (0, blackjack_1.blackjack)(utxos, outputs, feeRate, type, requiredInputs);
|
|
24
|
+
if (base.inputs)
|
|
25
|
+
return base;
|
|
26
|
+
// else, try the accumulative strategy
|
|
27
|
+
return (0, accumulative_1.accumulative)(utxos, outputs, feeRate, type, requiredInputs);
|
|
28
|
+
}
|
|
29
|
+
exports.coinSelect = coinSelect;
|
|
30
|
+
function maxSendable(utxos, output, feeRate, requiredInputs, additionalOutputs) {
|
|
31
|
+
if (!isFinite(utils_1.utils.numberOrNaN(feeRate)))
|
|
32
|
+
throw new Error("Invalid feeRate passed!");
|
|
33
|
+
const outputs = additionalOutputs ?? [];
|
|
34
|
+
const inputs = requiredInputs ?? [];
|
|
35
|
+
let bytesAccum = utils_1.utils.transactionBytes(inputs, outputs.concat([output]));
|
|
36
|
+
let cpfpAddFee = 0;
|
|
37
|
+
let inAccum = utils_1.utils.sumOrNaN(inputs);
|
|
38
|
+
let outAccum = utils_1.utils.sumOrNaN(outputs);
|
|
39
|
+
for (let i = 0; i < utxos.length; ++i) {
|
|
40
|
+
const utxo = utxos[i];
|
|
41
|
+
const utxoBytes = utils_1.utils.inputBytes(utxo);
|
|
42
|
+
const utxoFee = feeRate * utxoBytes;
|
|
43
|
+
let cpfpFee = 0;
|
|
44
|
+
if (utxo.cpfp != null && utxo.cpfp.txEffectiveFeeRate < feeRate)
|
|
45
|
+
cpfpFee = Math.ceil(utxo.cpfp.txVsize * (feeRate - utxo.cpfp.txEffectiveFeeRate));
|
|
46
|
+
const utxoValue = utils_1.utils.uintOrNaN(utxo.value);
|
|
47
|
+
// skip detrimental input
|
|
48
|
+
if (utxoFee + cpfpFee > utxo.value) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
bytesAccum += utxoBytes;
|
|
52
|
+
inAccum += utxoValue;
|
|
53
|
+
cpfpAddFee += cpfpFee;
|
|
54
|
+
inputs.push(utxo);
|
|
55
|
+
}
|
|
56
|
+
const fee = (feeRate * bytesAccum) + cpfpAddFee;
|
|
57
|
+
const outputValue = inAccum - fee - outAccum;
|
|
58
|
+
const dustThreshold = utils_1.DUST_THRESHOLDS[output.type];
|
|
59
|
+
if (outputValue < dustThreshold)
|
|
60
|
+
return {
|
|
61
|
+
fee,
|
|
62
|
+
value: 0
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
fee,
|
|
66
|
+
value: outputValue
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
exports.maxSendable = maxSendable;
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
/**
|
|
4
|
-
* Defines a type of the address used by the wallet, for proper coinselection (as coinselection
|
|
5
|
-
* depends on estimating the cost for spending the input + the cost of adding a change output)
|
|
6
|
-
*
|
|
7
|
-
* @category Bitcoin
|
|
8
|
-
*/
|
|
9
|
-
export type CoinselectAddressTypes = "p2sh-p2wpkh" | "p2wpkh" | "p2wsh" | "p2tr" | "p2pkh";
|
|
10
|
-
export type CoinselectTxInput = {
|
|
11
|
-
script?: Buffer;
|
|
12
|
-
txId: string;
|
|
13
|
-
vout: number;
|
|
14
|
-
type?: CoinselectAddressTypes;
|
|
15
|
-
value: number;
|
|
16
|
-
outputScript?: Buffer;
|
|
17
|
-
address?: string;
|
|
18
|
-
cpfp?: {
|
|
19
|
-
txVsize: number;
|
|
20
|
-
txEffectiveFeeRate: number;
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
export type CoinselectTxOutput = {
|
|
24
|
-
script?: Buffer;
|
|
25
|
-
address?: string;
|
|
26
|
-
type?: CoinselectAddressTypes;
|
|
27
|
-
value: number;
|
|
28
|
-
};
|
|
29
|
-
declare function inputBytes(input: {
|
|
30
|
-
script?: Buffer;
|
|
31
|
-
type?: CoinselectAddressTypes;
|
|
32
|
-
}): number;
|
|
33
|
-
declare function outputBytes(output: {
|
|
34
|
-
script?: Buffer;
|
|
35
|
-
type?: CoinselectAddressTypes;
|
|
36
|
-
}): number;
|
|
37
|
-
export declare const DUST_THRESHOLDS: {
|
|
38
|
-
"p2sh-p2wpkh": number;
|
|
39
|
-
p2wpkh: number;
|
|
40
|
-
p2tr: number;
|
|
41
|
-
p2pkh: number;
|
|
42
|
-
p2wsh: number;
|
|
43
|
-
};
|
|
44
|
-
declare function dustThreshold(output: {
|
|
45
|
-
script?: Buffer;
|
|
46
|
-
type: CoinselectAddressTypes;
|
|
47
|
-
}): number;
|
|
48
|
-
declare function transactionBytes(inputs: {
|
|
49
|
-
script?: Buffer;
|
|
50
|
-
type?: CoinselectAddressTypes;
|
|
51
|
-
}[], outputs: {
|
|
52
|
-
script?: Buffer;
|
|
53
|
-
type?: CoinselectAddressTypes;
|
|
54
|
-
}[], changeType?: CoinselectAddressTypes): number;
|
|
55
|
-
declare function numberOrNaN(v: number): number;
|
|
56
|
-
declare function uintOrNaN(v: number): number;
|
|
57
|
-
declare function sumForgiving(range: {
|
|
58
|
-
value: number;
|
|
59
|
-
}[]): number;
|
|
60
|
-
declare function sumOrNaN(range: {
|
|
61
|
-
value: number;
|
|
62
|
-
}[]): number;
|
|
63
|
-
declare function finalize<T extends Omit<CoinselectTxInput, "txId" | "address" | "vout" | "outputScript">>(inputs: T[], outputs: CoinselectTxOutput[], feeRate: number, changeType: CoinselectAddressTypes | null, cpfpAddFee?: number): {
|
|
64
|
-
inputs?: T[];
|
|
65
|
-
outputs?: CoinselectTxOutput[];
|
|
66
|
-
effectiveFeeRate?: number;
|
|
67
|
-
fee: number;
|
|
68
|
-
};
|
|
69
|
-
declare function isDetrimentalInput(feeRate: number, utxo: Omit<CoinselectTxInput, "txId" | "address" | "vout" | "outputScript">): boolean;
|
|
70
|
-
export declare const utils: {
|
|
71
|
-
dustThreshold: typeof dustThreshold;
|
|
72
|
-
finalize: typeof finalize;
|
|
73
|
-
inputBytes: typeof inputBytes;
|
|
74
|
-
outputBytes: typeof outputBytes;
|
|
75
|
-
sumOrNaN: typeof sumOrNaN;
|
|
76
|
-
sumForgiving: typeof sumForgiving;
|
|
77
|
-
transactionBytes: typeof transactionBytes;
|
|
78
|
-
uintOrNaN: typeof uintOrNaN;
|
|
79
|
-
numberOrNaN: typeof numberOrNaN;
|
|
80
|
-
isDetrimentalInput: typeof isDetrimentalInput;
|
|
81
|
-
};
|
|
82
|
-
export {};
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
/**
|
|
4
|
+
* Defines a type of the address used by the wallet, for proper coinselection (as coinselection
|
|
5
|
+
* depends on estimating the cost for spending the input + the cost of adding a change output)
|
|
6
|
+
*
|
|
7
|
+
* @category Bitcoin
|
|
8
|
+
*/
|
|
9
|
+
export type CoinselectAddressTypes = "p2sh-p2wpkh" | "p2wpkh" | "p2wsh" | "p2tr" | "p2pkh";
|
|
10
|
+
export type CoinselectTxInput = {
|
|
11
|
+
script?: Buffer;
|
|
12
|
+
txId: string;
|
|
13
|
+
vout: number;
|
|
14
|
+
type?: CoinselectAddressTypes;
|
|
15
|
+
value: number;
|
|
16
|
+
outputScript?: Buffer;
|
|
17
|
+
address?: string;
|
|
18
|
+
cpfp?: {
|
|
19
|
+
txVsize: number;
|
|
20
|
+
txEffectiveFeeRate: number;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export type CoinselectTxOutput = {
|
|
24
|
+
script?: Buffer;
|
|
25
|
+
address?: string;
|
|
26
|
+
type?: CoinselectAddressTypes;
|
|
27
|
+
value: number;
|
|
28
|
+
};
|
|
29
|
+
declare function inputBytes(input: {
|
|
30
|
+
script?: Buffer;
|
|
31
|
+
type?: CoinselectAddressTypes;
|
|
32
|
+
}): number;
|
|
33
|
+
declare function outputBytes(output: {
|
|
34
|
+
script?: Buffer;
|
|
35
|
+
type?: CoinselectAddressTypes;
|
|
36
|
+
}): number;
|
|
37
|
+
export declare const DUST_THRESHOLDS: {
|
|
38
|
+
"p2sh-p2wpkh": number;
|
|
39
|
+
p2wpkh: number;
|
|
40
|
+
p2tr: number;
|
|
41
|
+
p2pkh: number;
|
|
42
|
+
p2wsh: number;
|
|
43
|
+
};
|
|
44
|
+
declare function dustThreshold(output: {
|
|
45
|
+
script?: Buffer;
|
|
46
|
+
type: CoinselectAddressTypes;
|
|
47
|
+
}): number;
|
|
48
|
+
declare function transactionBytes(inputs: {
|
|
49
|
+
script?: Buffer;
|
|
50
|
+
type?: CoinselectAddressTypes;
|
|
51
|
+
}[], outputs: {
|
|
52
|
+
script?: Buffer;
|
|
53
|
+
type?: CoinselectAddressTypes;
|
|
54
|
+
}[], changeType?: CoinselectAddressTypes): number;
|
|
55
|
+
declare function numberOrNaN(v: number): number;
|
|
56
|
+
declare function uintOrNaN(v: number): number;
|
|
57
|
+
declare function sumForgiving(range: {
|
|
58
|
+
value: number;
|
|
59
|
+
}[]): number;
|
|
60
|
+
declare function sumOrNaN(range: {
|
|
61
|
+
value: number;
|
|
62
|
+
}[]): number;
|
|
63
|
+
declare function finalize<T extends Omit<CoinselectTxInput, "txId" | "address" | "vout" | "outputScript">>(inputs: T[], outputs: CoinselectTxOutput[], feeRate: number, changeType: CoinselectAddressTypes | null, cpfpAddFee?: number): {
|
|
64
|
+
inputs?: T[];
|
|
65
|
+
outputs?: CoinselectTxOutput[];
|
|
66
|
+
effectiveFeeRate?: number;
|
|
67
|
+
fee: number;
|
|
68
|
+
};
|
|
69
|
+
declare function isDetrimentalInput(feeRate: number, utxo: Omit<CoinselectTxInput, "txId" | "address" | "vout" | "outputScript">): boolean;
|
|
70
|
+
export declare const utils: {
|
|
71
|
+
dustThreshold: typeof dustThreshold;
|
|
72
|
+
finalize: typeof finalize;
|
|
73
|
+
inputBytes: typeof inputBytes;
|
|
74
|
+
outputBytes: typeof outputBytes;
|
|
75
|
+
sumOrNaN: typeof sumOrNaN;
|
|
76
|
+
sumForgiving: typeof sumForgiving;
|
|
77
|
+
transactionBytes: typeof transactionBytes;
|
|
78
|
+
uintOrNaN: typeof uintOrNaN;
|
|
79
|
+
numberOrNaN: typeof numberOrNaN;
|
|
80
|
+
isDetrimentalInput: typeof isDetrimentalInput;
|
|
81
|
+
};
|
|
82
|
+
export {};
|