@atomiqlabs/sdk 7.0.11 → 8.0.7

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.
Files changed (364) hide show
  1. package/README.md +45 -29
  2. package/dist/SmartChainAssets.d.ts +11 -3
  3. package/dist/SmartChainAssets.js +7 -3
  4. package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
  5. package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
  6. package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
  7. package/dist/bitcoin/LightningNetworkApi.js +2 -0
  8. package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
  9. package/dist/bitcoin/coinselect2/accumulative.js +52 -0
  10. package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
  11. package/dist/bitcoin/coinselect2/blackjack.js +38 -0
  12. package/dist/bitcoin/coinselect2/index.d.ts +19 -0
  13. package/dist/bitcoin/coinselect2/index.js +69 -0
  14. package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
  15. package/dist/bitcoin/coinselect2/utils.js +123 -0
  16. package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
  17. package/dist/bitcoin/mempool/MempoolApi.js +311 -0
  18. package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
  19. package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
  20. package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
  21. package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
  22. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
  23. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
  24. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
  25. package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
  26. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
  27. package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
  28. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
  29. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
  30. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
  31. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
  32. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
  33. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
  34. package/dist/enums/FeeType.d.ts +8 -0
  35. package/dist/enums/FeeType.js +12 -0
  36. package/dist/enums/SwapAmountType.d.ts +8 -0
  37. package/dist/enums/SwapAmountType.js +12 -0
  38. package/dist/enums/SwapDirection.d.ts +8 -0
  39. package/dist/enums/SwapDirection.js +12 -0
  40. package/dist/enums/SwapType.d.ts +14 -0
  41. package/dist/enums/SwapType.js +18 -0
  42. package/dist/errors/IntermediaryError.d.ts +9 -0
  43. package/dist/errors/IntermediaryError.js +26 -0
  44. package/dist/errors/PaymentAuthError.d.ts +11 -0
  45. package/dist/errors/PaymentAuthError.js +23 -0
  46. package/dist/errors/RequestError.d.ts +18 -0
  47. package/dist/errors/RequestError.js +46 -0
  48. package/dist/errors/UserError.d.ts +7 -0
  49. package/dist/errors/UserError.js +15 -0
  50. package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
  51. package/dist/events/UnifiedSwapEventListener.js +130 -0
  52. package/dist/http/HttpUtils.d.ts +27 -0
  53. package/dist/http/HttpUtils.js +91 -0
  54. package/dist/http/paramcoders/IParamReader.d.ts +8 -0
  55. package/dist/http/paramcoders/IParamReader.js +2 -0
  56. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
  57. package/dist/http/paramcoders/ParamDecoder.js +132 -0
  58. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
  59. package/dist/http/paramcoders/ParamEncoder.js +31 -0
  60. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
  61. package/dist/http/paramcoders/SchemaVerifier.js +145 -0
  62. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
  63. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
  64. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
  65. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
  66. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
  67. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
  68. package/dist/index.d.ts +82 -4
  69. package/dist/index.js +128 -4
  70. package/dist/intermediaries/Intermediary.d.ts +111 -0
  71. package/dist/intermediaries/Intermediary.js +115 -0
  72. package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
  73. package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
  74. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
  75. package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
  76. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
  77. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
  78. package/dist/lnurl/LNURL.d.ts +102 -0
  79. package/dist/lnurl/LNURL.js +321 -0
  80. package/dist/prices/RedundantSwapPrice.d.ts +89 -0
  81. package/dist/prices/RedundantSwapPrice.js +202 -0
  82. package/dist/prices/SingleSwapPrice.d.ts +31 -0
  83. package/dist/prices/SingleSwapPrice.js +41 -0
  84. package/dist/prices/SwapPriceWithChain.d.ts +70 -0
  85. package/dist/prices/SwapPriceWithChain.js +91 -0
  86. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
  87. package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
  88. package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
  89. package/dist/prices/abstract/IPriceProvider.js +74 -0
  90. package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
  91. package/dist/prices/abstract/ISwapPrice.js +219 -0
  92. package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
  93. package/dist/prices/providers/BinancePriceProvider.js +23 -0
  94. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
  95. package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
  96. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
  97. package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
  98. package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
  99. package/dist/prices/providers/CustomPriceProvider.js +24 -0
  100. package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
  101. package/dist/prices/providers/KrakenPriceProvider.js +36 -0
  102. package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
  103. package/dist/prices/providers/OKXPriceProvider.js +23 -0
  104. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
  105. package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
  106. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
  107. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
  108. package/dist/storage/IUnifiedStorage.d.ts +73 -0
  109. package/dist/storage/IUnifiedStorage.js +2 -0
  110. package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
  111. package/dist/storage/UnifiedSwapStorage.js +83 -0
  112. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
  113. package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
  114. package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
  115. package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
  116. package/dist/swapper/Swapper.d.ts +533 -0
  117. package/dist/swapper/Swapper.js +1566 -0
  118. package/dist/swapper/SwapperFactory.d.ts +87 -0
  119. package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +40 -22
  120. package/dist/swapper/SwapperUtils.d.ts +153 -0
  121. package/dist/swapper/SwapperUtils.js +420 -0
  122. package/dist/swapper/SwapperWithChain.d.ts +214 -0
  123. package/dist/swapper/SwapperWithChain.js +315 -0
  124. package/dist/swapper/SwapperWithSigner.d.ts +178 -0
  125. package/dist/swapper/SwapperWithSigner.js +172 -0
  126. package/dist/swaps/IAddressSwap.d.ts +13 -0
  127. package/dist/swaps/IAddressSwap.js +13 -0
  128. package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
  129. package/dist/swaps/IBTCWalletSwap.js +17 -0
  130. package/dist/swaps/IClaimableSwap.d.ts +17 -0
  131. package/dist/swaps/IClaimableSwap.js +14 -0
  132. package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
  133. package/dist/swaps/IClaimableSwapWrapper.js +2 -0
  134. package/dist/swaps/IRefundableSwap.d.ts +17 -0
  135. package/dist/swaps/IRefundableSwap.js +13 -0
  136. package/dist/swaps/ISwap.d.ts +207 -0
  137. package/dist/swaps/ISwap.js +264 -0
  138. package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
  139. package/dist/swaps/ISwapWithGasDrop.js +11 -0
  140. package/dist/swaps/ISwapWrapper.d.ts +153 -0
  141. package/dist/swaps/ISwapWrapper.js +227 -0
  142. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
  143. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
  144. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
  145. package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
  146. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
  147. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
  148. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
  149. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
  150. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
  151. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
  152. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
  153. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
  154. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
  155. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
  156. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
  157. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
  158. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
  159. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
  160. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
  161. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
  162. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
  163. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
  164. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
  165. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
  166. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
  167. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
  168. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
  169. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
  170. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
  171. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
  172. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
  173. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
  174. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
  175. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
  176. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
  177. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
  178. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
  179. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
  180. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
  181. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
  182. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
  183. package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
  184. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
  185. package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
  186. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
  187. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
  188. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
  189. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
  190. package/dist/types/AmountData.d.ts +9 -0
  191. package/dist/types/AmountData.js +2 -0
  192. package/dist/types/CustomPriceFunction.d.ts +5 -0
  193. package/dist/types/CustomPriceFunction.js +2 -0
  194. package/dist/types/PriceInfoType.d.ts +28 -0
  195. package/dist/types/PriceInfoType.js +57 -0
  196. package/dist/types/SwapExecutionAction.d.ts +7 -0
  197. package/dist/types/SwapExecutionAction.js +2 -0
  198. package/dist/types/SwapWithSigner.d.ts +14 -0
  199. package/dist/types/SwapWithSigner.js +40 -0
  200. package/dist/types/Token.d.ts +53 -0
  201. package/dist/types/Token.js +58 -0
  202. package/dist/types/TokenAmount.d.ts +57 -0
  203. package/dist/types/TokenAmount.js +47 -0
  204. package/dist/types/fees/Fee.d.ts +49 -0
  205. package/dist/types/fees/Fee.js +2 -0
  206. package/dist/types/fees/FeeBreakdown.d.ts +10 -0
  207. package/dist/types/fees/FeeBreakdown.js +2 -0
  208. package/dist/types/fees/PercentagePPM.d.ts +15 -0
  209. package/dist/types/fees/PercentagePPM.js +17 -0
  210. package/dist/types/lnurl/LNURLPay.d.ts +54 -0
  211. package/dist/types/lnurl/LNURLPay.js +28 -0
  212. package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
  213. package/dist/types/lnurl/LNURLWithdraw.js +24 -0
  214. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
  215. package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
  216. package/dist/utils/BitcoinUtils.d.ts +13 -0
  217. package/dist/utils/BitcoinUtils.js +98 -0
  218. package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
  219. package/dist/utils/BitcoinWalletUtils.js +14 -0
  220. package/dist/utils/Logger.d.ts +7 -0
  221. package/dist/utils/Logger.js +12 -0
  222. package/dist/utils/RetryUtils.d.ts +21 -0
  223. package/dist/utils/RetryUtils.js +66 -0
  224. package/dist/utils/SwapUtils.d.ts +31 -0
  225. package/dist/utils/SwapUtils.js +18 -0
  226. package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
  227. package/dist/utils/TimeoutUtils.js +55 -0
  228. package/dist/utils/TokenUtils.d.ts +11 -0
  229. package/dist/utils/TokenUtils.js +29 -0
  230. package/dist/utils/TypeUtils.d.ts +7 -0
  231. package/dist/utils/TypeUtils.js +2 -0
  232. package/dist/utils/Utils.d.ts +57 -0
  233. package/dist/utils/Utils.js +178 -0
  234. package/package.json +14 -6
  235. package/src/SmartChainAssets.ts +11 -3
  236. package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
  237. package/src/bitcoin/LightningNetworkApi.ts +16 -0
  238. package/src/bitcoin/coinselect2/accumulative.ts +68 -0
  239. package/src/bitcoin/coinselect2/blackjack.ts +49 -0
  240. package/src/bitcoin/coinselect2/index.ts +92 -0
  241. package/src/bitcoin/coinselect2/utils.ts +189 -0
  242. package/src/bitcoin/mempool/MempoolApi.ts +554 -0
  243. package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
  244. package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
  245. package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
  246. package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
  247. package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
  248. package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
  249. package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
  250. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
  251. package/src/enums/FeeType.ts +9 -0
  252. package/src/enums/SwapAmountType.ts +9 -0
  253. package/src/enums/SwapDirection.ts +9 -0
  254. package/src/enums/SwapType.ts +15 -0
  255. package/src/errors/IntermediaryError.ts +24 -0
  256. package/src/errors/PaymentAuthError.ts +26 -0
  257. package/src/errors/RequestError.ts +51 -0
  258. package/src/errors/UserError.ts +14 -0
  259. package/src/events/UnifiedSwapEventListener.ts +171 -0
  260. package/src/http/HttpUtils.ts +92 -0
  261. package/src/http/paramcoders/IParamReader.ts +10 -0
  262. package/src/http/paramcoders/ParamDecoder.ts +142 -0
  263. package/src/http/paramcoders/ParamEncoder.ts +37 -0
  264. package/src/http/paramcoders/SchemaVerifier.ts +153 -0
  265. package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
  266. package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
  267. package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
  268. package/src/index.ts +102 -4
  269. package/src/intermediaries/Intermediary.ts +204 -0
  270. package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
  271. package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
  272. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
  273. package/src/lnurl/LNURL.ts +403 -0
  274. package/src/prices/RedundantSwapPrice.ts +245 -0
  275. package/src/prices/SingleSwapPrice.ts +47 -0
  276. package/src/prices/SwapPriceWithChain.ts +157 -0
  277. package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
  278. package/src/prices/abstract/IPriceProvider.ts +128 -0
  279. package/src/prices/abstract/ISwapPrice.ts +328 -0
  280. package/src/prices/providers/BinancePriceProvider.ts +41 -0
  281. package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
  282. package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
  283. package/src/prices/providers/CustomPriceProvider.ts +29 -0
  284. package/src/prices/providers/KrakenPriceProvider.ts +74 -0
  285. package/src/prices/providers/OKXPriceProvider.ts +53 -0
  286. package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
  287. package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
  288. package/src/storage/IUnifiedStorage.ts +83 -0
  289. package/src/storage/UnifiedSwapStorage.ts +104 -0
  290. package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
  291. package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
  292. package/src/swapper/Swapper.ts +2107 -0
  293. package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +116 -75
  294. package/src/swapper/SwapperUtils.ts +510 -0
  295. package/src/swapper/SwapperWithChain.ts +464 -0
  296. package/src/swapper/SwapperWithSigner.ts +300 -0
  297. package/src/swaps/IAddressSwap.ts +20 -0
  298. package/src/swaps/IBTCWalletSwap.ts +77 -0
  299. package/src/swaps/IClaimableSwap.ts +30 -0
  300. package/src/swaps/IClaimableSwapWrapper.ts +9 -0
  301. package/src/swaps/IRefundableSwap.ts +29 -0
  302. package/src/swaps/ISwap.ts +490 -0
  303. package/src/swaps/ISwapWithGasDrop.ts +19 -0
  304. package/src/swaps/ISwapWrapper.ts +344 -0
  305. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
  306. package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
  307. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
  308. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
  309. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
  310. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
  311. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
  312. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
  313. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
  314. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
  315. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
  316. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
  317. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
  318. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
  319. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
  320. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
  321. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
  322. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
  323. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
  324. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
  325. package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
  326. package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
  327. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
  328. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
  329. package/src/types/AmountData.ts +9 -0
  330. package/src/types/CustomPriceFunction.ts +5 -0
  331. package/src/types/PriceInfoType.ts +67 -0
  332. package/src/types/SwapExecutionAction.ts +8 -0
  333. package/src/types/SwapWithSigner.ts +57 -0
  334. package/src/types/Token.ts +90 -0
  335. package/src/types/TokenAmount.ts +110 -0
  336. package/src/types/fees/Fee.ts +55 -0
  337. package/src/types/fees/FeeBreakdown.ts +11 -0
  338. package/src/types/fees/PercentagePPM.ts +24 -0
  339. package/src/types/lnurl/LNURLPay.ts +72 -0
  340. package/src/types/lnurl/LNURLWithdraw.ts +55 -0
  341. package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
  342. package/src/utils/BitcoinUtils.ts +86 -0
  343. package/src/utils/BitcoinWalletUtils.ts +16 -0
  344. package/src/utils/Logger.ts +15 -0
  345. package/src/utils/RetryUtils.ts +71 -0
  346. package/src/utils/SwapUtils.ts +38 -0
  347. package/src/utils/TimeoutUtils.ts +50 -0
  348. package/src/utils/TokenUtils.ts +25 -0
  349. package/src/utils/TypeUtils.ts +9 -0
  350. package/src/utils/Utils.ts +182 -0
  351. package/dist/SwapperFactory.d.ts +0 -52
  352. package/dist/Utils.js +0 -37
  353. package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
  354. package/dist/fs-storage/FileSystemStorageManager.js +0 -60
  355. package/dist/fs-storage/index.d.ts +0 -1
  356. package/dist/fs-storage/index.js +0 -17
  357. package/src/SmartChainAssets.js +0 -75
  358. package/src/SwapperFactory.js +0 -120
  359. package/src/Utils.js +0 -37
  360. package/src/Utils.ts +0 -31
  361. package/src/fs-storage/FileSystemStorageManager.ts +0 -71
  362. package/src/fs-storage/index.ts +0 -1
  363. package/src/index.js +0 -21
  364. package/src/storage/LocalStorageManager.js +0 -72
@@ -0,0 +1,510 @@
1
+ import {decode as bolt11Decode} from "@atomiqlabs/bolt11";
2
+ import {Address, Transaction} from "@scure/btc-signer";
3
+ import {LNURL} from "../lnurl/LNURL";
4
+ import {BTC_NETWORK} from "@scure/btc-signer/utils";
5
+ import {SwapType} from "../enums/SwapType";
6
+ import {ChainIds, MultiChain, Swapper} from "./Swapper";
7
+ import {IBitcoinWallet} from "../bitcoin/wallet/IBitcoinWallet";
8
+ import {SingleAddressBitcoinWallet} from "../bitcoin/wallet/SingleAddressBitcoinWallet";
9
+ import {BigIntBufferUtils, ChainSwapType, isAbstractSigner} from "@atomiqlabs/base";
10
+ import {bigIntMax, fromDecimal, randomBytes} from "../utils/Utils";
11
+ import {MinimalBitcoinWalletInterface} from "../bitcoin/wallet/MinimalBitcoinWalletInterface";
12
+ import {TokenAmount, toTokenAmount} from "../types/TokenAmount";
13
+ import {BitcoinTokens, SCToken} from "../types/Token";
14
+ import {isLNURLWithdraw, LNURLWithdraw} from "../types/lnurl/LNURLWithdraw";
15
+ import {isLNURLPay, LNURLPay} from "../types/lnurl/LNURLPay";
16
+ import {toBitcoinWallet} from "../utils/BitcoinWalletUtils";
17
+
18
+ /**
19
+ * Utility class providing helper methods for swap operations
20
+ * @category Core
21
+ */
22
+ export class SwapperUtils<T extends MultiChain> {
23
+
24
+ readonly bitcoinNetwork: BTC_NETWORK;
25
+ private readonly root: Swapper<T>;
26
+
27
+ constructor(root: Swapper<T>) {
28
+ this.bitcoinNetwork = root.bitcoinNetwork;
29
+ this.root = root;
30
+ }
31
+
32
+ isValidSmartChainAddress(address: string, chainId?: ChainIds<T>): boolean {
33
+ if(chainId!=null) {
34
+ if(this.root.chains[chainId]==null) throw new Error(`Unknown chain id: ${chainId}`);
35
+ return this.root.chains[chainId].chainInterface.isValidAddress(address);
36
+ }
37
+ for(let chainId of this.root.getSmartChains()) {
38
+ if(this.root.chains[chainId].chainInterface.isValidAddress(address)) return true;
39
+ }
40
+ return false;
41
+ }
42
+
43
+ /**
44
+ * Returns true if string is a valid BOLT11 bitcoin lightning invoice
45
+ *
46
+ * @param lnpr
47
+ */
48
+ isLightningInvoice(lnpr: string): boolean {
49
+ try {
50
+ bolt11Decode(lnpr);
51
+ return true;
52
+ } catch (e) {}
53
+ return false;
54
+ }
55
+
56
+ /**
57
+ * Returns true if string is a valid bitcoin address
58
+ *
59
+ * @param addr
60
+ */
61
+ isValidBitcoinAddress(addr: string): boolean {
62
+ try {
63
+ Address(this.bitcoinNetwork).decode(addr);
64
+ return true;
65
+ } catch (e) {
66
+ return false;
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Returns true if string is a valid BOLT11 bitcoin lightning invoice WITH AMOUNT
72
+ *
73
+ * @param lnpr
74
+ */
75
+ isValidLightningInvoice(lnpr: string): boolean {
76
+ try {
77
+ const parsed = bolt11Decode(lnpr);
78
+ if(parsed.millisatoshis!=null) return true;
79
+ } catch (e) {}
80
+ return false;
81
+ }
82
+
83
+ /**
84
+ * Returns true if string is a valid LNURL (no checking on type is performed)
85
+ *
86
+ * @param lnurl
87
+ */
88
+ isValidLNURL(lnurl: string): boolean {
89
+ return LNURL.isLNURL(lnurl);
90
+ }
91
+
92
+ /**
93
+ * Returns type and data about an LNURL
94
+ *
95
+ * @param lnurl
96
+ * @param shouldRetry
97
+ */
98
+ getLNURLTypeAndData(lnurl: string, shouldRetry?: boolean): Promise<LNURLPay | LNURLWithdraw | null> {
99
+ return LNURL.getLNURLType(lnurl, shouldRetry);
100
+ }
101
+
102
+ /**
103
+ * Returns satoshi value of BOLT11 bitcoin lightning invoice WITH AMOUNT, returns null otherwise
104
+ *
105
+ * @param lnpr
106
+ */
107
+ getLightningInvoiceValue(lnpr: string): bigint | null {
108
+ const parsed = bolt11Decode(lnpr);
109
+ if(parsed.millisatoshis!=null) return (BigInt(parsed.millisatoshis) + 999n) / 1000n;
110
+ return null;
111
+ }
112
+
113
+ private parseBitcoinAddress(resultText: string): {
114
+ address: string,
115
+ type: "BITCOIN",
116
+ swapType: SwapType.TO_BTC,
117
+ amount?: TokenAmount
118
+ } | null {
119
+ let _amount: bigint | undefined = undefined;
120
+ if(resultText.includes("?")) {
121
+ const arr = resultText.split("?");
122
+ resultText = arr[0];
123
+ const params = arr[1].split("&");
124
+ for(let param of params) {
125
+ const arr2 = param.split("=");
126
+ const key = arr2[0];
127
+ const value = decodeURIComponent(arr2[1]);
128
+ if(key==="amount") {
129
+ _amount = fromDecimal(parseFloat(value).toFixed(8), 8);
130
+ }
131
+ }
132
+ }
133
+ if(this.isValidBitcoinAddress(resultText)) {
134
+ return {
135
+ address: resultText,
136
+ type: "BITCOIN",
137
+ swapType: SwapType.TO_BTC,
138
+ amount: _amount==null ? undefined : toTokenAmount(_amount, BitcoinTokens.BTC, this.root.prices)
139
+ };
140
+ }
141
+ return null;
142
+ }
143
+
144
+ private parseLNURLSync(resultText: string): {
145
+ address: string,
146
+ type: "LNURL",
147
+ swapType: null
148
+ } | null {
149
+ if(this.isValidLNURL(resultText)) {
150
+ return {
151
+ address: resultText,
152
+ type: "LNURL",
153
+ swapType: null
154
+ };
155
+ }
156
+ return null;
157
+ }
158
+
159
+ private async parseLNURL(resultText: string): Promise<{
160
+ address: string,
161
+ type: "LNURL",
162
+ swapType: SwapType.TO_BTCLN | SwapType.FROM_BTCLN,
163
+ lnurl: LNURLPay | LNURLWithdraw,
164
+ min?: TokenAmount,
165
+ max?: TokenAmount,
166
+ amount?: TokenAmount
167
+ } | null> {
168
+ if(this.isValidLNURL(resultText)) {
169
+ try {
170
+ const result = await this.getLNURLTypeAndData(resultText);
171
+ if(result==null) throw new Error("Invalid LNURL specified!");
172
+ const swapType = isLNURLPay(result) ? SwapType.TO_BTCLN : isLNURLWithdraw(result) ? SwapType.FROM_BTCLN : null;
173
+ if(swapType==null) return null;
174
+ const response = {
175
+ address: resultText,
176
+ type: "LNURL",
177
+ swapType,
178
+ lnurl: result
179
+ } as const;
180
+ if(result.min===result.max) {
181
+ return {
182
+ ...response,
183
+ amount: result.min==null ? undefined : toTokenAmount(result.min, BitcoinTokens.BTCLN, this.root.prices)
184
+ }
185
+ } else {
186
+ return {
187
+ ...response,
188
+ min: result.min==null ? undefined : toTokenAmount(result.min, BitcoinTokens.BTCLN, this.root.prices),
189
+ max: result.min==null ? undefined : toTokenAmount(result.max, BitcoinTokens.BTCLN, this.root.prices)
190
+ }
191
+ }
192
+ } catch (e) {
193
+ throw new Error("Failed to contact LNURL service, check your internet connection and retry later.");
194
+ }
195
+ }
196
+ return null;
197
+ }
198
+
199
+ private parseLightningInvoice(resultText: string): {
200
+ address: string,
201
+ type: "LIGHTNING",
202
+ swapType: SwapType.TO_BTCLN,
203
+ amount: TokenAmount
204
+ } | null {
205
+ if(this.isLightningInvoice(resultText)) {
206
+ if(this.isValidLightningInvoice(resultText)) {
207
+ const amount = this.getLightningInvoiceValue(resultText);
208
+ if(amount==null) throw new Error();
209
+ return {
210
+ address: resultText,
211
+ type: "LIGHTNING",
212
+ swapType: SwapType.TO_BTCLN,
213
+ amount: toTokenAmount(amount, BitcoinTokens.BTCLN, this.root.prices)
214
+ }
215
+ } else {
216
+ throw new Error("Lightning invoice needs to contain an amount!");
217
+ }
218
+ }
219
+ return null;
220
+ }
221
+
222
+ private parseSmartchainAddress(resultText: string): {
223
+ address: string,
224
+ type: ChainIds<T>,
225
+ swapType: null,
226
+ min?: TokenAmount,
227
+ max?: TokenAmount
228
+ } | null {
229
+ for(let chainId of this.root.getSmartChains()) {
230
+ if(this.root.chains[chainId].chainInterface.isValidAddress(resultText)) {
231
+ return {
232
+ address: resultText,
233
+ type: chainId,
234
+ swapType: null
235
+ }
236
+ }
237
+ }
238
+ return null;
239
+ }
240
+
241
+ /**
242
+ * General parser for bitcoin addresses, LNURLs, lightning invoices, smart chain addresses, also fetches LNURL data
243
+ * (hence returns Promise)
244
+ *
245
+ * @param addressString Address to parse
246
+ * @throws {Error} Error in address parsing
247
+ * @returns Address data or null if address doesn't conform to any known format
248
+ */
249
+ async parseAddress(addressString: string): Promise<{
250
+ address: string,
251
+ type: "BITCOIN" | "LIGHTNING" | "LNURL" | ChainIds<T>,
252
+ swapType: SwapType.TO_BTC | SwapType.TO_BTCLN | SwapType.SPV_VAULT_FROM_BTC | SwapType.FROM_BTCLN | null,
253
+ lnurl?: LNURLPay | LNURLWithdraw,
254
+ min?: TokenAmount,
255
+ max?: TokenAmount,
256
+ amount?: TokenAmount
257
+ } | null> {
258
+ if(addressString.startsWith("bitcoin:")) {
259
+ const parsedBitcoinAddress = this.parseBitcoinAddress(addressString.substring(8));
260
+ if(parsedBitcoinAddress!=null) return parsedBitcoinAddress;
261
+ throw new Error("Invalid bitcoin address!");
262
+ }
263
+
264
+ const parsedBitcoinAddress = this.parseBitcoinAddress(addressString);
265
+ if(parsedBitcoinAddress!=null) return parsedBitcoinAddress;
266
+
267
+ if(addressString.startsWith("lightning:")) {
268
+ const resultText = addressString.substring(10);
269
+ const resultLnurl = await this.parseLNURL(resultText);
270
+ if(resultLnurl!=null) return resultLnurl;
271
+
272
+ const resultLightningInvoice = this.parseLightningInvoice(resultText);
273
+ if(resultLightningInvoice!=null) return resultLightningInvoice;
274
+
275
+ throw new Error("Invalid lightning network invoice or LNURL!");
276
+ }
277
+
278
+ const resultLnurl = await this.parseLNURL(addressString);
279
+ if(resultLnurl!=null) return resultLnurl;
280
+
281
+ const resultLightningInvoice = this.parseLightningInvoice(addressString);
282
+ if(resultLightningInvoice!=null) return resultLightningInvoice;
283
+
284
+ return this.parseSmartchainAddress(addressString);
285
+ }
286
+
287
+ /**
288
+ * Synchronous general parser for bitcoin addresses, LNURLs, lightning invoices, smart chain addresses, doesn't fetch
289
+ * LNURL data, reports swapType: null instead to prevent returning a Promise
290
+ *
291
+ * @param addressString Address to parse
292
+ * @throws {Error} Error in address parsing
293
+ * @returns Address data or null if address doesn't conform to any known format
294
+ */
295
+ parseAddressSync(addressString: string): {
296
+ address: string,
297
+ type: "BITCOIN" | "LIGHTNING" | "LNURL" | ChainIds<T>,
298
+ swapType: SwapType.TO_BTC | SwapType.TO_BTCLN | SwapType.SPV_VAULT_FROM_BTC | null,
299
+ min?: TokenAmount,
300
+ max?: TokenAmount,
301
+ amount?: TokenAmount
302
+ } | null {
303
+ if(addressString.startsWith("bitcoin:")) {
304
+ const parsedBitcoinAddress = this.parseBitcoinAddress(addressString.substring(8));
305
+ if(parsedBitcoinAddress!=null) return parsedBitcoinAddress;
306
+ throw new Error("Invalid bitcoin address!");
307
+ }
308
+
309
+ const parsedBitcoinAddress = this.parseBitcoinAddress(addressString);
310
+ if(parsedBitcoinAddress!=null) return parsedBitcoinAddress;
311
+
312
+ if(addressString.startsWith("lightning:")) {
313
+ const resultText = addressString.substring(10);
314
+ const resultLnurl = this.parseLNURLSync(resultText);
315
+ if(resultLnurl!=null) return resultLnurl;
316
+
317
+ const resultLightningInvoice = this.parseLightningInvoice(resultText);
318
+ if(resultLightningInvoice!=null) return resultLightningInvoice;
319
+
320
+ throw new Error("Invalid lightning network invoice or LNURL!");
321
+ }
322
+
323
+ const resultLnurl = this.parseLNURLSync(addressString);
324
+ if(resultLnurl!=null) return resultLnurl;
325
+
326
+ const resultLightningInvoice = this.parseLightningInvoice(addressString);
327
+ if(resultLightningInvoice!=null) return resultLightningInvoice;
328
+
329
+ return this.parseSmartchainAddress(addressString);
330
+ }
331
+
332
+ /**
333
+ * Returns a random PSBT that can be used for fee estimation, the last output (the LP output) is omitted
334
+ * to allow for coinselection algorithm to determine maximum sendable amount there
335
+ *
336
+ * @param chainIdentifier
337
+ * @param includeGasToken Whether to return the PSBT also with the gas token amount (increases the vSize by 8)
338
+ */
339
+ getRandomSpvVaultPsbt<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, includeGasToken?: boolean): Transaction {
340
+ const wrapper = this.root.chains[chainIdentifier].wrappers[SwapType.SPV_VAULT_FROM_BTC];
341
+ if(wrapper==null) throw new Error("Chain doesn't support spv vault swaps!");
342
+ return wrapper.getDummySwapPsbt(includeGasToken);
343
+ }
344
+
345
+ /**
346
+ * Returns the spendable balance of a bitcoin wallet
347
+ *
348
+ * @param wallet
349
+ * @param targetChain
350
+ * @param options Additional options
351
+ */
352
+ async getBitcoinSpendableBalance(
353
+ wallet: string | IBitcoinWallet | MinimalBitcoinWalletInterface,
354
+ targetChain?: ChainIds<T>,
355
+ options?: {
356
+ gasDrop?: boolean,
357
+ feeRate?: number,
358
+ minFeeRate?: number
359
+ }
360
+ ): Promise<{
361
+ balance: TokenAmount,
362
+ feeRate: number
363
+ }> {
364
+ let bitcoinWallet: IBitcoinWallet;
365
+ if(typeof(wallet)==="string") {
366
+ bitcoinWallet = new SingleAddressBitcoinWallet(this.root.bitcoinRpc, this.bitcoinNetwork, {address: wallet, publicKey: ""});
367
+ } else {
368
+ bitcoinWallet = toBitcoinWallet(wallet, this.root.bitcoinRpc, this.bitcoinNetwork);
369
+ }
370
+
371
+ let feeRate = options?.feeRate ?? await bitcoinWallet.getFeeRate();
372
+ if(options?.minFeeRate!=null) feeRate = Math.max(feeRate, options.minFeeRate);
373
+
374
+ let result: {balance: bigint, feeRate: number, totalFee: number};
375
+ if(targetChain!=null && this.root.supportsSwapType(targetChain, SwapType.SPV_VAULT_FROM_BTC)) {
376
+ result = await bitcoinWallet.getSpendableBalance(this.getRandomSpvVaultPsbt(targetChain, options?.gasDrop), feeRate);
377
+ } else {
378
+ result = await bitcoinWallet.getSpendableBalance(undefined, feeRate);
379
+ }
380
+
381
+ return {
382
+ balance: toTokenAmount(result.balance, BitcoinTokens.BTC, this.root.prices),
383
+ feeRate: result.feeRate
384
+ }
385
+ }
386
+
387
+ /**
388
+ * Returns the maximum spendable balance of the wallet, deducting the fee needed to initiate a swap for native balances
389
+ */
390
+ async getSpendableBalance<ChainIdentifier extends ChainIds<T>>(wallet: string | T[ChainIdentifier]["Signer"] | T[ChainIdentifier]["NativeSigner"], token: SCToken<ChainIdentifier>, options?: {
391
+ feeMultiplier?: number,
392
+ feeRate?: any
393
+ }): Promise<TokenAmount> {
394
+ if(this.root.chains[token.chainId]==null) throw new Error("Invalid chain identifier! Unknown chain: "+token.chainId);
395
+ const {swapContract, chainInterface} = this.root.chains[token.chainId];
396
+
397
+ let signer: string;
398
+ if(typeof(wallet)==="string") {
399
+ signer = wallet;
400
+ } else {
401
+ const abstractSigner = isAbstractSigner(wallet) ? wallet : await chainInterface.wrapSigner(wallet);
402
+ signer = abstractSigner.getAddress();
403
+ }
404
+
405
+ let finalBalance: bigint;
406
+ if(chainInterface.getNativeCurrencyAddress()!==token.address) {
407
+ finalBalance = await chainInterface.getBalance(signer, token.address);
408
+ } else {
409
+ let [balance, commitFee] = await Promise.all([
410
+ chainInterface.getBalance(signer, token.address),
411
+ swapContract.getCommitFee(
412
+ signer,
413
+ //Use large amount, such that the fee for wrapping more tokens is always included!
414
+ await swapContract.createSwapData(
415
+ ChainSwapType.HTLC, signer, chainInterface.randomAddress(), token.address,
416
+ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn,
417
+ swapContract.getHashForHtlc(randomBytes(32)).toString("hex"),
418
+ BigIntBufferUtils.fromBuffer(randomBytes(8)), BigInt(Math.floor(Date.now()/1000)),
419
+ true, false, BigIntBufferUtils.fromBuffer(randomBytes(2)), BigIntBufferUtils.fromBuffer(randomBytes(2))
420
+ ),
421
+ options?.feeRate
422
+ )
423
+ ]);
424
+
425
+ if(options?.feeMultiplier!=null) {
426
+ commitFee = commitFee * (BigInt(Math.floor(options.feeMultiplier*1000000))) / 1000000n;
427
+ }
428
+
429
+ finalBalance = bigIntMax(balance - commitFee, 0n);
430
+ }
431
+
432
+ return toTokenAmount(finalBalance, token, this.root.prices);
433
+ }
434
+
435
+ /**
436
+ * Returns the address of the native currency of the chain
437
+ */
438
+ getNativeToken<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier): SCToken<ChainIdentifier> {
439
+ if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
440
+ return this.root.tokens[chainIdentifier][this.root.chains[chainIdentifier].chainInterface.getNativeCurrencyAddress()] as SCToken<ChainIdentifier>;
441
+ }
442
+
443
+ /**
444
+ * Returns a random signer for a given smart chain
445
+ *
446
+ * @param chainIdentifier
447
+ */
448
+ randomSigner<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier): T[ChainIdentifier]["Signer"] {
449
+ if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
450
+ return this.root.chains[chainIdentifier].chainInterface.randomSigner();
451
+ }
452
+
453
+ /**
454
+ * Returns a random address for a given smart chain
455
+ *
456
+ * @param chainIdentifier
457
+ */
458
+ randomAddress<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier): string {
459
+ if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
460
+ return this.root.chains[chainIdentifier].chainInterface.randomAddress();
461
+ }
462
+
463
+ /**
464
+ * Signs and broadcasts the supplied smart chain transaction
465
+ */
466
+ sendAndConfirm<ChainIdentifier extends ChainIds<T>>(
467
+ chainIdentifier: ChainIdentifier,
468
+ signer: T[ChainIdentifier]["NativeSigner"] | T[ChainIdentifier]["Signer"],
469
+ txs: T[ChainIdentifier]["TX"][],
470
+ abortSignal?: AbortSignal,
471
+ onBeforePublish?: (txId: string, rawTx: string) => Promise<void>
472
+ ): Promise<string[]> {
473
+ if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
474
+ return this.root.chains[chainIdentifier].chainInterface.sendAndConfirm(signer, txs, true, abortSignal, false, onBeforePublish);
475
+ }
476
+
477
+ /**
478
+ * Broadcasts already signed smart chain transactions
479
+ */
480
+ sendSignedAndConfirm<ChainIdentifier extends ChainIds<T>>(
481
+ chainIdentifier: ChainIdentifier,
482
+ txs: T[ChainIdentifier]["SignedTXType"][],
483
+ abortSignal?: AbortSignal,
484
+ onBeforePublish?: (txId: string, rawTx: string) => Promise<void>
485
+ ): Promise<string[]> {
486
+ if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
487
+ return this.root.chains[chainIdentifier].chainInterface.sendSignedAndConfirm(txs, true, abortSignal, false, onBeforePublish);
488
+ }
489
+
490
+ serializeUnsignedTransaction<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, tx: T[ChainIdentifier]["TX"]): Promise<string> {
491
+ if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
492
+ return this.root.chains[chainIdentifier].chainInterface.serializeTx(tx);
493
+ }
494
+
495
+ deserializeUnsignedTransaction<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, tx: string): Promise<T[ChainIdentifier]["TX"]> {
496
+ if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
497
+ return this.root.chains[chainIdentifier].chainInterface.deserializeTx(tx);
498
+ }
499
+
500
+ serializeSignedTransaction<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, tx: T[ChainIdentifier]["SignedTXType"]): Promise<string> {
501
+ if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
502
+ return this.root.chains[chainIdentifier].chainInterface.serializeSignedTx(tx);
503
+ }
504
+
505
+ deserializeSignedTransaction<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, tx: string): Promise<T[ChainIdentifier]["SignedTXType"]> {
506
+ if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
507
+ return this.root.chains[chainIdentifier].chainInterface.deserializeSignedTx(tx);
508
+ }
509
+
510
+ }