@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
|
@@ -1,285 +1,285 @@
|
|
|
1
|
-
import {ISwapWrapper, ISwapWrapperOptions, SwapTypeDefinition, WrapperCtorTokens} from "../ISwapWrapper";
|
|
2
|
-
import {
|
|
3
|
-
ChainType,
|
|
4
|
-
ClaimEvent,
|
|
5
|
-
InitializeEvent,
|
|
6
|
-
RefundEvent,
|
|
7
|
-
SignatureData,
|
|
8
|
-
SwapCommitState,
|
|
9
|
-
SwapEvent
|
|
10
|
-
} from "@atomiqlabs/base";
|
|
11
|
-
import {ISwap} from "../ISwap";
|
|
12
|
-
import {UnifiedSwapStorage} from "../../storage/UnifiedSwapStorage";
|
|
13
|
-
import {UnifiedSwapEventListener} from "../../events/UnifiedSwapEventListener";
|
|
14
|
-
import {ISwapPrice} from "../../prices/abstract/ISwapPrice";
|
|
15
|
-
import {EventEmitter} from "events";
|
|
16
|
-
import {SwapType} from "../../enums/SwapType";
|
|
17
|
-
import {IEscrowSwap} from "./IEscrowSwap";
|
|
18
|
-
import {Intermediary} from "../../intermediaries/Intermediary";
|
|
19
|
-
import {IntermediaryAPI} from "../../intermediaries/apis/IntermediaryAPI";
|
|
20
|
-
|
|
21
|
-
export type IEscrowSwapDefinition<T extends ChainType, W extends IEscrowSwapWrapper<T, any>, S extends IEscrowSwap<T>> = SwapTypeDefinition<T, W, S>;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Base class for wrappers of escrow-based swaps (i.e. swaps utilizing PrTLC and HTLC primitives)
|
|
25
|
-
*
|
|
26
|
-
* @category Swaps/Abstract
|
|
27
|
-
*/
|
|
28
|
-
export abstract class IEscrowSwapWrapper<
|
|
29
|
-
T extends ChainType,
|
|
30
|
-
D extends IEscrowSwapDefinition<T, IEscrowSwapWrapper<T, D>, IEscrowSwap<T, D>>,
|
|
31
|
-
O extends ISwapWrapperOptions = ISwapWrapperOptions
|
|
32
|
-
> extends ISwapWrapper<T, D, O> {
|
|
33
|
-
readonly abstract TYPE: SwapType;
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* @internal
|
|
37
|
-
*/
|
|
38
|
-
readonly _contract: (version?: string) => T["Contract"] = (version?: string) => {
|
|
39
|
-
const _version = version ?? "v1";
|
|
40
|
-
const data = this._versionedContracts[_version];
|
|
41
|
-
if(data==null) throw new Error(`Invalid contract version ${_version} requested`);
|
|
42
|
-
return data.swapContract;
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* @internal
|
|
46
|
-
*/
|
|
47
|
-
readonly _swapDataDeserializer: (version?: string) => new (data: any) => T["Data"] = (version?: string) => {
|
|
48
|
-
const _version = version ?? "v1";
|
|
49
|
-
const data = this._versionedContracts[_version];
|
|
50
|
-
if(data==null) throw new Error(`Invalid contract version ${_version} requested`);
|
|
51
|
-
return data.swapDataConstructor;
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
//TODO: Properly populate in constructor
|
|
55
|
-
readonly _versionedContracts: {
|
|
56
|
-
[version: string]: {
|
|
57
|
-
swapContract: T["Contract"],
|
|
58
|
-
swapDataConstructor: new (data: any) => T["Data"]
|
|
59
|
-
}
|
|
60
|
-
} = {};
|
|
61
|
-
|
|
62
|
-
constructor(
|
|
63
|
-
chainIdentifier: string,
|
|
64
|
-
unifiedStorage: UnifiedSwapStorage<T>,
|
|
65
|
-
unifiedChainEvents: UnifiedSwapEventListener<T>,
|
|
66
|
-
chain: T["ChainInterface"],
|
|
67
|
-
prices: ISwapPrice,
|
|
68
|
-
tokens: WrapperCtorTokens,
|
|
69
|
-
lpApi: IntermediaryAPI,
|
|
70
|
-
options: O,
|
|
71
|
-
versionedContracts: {
|
|
72
|
-
[version: string]: {
|
|
73
|
-
swapContract: T["Contract"],
|
|
74
|
-
swapDataConstructor: new (data: any) => T["Data"]
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
events?: EventEmitter<{swapState: [ISwap]}>
|
|
78
|
-
) {
|
|
79
|
-
super(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, prices, tokens, lpApi, options, events);
|
|
80
|
-
this._versionedContracts = versionedContracts;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Pre-fetches signature verification data from the server's pre-sent promise, doesn't throw, instead returns null
|
|
85
|
-
*
|
|
86
|
-
* @param signDataPrefetch Promise that resolves when we receive "signDataPrefetch" from the LP in streaming mode
|
|
87
|
-
* @param contractVersion
|
|
88
|
-
* @returns Pre-fetched signature verification data or null if failed
|
|
89
|
-
*
|
|
90
|
-
* @internal
|
|
91
|
-
*/
|
|
92
|
-
protected preFetchSignData(signDataPrefetch: Promise<any | null>, contractVersion: string): Promise<T["PreFetchVerification"] | undefined> {
|
|
93
|
-
if(this._contract(contractVersion).preFetchForInitSignatureVerification==null) {
|
|
94
|
-
// Catch promise rejections, should they happen
|
|
95
|
-
signDataPrefetch.catch(() => {});
|
|
96
|
-
return Promise.resolve(undefined);
|
|
97
|
-
}
|
|
98
|
-
return signDataPrefetch.then(obj => {
|
|
99
|
-
if(obj==null) return undefined;
|
|
100
|
-
return this._contract(contractVersion).preFetchForInitSignatureVerification!(obj);
|
|
101
|
-
}).catch(e => {
|
|
102
|
-
this.logger.error("preFetchSignData(): Error: ", e);
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Verifies swap initialization signature returned by the intermediary
|
|
108
|
-
*
|
|
109
|
-
* @param initiator A smart chain account initiating the swap
|
|
110
|
-
* @param data Parsed swap data from the intermediary
|
|
111
|
-
* @param signature Response of the intermediary
|
|
112
|
-
* @param feeRatePromise Pre-fetched fee rate promise
|
|
113
|
-
* @param preFetchSignatureVerificationData Pre-fetched signature verification data
|
|
114
|
-
* @param contractVersion
|
|
115
|
-
* @param abortSignal
|
|
116
|
-
* @returns Swap initialization signature expiry
|
|
117
|
-
* @throws {SignatureVerificationError} when swap init signature is invalid
|
|
118
|
-
*
|
|
119
|
-
* @internal
|
|
120
|
-
*/
|
|
121
|
-
protected async verifyReturnedSignature(
|
|
122
|
-
initiator: string,
|
|
123
|
-
data: T["Data"],
|
|
124
|
-
signature: SignatureData,
|
|
125
|
-
feeRatePromise: Promise<any>,
|
|
126
|
-
preFetchSignatureVerificationData: Promise<any>,
|
|
127
|
-
contractVersion: string,
|
|
128
|
-
abortSignal?: AbortSignal,
|
|
129
|
-
): Promise<number> {
|
|
130
|
-
const [feeRate, preFetchedSignatureData] = await Promise.all([feeRatePromise, preFetchSignatureVerificationData]);
|
|
131
|
-
await this._contract(contractVersion).isValidInitAuthorization(initiator, data, signature, feeRate, preFetchedSignatureData);
|
|
132
|
-
return await this._contract(contractVersion).getInitAuthorizationExpiry(data, signature, preFetchedSignatureData);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Processes InitializeEvent for a given swap
|
|
137
|
-
* @param swap
|
|
138
|
-
* @param event
|
|
139
|
-
* @returns Whether the swap was updated/changed
|
|
140
|
-
*
|
|
141
|
-
* @internal
|
|
142
|
-
*/
|
|
143
|
-
protected abstract processEventInitialize(swap: D["Swap"], event: InitializeEvent<T["Data"]>): Promise<boolean>;
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Processes ClaimEvent for a given swap
|
|
147
|
-
* @param swap
|
|
148
|
-
* @param event
|
|
149
|
-
* @returns Whether the swap was updated/changed
|
|
150
|
-
*
|
|
151
|
-
* @internal
|
|
152
|
-
*/
|
|
153
|
-
protected abstract processEventClaim(swap: D["Swap"], event: ClaimEvent<T["Data"]>): Promise<boolean>;
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Processes RefundEvent for a given swap
|
|
157
|
-
* @param swap
|
|
158
|
-
* @param event
|
|
159
|
-
* @returns Whether the swap was updated/changed
|
|
160
|
-
*
|
|
161
|
-
* @internal
|
|
162
|
-
*/
|
|
163
|
-
protected abstract processEventRefund(swap: D["Swap"], event: RefundEvent<T["Data"]>): Promise<boolean>;
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Processes a single SC on-chain event
|
|
167
|
-
* @param event
|
|
168
|
-
* @param swap
|
|
169
|
-
*
|
|
170
|
-
* @internal
|
|
171
|
-
*/
|
|
172
|
-
protected async processEvent(event: SwapEvent<T["Data"]>, swap: D["Swap"]): Promise<void> {
|
|
173
|
-
if(swap==null) return;
|
|
174
|
-
|
|
175
|
-
let swapChanged: boolean = false;
|
|
176
|
-
if(event instanceof InitializeEvent) {
|
|
177
|
-
swapChanged = await this.processEventInitialize(swap, event);
|
|
178
|
-
if(event.meta?.txId!=null && swap._commitTxId!==event.meta.txId) {
|
|
179
|
-
swap._commitTxId = event.meta.txId;
|
|
180
|
-
swapChanged ||= true;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
if(event instanceof ClaimEvent) {
|
|
184
|
-
swapChanged = await this.processEventClaim(swap, event);
|
|
185
|
-
if(event.meta?.txId!=null && swap._claimTxId!==event.meta.txId) {
|
|
186
|
-
swap._claimTxId = event.meta.txId;
|
|
187
|
-
swapChanged ||= true;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
if(event instanceof RefundEvent) {
|
|
191
|
-
swapChanged = await this.processEventRefund(swap, event);
|
|
192
|
-
if(event.meta?.txId!=null && swap._refundTxId!==event.meta.txId) {
|
|
193
|
-
swap._refundTxId = event.meta.txId;
|
|
194
|
-
swapChanged ||= true;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
this.logger.info("processEvents(): "+event.constructor.name+" processed for "+swap.getId()+" swap: ", swap);
|
|
199
|
-
|
|
200
|
-
if(swapChanged) {
|
|
201
|
-
await swap._saveAndEmit();
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* @inheritDoc
|
|
207
|
-
* @internal
|
|
208
|
-
*/
|
|
209
|
-
protected async _checkPastSwaps(pastSwaps: D["Swap"][]): Promise<{ changedSwaps: D["Swap"][]; removeSwaps: D["Swap"][] }> {
|
|
210
|
-
const changedSwaps: D["Swap"][] = [];
|
|
211
|
-
const removeSwaps: D["Swap"][] = [];
|
|
212
|
-
|
|
213
|
-
const swapExpiredStatus: {[id: string]: boolean} = {};
|
|
214
|
-
|
|
215
|
-
const checkStatusSwaps: {[contractVersion: string]: (D["Swap"] & {_data: T["Data"]})[]} = {};
|
|
216
|
-
|
|
217
|
-
for(let pastSwap of pastSwaps) {
|
|
218
|
-
if(pastSwap._shouldFetchExpiryStatus()) {
|
|
219
|
-
//Check expiry
|
|
220
|
-
swapExpiredStatus[pastSwap.getId()] = await pastSwap._verifyQuoteDefinitelyExpired();
|
|
221
|
-
}
|
|
222
|
-
if(pastSwap._shouldFetchOnchainState()) {
|
|
223
|
-
//Add to swaps for which status should be checked
|
|
224
|
-
if(pastSwap._data!=null) (checkStatusSwaps[pastSwap._contractVersion ?? "v1"] ??= []).push(pastSwap as (D["Swap"] & {_data: T["Data"]}));
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
for(let version in checkStatusSwaps) {
|
|
229
|
-
if(this._versionedContracts[version]==null) {
|
|
230
|
-
this.logger.warn(`_checkPastSwaps(): No contract was found for ${this.chainIdentifier} version ${version}! Skipping these swaps!`);
|
|
231
|
-
continue;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
const _checkStatusSwap = checkStatusSwaps[version];
|
|
235
|
-
const swapStatuses = await this._contract(version).getCommitStatuses(
|
|
236
|
-
_checkStatusSwap.map(val => ({
|
|
237
|
-
signer: val._getInitiator(),
|
|
238
|
-
swapData: val._data
|
|
239
|
-
}))
|
|
240
|
-
);
|
|
241
|
-
|
|
242
|
-
for(let pastSwap of _checkStatusSwap) {
|
|
243
|
-
const escrowHash = pastSwap.getEscrowHash();
|
|
244
|
-
const shouldSave = await pastSwap._sync(
|
|
245
|
-
false,
|
|
246
|
-
swapExpiredStatus[pastSwap.getId()],
|
|
247
|
-
escrowHash==null ? undefined : swapStatuses[escrowHash]
|
|
248
|
-
);
|
|
249
|
-
if(shouldSave) {
|
|
250
|
-
if(pastSwap.isQuoteExpired()) {
|
|
251
|
-
removeSwaps.push(pastSwap);
|
|
252
|
-
} else {
|
|
253
|
-
changedSwaps.push(pastSwap);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
return {
|
|
260
|
-
changedSwaps,
|
|
261
|
-
removeSwaps
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Recovers a swap from smart chain on-chain data, please note that not all values for the recovered
|
|
267
|
-
* swaps might be populated, as some data is purely off-chain and can never be recovered purely
|
|
268
|
-
* from on-chain data.
|
|
269
|
-
*
|
|
270
|
-
* @param init Swap escrow initialization transaction and swap data
|
|
271
|
-
* @param state Current on-chain state of the swap
|
|
272
|
-
* @param lp Intermediary (LP) used as a counterparty for the swap
|
|
273
|
-
*/
|
|
274
|
-
public abstract recoverFromSwapDataAndState(
|
|
275
|
-
init: {
|
|
276
|
-
data: T["Data"],
|
|
277
|
-
getInitTxId: () => Promise<string>,
|
|
278
|
-
getTxBlock: () => Promise<{blockTime: number, blockHeight: number}>
|
|
279
|
-
},
|
|
280
|
-
state: SwapCommitState,
|
|
281
|
-
contractVersion: string,
|
|
282
|
-
lp?: Intermediary
|
|
283
|
-
): Promise<D["Swap"] | null>;
|
|
284
|
-
|
|
1
|
+
import {ISwapWrapper, ISwapWrapperOptions, SwapTypeDefinition, WrapperCtorTokens} from "../ISwapWrapper";
|
|
2
|
+
import {
|
|
3
|
+
ChainType,
|
|
4
|
+
ClaimEvent,
|
|
5
|
+
InitializeEvent,
|
|
6
|
+
RefundEvent,
|
|
7
|
+
SignatureData,
|
|
8
|
+
SwapCommitState,
|
|
9
|
+
SwapEvent
|
|
10
|
+
} from "@atomiqlabs/base";
|
|
11
|
+
import {ISwap} from "../ISwap";
|
|
12
|
+
import {UnifiedSwapStorage} from "../../storage/UnifiedSwapStorage";
|
|
13
|
+
import {UnifiedSwapEventListener} from "../../events/UnifiedSwapEventListener";
|
|
14
|
+
import {ISwapPrice} from "../../prices/abstract/ISwapPrice";
|
|
15
|
+
import {EventEmitter} from "events";
|
|
16
|
+
import {SwapType} from "../../enums/SwapType";
|
|
17
|
+
import {IEscrowSwap} from "./IEscrowSwap";
|
|
18
|
+
import {Intermediary} from "../../intermediaries/Intermediary";
|
|
19
|
+
import {IntermediaryAPI} from "../../intermediaries/apis/IntermediaryAPI";
|
|
20
|
+
|
|
21
|
+
export type IEscrowSwapDefinition<T extends ChainType, W extends IEscrowSwapWrapper<T, any>, S extends IEscrowSwap<T>> = SwapTypeDefinition<T, W, S>;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Base class for wrappers of escrow-based swaps (i.e. swaps utilizing PrTLC and HTLC primitives)
|
|
25
|
+
*
|
|
26
|
+
* @category Swaps/Abstract
|
|
27
|
+
*/
|
|
28
|
+
export abstract class IEscrowSwapWrapper<
|
|
29
|
+
T extends ChainType,
|
|
30
|
+
D extends IEscrowSwapDefinition<T, IEscrowSwapWrapper<T, D>, IEscrowSwap<T, D>>,
|
|
31
|
+
O extends ISwapWrapperOptions = ISwapWrapperOptions
|
|
32
|
+
> extends ISwapWrapper<T, D, O> {
|
|
33
|
+
readonly abstract TYPE: SwapType;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
readonly _contract: (version?: string) => T["Contract"] = (version?: string) => {
|
|
39
|
+
const _version = version ?? "v1";
|
|
40
|
+
const data = this._versionedContracts[_version];
|
|
41
|
+
if(data==null) throw new Error(`Invalid contract version ${_version} requested`);
|
|
42
|
+
return data.swapContract;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
readonly _swapDataDeserializer: (version?: string) => new (data: any) => T["Data"] = (version?: string) => {
|
|
48
|
+
const _version = version ?? "v1";
|
|
49
|
+
const data = this._versionedContracts[_version];
|
|
50
|
+
if(data==null) throw new Error(`Invalid contract version ${_version} requested`);
|
|
51
|
+
return data.swapDataConstructor;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
//TODO: Properly populate in constructor
|
|
55
|
+
readonly _versionedContracts: {
|
|
56
|
+
[version: string]: {
|
|
57
|
+
swapContract: T["Contract"],
|
|
58
|
+
swapDataConstructor: new (data: any) => T["Data"]
|
|
59
|
+
}
|
|
60
|
+
} = {};
|
|
61
|
+
|
|
62
|
+
constructor(
|
|
63
|
+
chainIdentifier: string,
|
|
64
|
+
unifiedStorage: UnifiedSwapStorage<T>,
|
|
65
|
+
unifiedChainEvents: UnifiedSwapEventListener<T>,
|
|
66
|
+
chain: T["ChainInterface"],
|
|
67
|
+
prices: ISwapPrice,
|
|
68
|
+
tokens: WrapperCtorTokens,
|
|
69
|
+
lpApi: IntermediaryAPI,
|
|
70
|
+
options: O,
|
|
71
|
+
versionedContracts: {
|
|
72
|
+
[version: string]: {
|
|
73
|
+
swapContract: T["Contract"],
|
|
74
|
+
swapDataConstructor: new (data: any) => T["Data"]
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
events?: EventEmitter<{swapState: [ISwap]}>
|
|
78
|
+
) {
|
|
79
|
+
super(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, prices, tokens, lpApi, options, events);
|
|
80
|
+
this._versionedContracts = versionedContracts;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Pre-fetches signature verification data from the server's pre-sent promise, doesn't throw, instead returns null
|
|
85
|
+
*
|
|
86
|
+
* @param signDataPrefetch Promise that resolves when we receive "signDataPrefetch" from the LP in streaming mode
|
|
87
|
+
* @param contractVersion
|
|
88
|
+
* @returns Pre-fetched signature verification data or null if failed
|
|
89
|
+
*
|
|
90
|
+
* @internal
|
|
91
|
+
*/
|
|
92
|
+
protected preFetchSignData(signDataPrefetch: Promise<any | null>, contractVersion: string): Promise<T["PreFetchVerification"] | undefined> {
|
|
93
|
+
if(this._contract(contractVersion).preFetchForInitSignatureVerification==null) {
|
|
94
|
+
// Catch promise rejections, should they happen
|
|
95
|
+
signDataPrefetch.catch(() => {});
|
|
96
|
+
return Promise.resolve(undefined);
|
|
97
|
+
}
|
|
98
|
+
return signDataPrefetch.then(obj => {
|
|
99
|
+
if(obj==null) return undefined;
|
|
100
|
+
return this._contract(contractVersion).preFetchForInitSignatureVerification!(obj);
|
|
101
|
+
}).catch(e => {
|
|
102
|
+
this.logger.error("preFetchSignData(): Error: ", e);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Verifies swap initialization signature returned by the intermediary
|
|
108
|
+
*
|
|
109
|
+
* @param initiator A smart chain account initiating the swap
|
|
110
|
+
* @param data Parsed swap data from the intermediary
|
|
111
|
+
* @param signature Response of the intermediary
|
|
112
|
+
* @param feeRatePromise Pre-fetched fee rate promise
|
|
113
|
+
* @param preFetchSignatureVerificationData Pre-fetched signature verification data
|
|
114
|
+
* @param contractVersion
|
|
115
|
+
* @param abortSignal
|
|
116
|
+
* @returns Swap initialization signature expiry
|
|
117
|
+
* @throws {SignatureVerificationError} when swap init signature is invalid
|
|
118
|
+
*
|
|
119
|
+
* @internal
|
|
120
|
+
*/
|
|
121
|
+
protected async verifyReturnedSignature(
|
|
122
|
+
initiator: string,
|
|
123
|
+
data: T["Data"],
|
|
124
|
+
signature: SignatureData,
|
|
125
|
+
feeRatePromise: Promise<any>,
|
|
126
|
+
preFetchSignatureVerificationData: Promise<any>,
|
|
127
|
+
contractVersion: string,
|
|
128
|
+
abortSignal?: AbortSignal,
|
|
129
|
+
): Promise<number> {
|
|
130
|
+
const [feeRate, preFetchedSignatureData] = await Promise.all([feeRatePromise, preFetchSignatureVerificationData]);
|
|
131
|
+
await this._contract(contractVersion).isValidInitAuthorization(initiator, data, signature, feeRate, preFetchedSignatureData);
|
|
132
|
+
return await this._contract(contractVersion).getInitAuthorizationExpiry(data, signature, preFetchedSignatureData);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Processes InitializeEvent for a given swap
|
|
137
|
+
* @param swap
|
|
138
|
+
* @param event
|
|
139
|
+
* @returns Whether the swap was updated/changed
|
|
140
|
+
*
|
|
141
|
+
* @internal
|
|
142
|
+
*/
|
|
143
|
+
protected abstract processEventInitialize(swap: D["Swap"], event: InitializeEvent<T["Data"]>): Promise<boolean>;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Processes ClaimEvent for a given swap
|
|
147
|
+
* @param swap
|
|
148
|
+
* @param event
|
|
149
|
+
* @returns Whether the swap was updated/changed
|
|
150
|
+
*
|
|
151
|
+
* @internal
|
|
152
|
+
*/
|
|
153
|
+
protected abstract processEventClaim(swap: D["Swap"], event: ClaimEvent<T["Data"]>): Promise<boolean>;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Processes RefundEvent for a given swap
|
|
157
|
+
* @param swap
|
|
158
|
+
* @param event
|
|
159
|
+
* @returns Whether the swap was updated/changed
|
|
160
|
+
*
|
|
161
|
+
* @internal
|
|
162
|
+
*/
|
|
163
|
+
protected abstract processEventRefund(swap: D["Swap"], event: RefundEvent<T["Data"]>): Promise<boolean>;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Processes a single SC on-chain event
|
|
167
|
+
* @param event
|
|
168
|
+
* @param swap
|
|
169
|
+
*
|
|
170
|
+
* @internal
|
|
171
|
+
*/
|
|
172
|
+
protected async processEvent(event: SwapEvent<T["Data"]>, swap: D["Swap"]): Promise<void> {
|
|
173
|
+
if(swap==null) return;
|
|
174
|
+
|
|
175
|
+
let swapChanged: boolean = false;
|
|
176
|
+
if(event instanceof InitializeEvent) {
|
|
177
|
+
swapChanged = await this.processEventInitialize(swap, event);
|
|
178
|
+
if(event.meta?.txId!=null && swap._commitTxId!==event.meta.txId) {
|
|
179
|
+
swap._commitTxId = event.meta.txId;
|
|
180
|
+
swapChanged ||= true;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if(event instanceof ClaimEvent) {
|
|
184
|
+
swapChanged = await this.processEventClaim(swap, event);
|
|
185
|
+
if(event.meta?.txId!=null && swap._claimTxId!==event.meta.txId) {
|
|
186
|
+
swap._claimTxId = event.meta.txId;
|
|
187
|
+
swapChanged ||= true;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if(event instanceof RefundEvent) {
|
|
191
|
+
swapChanged = await this.processEventRefund(swap, event);
|
|
192
|
+
if(event.meta?.txId!=null && swap._refundTxId!==event.meta.txId) {
|
|
193
|
+
swap._refundTxId = event.meta.txId;
|
|
194
|
+
swapChanged ||= true;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
this.logger.info("processEvents(): "+event.constructor.name+" processed for "+swap.getId()+" swap: ", swap);
|
|
199
|
+
|
|
200
|
+
if(swapChanged) {
|
|
201
|
+
await swap._saveAndEmit();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* @inheritDoc
|
|
207
|
+
* @internal
|
|
208
|
+
*/
|
|
209
|
+
protected async _checkPastSwaps(pastSwaps: D["Swap"][]): Promise<{ changedSwaps: D["Swap"][]; removeSwaps: D["Swap"][] }> {
|
|
210
|
+
const changedSwaps: D["Swap"][] = [];
|
|
211
|
+
const removeSwaps: D["Swap"][] = [];
|
|
212
|
+
|
|
213
|
+
const swapExpiredStatus: {[id: string]: boolean} = {};
|
|
214
|
+
|
|
215
|
+
const checkStatusSwaps: {[contractVersion: string]: (D["Swap"] & {_data: T["Data"]})[]} = {};
|
|
216
|
+
|
|
217
|
+
for(let pastSwap of pastSwaps) {
|
|
218
|
+
if(pastSwap._shouldFetchExpiryStatus()) {
|
|
219
|
+
//Check expiry
|
|
220
|
+
swapExpiredStatus[pastSwap.getId()] = await pastSwap._verifyQuoteDefinitelyExpired();
|
|
221
|
+
}
|
|
222
|
+
if(pastSwap._shouldFetchOnchainState()) {
|
|
223
|
+
//Add to swaps for which status should be checked
|
|
224
|
+
if(pastSwap._data!=null) (checkStatusSwaps[pastSwap._contractVersion ?? "v1"] ??= []).push(pastSwap as (D["Swap"] & {_data: T["Data"]}));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
for(let version in checkStatusSwaps) {
|
|
229
|
+
if(this._versionedContracts[version]==null) {
|
|
230
|
+
this.logger.warn(`_checkPastSwaps(): No contract was found for ${this.chainIdentifier} version ${version}! Skipping these swaps!`);
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const _checkStatusSwap = checkStatusSwaps[version];
|
|
235
|
+
const swapStatuses = await this._contract(version).getCommitStatuses(
|
|
236
|
+
_checkStatusSwap.map(val => ({
|
|
237
|
+
signer: val._getInitiator(),
|
|
238
|
+
swapData: val._data
|
|
239
|
+
}))
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
for(let pastSwap of _checkStatusSwap) {
|
|
243
|
+
const escrowHash = pastSwap.getEscrowHash();
|
|
244
|
+
const shouldSave = await pastSwap._sync(
|
|
245
|
+
false,
|
|
246
|
+
swapExpiredStatus[pastSwap.getId()],
|
|
247
|
+
escrowHash==null ? undefined : swapStatuses[escrowHash]
|
|
248
|
+
);
|
|
249
|
+
if(shouldSave) {
|
|
250
|
+
if(pastSwap.isQuoteExpired()) {
|
|
251
|
+
removeSwaps.push(pastSwap);
|
|
252
|
+
} else {
|
|
253
|
+
changedSwaps.push(pastSwap);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return {
|
|
260
|
+
changedSwaps,
|
|
261
|
+
removeSwaps
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Recovers a swap from smart chain on-chain data, please note that not all values for the recovered
|
|
267
|
+
* swaps might be populated, as some data is purely off-chain and can never be recovered purely
|
|
268
|
+
* from on-chain data.
|
|
269
|
+
*
|
|
270
|
+
* @param init Swap escrow initialization transaction and swap data
|
|
271
|
+
* @param state Current on-chain state of the swap
|
|
272
|
+
* @param lp Intermediary (LP) used as a counterparty for the swap
|
|
273
|
+
*/
|
|
274
|
+
public abstract recoverFromSwapDataAndState(
|
|
275
|
+
init: {
|
|
276
|
+
data: T["Data"],
|
|
277
|
+
getInitTxId: () => Promise<string>,
|
|
278
|
+
getTxBlock: () => Promise<{blockTime: number, blockHeight: number}>
|
|
279
|
+
},
|
|
280
|
+
state: SwapCommitState,
|
|
281
|
+
contractVersion: string,
|
|
282
|
+
lp?: Intermediary
|
|
283
|
+
): Promise<D["Swap"] | null>;
|
|
284
|
+
|
|
285
285
|
}
|