@atomiqlabs/sdk 8.8.3 → 8.8.4
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/dist/SmartChainAssets.d.ts +181 -181
- package/dist/SmartChainAssets.js +181 -181
- 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 +23 -23
- package/dist/events/UnifiedSwapEventListener.js +132 -132
- package/dist/http/HttpUtils.d.ts +27 -27
- package/dist/http/HttpUtils.js +91 -91
- 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 +16 -16
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -174
- package/dist/index.d.ts +85 -85
- package/dist/index.js +158 -158
- package/dist/intermediaries/Intermediary.d.ts +178 -178
- package/dist/intermediaries/Intermediary.js +166 -166
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +211 -211
- package/dist/intermediaries/IntermediaryDiscovery.js +424 -424
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +450 -450
- package/dist/intermediaries/apis/IntermediaryAPI.js +618 -618
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
- 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 +85 -85
- package/dist/storage/IUnifiedStorage.js +2 -2
- package/dist/storage/UnifiedSwapStorage.d.ts +114 -114
- package/dist/storage/UnifiedSwapStorage.js +116 -116
- 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 +732 -732
- package/dist/swapper/Swapper.js +1713 -1713
- package/dist/swapper/SwapperFactory.d.ts +135 -135
- package/dist/swapper/SwapperFactory.js +162 -162
- package/dist/swapper/SwapperUtils.d.ts +206 -206
- package/dist/swapper/SwapperUtils.js +481 -481
- 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 +392 -392
- package/dist/swaps/ISwap.js +349 -349
- package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
- package/dist/swaps/ISwapWithGasDrop.js +12 -12
- package/dist/swaps/ISwapWrapper.d.ts +285 -285
- package/dist/swaps/ISwapWrapper.js +353 -353
- 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 +170 -170
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +128 -128
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +167 -167
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +105 -105
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +129 -129
- 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 +531 -531
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +190 -190
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +432 -432
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +583 -583
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +235 -235
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +525 -525
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +458 -458
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1126 -1126
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +202 -202
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +406 -406
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +403 -403
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +924 -924
- 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 +251 -251
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +536 -536
- 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 +132 -132
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +286 -286
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +637 -637
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1448 -1448
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +257 -257
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -947
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +261 -261
- package/dist/swaps/trusted/ln/LnForGasSwap.js +511 -511
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +83 -83
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +342 -342
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +715 -715
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +69 -69
- 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 +88 -88
- package/dist/types/SwapExecutionAction.js +2 -2
- 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 +69 -69
- package/dist/types/TokenAmount.js +60 -60
- 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 +16 -16
- package/dist/utils/BitcoinUtils.js +141 -141
- 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 +67 -67
- package/dist/utils/Utils.js +208 -208
- package/package.json +43 -43
- package/src/SmartChainAssets.ts +186 -186
- 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 +173 -173
- package/src/http/HttpUtils.ts +91 -91
- 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 +192 -192
- package/src/index.ts +140 -140
- package/src/intermediaries/Intermediary.ts +280 -280
- package/src/intermediaries/IntermediaryDiscovery.ts +541 -541
- package/src/intermediaries/apis/IntermediaryAPI.ts +963 -963
- package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -257
- 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 +95 -95
- package/src/storage/UnifiedSwapStorage.ts +141 -141
- package/src/storage-browser/IndexedDBUnifiedStorage.ts +350 -350
- package/src/storage-browser/LocalStorageManager.ts +106 -106
- package/src/swapper/Swapper.ts +2488 -2488
- package/src/swapper/SwapperFactory.ts +307 -307
- package/src/swapper/SwapperUtils.ts +570 -570
- 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 +703 -703
- package/src/swaps/ISwapWithGasDrop.ts +25 -25
- package/src/swaps/ISwapWrapper.ts +539 -539
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +217 -217
- package/src/swaps/escrow_swaps/IEscrowSwap.ts +269 -269
- package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +282 -282
- package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +169 -169
- 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 +1473 -1474
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +601 -601
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1582 -1582
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +750 -750
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +1299 -1299
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +610 -610
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +1096 -1096
- 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 +786 -786
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +206 -206
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +401 -401
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1812 -1812
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1236 -1236
- package/src/swaps/trusted/ln/LnForGasSwap.ts +589 -589
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +91 -91
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +862 -862
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +131 -131
- 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 +99 -99
- 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 +132 -132
- 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 +132 -132
- 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 +212 -212
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Response of the LNURL-withdraw link
|
|
3
|
-
*
|
|
4
|
-
* @category Lightning
|
|
5
|
-
*/
|
|
6
|
-
export type LNURLWithdrawParams = {
|
|
7
|
-
tag: "withdrawRequest";
|
|
8
|
-
k1: string;
|
|
9
|
-
callback: string;
|
|
10
|
-
domain: string;
|
|
11
|
-
minWithdrawable: number;
|
|
12
|
-
maxWithdrawable: number;
|
|
13
|
-
defaultDescription: string;
|
|
14
|
-
balanceCheck?: string;
|
|
15
|
-
payLink?: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Response of the LNURL-withdraw link with the added original url
|
|
20
|
-
*
|
|
21
|
-
* @category Lightning
|
|
22
|
-
*/
|
|
23
|
-
export type LNURLWithdrawParamsWithUrl = LNURLWithdrawParams & { url: string };
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Parsed LNURL-withdraw specification
|
|
27
|
-
*
|
|
28
|
-
* @category Lightning
|
|
29
|
-
*/
|
|
30
|
-
export type LNURLWithdraw = {
|
|
31
|
-
type: "withdraw",
|
|
32
|
-
min: bigint,
|
|
33
|
-
max: bigint,
|
|
34
|
-
params: LNURLWithdrawParamsWithUrl
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Type guard for {@link LNURLWithdraw}
|
|
39
|
-
*
|
|
40
|
-
* @category Lightning
|
|
41
|
-
*/
|
|
42
|
-
export function isLNURLWithdraw(value: any): value is LNURLWithdraw {
|
|
43
|
-
return (
|
|
44
|
-
typeof value === "object" &&
|
|
45
|
-
value != null &&
|
|
46
|
-
value.type === "withdraw" &&
|
|
47
|
-
typeof (value.min) === "bigint" &&
|
|
48
|
-
typeof (value.max) === "bigint" &&
|
|
49
|
-
isLNURLWithdrawParams(value.params)
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Type guard for {@link LNURLWithdrawParams}
|
|
55
|
-
*
|
|
56
|
-
* @category Lightning
|
|
57
|
-
* @internal
|
|
58
|
-
*/
|
|
59
|
-
export function isLNURLWithdrawParams(obj: any): obj is LNURLWithdrawParams {
|
|
60
|
-
return obj.tag === "withdrawRequest";
|
|
61
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Response of the LNURL-withdraw link
|
|
3
|
+
*
|
|
4
|
+
* @category Lightning
|
|
5
|
+
*/
|
|
6
|
+
export type LNURLWithdrawParams = {
|
|
7
|
+
tag: "withdrawRequest";
|
|
8
|
+
k1: string;
|
|
9
|
+
callback: string;
|
|
10
|
+
domain: string;
|
|
11
|
+
minWithdrawable: number;
|
|
12
|
+
maxWithdrawable: number;
|
|
13
|
+
defaultDescription: string;
|
|
14
|
+
balanceCheck?: string;
|
|
15
|
+
payLink?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Response of the LNURL-withdraw link with the added original url
|
|
20
|
+
*
|
|
21
|
+
* @category Lightning
|
|
22
|
+
*/
|
|
23
|
+
export type LNURLWithdrawParamsWithUrl = LNURLWithdrawParams & { url: string };
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Parsed LNURL-withdraw specification
|
|
27
|
+
*
|
|
28
|
+
* @category Lightning
|
|
29
|
+
*/
|
|
30
|
+
export type LNURLWithdraw = {
|
|
31
|
+
type: "withdraw",
|
|
32
|
+
min: bigint,
|
|
33
|
+
max: bigint,
|
|
34
|
+
params: LNURLWithdrawParamsWithUrl
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Type guard for {@link LNURLWithdraw}
|
|
39
|
+
*
|
|
40
|
+
* @category Lightning
|
|
41
|
+
*/
|
|
42
|
+
export function isLNURLWithdraw(value: any): value is LNURLWithdraw {
|
|
43
|
+
return (
|
|
44
|
+
typeof value === "object" &&
|
|
45
|
+
value != null &&
|
|
46
|
+
value.type === "withdraw" &&
|
|
47
|
+
typeof (value.min) === "bigint" &&
|
|
48
|
+
typeof (value.max) === "bigint" &&
|
|
49
|
+
isLNURLWithdrawParams(value.params)
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Type guard for {@link LNURLWithdrawParams}
|
|
55
|
+
*
|
|
56
|
+
* @category Lightning
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
export function isLNURLWithdrawParams(obj: any): obj is LNURLWithdrawParams {
|
|
60
|
+
return obj.tag === "withdrawRequest";
|
|
61
|
+
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Invoice getter callback for the {@link LightningInvoiceCreateService}
|
|
3
|
-
*
|
|
4
|
-
* @category Lightning
|
|
5
|
-
*/
|
|
6
|
-
export type LightningWalletCallback = (valueSats: number, abortSignal?: AbortSignal) => Promise<string>;
|
|
7
|
-
/**
|
|
8
|
-
* Service that creates on-demand fixed amount bolt11 lightning network invoices, optionally
|
|
9
|
-
* specifying minimum and maximum swappable sats amount. This used for exact input Smart chain ->
|
|
10
|
-
* Lightning swaps.
|
|
11
|
-
*
|
|
12
|
-
* @category Lightning
|
|
13
|
-
*/
|
|
14
|
-
export type LightningInvoiceCreateService = {
|
|
15
|
-
getInvoice: LightningWalletCallback,
|
|
16
|
-
minMsats?: bigint,
|
|
17
|
-
maxMSats?: bigint
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Type guard for {@link LightningInvoiceCreateService}
|
|
22
|
-
*
|
|
23
|
-
* @internal
|
|
24
|
-
*/
|
|
25
|
-
export function isLightningInvoiceCreateService(obj: any): obj is LightningInvoiceCreateService {
|
|
26
|
-
return typeof (obj) === "object" &&
|
|
27
|
-
typeof (obj.getInvoice) === "function" &&
|
|
28
|
-
(obj.minMsats == null || typeof (obj.minMsats) === "bigint") &&
|
|
29
|
-
(obj.maxMSats == null || typeof (obj.maxMSats) === "bigint");
|
|
30
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Invoice getter callback for the {@link LightningInvoiceCreateService}
|
|
3
|
+
*
|
|
4
|
+
* @category Lightning
|
|
5
|
+
*/
|
|
6
|
+
export type LightningWalletCallback = (valueSats: number, abortSignal?: AbortSignal) => Promise<string>;
|
|
7
|
+
/**
|
|
8
|
+
* Service that creates on-demand fixed amount bolt11 lightning network invoices, optionally
|
|
9
|
+
* specifying minimum and maximum swappable sats amount. This used for exact input Smart chain ->
|
|
10
|
+
* Lightning swaps.
|
|
11
|
+
*
|
|
12
|
+
* @category Lightning
|
|
13
|
+
*/
|
|
14
|
+
export type LightningInvoiceCreateService = {
|
|
15
|
+
getInvoice: LightningWalletCallback,
|
|
16
|
+
minMsats?: bigint,
|
|
17
|
+
maxMSats?: bigint
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Type guard for {@link LightningInvoiceCreateService}
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export function isLightningInvoiceCreateService(obj: any): obj is LightningInvoiceCreateService {
|
|
26
|
+
return typeof (obj) === "object" &&
|
|
27
|
+
typeof (obj.getInvoice) === "function" &&
|
|
28
|
+
(obj.minMsats == null || typeof (obj.minMsats) === "bigint") &&
|
|
29
|
+
(obj.maxMSats == null || typeof (obj.maxMSats) === "bigint");
|
|
30
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import {Transaction} from "@scure/btc-signer";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* A type with minimum possible required data about a bitcoin wallet to be able to estimate fees and produce unsigned
|
|
5
|
-
* funded PSBTs with address's UTXOs
|
|
6
|
-
*
|
|
7
|
-
* @category Bitcoin
|
|
8
|
-
*/
|
|
9
|
-
export type MinimalBitcoinWalletInterface = {
|
|
10
|
-
address: string,
|
|
11
|
-
publicKey: string
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* A type with minimum possible required data about a bitcoin wallet to be able to estimate fees and sign PSBTs
|
|
16
|
-
*
|
|
17
|
-
* @category Bitcoin
|
|
18
|
-
*/
|
|
19
|
-
export type MinimalBitcoinWalletInterfaceWithSigner = MinimalBitcoinWalletInterface & {
|
|
20
|
-
signPsbt: (psbtToSign: {psbt: Transaction, psbtHex: string, psbtBase64: string}, signInputs: number[]) => Promise<Transaction | string>
|
|
21
|
-
};
|
|
1
|
+
import {Transaction} from "@scure/btc-signer";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A type with minimum possible required data about a bitcoin wallet to be able to estimate fees and produce unsigned
|
|
5
|
+
* funded PSBTs with address's UTXOs
|
|
6
|
+
*
|
|
7
|
+
* @category Bitcoin
|
|
8
|
+
*/
|
|
9
|
+
export type MinimalBitcoinWalletInterface = {
|
|
10
|
+
address: string,
|
|
11
|
+
publicKey: string
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* A type with minimum possible required data about a bitcoin wallet to be able to estimate fees and sign PSBTs
|
|
16
|
+
*
|
|
17
|
+
* @category Bitcoin
|
|
18
|
+
*/
|
|
19
|
+
export type MinimalBitcoinWalletInterfaceWithSigner = MinimalBitcoinWalletInterface & {
|
|
20
|
+
signPsbt: (psbtToSign: {psbt: Transaction, psbtHex: string, psbtBase64: string}, signInputs: number[]) => Promise<Transaction | string>
|
|
21
|
+
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A type with minimum possible required functionality to be usable with lightning network swaps, i.e.
|
|
3
|
-
* a function to pay bolt11 lightning network invoices.
|
|
4
|
-
*
|
|
5
|
-
* @category Lightning
|
|
6
|
-
*/
|
|
7
|
-
export type MinimalLightningNetworkWalletInterface = {
|
|
8
|
-
payInvoice: (bolt11PaymentRequest: string) => Promise<string>
|
|
9
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* A type with minimum possible required functionality to be usable with lightning network swaps, i.e.
|
|
3
|
+
* a function to pay bolt11 lightning network invoices.
|
|
4
|
+
*
|
|
5
|
+
* @category Lightning
|
|
6
|
+
*/
|
|
7
|
+
export type MinimalLightningNetworkWalletInterface = {
|
|
8
|
+
payInvoice: (bolt11PaymentRequest: string) => Promise<string>
|
|
9
|
+
}
|
|
@@ -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,132 +1,132 @@
|
|
|
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
|
-
|
|
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
|
+
|