@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,71 +1,71 @@
|
|
|
1
|
-
import {timeoutSignal} from "./TimeoutUtils";
|
|
2
|
-
|
|
3
|
-
const headerUrls = ["https://api.atomiq.exchange/"];
|
|
4
|
-
|
|
5
|
-
type TimeReturnType = {delta: number, timestamp: number};
|
|
6
|
-
|
|
7
|
-
async function getHeaderTimestamp(url: string): Promise<TimeReturnType> {
|
|
8
|
-
const timeStart = performance.now();
|
|
9
|
-
const resp = await fetch(url, {method: "HEAD", signal: timeoutSignal(3000)});
|
|
10
|
-
const timeDelta = performance.now() - timeStart;
|
|
11
|
-
const dateHeaderValue = resp.headers.get("Date");
|
|
12
|
-
if(dateHeaderValue==null) throw new Error("Date header not returned!");
|
|
13
|
-
return {delta: timeDelta, timestamp: new Date(dateHeaderValue).getTime()};
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async function getBinanceTimestamp(): Promise<TimeReturnType> {
|
|
17
|
-
const timeStart = performance.now();
|
|
18
|
-
const resp = await fetch("https://api.binance.com/api/v3/time", {signal: timeoutSignal(3000)});
|
|
19
|
-
const timeDelta = performance.now() - timeStart;
|
|
20
|
-
const obj: {serverTime: number} = await resp.json();
|
|
21
|
-
if(obj==null || obj.serverTime==null) throw new Error("Timestamp not returned!");
|
|
22
|
-
return {delta: timeDelta, timestamp: Math.floor(obj.serverTime)};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async function getOKXTimestamp(): Promise<TimeReturnType> {
|
|
26
|
-
const timeStart = performance.now();
|
|
27
|
-
const resp = await fetch("https://www.okx.com/api/v5/public/time", {signal: timeoutSignal(3000)});
|
|
28
|
-
const timeDelta = performance.now() - timeStart;
|
|
29
|
-
const obj: {code: number, msg: string, data: [{ts: number}]} = await resp.json();
|
|
30
|
-
if(obj==null || obj.data==null || obj.data[0]==null || obj.data[0].ts==null) throw new Error("Timestamp not returned!");
|
|
31
|
-
return {delta: timeDelta, timestamp: Math.floor(obj.data[0].ts)};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
async function getAisenseApiTimestamp(): Promise<TimeReturnType> {
|
|
35
|
-
const timeStart = performance.now();
|
|
36
|
-
const resp = await fetch("https://aisenseapi.com/services/v1/timestamp", {signal: timeoutSignal(3000)});
|
|
37
|
-
const timeDelta = performance.now() - timeStart;
|
|
38
|
-
const obj = await resp.json();
|
|
39
|
-
if(obj==null || obj.timestamp==null) throw new Error("Timestamp not returned!");
|
|
40
|
-
return {delta: timeDelta, timestamp: Math.floor(obj.timestamp * 1000)};
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export async function correctClock() {
|
|
44
|
-
const dateNow: () => number = (Date as any)._now ?? Date.now;
|
|
45
|
-
const dateStart = performance.now();
|
|
46
|
-
|
|
47
|
-
try {
|
|
48
|
-
let result: TimeReturnType = await Promise.any([
|
|
49
|
-
...headerUrls.map(url => getHeaderTimestamp(url)),
|
|
50
|
-
getAisenseApiTimestamp(),
|
|
51
|
-
getBinanceTimestamp(),
|
|
52
|
-
getOKXTimestamp()
|
|
53
|
-
]);
|
|
54
|
-
|
|
55
|
-
const desiredTime = result.timestamp - (result.delta / 2);
|
|
56
|
-
if(Math.abs(Date.now() - desiredTime) < 2000) {
|
|
57
|
-
console.log("AutomaticClockDriftCorrection: correctClock(): Time drift too small, not adjusting!");
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const timeDrift = dateStart - desiredTime;
|
|
62
|
-
console.log(`AutomaticClockDriftCorrection: correctClock(): Time correction perf.now: ${dateStart}, server: ${desiredTime}, time diff: ${timeDrift}`);
|
|
63
|
-
(Date as any)._now = dateNow;
|
|
64
|
-
(Date as any).now = () => {
|
|
65
|
-
return Math.floor(performance.now() - timeDrift);
|
|
66
|
-
};
|
|
67
|
-
} catch (e: any) {
|
|
68
|
-
if(e instanceof AggregateError) e.message = "Cannot sync time! All servers responded negatively!";
|
|
69
|
-
throw e;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
1
|
+
import {timeoutSignal} from "./TimeoutUtils";
|
|
2
|
+
|
|
3
|
+
const headerUrls = ["https://api.atomiq.exchange/"];
|
|
4
|
+
|
|
5
|
+
type TimeReturnType = {delta: number, timestamp: number};
|
|
6
|
+
|
|
7
|
+
async function getHeaderTimestamp(url: string): Promise<TimeReturnType> {
|
|
8
|
+
const timeStart = performance.now();
|
|
9
|
+
const resp = await fetch(url, {method: "HEAD", signal: timeoutSignal(3000)});
|
|
10
|
+
const timeDelta = performance.now() - timeStart;
|
|
11
|
+
const dateHeaderValue = resp.headers.get("Date");
|
|
12
|
+
if(dateHeaderValue==null) throw new Error("Date header not returned!");
|
|
13
|
+
return {delta: timeDelta, timestamp: new Date(dateHeaderValue).getTime()};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async function getBinanceTimestamp(): Promise<TimeReturnType> {
|
|
17
|
+
const timeStart = performance.now();
|
|
18
|
+
const resp = await fetch("https://api.binance.com/api/v3/time", {signal: timeoutSignal(3000)});
|
|
19
|
+
const timeDelta = performance.now() - timeStart;
|
|
20
|
+
const obj: {serverTime: number} = await resp.json();
|
|
21
|
+
if(obj==null || obj.serverTime==null) throw new Error("Timestamp not returned!");
|
|
22
|
+
return {delta: timeDelta, timestamp: Math.floor(obj.serverTime)};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async function getOKXTimestamp(): Promise<TimeReturnType> {
|
|
26
|
+
const timeStart = performance.now();
|
|
27
|
+
const resp = await fetch("https://www.okx.com/api/v5/public/time", {signal: timeoutSignal(3000)});
|
|
28
|
+
const timeDelta = performance.now() - timeStart;
|
|
29
|
+
const obj: {code: number, msg: string, data: [{ts: number}]} = await resp.json();
|
|
30
|
+
if(obj==null || obj.data==null || obj.data[0]==null || obj.data[0].ts==null) throw new Error("Timestamp not returned!");
|
|
31
|
+
return {delta: timeDelta, timestamp: Math.floor(obj.data[0].ts)};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function getAisenseApiTimestamp(): Promise<TimeReturnType> {
|
|
35
|
+
const timeStart = performance.now();
|
|
36
|
+
const resp = await fetch("https://aisenseapi.com/services/v1/timestamp", {signal: timeoutSignal(3000)});
|
|
37
|
+
const timeDelta = performance.now() - timeStart;
|
|
38
|
+
const obj = await resp.json();
|
|
39
|
+
if(obj==null || obj.timestamp==null) throw new Error("Timestamp not returned!");
|
|
40
|
+
return {delta: timeDelta, timestamp: Math.floor(obj.timestamp * 1000)};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function correctClock() {
|
|
44
|
+
const dateNow: () => number = (Date as any)._now ?? Date.now;
|
|
45
|
+
const dateStart = performance.now();
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
let result: TimeReturnType = await Promise.any([
|
|
49
|
+
...headerUrls.map(url => getHeaderTimestamp(url)),
|
|
50
|
+
getAisenseApiTimestamp(),
|
|
51
|
+
getBinanceTimestamp(),
|
|
52
|
+
getOKXTimestamp()
|
|
53
|
+
]);
|
|
54
|
+
|
|
55
|
+
const desiredTime = result.timestamp - (result.delta / 2);
|
|
56
|
+
if(Math.abs(Date.now() - desiredTime) < 2000) {
|
|
57
|
+
console.log("AutomaticClockDriftCorrection: correctClock(): Time drift too small, not adjusting!");
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const timeDrift = dateStart - desiredTime;
|
|
62
|
+
console.log(`AutomaticClockDriftCorrection: correctClock(): Time correction perf.now: ${dateStart}, server: ${desiredTime}, time diff: ${timeDrift}`);
|
|
63
|
+
(Date as any)._now = dateNow;
|
|
64
|
+
(Date as any).now = () => {
|
|
65
|
+
return Math.floor(performance.now() - timeDrift);
|
|
66
|
+
};
|
|
67
|
+
} catch (e: any) {
|
|
68
|
+
if(e instanceof AggregateError) e.message = "Cannot sync time! All servers responded negatively!";
|
|
69
|
+
throw e;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -1,164 +1,164 @@
|
|
|
1
|
-
import {BTC_NETWORK, isBytes, PubT, validatePubkey} from "@scure/btc-signer/utils";
|
|
2
|
-
import {Buffer} from "buffer";
|
|
3
|
-
import {Address, OutScript, Transaction} from "@scure/btc-signer";
|
|
4
|
-
import {CoinselectAddressTypes} from "../bitcoin/coinselect2";
|
|
5
|
-
import { randomBytes } from "./Utils";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export function fromOutputScript(network: BTC_NETWORK, outputScriptHex: string): string {
|
|
9
|
-
return Address(network).encode(OutScript.decode(Buffer.from(outputScriptHex, "hex")));
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function toOutputScript(network: BTC_NETWORK, address: string): Buffer {
|
|
13
|
-
const outputScript = Address(network).decode(address);
|
|
14
|
-
switch(outputScript.type) {
|
|
15
|
-
case "pkh":
|
|
16
|
-
case "sh":
|
|
17
|
-
case "wpkh":
|
|
18
|
-
case "wsh":
|
|
19
|
-
return Buffer.from(OutScript.encode({
|
|
20
|
-
type: outputScript.type,
|
|
21
|
-
hash: outputScript.hash
|
|
22
|
-
}));
|
|
23
|
-
case "tr":
|
|
24
|
-
try {
|
|
25
|
-
return Buffer.from(OutScript.encode({
|
|
26
|
-
type: "tr",
|
|
27
|
-
pubkey: outputScript.pubkey
|
|
28
|
-
}));
|
|
29
|
-
} catch (e: any) {
|
|
30
|
-
let msg = "";
|
|
31
|
-
if(e.name!=null) msg += ": "+e.name;
|
|
32
|
-
if(e.message!=null) msg += ": "+e.message;
|
|
33
|
-
if(typeof(e)==="string") msg += ": "+e;
|
|
34
|
-
msg += ", isBytes: "+isBytes(outputScript.pubkey);
|
|
35
|
-
try {
|
|
36
|
-
validatePubkey(outputScript.pubkey, PubT.schnorr)
|
|
37
|
-
msg += ", validatePubkey: success";
|
|
38
|
-
} catch (e: any) {
|
|
39
|
-
msg += ", validatePubkeyError: ";
|
|
40
|
-
if(e.name!=null) msg += ": "+e.name;
|
|
41
|
-
if(e.message!=null) msg += ": "+e.message;
|
|
42
|
-
if(typeof(e)==="string") msg += ": "+e;
|
|
43
|
-
}
|
|
44
|
-
throw new Error(msg);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
throw new Error(`Unrecognized output script type: ${outputScript.type}`);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export function toCoinselectAddressType(outputScript: Uint8Array): CoinselectAddressTypes {
|
|
51
|
-
const data = OutScript.decode(outputScript);
|
|
52
|
-
switch(data.type) {
|
|
53
|
-
case "pkh":
|
|
54
|
-
return "p2pkh";
|
|
55
|
-
case "sh":
|
|
56
|
-
return "p2sh-p2wpkh";
|
|
57
|
-
case "wpkh":
|
|
58
|
-
return "p2wpkh"
|
|
59
|
-
case "wsh":
|
|
60
|
-
return "p2wsh"
|
|
61
|
-
case "tr":
|
|
62
|
-
return "p2tr"
|
|
63
|
-
}
|
|
64
|
-
throw new Error("Unrecognized address type!");
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
function getDummySpec(type: CoinselectAddressTypes) {
|
|
69
|
-
switch(type) {
|
|
70
|
-
case "p2pkh":
|
|
71
|
-
return {
|
|
72
|
-
type: "pkh",
|
|
73
|
-
hash: randomBytes(20)
|
|
74
|
-
} as const;
|
|
75
|
-
case "p2sh-p2wpkh":
|
|
76
|
-
return {
|
|
77
|
-
type: "sh",
|
|
78
|
-
hash: randomBytes(20)
|
|
79
|
-
} as const;
|
|
80
|
-
case "p2wpkh":
|
|
81
|
-
return {
|
|
82
|
-
type: "wpkh",
|
|
83
|
-
hash: randomBytes(20)
|
|
84
|
-
} as const;
|
|
85
|
-
case "p2wsh":
|
|
86
|
-
return {
|
|
87
|
-
type: "wsh",
|
|
88
|
-
hash: randomBytes(32)
|
|
89
|
-
} as const;
|
|
90
|
-
case "p2tr":
|
|
91
|
-
return {
|
|
92
|
-
type: "tr",
|
|
93
|
-
pubkey: Buffer.from("0101010101010101010101010101010101010101010101010101010101010101", "hex")
|
|
94
|
-
} as const;
|
|
95
|
-
}
|
|
96
|
-
throw new Error("Unrecognized address type!");
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export function getDummyOutputScript(type: CoinselectAddressTypes): Uint8Array {
|
|
100
|
-
return OutScript.encode(getDummySpec(type));
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export function getDummyAddress(network: BTC_NETWORK, type: CoinselectAddressTypes): string {
|
|
104
|
-
return Address(network).encode(getDummySpec(type));
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* General parsers for PSBTs, can parse hex or base64 encoded PSBTs
|
|
109
|
-
* @param _psbt
|
|
110
|
-
*/
|
|
111
|
-
export function parsePsbtTransaction(_psbt: Transaction | string): Transaction {
|
|
112
|
-
if (typeof (_psbt) === "string") {
|
|
113
|
-
let rawPsbt: Buffer;
|
|
114
|
-
if (/^(?:[0-9a-fA-F]{2})+$/.test(_psbt)) {
|
|
115
|
-
//Hex
|
|
116
|
-
rawPsbt = Buffer.from(_psbt, "hex");
|
|
117
|
-
} else if (/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(_psbt)) {
|
|
118
|
-
//Base64
|
|
119
|
-
rawPsbt = Buffer.from(_psbt, "base64");
|
|
120
|
-
} else {
|
|
121
|
-
throw new Error("Provided psbt string not base64 nor hex encoded!");
|
|
122
|
-
}
|
|
123
|
-
return Transaction.fromPSBT(rawPsbt, {
|
|
124
|
-
allowUnknownOutputs: true,
|
|
125
|
-
allowUnknownInputs: true,
|
|
126
|
-
allowLegacyWitnessUtxo: true,
|
|
127
|
-
});
|
|
128
|
-
} else {
|
|
129
|
-
return _psbt;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
export function getVoutIndex(psbt: Transaction, network: BTC_NETWORK, address: string, amount: bigint): number | undefined {
|
|
134
|
-
const script = toOutputScript(network, address);
|
|
135
|
-
for(let i=0;i<psbt.outputsLength;i++) {
|
|
136
|
-
const output = psbt.getOutput(i);
|
|
137
|
-
if(
|
|
138
|
-
output.amount===amount &&
|
|
139
|
-
output.script!=null &&
|
|
140
|
-
script.equals(Buffer.from(output.script))
|
|
141
|
-
) {
|
|
142
|
-
return i;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
export function getSenderAddress(psbt: Transaction, network: BTC_NETWORK, inputIndex: number = 0): string | undefined {
|
|
148
|
-
if(psbt.inputsLength<=inputIndex) return undefined;
|
|
149
|
-
|
|
150
|
-
const input = psbt.getInput(inputIndex);
|
|
151
|
-
let script: Uint8Array | undefined;
|
|
152
|
-
if(input.witnessUtxo?.script!=null) {
|
|
153
|
-
script = input.witnessUtxo.script as Uint8Array;
|
|
154
|
-
} else if(input.nonWitnessUtxo!=null && input.index!=null) {
|
|
155
|
-
script = input.nonWitnessUtxo.outputs[input.index]?.script;
|
|
156
|
-
}
|
|
157
|
-
if(script==null) return undefined;
|
|
158
|
-
|
|
159
|
-
try {
|
|
160
|
-
return Address(network).encode(OutScript.decode(script));
|
|
161
|
-
} catch (e) {
|
|
162
|
-
return Buffer.from(script).toString("hex");
|
|
163
|
-
}
|
|
164
|
-
}
|
|
1
|
+
import {BTC_NETWORK, isBytes, PubT, validatePubkey} from "@scure/btc-signer/utils";
|
|
2
|
+
import {Buffer} from "buffer";
|
|
3
|
+
import {Address, OutScript, Transaction} from "@scure/btc-signer";
|
|
4
|
+
import {CoinselectAddressTypes} from "../bitcoin/coinselect2";
|
|
5
|
+
import { randomBytes } from "./Utils";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
export function fromOutputScript(network: BTC_NETWORK, outputScriptHex: string): string {
|
|
9
|
+
return Address(network).encode(OutScript.decode(Buffer.from(outputScriptHex, "hex")));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function toOutputScript(network: BTC_NETWORK, address: string): Buffer {
|
|
13
|
+
const outputScript = Address(network).decode(address);
|
|
14
|
+
switch(outputScript.type) {
|
|
15
|
+
case "pkh":
|
|
16
|
+
case "sh":
|
|
17
|
+
case "wpkh":
|
|
18
|
+
case "wsh":
|
|
19
|
+
return Buffer.from(OutScript.encode({
|
|
20
|
+
type: outputScript.type,
|
|
21
|
+
hash: outputScript.hash
|
|
22
|
+
}));
|
|
23
|
+
case "tr":
|
|
24
|
+
try {
|
|
25
|
+
return Buffer.from(OutScript.encode({
|
|
26
|
+
type: "tr",
|
|
27
|
+
pubkey: outputScript.pubkey
|
|
28
|
+
}));
|
|
29
|
+
} catch (e: any) {
|
|
30
|
+
let msg = "";
|
|
31
|
+
if(e.name!=null) msg += ": "+e.name;
|
|
32
|
+
if(e.message!=null) msg += ": "+e.message;
|
|
33
|
+
if(typeof(e)==="string") msg += ": "+e;
|
|
34
|
+
msg += ", isBytes: "+isBytes(outputScript.pubkey);
|
|
35
|
+
try {
|
|
36
|
+
validatePubkey(outputScript.pubkey, PubT.schnorr)
|
|
37
|
+
msg += ", validatePubkey: success";
|
|
38
|
+
} catch (e: any) {
|
|
39
|
+
msg += ", validatePubkeyError: ";
|
|
40
|
+
if(e.name!=null) msg += ": "+e.name;
|
|
41
|
+
if(e.message!=null) msg += ": "+e.message;
|
|
42
|
+
if(typeof(e)==="string") msg += ": "+e;
|
|
43
|
+
}
|
|
44
|
+
throw new Error(msg);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
throw new Error(`Unrecognized output script type: ${outputScript.type}`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function toCoinselectAddressType(outputScript: Uint8Array): CoinselectAddressTypes {
|
|
51
|
+
const data = OutScript.decode(outputScript);
|
|
52
|
+
switch(data.type) {
|
|
53
|
+
case "pkh":
|
|
54
|
+
return "p2pkh";
|
|
55
|
+
case "sh":
|
|
56
|
+
return "p2sh-p2wpkh";
|
|
57
|
+
case "wpkh":
|
|
58
|
+
return "p2wpkh"
|
|
59
|
+
case "wsh":
|
|
60
|
+
return "p2wsh"
|
|
61
|
+
case "tr":
|
|
62
|
+
return "p2tr"
|
|
63
|
+
}
|
|
64
|
+
throw new Error("Unrecognized address type!");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
function getDummySpec(type: CoinselectAddressTypes) {
|
|
69
|
+
switch(type) {
|
|
70
|
+
case "p2pkh":
|
|
71
|
+
return {
|
|
72
|
+
type: "pkh",
|
|
73
|
+
hash: randomBytes(20)
|
|
74
|
+
} as const;
|
|
75
|
+
case "p2sh-p2wpkh":
|
|
76
|
+
return {
|
|
77
|
+
type: "sh",
|
|
78
|
+
hash: randomBytes(20)
|
|
79
|
+
} as const;
|
|
80
|
+
case "p2wpkh":
|
|
81
|
+
return {
|
|
82
|
+
type: "wpkh",
|
|
83
|
+
hash: randomBytes(20)
|
|
84
|
+
} as const;
|
|
85
|
+
case "p2wsh":
|
|
86
|
+
return {
|
|
87
|
+
type: "wsh",
|
|
88
|
+
hash: randomBytes(32)
|
|
89
|
+
} as const;
|
|
90
|
+
case "p2tr":
|
|
91
|
+
return {
|
|
92
|
+
type: "tr",
|
|
93
|
+
pubkey: Buffer.from("0101010101010101010101010101010101010101010101010101010101010101", "hex")
|
|
94
|
+
} as const;
|
|
95
|
+
}
|
|
96
|
+
throw new Error("Unrecognized address type!");
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function getDummyOutputScript(type: CoinselectAddressTypes): Uint8Array {
|
|
100
|
+
return OutScript.encode(getDummySpec(type));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function getDummyAddress(network: BTC_NETWORK, type: CoinselectAddressTypes): string {
|
|
104
|
+
return Address(network).encode(getDummySpec(type));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* General parsers for PSBTs, can parse hex or base64 encoded PSBTs
|
|
109
|
+
* @param _psbt
|
|
110
|
+
*/
|
|
111
|
+
export function parsePsbtTransaction(_psbt: Transaction | string): Transaction {
|
|
112
|
+
if (typeof (_psbt) === "string") {
|
|
113
|
+
let rawPsbt: Buffer;
|
|
114
|
+
if (/^(?:[0-9a-fA-F]{2})+$/.test(_psbt)) {
|
|
115
|
+
//Hex
|
|
116
|
+
rawPsbt = Buffer.from(_psbt, "hex");
|
|
117
|
+
} else if (/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(_psbt)) {
|
|
118
|
+
//Base64
|
|
119
|
+
rawPsbt = Buffer.from(_psbt, "base64");
|
|
120
|
+
} else {
|
|
121
|
+
throw new Error("Provided psbt string not base64 nor hex encoded!");
|
|
122
|
+
}
|
|
123
|
+
return Transaction.fromPSBT(rawPsbt, {
|
|
124
|
+
allowUnknownOutputs: true,
|
|
125
|
+
allowUnknownInputs: true,
|
|
126
|
+
allowLegacyWitnessUtxo: true,
|
|
127
|
+
});
|
|
128
|
+
} else {
|
|
129
|
+
return _psbt;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export function getVoutIndex(psbt: Transaction, network: BTC_NETWORK, address: string, amount: bigint): number | undefined {
|
|
134
|
+
const script = toOutputScript(network, address);
|
|
135
|
+
for(let i=0;i<psbt.outputsLength;i++) {
|
|
136
|
+
const output = psbt.getOutput(i);
|
|
137
|
+
if(
|
|
138
|
+
output.amount===amount &&
|
|
139
|
+
output.script!=null &&
|
|
140
|
+
script.equals(Buffer.from(output.script))
|
|
141
|
+
) {
|
|
142
|
+
return i;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function getSenderAddress(psbt: Transaction, network: BTC_NETWORK, inputIndex: number = 0): string | undefined {
|
|
148
|
+
if(psbt.inputsLength<=inputIndex) return undefined;
|
|
149
|
+
|
|
150
|
+
const input = psbt.getInput(inputIndex);
|
|
151
|
+
let script: Uint8Array | undefined;
|
|
152
|
+
if(input.witnessUtxo?.script!=null) {
|
|
153
|
+
script = input.witnessUtxo.script as Uint8Array;
|
|
154
|
+
} else if(input.nonWitnessUtxo!=null && input.index!=null) {
|
|
155
|
+
script = input.nonWitnessUtxo.outputs[input.index]?.script;
|
|
156
|
+
}
|
|
157
|
+
if(script==null) return undefined;
|
|
158
|
+
|
|
159
|
+
try {
|
|
160
|
+
return Address(network).encode(OutScript.decode(script));
|
|
161
|
+
} catch (e) {
|
|
162
|
+
return Buffer.from(script).toString("hex");
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {IBitcoinWallet, isIBitcoinWallet} from "../bitcoin/wallet/IBitcoinWallet";
|
|
2
|
-
import {BTC_NETWORK} from "@scure/btc-signer/utils";
|
|
3
|
-
import {SingleAddressBitcoinWallet} from "../bitcoin/wallet/SingleAddressBitcoinWallet";
|
|
4
|
-
import {BitcoinNetwork, BitcoinRpcWithAddressIndex} from "@atomiqlabs/base";
|
|
5
|
-
|
|
6
|
-
export function toBitcoinWallet(
|
|
7
|
-
_bitcoinWallet: IBitcoinWallet | { address: string, publicKey: string },
|
|
8
|
-
btcRpc: BitcoinRpcWithAddressIndex<any>,
|
|
9
|
-
bitcoinNetwork: BTC_NETWORK | BitcoinNetwork
|
|
10
|
-
): IBitcoinWallet {
|
|
11
|
-
if (isIBitcoinWallet(_bitcoinWallet)) {
|
|
12
|
-
return _bitcoinWallet;
|
|
13
|
-
} else {
|
|
14
|
-
return new SingleAddressBitcoinWallet(btcRpc, bitcoinNetwork, _bitcoinWallet);
|
|
15
|
-
}
|
|
1
|
+
import {IBitcoinWallet, isIBitcoinWallet} from "../bitcoin/wallet/IBitcoinWallet";
|
|
2
|
+
import {BTC_NETWORK} from "@scure/btc-signer/utils";
|
|
3
|
+
import {SingleAddressBitcoinWallet} from "../bitcoin/wallet/SingleAddressBitcoinWallet";
|
|
4
|
+
import {BitcoinNetwork, BitcoinRpcWithAddressIndex} from "@atomiqlabs/base";
|
|
5
|
+
|
|
6
|
+
export function toBitcoinWallet(
|
|
7
|
+
_bitcoinWallet: IBitcoinWallet | { address: string, publicKey: string },
|
|
8
|
+
btcRpc: BitcoinRpcWithAddressIndex<any>,
|
|
9
|
+
bitcoinNetwork: BTC_NETWORK | BitcoinNetwork
|
|
10
|
+
): IBitcoinWallet {
|
|
11
|
+
if (isIBitcoinWallet(_bitcoinWallet)) {
|
|
12
|
+
return _bitcoinWallet;
|
|
13
|
+
} else {
|
|
14
|
+
return new SingleAddressBitcoinWallet(btcRpc, bitcoinNetwork, _bitcoinWallet);
|
|
15
|
+
}
|
|
16
16
|
}
|
package/src/utils/Logger.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export type LoggerType = {
|
|
2
|
-
debug: (msg: string, ...args: any[]) => void,
|
|
3
|
-
info: (msg: string, ...args: any[]) => void,
|
|
4
|
-
warn: (msg: string, ...args: any[]) => void,
|
|
5
|
-
error: (msg: string, ...args: any[]) => void
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
export function getLogger(prefix: string): LoggerType {
|
|
9
|
-
return {
|
|
10
|
-
debug: (msg, ...args) => (global as any).atomiqLogLevel >= 3 && console.debug(prefix + msg, ...args),
|
|
11
|
-
info: (msg, ...args) => (global as any).atomiqLogLevel >= 2 && console.info(prefix + msg, ...args),
|
|
12
|
-
warn: (msg, ...args) => ((global as any).atomiqLogLevel == null || (global as any).atomiqLogLevel >= 1) && console.warn(prefix + msg, ...args),
|
|
13
|
-
error: (msg, ...args) => ((global as any).atomiqLogLevel == null || (global as any).atomiqLogLevel >= 0) && console.error(prefix + msg, ...args)
|
|
14
|
-
};
|
|
1
|
+
export type LoggerType = {
|
|
2
|
+
debug: (msg: string, ...args: any[]) => void,
|
|
3
|
+
info: (msg: string, ...args: any[]) => void,
|
|
4
|
+
warn: (msg: string, ...args: any[]) => void,
|
|
5
|
+
error: (msg: string, ...args: any[]) => void
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export function getLogger(prefix: string): LoggerType {
|
|
9
|
+
return {
|
|
10
|
+
debug: (msg, ...args) => (global as any).atomiqLogLevel >= 3 && console.debug(prefix + msg, ...args),
|
|
11
|
+
info: (msg, ...args) => (global as any).atomiqLogLevel >= 2 && console.info(prefix + msg, ...args),
|
|
12
|
+
warn: (msg, ...args) => ((global as any).atomiqLogLevel == null || (global as any).atomiqLogLevel >= 1) && console.warn(prefix + msg, ...args),
|
|
13
|
+
error: (msg, ...args) => ((global as any).atomiqLogLevel == null || (global as any).atomiqLogLevel >= 0) && console.error(prefix + msg, ...args)
|
|
14
|
+
};
|
|
15
15
|
}
|