@atomiqlabs/chain-evm 1.0.0-dev.38 → 1.0.0-dev.40

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 (167) hide show
  1. package/LICENSE +201 -201
  2. package/dist/chains/botanix/BotanixChainType.d.ts +13 -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 +117 -0
  6. package/dist/chains/citrea/CitreaBtcRelay.d.ts +21 -21
  7. package/dist/chains/citrea/CitreaBtcRelay.js +43 -43
  8. package/dist/chains/citrea/CitreaChainType.d.ts +13 -13
  9. package/dist/chains/citrea/CitreaChainType.js +2 -2
  10. package/dist/chains/citrea/CitreaFees.d.ts +29 -29
  11. package/dist/chains/citrea/CitreaFees.js +67 -67
  12. package/dist/chains/citrea/CitreaInitializer.d.ts +30 -30
  13. package/dist/chains/citrea/CitreaInitializer.js +127 -127
  14. package/dist/chains/citrea/CitreaSpvVaultContract.d.ts +15 -15
  15. package/dist/chains/citrea/CitreaSpvVaultContract.js +74 -74
  16. package/dist/chains/citrea/CitreaSwapContract.d.ts +22 -22
  17. package/dist/chains/citrea/CitreaSwapContract.js +96 -96
  18. package/dist/chains/citrea/CitreaTokens.d.ts +9 -9
  19. package/dist/chains/citrea/CitreaTokens.js +20 -20
  20. package/dist/evm/btcrelay/BtcRelayAbi.d.ts +198 -198
  21. package/dist/evm/btcrelay/BtcRelayAbi.js +261 -261
  22. package/dist/evm/btcrelay/BtcRelayTypechain.d.ts +172 -172
  23. package/dist/evm/btcrelay/BtcRelayTypechain.js +2 -2
  24. package/dist/evm/btcrelay/EVMBtcRelay.d.ts +195 -195
  25. package/dist/evm/btcrelay/EVMBtcRelay.js +423 -423
  26. package/dist/evm/btcrelay/headers/EVMBtcHeader.d.ts +33 -33
  27. package/dist/evm/btcrelay/headers/EVMBtcHeader.js +84 -84
  28. package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.d.ts +56 -56
  29. package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.js +123 -123
  30. package/dist/evm/chain/EVMChainInterface.d.ts +51 -51
  31. package/dist/evm/chain/EVMChainInterface.js +89 -89
  32. package/dist/evm/chain/EVMModule.d.ts +9 -9
  33. package/dist/evm/chain/EVMModule.js +13 -13
  34. package/dist/evm/chain/modules/ERC20Abi.d.ts +168 -168
  35. package/dist/evm/chain/modules/ERC20Abi.js +225 -225
  36. package/dist/evm/chain/modules/EVMAddresses.d.ts +10 -10
  37. package/dist/evm/chain/modules/EVMAddresses.js +30 -30
  38. package/dist/evm/chain/modules/EVMBlocks.d.ts +20 -20
  39. package/dist/evm/chain/modules/EVMBlocks.js +64 -64
  40. package/dist/evm/chain/modules/EVMEvents.d.ts +36 -36
  41. package/dist/evm/chain/modules/EVMEvents.js +122 -122
  42. package/dist/evm/chain/modules/EVMFees.d.ts +36 -36
  43. package/dist/evm/chain/modules/EVMFees.js +73 -73
  44. package/dist/evm/chain/modules/EVMSignatures.d.ts +29 -29
  45. package/dist/evm/chain/modules/EVMSignatures.js +68 -68
  46. package/dist/evm/chain/modules/EVMTokens.d.ts +70 -70
  47. package/dist/evm/chain/modules/EVMTokens.js +142 -142
  48. package/dist/evm/chain/modules/EVMTransactions.d.ts +89 -89
  49. package/dist/evm/chain/modules/EVMTransactions.js +230 -230
  50. package/dist/evm/contract/EVMContractBase.d.ts +22 -22
  51. package/dist/evm/contract/EVMContractBase.js +34 -34
  52. package/dist/evm/contract/EVMContractModule.d.ts +8 -8
  53. package/dist/evm/contract/EVMContractModule.js +11 -11
  54. package/dist/evm/contract/modules/EVMContractEvents.d.ts +42 -42
  55. package/dist/evm/contract/modules/EVMContractEvents.js +75 -75
  56. package/dist/evm/events/EVMChainEvents.d.ts +22 -22
  57. package/dist/evm/events/EVMChainEvents.js +67 -67
  58. package/dist/evm/events/EVMChainEventsBrowser.d.ts +86 -86
  59. package/dist/evm/events/EVMChainEventsBrowser.js +294 -294
  60. package/dist/evm/spv_swap/EVMSpvVaultContract.d.ts +78 -78
  61. package/dist/evm/spv_swap/EVMSpvVaultContract.js +478 -478
  62. package/dist/evm/spv_swap/EVMSpvVaultData.d.ts +39 -39
  63. package/dist/evm/spv_swap/EVMSpvVaultData.js +180 -180
  64. package/dist/evm/spv_swap/EVMSpvWithdrawalData.d.ts +19 -19
  65. package/dist/evm/spv_swap/EVMSpvWithdrawalData.js +55 -55
  66. package/dist/evm/spv_swap/SpvVaultContractAbi.d.ts +91 -91
  67. package/dist/evm/spv_swap/SpvVaultContractAbi.js +849 -849
  68. package/dist/evm/spv_swap/SpvVaultContractTypechain.d.ts +450 -450
  69. package/dist/evm/spv_swap/SpvVaultContractTypechain.js +2 -2
  70. package/dist/evm/swaps/EVMSwapContract.d.ts +193 -193
  71. package/dist/evm/swaps/EVMSwapContract.js +378 -378
  72. package/dist/evm/swaps/EVMSwapData.d.ts +66 -66
  73. package/dist/evm/swaps/EVMSwapData.js +260 -260
  74. package/dist/evm/swaps/EVMSwapModule.d.ts +9 -9
  75. package/dist/evm/swaps/EVMSwapModule.js +11 -11
  76. package/dist/evm/swaps/EscrowManagerAbi.d.ts +120 -120
  77. package/dist/evm/swaps/EscrowManagerAbi.js +985 -985
  78. package/dist/evm/swaps/EscrowManagerTypechain.d.ts +475 -475
  79. package/dist/evm/swaps/EscrowManagerTypechain.js +2 -2
  80. package/dist/evm/swaps/handlers/IHandler.d.ts +13 -13
  81. package/dist/evm/swaps/handlers/IHandler.js +2 -2
  82. package/dist/evm/swaps/handlers/claim/ClaimHandlers.d.ts +10 -10
  83. package/dist/evm/swaps/handlers/claim/ClaimHandlers.js +13 -13
  84. package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.d.ts +20 -20
  85. package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.js +39 -39
  86. package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
  87. package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +59 -59
  88. package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
  89. package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +51 -51
  90. package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +21 -21
  91. package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +28 -28
  92. package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +48 -48
  93. package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +63 -63
  94. package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
  95. package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.js +28 -28
  96. package/dist/evm/swaps/modules/EVMLpVault.d.ts +69 -69
  97. package/dist/evm/swaps/modules/EVMLpVault.js +134 -134
  98. package/dist/evm/swaps/modules/EVMSwapClaim.d.ts +54 -54
  99. package/dist/evm/swaps/modules/EVMSwapClaim.js +137 -137
  100. package/dist/evm/swaps/modules/EVMSwapInit.d.ts +88 -88
  101. package/dist/evm/swaps/modules/EVMSwapInit.js +274 -274
  102. package/dist/evm/swaps/modules/EVMSwapRefund.d.ts +62 -62
  103. package/dist/evm/swaps/modules/EVMSwapRefund.js +167 -167
  104. package/dist/evm/typechain/common.d.ts +50 -50
  105. package/dist/evm/typechain/common.js +2 -2
  106. package/dist/evm/wallet/EVMSigner.d.ts +10 -10
  107. package/dist/evm/wallet/EVMSigner.js +17 -17
  108. package/dist/index.d.ts +40 -38
  109. package/dist/index.js +56 -54
  110. package/dist/utils/Utils.d.ts +15 -15
  111. package/dist/utils/Utils.js +71 -71
  112. package/package.json +37 -37
  113. package/src/chains/botanix/BotanixChainType.ts +28 -0
  114. package/src/chains/botanix/BotanixInitializer.ts +164 -0
  115. package/src/chains/citrea/CitreaBtcRelay.ts +57 -57
  116. package/src/chains/citrea/CitreaChainType.ts +28 -28
  117. package/src/chains/citrea/CitreaFees.ts +77 -77
  118. package/src/chains/citrea/CitreaInitializer.ts +178 -178
  119. package/src/chains/citrea/CitreaSpvVaultContract.ts +75 -75
  120. package/src/chains/citrea/CitreaSwapContract.ts +102 -102
  121. package/src/chains/citrea/CitreaTokens.ts +21 -21
  122. package/src/evm/btcrelay/BtcRelayAbi.ts +258 -258
  123. package/src/evm/btcrelay/BtcRelayTypechain.ts +371 -371
  124. package/src/evm/btcrelay/EVMBtcRelay.ts +522 -522
  125. package/src/evm/btcrelay/headers/EVMBtcHeader.ts +109 -109
  126. package/src/evm/btcrelay/headers/EVMBtcStoredHeader.ts +152 -152
  127. package/src/evm/chain/EVMChainInterface.ts +155 -155
  128. package/src/evm/chain/EVMModule.ts +21 -21
  129. package/src/evm/chain/modules/ERC20Abi.ts +222 -222
  130. package/src/evm/chain/modules/EVMAddresses.ts +28 -28
  131. package/src/evm/chain/modules/EVMBlocks.ts +75 -75
  132. package/src/evm/chain/modules/EVMEvents.ts +139 -139
  133. package/src/evm/chain/modules/EVMFees.ts +104 -104
  134. package/src/evm/chain/modules/EVMSignatures.ts +76 -76
  135. package/src/evm/chain/modules/EVMTokens.ts +155 -155
  136. package/src/evm/chain/modules/EVMTransactions.ts +257 -257
  137. package/src/evm/contract/EVMContractBase.ts +63 -63
  138. package/src/evm/contract/EVMContractModule.ts +16 -16
  139. package/src/evm/contract/modules/EVMContractEvents.ts +102 -102
  140. package/src/evm/events/EVMChainEvents.ts +81 -81
  141. package/src/evm/events/EVMChainEventsBrowser.ts +390 -390
  142. package/src/evm/spv_swap/EVMSpvVaultContract.ts +608 -608
  143. package/src/evm/spv_swap/EVMSpvVaultData.ts +224 -224
  144. package/src/evm/spv_swap/EVMSpvWithdrawalData.ts +70 -70
  145. package/src/evm/spv_swap/SpvVaultContractAbi.ts +846 -846
  146. package/src/evm/spv_swap/SpvVaultContractTypechain.ts +685 -685
  147. package/src/evm/swaps/EVMSwapContract.ts +600 -600
  148. package/src/evm/swaps/EVMSwapData.ts +378 -378
  149. package/src/evm/swaps/EVMSwapModule.ts +16 -16
  150. package/src/evm/swaps/EscrowManagerAbi.ts +982 -982
  151. package/src/evm/swaps/EscrowManagerTypechain.ts +723 -723
  152. package/src/evm/swaps/handlers/IHandler.ts +17 -17
  153. package/src/evm/swaps/handlers/claim/ClaimHandlers.ts +20 -20
  154. package/src/evm/swaps/handlers/claim/HashlockClaimHandler.ts +46 -46
  155. package/src/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +82 -82
  156. package/src/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +76 -76
  157. package/src/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +46 -46
  158. package/src/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +115 -115
  159. package/src/evm/swaps/handlers/refund/TimelockRefundHandler.ts +37 -37
  160. package/src/evm/swaps/modules/EVMLpVault.ts +154 -154
  161. package/src/evm/swaps/modules/EVMSwapClaim.ts +172 -172
  162. package/src/evm/swaps/modules/EVMSwapInit.ts +328 -328
  163. package/src/evm/swaps/modules/EVMSwapRefund.ts +229 -229
  164. package/src/evm/typechain/common.ts +131 -131
  165. package/src/evm/wallet/EVMSigner.ts +25 -25
  166. package/src/index.ts +48 -45
  167. package/src/utils/Utils.ts +81 -81
@@ -1,155 +1,155 @@
1
- import {EVMModule} from "../EVMModule";
2
- import {Contract, TransactionRequest} from "ethers";
3
- import {ERC20Abi} from "./ERC20Abi";
4
- import {EVMAddresses} from "./EVMAddresses";
5
- import {EVMFees} from "./EVMFees";
6
- import {EVMSwapData} from "../../swaps/EVMSwapData";
7
-
8
-
9
- export class EVMTokens extends EVMModule<any> {
10
-
11
- public static readonly ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
12
-
13
- public static readonly GasCosts = {
14
- TRANSFER: 80_000 + 21_000,
15
- APPROVE: 80_000 + 21_000
16
- };
17
-
18
- private getContract(address: string) {
19
- return new Contract(address, ERC20Abi, this.root.provider);
20
- }
21
-
22
- ///////////////////
23
- //// Tokens
24
- /**
25
- * Checks if the provided string is a valid starknet token
26
- *
27
- * @param token
28
- */
29
- public isValidToken(token: string) {
30
- return EVMAddresses.isValidAddress(token);
31
- }
32
-
33
- /**
34
- * Returns the token balance of the address
35
- *
36
- * @param address
37
- * @param token
38
- */
39
- public async getTokenBalance(address: string, token: string): Promise<bigint> {
40
- let balance: bigint;
41
- if(token === "0x0000000000000000000000000000000000000000") {
42
- balance = await this.provider.getBalance(address);
43
- } else {
44
- const erc20 = this.getContract(token);
45
- balance = await erc20.balanceOf(address);
46
- }
47
- this.logger.debug("getTokenBalance(): token balance fetched, token: "+token+
48
- " address: "+address+" amount: "+balance.toString(10));
49
-
50
- return balance;
51
- }
52
-
53
- /**
54
- * Returns the authorized allowance of specific address towards a spender contract
55
- *
56
- * @param spender A contract trying to spend user's erc20 balance
57
- * @param address Wallet address
58
- * @param token ERC-20 token
59
- */
60
- public async getTokenAllowance(spender: string, address: string, token: string): Promise<bigint> {
61
- if(token === "0x0000000000000000000000000000000000000000") return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn;
62
- const erc20 = this.getContract(token);
63
- return await erc20.allowance(address, spender);
64
- }
65
-
66
- /**
67
- * Returns the native currency address
68
- */
69
- public getNativeCurrencyAddress(): string {
70
- return "0x0000000000000000000000000000000000000000";
71
- }
72
-
73
- ///////////////////
74
- //// Transfers
75
- /**
76
- * Creates transactions for sending the over the tokens
77
- *
78
- * @param signer
79
- * @param token token to send
80
- * @param amount amount of the token to send
81
- * @param recipient recipient's address
82
- * @param feeRate fee rate to use for the transactions
83
- * @private
84
- */
85
- public async Transfer(signer: string, token: string, amount: bigint, recipient: string, feeRate?: string): Promise<TransactionRequest> {
86
- let tx: TransactionRequest;
87
- if(token===this.getNativeCurrencyAddress()) {
88
- tx = {
89
- to: recipient,
90
- value: amount
91
- };
92
- } else {
93
- tx = await this.getContract(token).transfer.populateTransaction(recipient, amount);
94
- }
95
- tx.from = signer;
96
- EVMFees.applyFeeRate(tx, EVMTokens.GasCosts.TRANSFER, feeRate ?? await this.root.Fees.getFeeRate());
97
-
98
- this.logger.debug("txsTransfer(): transfer TX created, recipient: "+recipient.toString()+
99
- " token: "+token.toString()+ " amount: "+amount.toString(10));
100
-
101
- return tx;
102
- }
103
-
104
- ///////////////////
105
- //// Approval
106
- /**
107
- * Creates transactions for approving spending of tokens
108
- *
109
- * @param signer
110
- * @param token token to send
111
- * @param amount amount of the token to send
112
- * @param spender recipient's address
113
- * @param feeRate fee rate to use for the transactions
114
- * @private
115
- */
116
- public async Approve(signer: string, token: string, amount: bigint, spender: string, feeRate?: string): Promise<TransactionRequest> {
117
- if(token===this.getNativeCurrencyAddress()) return null;
118
-
119
- const tx = await this.getContract(token).approve.populateTransaction(spender, amount);
120
- tx.from = signer;
121
- EVMFees.applyFeeRate(tx, EVMTokens.GasCosts.APPROVE, feeRate ?? await this.root.Fees.getFeeRate());
122
-
123
- this.logger.debug("txsTransfer(): approve TX created, spender: "+spender.toString()+
124
- " token: "+token.toString()+ " amount: "+amount.toString(10));
125
-
126
- return tx;
127
- }
128
-
129
- /**
130
- * Checks whether an approve transaction is required for a given token and either returns the tx
131
- * or null in case the approve is not required
132
- *
133
- * @param signer
134
- * @param token token to approve for
135
- * @param amount amount of the token to send
136
- * @param spender spending contract address
137
- * @param feeRate fee rate to use for the transactions
138
- */
139
- public async checkAndGetApproveTx(signer: string, token: string, amount: bigint, spender: string, feeRate?: string): Promise<TransactionRequest | null> {
140
- const alreadyApproved = await this.getTokenAllowance(spender, signer, token);
141
- if(alreadyApproved >= amount) return null;
142
- return await this.Approve(signer, token, amount, spender, feeRate);
143
- }
144
-
145
- async getApproveFee(feeRate?: string): Promise<bigint> {
146
- feeRate ??= await this.root.Fees.getFeeRate();
147
- return EVMFees.getGasFee(EVMTokens.GasCosts.APPROVE, feeRate);
148
- }
149
-
150
- async getTransferFee(feeRate?: string): Promise<bigint> {
151
- feeRate ??= await this.root.Fees.getFeeRate();
152
- return EVMFees.getGasFee(EVMTokens.GasCosts.APPROVE, feeRate);
153
- }
154
-
155
- }
1
+ import {EVMModule} from "../EVMModule";
2
+ import {Contract, TransactionRequest} from "ethers";
3
+ import {ERC20Abi} from "./ERC20Abi";
4
+ import {EVMAddresses} from "./EVMAddresses";
5
+ import {EVMFees} from "./EVMFees";
6
+ import {EVMSwapData} from "../../swaps/EVMSwapData";
7
+
8
+
9
+ export class EVMTokens extends EVMModule<any> {
10
+
11
+ public static readonly ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
12
+
13
+ public static readonly GasCosts = {
14
+ TRANSFER: 80_000 + 21_000,
15
+ APPROVE: 80_000 + 21_000
16
+ };
17
+
18
+ private getContract(address: string) {
19
+ return new Contract(address, ERC20Abi, this.root.provider);
20
+ }
21
+
22
+ ///////////////////
23
+ //// Tokens
24
+ /**
25
+ * Checks if the provided string is a valid starknet token
26
+ *
27
+ * @param token
28
+ */
29
+ public isValidToken(token: string) {
30
+ return EVMAddresses.isValidAddress(token);
31
+ }
32
+
33
+ /**
34
+ * Returns the token balance of the address
35
+ *
36
+ * @param address
37
+ * @param token
38
+ */
39
+ public async getTokenBalance(address: string, token: string): Promise<bigint> {
40
+ let balance: bigint;
41
+ if(token === "0x0000000000000000000000000000000000000000") {
42
+ balance = await this.provider.getBalance(address);
43
+ } else {
44
+ const erc20 = this.getContract(token);
45
+ balance = await erc20.balanceOf(address);
46
+ }
47
+ this.logger.debug("getTokenBalance(): token balance fetched, token: "+token+
48
+ " address: "+address+" amount: "+balance.toString(10));
49
+
50
+ return balance;
51
+ }
52
+
53
+ /**
54
+ * Returns the authorized allowance of specific address towards a spender contract
55
+ *
56
+ * @param spender A contract trying to spend user's erc20 balance
57
+ * @param address Wallet address
58
+ * @param token ERC-20 token
59
+ */
60
+ public async getTokenAllowance(spender: string, address: string, token: string): Promise<bigint> {
61
+ if(token === "0x0000000000000000000000000000000000000000") return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn;
62
+ const erc20 = this.getContract(token);
63
+ return await erc20.allowance(address, spender);
64
+ }
65
+
66
+ /**
67
+ * Returns the native currency address
68
+ */
69
+ public getNativeCurrencyAddress(): string {
70
+ return "0x0000000000000000000000000000000000000000";
71
+ }
72
+
73
+ ///////////////////
74
+ //// Transfers
75
+ /**
76
+ * Creates transactions for sending the over the tokens
77
+ *
78
+ * @param signer
79
+ * @param token token to send
80
+ * @param amount amount of the token to send
81
+ * @param recipient recipient's address
82
+ * @param feeRate fee rate to use for the transactions
83
+ * @private
84
+ */
85
+ public async Transfer(signer: string, token: string, amount: bigint, recipient: string, feeRate?: string): Promise<TransactionRequest> {
86
+ let tx: TransactionRequest;
87
+ if(token===this.getNativeCurrencyAddress()) {
88
+ tx = {
89
+ to: recipient,
90
+ value: amount
91
+ };
92
+ } else {
93
+ tx = await this.getContract(token).transfer.populateTransaction(recipient, amount);
94
+ }
95
+ tx.from = signer;
96
+ EVMFees.applyFeeRate(tx, EVMTokens.GasCosts.TRANSFER, feeRate ?? await this.root.Fees.getFeeRate());
97
+
98
+ this.logger.debug("txsTransfer(): transfer TX created, recipient: "+recipient.toString()+
99
+ " token: "+token.toString()+ " amount: "+amount.toString(10));
100
+
101
+ return tx;
102
+ }
103
+
104
+ ///////////////////
105
+ //// Approval
106
+ /**
107
+ * Creates transactions for approving spending of tokens
108
+ *
109
+ * @param signer
110
+ * @param token token to send
111
+ * @param amount amount of the token to send
112
+ * @param spender recipient's address
113
+ * @param feeRate fee rate to use for the transactions
114
+ * @private
115
+ */
116
+ public async Approve(signer: string, token: string, amount: bigint, spender: string, feeRate?: string): Promise<TransactionRequest> {
117
+ if(token===this.getNativeCurrencyAddress()) return null;
118
+
119
+ const tx = await this.getContract(token).approve.populateTransaction(spender, amount);
120
+ tx.from = signer;
121
+ EVMFees.applyFeeRate(tx, EVMTokens.GasCosts.APPROVE, feeRate ?? await this.root.Fees.getFeeRate());
122
+
123
+ this.logger.debug("txsTransfer(): approve TX created, spender: "+spender.toString()+
124
+ " token: "+token.toString()+ " amount: "+amount.toString(10));
125
+
126
+ return tx;
127
+ }
128
+
129
+ /**
130
+ * Checks whether an approve transaction is required for a given token and either returns the tx
131
+ * or null in case the approve is not required
132
+ *
133
+ * @param signer
134
+ * @param token token to approve for
135
+ * @param amount amount of the token to send
136
+ * @param spender spending contract address
137
+ * @param feeRate fee rate to use for the transactions
138
+ */
139
+ public async checkAndGetApproveTx(signer: string, token: string, amount: bigint, spender: string, feeRate?: string): Promise<TransactionRequest | null> {
140
+ const alreadyApproved = await this.getTokenAllowance(spender, signer, token);
141
+ if(alreadyApproved >= amount) return null;
142
+ return await this.Approve(signer, token, amount, spender, feeRate);
143
+ }
144
+
145
+ async getApproveFee(feeRate?: string): Promise<bigint> {
146
+ feeRate ??= await this.root.Fees.getFeeRate();
147
+ return EVMFees.getGasFee(EVMTokens.GasCosts.APPROVE, feeRate);
148
+ }
149
+
150
+ async getTransferFee(feeRate?: string): Promise<bigint> {
151
+ feeRate ??= await this.root.Fees.getFeeRate();
152
+ return EVMFees.getGasFee(EVMTokens.GasCosts.APPROVE, feeRate);
153
+ }
154
+
155
+ }