@atomiqlabs/chain-evm 1.0.0-dev.100

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 (185) hide show
  1. package/LICENSE +201 -0
  2. package/dist/chains/botanix/BotanixChainType.d.ts +14 -0
  3. package/dist/chains/botanix/BotanixChainType.js +2 -0
  4. package/dist/chains/botanix/BotanixInitializer.d.ts +30 -0
  5. package/dist/chains/botanix/BotanixInitializer.js +125 -0
  6. package/dist/chains/citrea/CitreaBtcRelay.d.ts +21 -0
  7. package/dist/chains/citrea/CitreaBtcRelay.js +43 -0
  8. package/dist/chains/citrea/CitreaChainType.d.ts +14 -0
  9. package/dist/chains/citrea/CitreaChainType.js +2 -0
  10. package/dist/chains/citrea/CitreaFees.d.ts +29 -0
  11. package/dist/chains/citrea/CitreaFees.js +67 -0
  12. package/dist/chains/citrea/CitreaInitializer.d.ts +30 -0
  13. package/dist/chains/citrea/CitreaInitializer.js +132 -0
  14. package/dist/chains/citrea/CitreaSpvVaultContract.d.ts +15 -0
  15. package/dist/chains/citrea/CitreaSpvVaultContract.js +74 -0
  16. package/dist/chains/citrea/CitreaSwapContract.d.ts +22 -0
  17. package/dist/chains/citrea/CitreaSwapContract.js +96 -0
  18. package/dist/chains/citrea/CitreaTokens.d.ts +9 -0
  19. package/dist/chains/citrea/CitreaTokens.js +20 -0
  20. package/dist/evm/btcrelay/BtcRelayAbi.d.ts +198 -0
  21. package/dist/evm/btcrelay/BtcRelayAbi.js +261 -0
  22. package/dist/evm/btcrelay/BtcRelayTypechain.d.ts +172 -0
  23. package/dist/evm/btcrelay/BtcRelayTypechain.js +2 -0
  24. package/dist/evm/btcrelay/EVMBtcRelay.d.ts +197 -0
  25. package/dist/evm/btcrelay/EVMBtcRelay.js +435 -0
  26. package/dist/evm/btcrelay/headers/EVMBtcHeader.d.ts +33 -0
  27. package/dist/evm/btcrelay/headers/EVMBtcHeader.js +84 -0
  28. package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.d.ts +56 -0
  29. package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.js +123 -0
  30. package/dist/evm/chain/EVMChainInterface.d.ts +60 -0
  31. package/dist/evm/chain/EVMChainInterface.js +107 -0
  32. package/dist/evm/chain/EVMModule.d.ts +9 -0
  33. package/dist/evm/chain/EVMModule.js +13 -0
  34. package/dist/evm/chain/modules/ERC20Abi.d.ts +168 -0
  35. package/dist/evm/chain/modules/ERC20Abi.js +225 -0
  36. package/dist/evm/chain/modules/EVMAddresses.d.ts +10 -0
  37. package/dist/evm/chain/modules/EVMAddresses.js +30 -0
  38. package/dist/evm/chain/modules/EVMBlocks.d.ts +27 -0
  39. package/dist/evm/chain/modules/EVMBlocks.js +73 -0
  40. package/dist/evm/chain/modules/EVMEvents.d.ts +46 -0
  41. package/dist/evm/chain/modules/EVMEvents.js +151 -0
  42. package/dist/evm/chain/modules/EVMFees.d.ts +36 -0
  43. package/dist/evm/chain/modules/EVMFees.js +74 -0
  44. package/dist/evm/chain/modules/EVMSignatures.d.ts +29 -0
  45. package/dist/evm/chain/modules/EVMSignatures.js +68 -0
  46. package/dist/evm/chain/modules/EVMTokens.d.ts +70 -0
  47. package/dist/evm/chain/modules/EVMTokens.js +142 -0
  48. package/dist/evm/chain/modules/EVMTransactions.d.ts +94 -0
  49. package/dist/evm/chain/modules/EVMTransactions.js +307 -0
  50. package/dist/evm/contract/EVMContractBase.d.ts +22 -0
  51. package/dist/evm/contract/EVMContractBase.js +34 -0
  52. package/dist/evm/contract/EVMContractModule.d.ts +8 -0
  53. package/dist/evm/contract/EVMContractModule.js +11 -0
  54. package/dist/evm/contract/modules/EVMContractEvents.d.ts +43 -0
  55. package/dist/evm/contract/modules/EVMContractEvents.js +76 -0
  56. package/dist/evm/events/EVMChainEvents.d.ts +22 -0
  57. package/dist/evm/events/EVMChainEvents.js +69 -0
  58. package/dist/evm/events/EVMChainEventsBrowser.d.ts +102 -0
  59. package/dist/evm/events/EVMChainEventsBrowser.js +412 -0
  60. package/dist/evm/providers/JsonRpcProviderWithRetries.d.ts +16 -0
  61. package/dist/evm/providers/JsonRpcProviderWithRetries.js +27 -0
  62. package/dist/evm/providers/ReconnectingWebSocketProvider.d.ts +22 -0
  63. package/dist/evm/providers/ReconnectingWebSocketProvider.js +91 -0
  64. package/dist/evm/providers/SocketProvider.d.ts +111 -0
  65. package/dist/evm/providers/SocketProvider.js +336 -0
  66. package/dist/evm/providers/WebSocketProviderWithRetries.d.ts +17 -0
  67. package/dist/evm/providers/WebSocketProviderWithRetries.js +23 -0
  68. package/dist/evm/spv_swap/EVMSpvVaultContract.d.ts +110 -0
  69. package/dist/evm/spv_swap/EVMSpvVaultContract.js +629 -0
  70. package/dist/evm/spv_swap/EVMSpvVaultData.d.ts +40 -0
  71. package/dist/evm/spv_swap/EVMSpvVaultData.js +184 -0
  72. package/dist/evm/spv_swap/EVMSpvWithdrawalData.d.ts +19 -0
  73. package/dist/evm/spv_swap/EVMSpvWithdrawalData.js +55 -0
  74. package/dist/evm/spv_swap/SpvVaultContractAbi.d.ts +91 -0
  75. package/dist/evm/spv_swap/SpvVaultContractAbi.js +849 -0
  76. package/dist/evm/spv_swap/SpvVaultContractTypechain.d.ts +450 -0
  77. package/dist/evm/spv_swap/SpvVaultContractTypechain.js +2 -0
  78. package/dist/evm/swaps/EVMSwapContract.d.ts +199 -0
  79. package/dist/evm/swaps/EVMSwapContract.js +394 -0
  80. package/dist/evm/swaps/EVMSwapData.d.ts +66 -0
  81. package/dist/evm/swaps/EVMSwapData.js +260 -0
  82. package/dist/evm/swaps/EVMSwapModule.d.ts +9 -0
  83. package/dist/evm/swaps/EVMSwapModule.js +11 -0
  84. package/dist/evm/swaps/EscrowManagerAbi.d.ts +120 -0
  85. package/dist/evm/swaps/EscrowManagerAbi.js +985 -0
  86. package/dist/evm/swaps/EscrowManagerTypechain.d.ts +475 -0
  87. package/dist/evm/swaps/EscrowManagerTypechain.js +2 -0
  88. package/dist/evm/swaps/handlers/IHandler.d.ts +13 -0
  89. package/dist/evm/swaps/handlers/IHandler.js +2 -0
  90. package/dist/evm/swaps/handlers/claim/ClaimHandlers.d.ts +10 -0
  91. package/dist/evm/swaps/handlers/claim/ClaimHandlers.js +13 -0
  92. package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.d.ts +20 -0
  93. package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.js +39 -0
  94. package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -0
  95. package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +59 -0
  96. package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -0
  97. package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +51 -0
  98. package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +21 -0
  99. package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +28 -0
  100. package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +48 -0
  101. package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +63 -0
  102. package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -0
  103. package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.js +28 -0
  104. package/dist/evm/swaps/modules/EVMLpVault.d.ts +69 -0
  105. package/dist/evm/swaps/modules/EVMLpVault.js +134 -0
  106. package/dist/evm/swaps/modules/EVMSwapClaim.d.ts +54 -0
  107. package/dist/evm/swaps/modules/EVMSwapClaim.js +137 -0
  108. package/dist/evm/swaps/modules/EVMSwapInit.d.ts +88 -0
  109. package/dist/evm/swaps/modules/EVMSwapInit.js +274 -0
  110. package/dist/evm/swaps/modules/EVMSwapRefund.d.ts +62 -0
  111. package/dist/evm/swaps/modules/EVMSwapRefund.js +167 -0
  112. package/dist/evm/typechain/common.d.ts +50 -0
  113. package/dist/evm/typechain/common.js +2 -0
  114. package/dist/evm/wallet/EVMBrowserSigner.d.ts +5 -0
  115. package/dist/evm/wallet/EVMBrowserSigner.js +11 -0
  116. package/dist/evm/wallet/EVMPersistentSigner.d.ts +29 -0
  117. package/dist/evm/wallet/EVMPersistentSigner.js +230 -0
  118. package/dist/evm/wallet/EVMSigner.d.ts +12 -0
  119. package/dist/evm/wallet/EVMSigner.js +28 -0
  120. package/dist/index.d.ts +44 -0
  121. package/dist/index.js +60 -0
  122. package/dist/utils/Utils.d.ts +19 -0
  123. package/dist/utils/Utils.js +98 -0
  124. package/package.json +39 -0
  125. package/src/chains/botanix/BotanixChainType.ts +30 -0
  126. package/src/chains/botanix/BotanixInitializer.ts +175 -0
  127. package/src/chains/citrea/CitreaBtcRelay.ts +58 -0
  128. package/src/chains/citrea/CitreaChainType.ts +30 -0
  129. package/src/chains/citrea/CitreaFees.ts +77 -0
  130. package/src/chains/citrea/CitreaInitializer.ts +182 -0
  131. package/src/chains/citrea/CitreaSpvVaultContract.ts +75 -0
  132. package/src/chains/citrea/CitreaSwapContract.ts +103 -0
  133. package/src/chains/citrea/CitreaTokens.ts +22 -0
  134. package/src/evm/btcrelay/BtcRelayAbi.ts +258 -0
  135. package/src/evm/btcrelay/BtcRelayTypechain.ts +371 -0
  136. package/src/evm/btcrelay/EVMBtcRelay.ts +537 -0
  137. package/src/evm/btcrelay/headers/EVMBtcHeader.ts +110 -0
  138. package/src/evm/btcrelay/headers/EVMBtcStoredHeader.ts +153 -0
  139. package/src/evm/chain/EVMChainInterface.ts +189 -0
  140. package/src/evm/chain/EVMModule.ts +21 -0
  141. package/src/evm/chain/modules/ERC20Abi.ts +222 -0
  142. package/src/evm/chain/modules/EVMAddresses.ts +29 -0
  143. package/src/evm/chain/modules/EVMBlocks.ts +86 -0
  144. package/src/evm/chain/modules/EVMEvents.ts +182 -0
  145. package/src/evm/chain/modules/EVMFees.ts +104 -0
  146. package/src/evm/chain/modules/EVMSignatures.ts +76 -0
  147. package/src/evm/chain/modules/EVMTokens.ts +155 -0
  148. package/src/evm/chain/modules/EVMTransactions.ts +346 -0
  149. package/src/evm/contract/EVMContractBase.ts +63 -0
  150. package/src/evm/contract/EVMContractModule.ts +16 -0
  151. package/src/evm/contract/modules/EVMContractEvents.ts +104 -0
  152. package/src/evm/events/EVMChainEvents.ts +82 -0
  153. package/src/evm/events/EVMChainEventsBrowser.ts +533 -0
  154. package/src/evm/providers/JsonRpcProviderWithRetries.ts +34 -0
  155. package/src/evm/providers/ReconnectingWebSocketProvider.ts +107 -0
  156. package/src/evm/providers/SocketProvider.ts +371 -0
  157. package/src/evm/providers/WebSocketProviderWithRetries.ts +35 -0
  158. package/src/evm/spv_swap/EVMSpvVaultContract.ts +779 -0
  159. package/src/evm/spv_swap/EVMSpvVaultData.ts +228 -0
  160. package/src/evm/spv_swap/EVMSpvWithdrawalData.ts +70 -0
  161. package/src/evm/spv_swap/SpvVaultContractAbi.ts +846 -0
  162. package/src/evm/spv_swap/SpvVaultContractTypechain.ts +685 -0
  163. package/src/evm/swaps/EVMSwapContract.ts +621 -0
  164. package/src/evm/swaps/EVMSwapData.ts +378 -0
  165. package/src/evm/swaps/EVMSwapModule.ts +16 -0
  166. package/src/evm/swaps/EscrowManagerAbi.ts +982 -0
  167. package/src/evm/swaps/EscrowManagerTypechain.ts +723 -0
  168. package/src/evm/swaps/handlers/IHandler.ts +17 -0
  169. package/src/evm/swaps/handlers/claim/ClaimHandlers.ts +20 -0
  170. package/src/evm/swaps/handlers/claim/HashlockClaimHandler.ts +47 -0
  171. package/src/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +82 -0
  172. package/src/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +76 -0
  173. package/src/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +46 -0
  174. package/src/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +115 -0
  175. package/src/evm/swaps/handlers/refund/TimelockRefundHandler.ts +38 -0
  176. package/src/evm/swaps/modules/EVMLpVault.ts +155 -0
  177. package/src/evm/swaps/modules/EVMSwapClaim.ts +173 -0
  178. package/src/evm/swaps/modules/EVMSwapInit.ts +329 -0
  179. package/src/evm/swaps/modules/EVMSwapRefund.ts +229 -0
  180. package/src/evm/typechain/common.ts +131 -0
  181. package/src/evm/wallet/EVMBrowserSigner.ts +12 -0
  182. package/src/evm/wallet/EVMPersistentSigner.ts +307 -0
  183. package/src/evm/wallet/EVMSigner.ts +35 -0
  184. package/src/index.ts +53 -0
  185. package/src/utils/Utils.ts +111 -0
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EVMSwapRefund = void 0;
4
+ const base_1 = require("@atomiqlabs/base");
5
+ const Utils_1 = require("../../../utils/Utils");
6
+ const EVMSwapModule_1 = require("../EVMSwapModule");
7
+ const EVMFees_1 = require("../../chain/modules/EVMFees");
8
+ const Refund = [
9
+ { name: "swapHash", type: "bytes32" },
10
+ { name: "timeout", type: "uint256" }
11
+ ];
12
+ class EVMSwapRefund extends EVMSwapModule_1.EVMSwapModule {
13
+ /**
14
+ * Action for generic Refund instruction
15
+ *
16
+ * @param signer
17
+ * @param swapData
18
+ * @param witness
19
+ * @param feeRate
20
+ * @param handlerGas
21
+ * @private
22
+ */
23
+ async Refund(signer, swapData, witness, feeRate, handlerGas) {
24
+ const tx = await this.swapContract.refund.populateTransaction(swapData.toEscrowStruct(), witness);
25
+ tx.from = signer;
26
+ EVMFees_1.EVMFees.applyFeeRate(tx, this.getRefundGas(swapData) + (handlerGas ?? 0), feeRate);
27
+ return tx;
28
+ }
29
+ /**
30
+ * Action for cooperative refunding with signature
31
+ *
32
+ * @param sender
33
+ * @param swapData
34
+ * @param timeout
35
+ * @param signature
36
+ * @param feeRate
37
+ * @private
38
+ */
39
+ async RefundWithSignature(sender, swapData, timeout, signature, feeRate) {
40
+ const tx = await this.swapContract.cooperativeRefund.populateTransaction(swapData.toEscrowStruct(), signature, BigInt(timeout));
41
+ tx.from = sender;
42
+ EVMFees_1.EVMFees.applyFeeRate(tx, this.getRefundGas(swapData), feeRate);
43
+ return tx;
44
+ }
45
+ async signSwapRefund(signer, swapData, authorizationTimeout) {
46
+ const authPrefix = "refund";
47
+ const authTimeout = Math.floor(Date.now() / 1000) + authorizationTimeout;
48
+ const signature = await this.root.Signatures.signTypedMessage(this.contract.contractAddress, signer, Refund, "Refund", {
49
+ "swapHash": "0x" + swapData.getEscrowHash(),
50
+ "timeout": BigInt(authTimeout)
51
+ });
52
+ return {
53
+ prefix: authPrefix,
54
+ timeout: authTimeout.toString(10),
55
+ signature: signature
56
+ };
57
+ }
58
+ async isSignatureValid(swapData, timeout, prefix, signature) {
59
+ if (prefix !== "refund")
60
+ throw new base_1.SignatureVerificationError("Invalid prefix");
61
+ const expiryTimestamp = BigInt(timeout);
62
+ const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
63
+ const isExpired = (expiryTimestamp - currentTimestamp) < BigInt(this.contract.authGracePeriod);
64
+ if (isExpired)
65
+ throw new base_1.SignatureVerificationError("Authorization expired!");
66
+ const valid = await this.root.Signatures.isValidSignature(this.contract.contractAddress, signature, swapData.claimer, Refund, "Refund", {
67
+ "swapHash": "0x" + swapData.getEscrowHash(),
68
+ "timeout": BigInt(expiryTimestamp)
69
+ });
70
+ if (!valid) {
71
+ throw new base_1.SignatureVerificationError("Invalid signature!");
72
+ }
73
+ return null;
74
+ }
75
+ /**
76
+ * Creates transactions required for refunding timed out swap
77
+ *
78
+ * @param signer
79
+ * @param swapData swap data to refund
80
+ * @param check whether to check if swap is already expired and refundable
81
+ * @param feeRate fee rate to be used for the transactions
82
+ * @param witnessData
83
+ */
84
+ async txsRefund(signer, swapData, check, feeRate, witnessData) {
85
+ const refundHandler = this.contract.refundHandlersByAddress[swapData.refundHandler.toLowerCase()];
86
+ if (refundHandler == null)
87
+ throw new Error("Invalid refund handler");
88
+ if (check && !await (0, Utils_1.tryWithRetries)(() => this.contract.isRequestRefundable(swapData.offerer.toString(), swapData), this.retryPolicy)) {
89
+ throw new base_1.SwapDataVerificationError("Not refundable yet!");
90
+ }
91
+ feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
92
+ const { initialTxns, witness } = await refundHandler.getWitness(signer, swapData, witnessData, feeRate);
93
+ const tx = await this.Refund(signer, swapData, witness, feeRate, refundHandler.getGas(swapData));
94
+ this.logger.debug("txsRefund(): creating refund transaction, swap: " + swapData.getClaimHash());
95
+ return [...initialTxns, tx];
96
+ }
97
+ /**
98
+ * Creates transactions required for refunding the swap with authorization signature, also unwraps WSOL to SOL
99
+ *
100
+ * @param signer
101
+ * @param swapData swap data to refund
102
+ * @param timeout signature timeout
103
+ * @param prefix signature prefix of the counterparty
104
+ * @param signature signature of the counterparty
105
+ * @param check whether to check if swap is committed before attempting refund
106
+ * @param feeRate fee rate to be used for the transactions
107
+ */
108
+ async txsRefundWithAuthorization(signer, swapData, timeout, prefix, signature, check, feeRate) {
109
+ if (check && !await (0, Utils_1.tryWithRetries)(() => this.contract.isCommited(swapData), this.retryPolicy)) {
110
+ throw new base_1.SwapDataVerificationError("Not correctly committed");
111
+ }
112
+ await (0, Utils_1.tryWithRetries)(() => this.isSignatureValid(swapData, timeout, prefix, signature), this.retryPolicy, (e) => e instanceof base_1.SignatureVerificationError);
113
+ feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
114
+ const tx = await this.RefundWithSignature(signer, swapData, timeout, signature, feeRate);
115
+ this.logger.debug("txsRefundWithAuthorization(): creating refund transaction, swap: " + swapData.getClaimHash() +
116
+ " auth expiry: " + timeout + " signature: " + signature);
117
+ return [tx];
118
+ }
119
+ getRefundGas(swapData) {
120
+ let totalGas = EVMSwapRefund.GasCosts.BASE;
121
+ if (swapData.reputation)
122
+ totalGas += EVMSwapRefund.GasCosts.REPUTATION;
123
+ if (swapData.isPayIn()) {
124
+ if (swapData.isToken(this.root.getNativeCurrencyAddress())) {
125
+ totalGas += EVMSwapRefund.GasCosts.NATIVE_TRANSFER;
126
+ }
127
+ else {
128
+ totalGas += EVMSwapRefund.GasCosts.ERC20_TRANSFER;
129
+ }
130
+ }
131
+ else {
132
+ totalGas += EVMSwapRefund.GasCosts.LP_VAULT_TRANSFER;
133
+ }
134
+ if (swapData.getSecurityDeposit() > 0n) {
135
+ if (swapData.isDepositToken(this.root.getNativeCurrencyAddress())) {
136
+ totalGas += EVMSwapRefund.GasCosts.NATIVE_TRANSFER;
137
+ }
138
+ else {
139
+ totalGas += EVMSwapRefund.GasCosts.ERC20_TRANSFER;
140
+ }
141
+ }
142
+ if (swapData.getClaimerBounty() > swapData.getSecurityDeposit()) {
143
+ if (swapData.isDepositToken(this.root.getNativeCurrencyAddress())) {
144
+ totalGas += EVMSwapRefund.GasCosts.NATIVE_TRANSFER;
145
+ }
146
+ else {
147
+ totalGas += EVMSwapRefund.GasCosts.ERC20_TRANSFER;
148
+ }
149
+ }
150
+ return totalGas;
151
+ }
152
+ /**
153
+ * Get the estimated transaction fee of the refund transaction
154
+ */
155
+ async getRefundFee(swapData, feeRate) {
156
+ feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
157
+ return EVMFees_1.EVMFees.getGasFee(this.getRefundGas(swapData), feeRate);
158
+ }
159
+ }
160
+ exports.EVMSwapRefund = EVMSwapRefund;
161
+ EVMSwapRefund.GasCosts = {
162
+ BASE: 35000 + 21000,
163
+ ERC20_TRANSFER: 40000,
164
+ NATIVE_TRANSFER: 35500,
165
+ LP_VAULT_TRANSFER: 10000,
166
+ REPUTATION: 25000
167
+ };
@@ -0,0 +1,50 @@
1
+ import type { FunctionFragment, Typed, EventFragment, ContractTransaction, ContractTransactionResponse, DeferredTopicFilter, EventLog, TransactionRequest, LogDescription } from "ethers";
2
+ export interface TypedDeferredTopicFilter<_TCEvent extends TypedContractEvent> extends DeferredTopicFilter {
3
+ }
4
+ export interface TypedContractEvent<InputTuple extends Array<any> = any, OutputTuple extends Array<any> = any, OutputObject = any> {
5
+ (...args: Partial<InputTuple>): TypedDeferredTopicFilter<TypedContractEvent<InputTuple, OutputTuple, OutputObject>>;
6
+ name: string;
7
+ fragment: EventFragment;
8
+ getFragment(...args: Partial<InputTuple>): EventFragment;
9
+ }
10
+ type __TypechainAOutputTuple<T> = T extends TypedContractEvent<infer _U, infer W> ? W : never;
11
+ type __TypechainOutputObject<T> = T extends TypedContractEvent<infer _U, infer _W, infer V> ? V : never;
12
+ export interface TypedEventLog<TCEvent extends TypedContractEvent> extends Omit<EventLog, "args"> {
13
+ args: __TypechainAOutputTuple<TCEvent> & __TypechainOutputObject<TCEvent>;
14
+ }
15
+ export interface TypedLogDescription<TCEvent extends TypedContractEvent> extends Omit<LogDescription, "args"> {
16
+ args: __TypechainAOutputTuple<TCEvent> & __TypechainOutputObject<TCEvent>;
17
+ }
18
+ export type TypedListener<TCEvent extends TypedContractEvent> = (...listenerArg: [
19
+ ...__TypechainAOutputTuple<TCEvent>,
20
+ TypedEventLog<TCEvent>,
21
+ ...undefined[]
22
+ ]) => void;
23
+ export type MinEthersFactory<C, ARGS> = {
24
+ deploy(...a: ARGS[]): Promise<C>;
25
+ };
26
+ export type GetContractTypeFromFactory<F> = F extends MinEthersFactory<infer C, any> ? C : never;
27
+ export type GetARGsTypeFromFactory<F> = F extends MinEthersFactory<any, any> ? Parameters<F["deploy"]> : never;
28
+ export type StateMutability = "nonpayable" | "payable" | "view";
29
+ export type BaseOverrides = Omit<TransactionRequest, "to" | "data">;
30
+ export type NonPayableOverrides = Omit<BaseOverrides, "value" | "blockTag" | "enableCcipRead">;
31
+ export type PayableOverrides = Omit<BaseOverrides, "blockTag" | "enableCcipRead">;
32
+ export type ViewOverrides = Omit<TransactionRequest, "to" | "data">;
33
+ export type Overrides<S extends StateMutability> = S extends "nonpayable" ? NonPayableOverrides : S extends "payable" ? PayableOverrides : ViewOverrides;
34
+ export type PostfixOverrides<A extends Array<any>, S extends StateMutability> = A | [...A, Overrides<S>];
35
+ export type ContractMethodArgs<A extends Array<any>, S extends StateMutability> = PostfixOverrides<{
36
+ [I in keyof A]-?: A[I] | Typed;
37
+ }, S>;
38
+ export type DefaultReturnType<R> = R extends Array<any> ? R[0] : R;
39
+ export interface TypedContractMethod<A extends Array<any> = Array<any>, R = any, S extends StateMutability = "payable"> {
40
+ (...args: ContractMethodArgs<A, S>): S extends "view" ? Promise<DefaultReturnType<R>> : Promise<ContractTransactionResponse>;
41
+ name: string;
42
+ fragment: FunctionFragment;
43
+ getFragment(...args: ContractMethodArgs<A, S>): FunctionFragment;
44
+ populateTransaction(...args: ContractMethodArgs<A, S>): Promise<ContractTransaction>;
45
+ staticCall(...args: ContractMethodArgs<A, "view">): Promise<DefaultReturnType<R>>;
46
+ send(...args: ContractMethodArgs<A, S>): Promise<ContractTransactionResponse>;
47
+ estimateGas(...args: ContractMethodArgs<A, S>): Promise<bigint>;
48
+ staticCallResult(...args: ContractMethodArgs<A, "view">): Promise<R>;
49
+ }
50
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ import { Signer } from "ethers";
2
+ import { EVMSigner } from "./EVMSigner";
3
+ export declare class EVMBrowserSigner extends EVMSigner {
4
+ constructor(account: Signer, address: string);
5
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EVMBrowserSigner = void 0;
4
+ const EVMSigner_1 = require("./EVMSigner");
5
+ class EVMBrowserSigner extends EVMSigner_1.EVMSigner {
6
+ constructor(account, address) {
7
+ super(account, address, false);
8
+ this.signTransaction = null;
9
+ }
10
+ }
11
+ exports.EVMBrowserSigner = EVMBrowserSigner;
@@ -0,0 +1,29 @@
1
+ import { Signer, TransactionRequest, TransactionResponse } from "ethers";
2
+ import { EVMBlockTag } from "../chain/modules/EVMBlocks";
3
+ import { EVMChainInterface } from "../chain/EVMChainInterface";
4
+ import { EVMSigner } from "./EVMSigner";
5
+ export declare class EVMPersistentSigner extends EVMSigner {
6
+ readonly safeBlockTag: EVMBlockTag;
7
+ private pendingTxs;
8
+ private confirmedNonce;
9
+ private pendingNonce;
10
+ private feeBumper;
11
+ private stopped;
12
+ private readonly directory;
13
+ private readonly waitBeforeBump;
14
+ private readonly minFeeIncreaseAbsolute;
15
+ private readonly minFeeIncreasePpm;
16
+ private readonly chainInterface;
17
+ private readonly logger;
18
+ constructor(account: Signer, address: string, chainInterface: EVMChainInterface, directory: string, minFeeIncreaseAbsolute?: bigint, minFeeIncreasePpm?: bigint, waitBeforeBumpMillis?: number);
19
+ private load;
20
+ private priorSavePromise;
21
+ private saveCount;
22
+ private save;
23
+ private checkPastTransactions;
24
+ private startFeeBumper;
25
+ init(): Promise<void>;
26
+ stop(): Promise<void>;
27
+ private readonly sendTransactionQueue;
28
+ sendTransaction(transaction: TransactionRequest, onBeforePublish?: (txId: string, rawTx: string) => Promise<void>): Promise<TransactionResponse>;
29
+ }
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EVMPersistentSigner = void 0;
4
+ const fs = require("fs/promises");
5
+ const ethers_1 = require("ethers");
6
+ const Utils_1 = require("../../utils/Utils");
7
+ const EVMFees_1 = require("../chain/modules/EVMFees");
8
+ const EVMSigner_1 = require("./EVMSigner");
9
+ const promise_queue_ts_1 = require("promise-queue-ts");
10
+ const WAIT_BEFORE_BUMP = 15 * 1000;
11
+ const MIN_FEE_INCREASE_ABSOLUTE = 1n * 1000000000n; //1GWei
12
+ const MIN_FEE_INCREASE_PPM = 100000n; // +10%
13
+ class EVMPersistentSigner extends EVMSigner_1.EVMSigner {
14
+ constructor(account, address, chainInterface, directory, minFeeIncreaseAbsolute, minFeeIncreasePpm, waitBeforeBumpMillis) {
15
+ super(account, address, true);
16
+ this.pendingTxs = new Map();
17
+ this.stopped = false;
18
+ this.saveCount = 0;
19
+ this.sendTransactionQueue = new promise_queue_ts_1.PromiseQueue();
20
+ this.signTransaction = null;
21
+ this.chainInterface = chainInterface;
22
+ this.directory = directory;
23
+ this.minFeeIncreaseAbsolute = minFeeIncreaseAbsolute ?? MIN_FEE_INCREASE_ABSOLUTE;
24
+ this.minFeeIncreasePpm = minFeeIncreasePpm ?? MIN_FEE_INCREASE_PPM;
25
+ this.waitBeforeBump = waitBeforeBumpMillis ?? WAIT_BEFORE_BUMP;
26
+ this.safeBlockTag = chainInterface.config.safeBlockTag;
27
+ this.logger = (0, Utils_1.getLogger)("EVMPersistentSigner(" + address + "): ");
28
+ }
29
+ async load() {
30
+ const fileExists = await fs.access(this.directory + "/txs.json", fs.constants.F_OK).then(() => true).catch(() => false);
31
+ if (!fileExists)
32
+ return;
33
+ const res = await fs.readFile(this.directory + "/txs.json");
34
+ if (res != null) {
35
+ const pendingTxs = JSON.parse(res.toString());
36
+ for (let nonceStr in pendingTxs) {
37
+ const nonceData = pendingTxs[nonceStr];
38
+ const nonce = parseInt(nonceStr);
39
+ if (this.confirmedNonce >= nonce)
40
+ continue; //Already confirmed
41
+ if (this.pendingNonce < nonce) {
42
+ this.pendingNonce = nonce;
43
+ }
44
+ const parsedPendingTxns = nonceData.txs.map(ethers_1.Transaction.from);
45
+ this.pendingTxs.set(nonce, {
46
+ txs: parsedPendingTxns,
47
+ lastBumped: nonceData.lastBumped
48
+ });
49
+ for (let tx of parsedPendingTxns) {
50
+ this.chainInterface.Transactions._knownTxSet.add(tx.hash);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ async save() {
56
+ const pendingTxs = {};
57
+ for (let [nonce, data] of this.pendingTxs) {
58
+ pendingTxs[nonce.toString(10)] = {
59
+ lastBumped: data.lastBumped,
60
+ txs: data.txs.map(tx => tx.serialized)
61
+ };
62
+ }
63
+ const requiredSaveCount = ++this.saveCount;
64
+ if (this.priorSavePromise != null) {
65
+ await this.priorSavePromise;
66
+ }
67
+ if (requiredSaveCount === this.saveCount) {
68
+ this.priorSavePromise = fs.writeFile(this.directory + "/txs.json", JSON.stringify(pendingTxs));
69
+ await this.priorSavePromise;
70
+ }
71
+ }
72
+ async checkPastTransactions() {
73
+ let _gasPrice = null;
74
+ let _safeBlockTxCount = null;
75
+ for (let [nonce, data] of this.pendingTxs) {
76
+ if (!data.sending && data.lastBumped < Date.now() - this.waitBeforeBump) {
77
+ _safeBlockTxCount = await this.chainInterface.provider.getTransactionCount(this.address, this.safeBlockTag);
78
+ this.confirmedNonce = _safeBlockTxCount;
79
+ if (_safeBlockTxCount > nonce) {
80
+ this.pendingTxs.delete(nonce);
81
+ data.txs.forEach(tx => this.chainInterface.Transactions._knownTxSet.delete(tx.hash));
82
+ this.logger.info("checkPastTransactions(): Tx confirmed, required fee bumps: ", data.txs.length);
83
+ this.save();
84
+ continue;
85
+ }
86
+ const lastTx = data.txs[data.txs.length - 1];
87
+ if (_gasPrice == null) {
88
+ const feeRate = await this.chainInterface.Fees.getFeeRate();
89
+ const [baseFee, priorityFee] = feeRate.split(",");
90
+ _gasPrice = {
91
+ baseFee: BigInt(baseFee),
92
+ priorityFee: BigInt(priorityFee)
93
+ };
94
+ }
95
+ let priorityFee = lastTx.maxPriorityFeePerGas;
96
+ let baseFee = lastTx.maxFeePerGas - lastTx.maxPriorityFeePerGas;
97
+ baseFee = (0, Utils_1.bigIntMax)(_gasPrice.baseFee, this.minFeeIncreaseAbsolute + (baseFee * (1000000n + this.minFeeIncreasePpm) / 1000000n));
98
+ priorityFee = (0, Utils_1.bigIntMax)(_gasPrice.priorityFee, this.minFeeIncreaseAbsolute + (priorityFee * (1000000n + this.minFeeIncreasePpm) / 1000000n));
99
+ if (baseFee > (this.minFeeIncreaseAbsolute + (_gasPrice.baseFee * (1000000n + this.minFeeIncreasePpm) / 1000000n)) &&
100
+ priorityFee > (this.minFeeIncreaseAbsolute + (_gasPrice.priorityFee * (1000000n + this.minFeeIncreasePpm) / 1000000n))) {
101
+ //Too big of an increase over the current fee rate, don't fee bump
102
+ this.logger.debug("checkPastTransactions(): Tx yet unconfirmed but not increasing fee for ", lastTx.hash);
103
+ await this.chainInterface.provider.broadcastTransaction(lastTx.serialized).catch(e => {
104
+ if (e.code === "NONCE_EXPIRED") {
105
+ this.logger.debug("checkPastTransactions(): Tx re-broadcast success, tx already confirmed: ", lastTx.hash);
106
+ return;
107
+ }
108
+ if (e.error?.message === "already known") {
109
+ this.logger.debug("checkPastTransactions(): Tx re-broadcast success, tx already known to the RPC: ", lastTx.hash);
110
+ return;
111
+ }
112
+ this.logger.error("checkPastTransactions(): Tx re-broadcast error", e);
113
+ });
114
+ data.lastBumped = Date.now();
115
+ continue;
116
+ }
117
+ let newTx = lastTx.clone();
118
+ EVMFees_1.EVMFees.applyFeeRate(newTx, null, baseFee.toString(10) + "," + priorityFee.toString(10));
119
+ this.logger.info("checkPastTransactions(): Bump fee for tx: ", lastTx.hash);
120
+ newTx.signature = null;
121
+ const signedRawTx = await this.account.signTransaction(newTx);
122
+ //Double check pending txns still has nonce after async signTransaction was called
123
+ if (!this.pendingTxs.has(nonce))
124
+ continue;
125
+ newTx = ethers_1.Transaction.from(signedRawTx);
126
+ for (let callback of this.chainInterface.Transactions._cbksBeforeTxReplace) {
127
+ try {
128
+ await callback(lastTx.serialized, lastTx.hash, signedRawTx, newTx.hash);
129
+ }
130
+ catch (e) {
131
+ this.logger.error("checkPastTransactions(): beforeTxReplace callback error: ", e);
132
+ }
133
+ }
134
+ data.txs.push(newTx);
135
+ data.lastBumped = Date.now();
136
+ this.save();
137
+ this.chainInterface.Transactions._knownTxSet.add(newTx.hash);
138
+ //TODO: Better error handling when sending tx
139
+ await this.chainInterface.provider.broadcastTransaction(signedRawTx).catch(e => {
140
+ if (e.code === "NONCE_EXPIRED")
141
+ return;
142
+ this.logger.error("checkPastTransactions(): Fee-bumped tx broadcast error", e);
143
+ });
144
+ }
145
+ }
146
+ }
147
+ startFeeBumper() {
148
+ let func;
149
+ func = async () => {
150
+ try {
151
+ await this.checkPastTransactions();
152
+ }
153
+ catch (e) {
154
+ this.logger.error("startFeeBumper(): Error when check past transactions: ", e);
155
+ }
156
+ if (this.stopped)
157
+ return;
158
+ this.feeBumper = setTimeout(func, 1000);
159
+ };
160
+ func();
161
+ }
162
+ async init() {
163
+ try {
164
+ await fs.mkdir(this.directory);
165
+ }
166
+ catch (e) { }
167
+ const txCount = await this.chainInterface.provider.getTransactionCount(this.address, this.safeBlockTag);
168
+ this.confirmedNonce = txCount - 1;
169
+ this.pendingNonce = txCount - 1;
170
+ await this.load();
171
+ this.startFeeBumper();
172
+ }
173
+ stop() {
174
+ this.stopped = true;
175
+ if (this.feeBumper != null) {
176
+ clearTimeout(this.feeBumper);
177
+ this.feeBumper = null;
178
+ }
179
+ return Promise.resolve();
180
+ }
181
+ sendTransaction(transaction, onBeforePublish) {
182
+ return this.sendTransactionQueue.enqueue(async () => {
183
+ if (transaction.nonce != null) {
184
+ if (transaction.nonce !== this.pendingNonce + 1)
185
+ throw new Error("Invalid transaction nonce!");
186
+ }
187
+ else {
188
+ transaction.nonce = this.pendingNonce + 1;
189
+ }
190
+ const tx = {};
191
+ for (let key in transaction) {
192
+ if (transaction[key] instanceof Promise) {
193
+ tx[key] = await transaction[key];
194
+ }
195
+ else {
196
+ tx[key] = transaction[key];
197
+ }
198
+ }
199
+ const signedRawTx = await this.account.signTransaction(tx);
200
+ const signedTx = ethers_1.Transaction.from(signedRawTx);
201
+ if (onBeforePublish != null) {
202
+ try {
203
+ await onBeforePublish(signedTx.hash, signedRawTx);
204
+ }
205
+ catch (e) {
206
+ this.logger.error("sendTransaction(): Error when calling onBeforePublish function: ", e);
207
+ }
208
+ }
209
+ const pendingTxObject = { txs: [signedTx], lastBumped: Date.now(), sending: true };
210
+ this.pendingNonce++;
211
+ this.logger.debug("sendTransaction(): Incrementing pending nonce to: ", this.pendingNonce);
212
+ this.pendingTxs.set(transaction.nonce, pendingTxObject);
213
+ this.save();
214
+ this.chainInterface.Transactions._knownTxSet.add(signedTx.hash);
215
+ try {
216
+ const result = await this.chainInterface.provider.broadcastTransaction(signedRawTx);
217
+ pendingTxObject.sending = false;
218
+ return result;
219
+ }
220
+ catch (e) {
221
+ this.chainInterface.Transactions._knownTxSet.delete(signedTx.hash);
222
+ this.pendingTxs.delete(transaction.nonce);
223
+ this.pendingNonce--;
224
+ this.logger.debug("sendTransaction(): Error when broadcasting transaction, reverting pending nonce to: ", this.pendingNonce);
225
+ throw e;
226
+ }
227
+ });
228
+ }
229
+ }
230
+ exports.EVMPersistentSigner = EVMPersistentSigner;
@@ -0,0 +1,12 @@
1
+ import { AbstractSigner } from "@atomiqlabs/base";
2
+ import { Signer, TransactionRequest, TransactionResponse } from "ethers";
3
+ export declare class EVMSigner implements AbstractSigner {
4
+ type: "AtomiqAbstractSigner";
5
+ account: Signer;
6
+ readonly address: string;
7
+ readonly isManagingNoncesInternally: boolean;
8
+ constructor(account: Signer, address: string, isManagingNoncesInternally?: boolean);
9
+ getAddress(): string;
10
+ signTransaction?(transaction: TransactionRequest): Promise<string>;
11
+ sendTransaction(transaction: TransactionRequest, onBeforePublish?: (txId: string, rawTx: string) => Promise<void>): Promise<TransactionResponse>;
12
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EVMSigner = void 0;
4
+ const ethers_1 = require("ethers");
5
+ class EVMSigner {
6
+ constructor(account, address, isManagingNoncesInternally = false) {
7
+ this.type = "AtomiqAbstractSigner";
8
+ this.account = account;
9
+ this.address = address;
10
+ this.isManagingNoncesInternally = isManagingNoncesInternally;
11
+ }
12
+ getAddress() {
13
+ return (0, ethers_1.getAddress)(this.address);
14
+ }
15
+ async signTransaction(transaction) {
16
+ return this.account.signTransaction(transaction);
17
+ }
18
+ async sendTransaction(transaction, onBeforePublish) {
19
+ const txResponse = await this.account.sendTransaction(transaction);
20
+ if (onBeforePublish != null)
21
+ await onBeforePublish(txResponse.hash, ethers_1.Transaction.from({
22
+ ...txResponse,
23
+ chainId: transaction.chainId
24
+ }).serialized);
25
+ return txResponse;
26
+ }
27
+ }
28
+ exports.EVMSigner = EVMSigner;
@@ -0,0 +1,44 @@
1
+ export * from "./evm/btcrelay/headers/EVMBtcHeader";
2
+ export * from "./evm/btcrelay/headers/EVMBtcStoredHeader";
3
+ export * from "./evm/btcrelay/EVMBtcRelay";
4
+ export * from "./evm/chain/EVMChainInterface";
5
+ export * from "./evm/chain/EVMModule";
6
+ export * from "./evm/chain/modules/EVMAddresses";
7
+ export * from "./evm/chain/modules/EVMBlocks";
8
+ export * from "./evm/chain/modules/EVMEvents";
9
+ export * from "./evm/chain/modules/EVMFees";
10
+ export * from "./evm/chain/modules/EVMSignatures";
11
+ export * from "./evm/chain/modules/EVMTokens";
12
+ export * from "./evm/chain/modules/EVMTransactions";
13
+ export * from "./evm/contract/modules/EVMContractEvents";
14
+ export * from "./evm/contract/EVMContractBase";
15
+ export * from "./evm/contract/EVMContractModule";
16
+ export * from "./evm/events/EVMChainEventsBrowser";
17
+ export * from "./evm/spv_swap/EVMSpvVaultContract";
18
+ export * from "./evm/spv_swap/EVMSpvWithdrawalData";
19
+ export * from "./evm/spv_swap/EVMSpvVaultData";
20
+ export * from "./evm/swaps/EVMSwapContract";
21
+ export * from "./evm/swaps/EVMSwapData";
22
+ export * from "./evm/swaps/EVMSwapModule";
23
+ export * from "./evm/swaps/modules/EVMLpVault";
24
+ export * from "./evm/swaps/modules/EVMSwapInit";
25
+ export * from "./evm/swaps/modules/EVMSwapClaim";
26
+ export * from "./evm/swaps/modules/EVMSwapRefund";
27
+ export * from "./evm/swaps/handlers/IHandler";
28
+ export * from "./evm/swaps/handlers/refund/TimelockRefundHandler";
29
+ export * from "./evm/swaps/handlers/claim/ClaimHandlers";
30
+ export * from "./evm/swaps/handlers/claim/HashlockClaimHandler";
31
+ export * from "./evm/swaps/handlers/claim/btc/IBitcoinClaimHandler";
32
+ export * from "./evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler";
33
+ export * from "./evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler";
34
+ export * from "./evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler";
35
+ export * from "./evm/wallet/EVMSigner";
36
+ export * from "./evm/wallet/EVMBrowserSigner";
37
+ export * from "./chains/citrea/CitreaInitializer";
38
+ export * from "./chains/citrea/CitreaChainType";
39
+ export * from "./chains/citrea/CitreaFees";
40
+ export * from "./chains/botanix/BotanixInitializer";
41
+ export * from "./chains/botanix/BotanixChainType";
42
+ export * from "./evm/providers/JsonRpcProviderWithRetries";
43
+ export * from "./evm/providers/WebSocketProviderWithRetries";
44
+ export * from "./evm/providers/ReconnectingWebSocketProvider";
package/dist/index.js ADDED
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./evm/btcrelay/headers/EVMBtcHeader"), exports);
18
+ __exportStar(require("./evm/btcrelay/headers/EVMBtcStoredHeader"), exports);
19
+ __exportStar(require("./evm/btcrelay/EVMBtcRelay"), exports);
20
+ __exportStar(require("./evm/chain/EVMChainInterface"), exports);
21
+ __exportStar(require("./evm/chain/EVMModule"), exports);
22
+ __exportStar(require("./evm/chain/modules/EVMAddresses"), exports);
23
+ __exportStar(require("./evm/chain/modules/EVMBlocks"), exports);
24
+ __exportStar(require("./evm/chain/modules/EVMEvents"), exports);
25
+ __exportStar(require("./evm/chain/modules/EVMFees"), exports);
26
+ __exportStar(require("./evm/chain/modules/EVMSignatures"), exports);
27
+ __exportStar(require("./evm/chain/modules/EVMTokens"), exports);
28
+ __exportStar(require("./evm/chain/modules/EVMTransactions"), exports);
29
+ __exportStar(require("./evm/contract/modules/EVMContractEvents"), exports);
30
+ __exportStar(require("./evm/contract/EVMContractBase"), exports);
31
+ __exportStar(require("./evm/contract/EVMContractModule"), exports);
32
+ __exportStar(require("./evm/events/EVMChainEventsBrowser"), exports);
33
+ __exportStar(require("./evm/spv_swap/EVMSpvVaultContract"), exports);
34
+ __exportStar(require("./evm/spv_swap/EVMSpvWithdrawalData"), exports);
35
+ __exportStar(require("./evm/spv_swap/EVMSpvVaultData"), exports);
36
+ __exportStar(require("./evm/swaps/EVMSwapContract"), exports);
37
+ __exportStar(require("./evm/swaps/EVMSwapData"), exports);
38
+ __exportStar(require("./evm/swaps/EVMSwapModule"), exports);
39
+ __exportStar(require("./evm/swaps/modules/EVMLpVault"), exports);
40
+ __exportStar(require("./evm/swaps/modules/EVMSwapInit"), exports);
41
+ __exportStar(require("./evm/swaps/modules/EVMSwapClaim"), exports);
42
+ __exportStar(require("./evm/swaps/modules/EVMSwapRefund"), exports);
43
+ __exportStar(require("./evm/swaps/handlers/IHandler"), exports);
44
+ __exportStar(require("./evm/swaps/handlers/refund/TimelockRefundHandler"), exports);
45
+ __exportStar(require("./evm/swaps/handlers/claim/ClaimHandlers"), exports);
46
+ __exportStar(require("./evm/swaps/handlers/claim/HashlockClaimHandler"), exports);
47
+ __exportStar(require("./evm/swaps/handlers/claim/btc/IBitcoinClaimHandler"), exports);
48
+ __exportStar(require("./evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler"), exports);
49
+ __exportStar(require("./evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler"), exports);
50
+ __exportStar(require("./evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler"), exports);
51
+ __exportStar(require("./evm/wallet/EVMSigner"), exports);
52
+ __exportStar(require("./evm/wallet/EVMBrowserSigner"), exports);
53
+ __exportStar(require("./chains/citrea/CitreaInitializer"), exports);
54
+ __exportStar(require("./chains/citrea/CitreaChainType"), exports);
55
+ __exportStar(require("./chains/citrea/CitreaFees"), exports);
56
+ __exportStar(require("./chains/botanix/BotanixInitializer"), exports);
57
+ __exportStar(require("./chains/botanix/BotanixChainType"), exports);
58
+ __exportStar(require("./evm/providers/JsonRpcProviderWithRetries"), exports);
59
+ __exportStar(require("./evm/providers/WebSocketProviderWithRetries"), exports);
60
+ __exportStar(require("./evm/providers/ReconnectingWebSocketProvider"), exports);