@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.
- package/LICENSE +201 -0
- package/dist/chains/botanix/BotanixChainType.d.ts +14 -0
- package/dist/chains/botanix/BotanixChainType.js +2 -0
- package/dist/chains/botanix/BotanixInitializer.d.ts +30 -0
- package/dist/chains/botanix/BotanixInitializer.js +125 -0
- package/dist/chains/citrea/CitreaBtcRelay.d.ts +21 -0
- package/dist/chains/citrea/CitreaBtcRelay.js +43 -0
- package/dist/chains/citrea/CitreaChainType.d.ts +14 -0
- package/dist/chains/citrea/CitreaChainType.js +2 -0
- package/dist/chains/citrea/CitreaFees.d.ts +29 -0
- package/dist/chains/citrea/CitreaFees.js +67 -0
- package/dist/chains/citrea/CitreaInitializer.d.ts +30 -0
- package/dist/chains/citrea/CitreaInitializer.js +132 -0
- package/dist/chains/citrea/CitreaSpvVaultContract.d.ts +15 -0
- package/dist/chains/citrea/CitreaSpvVaultContract.js +74 -0
- package/dist/chains/citrea/CitreaSwapContract.d.ts +22 -0
- package/dist/chains/citrea/CitreaSwapContract.js +96 -0
- package/dist/chains/citrea/CitreaTokens.d.ts +9 -0
- package/dist/chains/citrea/CitreaTokens.js +20 -0
- package/dist/evm/btcrelay/BtcRelayAbi.d.ts +198 -0
- package/dist/evm/btcrelay/BtcRelayAbi.js +261 -0
- package/dist/evm/btcrelay/BtcRelayTypechain.d.ts +172 -0
- package/dist/evm/btcrelay/BtcRelayTypechain.js +2 -0
- package/dist/evm/btcrelay/EVMBtcRelay.d.ts +197 -0
- package/dist/evm/btcrelay/EVMBtcRelay.js +435 -0
- package/dist/evm/btcrelay/headers/EVMBtcHeader.d.ts +33 -0
- package/dist/evm/btcrelay/headers/EVMBtcHeader.js +84 -0
- package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.d.ts +56 -0
- package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.js +123 -0
- package/dist/evm/chain/EVMChainInterface.d.ts +60 -0
- package/dist/evm/chain/EVMChainInterface.js +107 -0
- package/dist/evm/chain/EVMModule.d.ts +9 -0
- package/dist/evm/chain/EVMModule.js +13 -0
- package/dist/evm/chain/modules/ERC20Abi.d.ts +168 -0
- package/dist/evm/chain/modules/ERC20Abi.js +225 -0
- package/dist/evm/chain/modules/EVMAddresses.d.ts +10 -0
- package/dist/evm/chain/modules/EVMAddresses.js +30 -0
- package/dist/evm/chain/modules/EVMBlocks.d.ts +27 -0
- package/dist/evm/chain/modules/EVMBlocks.js +73 -0
- package/dist/evm/chain/modules/EVMEvents.d.ts +46 -0
- package/dist/evm/chain/modules/EVMEvents.js +151 -0
- package/dist/evm/chain/modules/EVMFees.d.ts +36 -0
- package/dist/evm/chain/modules/EVMFees.js +74 -0
- package/dist/evm/chain/modules/EVMSignatures.d.ts +29 -0
- package/dist/evm/chain/modules/EVMSignatures.js +68 -0
- package/dist/evm/chain/modules/EVMTokens.d.ts +70 -0
- package/dist/evm/chain/modules/EVMTokens.js +142 -0
- package/dist/evm/chain/modules/EVMTransactions.d.ts +94 -0
- package/dist/evm/chain/modules/EVMTransactions.js +307 -0
- package/dist/evm/contract/EVMContractBase.d.ts +22 -0
- package/dist/evm/contract/EVMContractBase.js +34 -0
- package/dist/evm/contract/EVMContractModule.d.ts +8 -0
- package/dist/evm/contract/EVMContractModule.js +11 -0
- package/dist/evm/contract/modules/EVMContractEvents.d.ts +43 -0
- package/dist/evm/contract/modules/EVMContractEvents.js +76 -0
- package/dist/evm/events/EVMChainEvents.d.ts +22 -0
- package/dist/evm/events/EVMChainEvents.js +69 -0
- package/dist/evm/events/EVMChainEventsBrowser.d.ts +102 -0
- package/dist/evm/events/EVMChainEventsBrowser.js +412 -0
- package/dist/evm/providers/JsonRpcProviderWithRetries.d.ts +16 -0
- package/dist/evm/providers/JsonRpcProviderWithRetries.js +27 -0
- package/dist/evm/providers/ReconnectingWebSocketProvider.d.ts +22 -0
- package/dist/evm/providers/ReconnectingWebSocketProvider.js +91 -0
- package/dist/evm/providers/SocketProvider.d.ts +111 -0
- package/dist/evm/providers/SocketProvider.js +336 -0
- package/dist/evm/providers/WebSocketProviderWithRetries.d.ts +17 -0
- package/dist/evm/providers/WebSocketProviderWithRetries.js +23 -0
- package/dist/evm/spv_swap/EVMSpvVaultContract.d.ts +110 -0
- package/dist/evm/spv_swap/EVMSpvVaultContract.js +629 -0
- package/dist/evm/spv_swap/EVMSpvVaultData.d.ts +40 -0
- package/dist/evm/spv_swap/EVMSpvVaultData.js +184 -0
- package/dist/evm/spv_swap/EVMSpvWithdrawalData.d.ts +19 -0
- package/dist/evm/spv_swap/EVMSpvWithdrawalData.js +55 -0
- package/dist/evm/spv_swap/SpvVaultContractAbi.d.ts +91 -0
- package/dist/evm/spv_swap/SpvVaultContractAbi.js +849 -0
- package/dist/evm/spv_swap/SpvVaultContractTypechain.d.ts +450 -0
- package/dist/evm/spv_swap/SpvVaultContractTypechain.js +2 -0
- package/dist/evm/swaps/EVMSwapContract.d.ts +199 -0
- package/dist/evm/swaps/EVMSwapContract.js +394 -0
- package/dist/evm/swaps/EVMSwapData.d.ts +66 -0
- package/dist/evm/swaps/EVMSwapData.js +260 -0
- package/dist/evm/swaps/EVMSwapModule.d.ts +9 -0
- package/dist/evm/swaps/EVMSwapModule.js +11 -0
- package/dist/evm/swaps/EscrowManagerAbi.d.ts +120 -0
- package/dist/evm/swaps/EscrowManagerAbi.js +985 -0
- package/dist/evm/swaps/EscrowManagerTypechain.d.ts +475 -0
- package/dist/evm/swaps/EscrowManagerTypechain.js +2 -0
- package/dist/evm/swaps/handlers/IHandler.d.ts +13 -0
- package/dist/evm/swaps/handlers/IHandler.js +2 -0
- package/dist/evm/swaps/handlers/claim/ClaimHandlers.d.ts +10 -0
- package/dist/evm/swaps/handlers/claim/ClaimHandlers.js +13 -0
- package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.d.ts +20 -0
- package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.js +39 -0
- package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -0
- package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +59 -0
- package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -0
- package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +51 -0
- package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +21 -0
- package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +28 -0
- package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +48 -0
- package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +63 -0
- package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -0
- package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.js +28 -0
- package/dist/evm/swaps/modules/EVMLpVault.d.ts +69 -0
- package/dist/evm/swaps/modules/EVMLpVault.js +134 -0
- package/dist/evm/swaps/modules/EVMSwapClaim.d.ts +54 -0
- package/dist/evm/swaps/modules/EVMSwapClaim.js +137 -0
- package/dist/evm/swaps/modules/EVMSwapInit.d.ts +88 -0
- package/dist/evm/swaps/modules/EVMSwapInit.js +274 -0
- package/dist/evm/swaps/modules/EVMSwapRefund.d.ts +62 -0
- package/dist/evm/swaps/modules/EVMSwapRefund.js +167 -0
- package/dist/evm/typechain/common.d.ts +50 -0
- package/dist/evm/typechain/common.js +2 -0
- package/dist/evm/wallet/EVMBrowserSigner.d.ts +5 -0
- package/dist/evm/wallet/EVMBrowserSigner.js +11 -0
- package/dist/evm/wallet/EVMPersistentSigner.d.ts +29 -0
- package/dist/evm/wallet/EVMPersistentSigner.js +230 -0
- package/dist/evm/wallet/EVMSigner.d.ts +12 -0
- package/dist/evm/wallet/EVMSigner.js +28 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.js +60 -0
- package/dist/utils/Utils.d.ts +19 -0
- package/dist/utils/Utils.js +98 -0
- package/package.json +39 -0
- package/src/chains/botanix/BotanixChainType.ts +30 -0
- package/src/chains/botanix/BotanixInitializer.ts +175 -0
- package/src/chains/citrea/CitreaBtcRelay.ts +58 -0
- package/src/chains/citrea/CitreaChainType.ts +30 -0
- package/src/chains/citrea/CitreaFees.ts +77 -0
- package/src/chains/citrea/CitreaInitializer.ts +182 -0
- package/src/chains/citrea/CitreaSpvVaultContract.ts +75 -0
- package/src/chains/citrea/CitreaSwapContract.ts +103 -0
- package/src/chains/citrea/CitreaTokens.ts +22 -0
- package/src/evm/btcrelay/BtcRelayAbi.ts +258 -0
- package/src/evm/btcrelay/BtcRelayTypechain.ts +371 -0
- package/src/evm/btcrelay/EVMBtcRelay.ts +537 -0
- package/src/evm/btcrelay/headers/EVMBtcHeader.ts +110 -0
- package/src/evm/btcrelay/headers/EVMBtcStoredHeader.ts +153 -0
- package/src/evm/chain/EVMChainInterface.ts +189 -0
- package/src/evm/chain/EVMModule.ts +21 -0
- package/src/evm/chain/modules/ERC20Abi.ts +222 -0
- package/src/evm/chain/modules/EVMAddresses.ts +29 -0
- package/src/evm/chain/modules/EVMBlocks.ts +86 -0
- package/src/evm/chain/modules/EVMEvents.ts +182 -0
- package/src/evm/chain/modules/EVMFees.ts +104 -0
- package/src/evm/chain/modules/EVMSignatures.ts +76 -0
- package/src/evm/chain/modules/EVMTokens.ts +155 -0
- package/src/evm/chain/modules/EVMTransactions.ts +346 -0
- package/src/evm/contract/EVMContractBase.ts +63 -0
- package/src/evm/contract/EVMContractModule.ts +16 -0
- package/src/evm/contract/modules/EVMContractEvents.ts +104 -0
- package/src/evm/events/EVMChainEvents.ts +82 -0
- package/src/evm/events/EVMChainEventsBrowser.ts +533 -0
- package/src/evm/providers/JsonRpcProviderWithRetries.ts +34 -0
- package/src/evm/providers/ReconnectingWebSocketProvider.ts +107 -0
- package/src/evm/providers/SocketProvider.ts +371 -0
- package/src/evm/providers/WebSocketProviderWithRetries.ts +35 -0
- package/src/evm/spv_swap/EVMSpvVaultContract.ts +779 -0
- package/src/evm/spv_swap/EVMSpvVaultData.ts +228 -0
- package/src/evm/spv_swap/EVMSpvWithdrawalData.ts +70 -0
- package/src/evm/spv_swap/SpvVaultContractAbi.ts +846 -0
- package/src/evm/spv_swap/SpvVaultContractTypechain.ts +685 -0
- package/src/evm/swaps/EVMSwapContract.ts +621 -0
- package/src/evm/swaps/EVMSwapData.ts +378 -0
- package/src/evm/swaps/EVMSwapModule.ts +16 -0
- package/src/evm/swaps/EscrowManagerAbi.ts +982 -0
- package/src/evm/swaps/EscrowManagerTypechain.ts +723 -0
- package/src/evm/swaps/handlers/IHandler.ts +17 -0
- package/src/evm/swaps/handlers/claim/ClaimHandlers.ts +20 -0
- package/src/evm/swaps/handlers/claim/HashlockClaimHandler.ts +47 -0
- package/src/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +82 -0
- package/src/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +76 -0
- package/src/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +46 -0
- package/src/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +115 -0
- package/src/evm/swaps/handlers/refund/TimelockRefundHandler.ts +38 -0
- package/src/evm/swaps/modules/EVMLpVault.ts +155 -0
- package/src/evm/swaps/modules/EVMSwapClaim.ts +173 -0
- package/src/evm/swaps/modules/EVMSwapInit.ts +329 -0
- package/src/evm/swaps/modules/EVMSwapRefund.ts +229 -0
- package/src/evm/typechain/common.ts +131 -0
- package/src/evm/wallet/EVMBrowserSigner.ts +12 -0
- package/src/evm/wallet/EVMPersistentSigner.ts +307 -0
- package/src/evm/wallet/EVMSigner.ts +35 -0
- package/src/index.ts +53 -0
- package/src/utils/Utils.ts +111 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ERC20Abi = void 0;
|
|
4
|
+
exports.ERC20Abi = [
|
|
5
|
+
{
|
|
6
|
+
"constant": true,
|
|
7
|
+
"inputs": [],
|
|
8
|
+
"name": "name",
|
|
9
|
+
"outputs": [
|
|
10
|
+
{
|
|
11
|
+
"name": "",
|
|
12
|
+
"type": "string"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"payable": false,
|
|
16
|
+
"stateMutability": "view",
|
|
17
|
+
"type": "function"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"constant": false,
|
|
21
|
+
"inputs": [
|
|
22
|
+
{
|
|
23
|
+
"name": "_spender",
|
|
24
|
+
"type": "address"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "_value",
|
|
28
|
+
"type": "uint256"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"name": "approve",
|
|
32
|
+
"outputs": [
|
|
33
|
+
{
|
|
34
|
+
"name": "",
|
|
35
|
+
"type": "bool"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"payable": false,
|
|
39
|
+
"stateMutability": "nonpayable",
|
|
40
|
+
"type": "function"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"constant": true,
|
|
44
|
+
"inputs": [],
|
|
45
|
+
"name": "totalSupply",
|
|
46
|
+
"outputs": [
|
|
47
|
+
{
|
|
48
|
+
"name": "",
|
|
49
|
+
"type": "uint256"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"payable": false,
|
|
53
|
+
"stateMutability": "view",
|
|
54
|
+
"type": "function"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"constant": false,
|
|
58
|
+
"inputs": [
|
|
59
|
+
{
|
|
60
|
+
"name": "_from",
|
|
61
|
+
"type": "address"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "_to",
|
|
65
|
+
"type": "address"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "_value",
|
|
69
|
+
"type": "uint256"
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"name": "transferFrom",
|
|
73
|
+
"outputs": [
|
|
74
|
+
{
|
|
75
|
+
"name": "",
|
|
76
|
+
"type": "bool"
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"payable": false,
|
|
80
|
+
"stateMutability": "nonpayable",
|
|
81
|
+
"type": "function"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"constant": true,
|
|
85
|
+
"inputs": [],
|
|
86
|
+
"name": "decimals",
|
|
87
|
+
"outputs": [
|
|
88
|
+
{
|
|
89
|
+
"name": "",
|
|
90
|
+
"type": "uint8"
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"payable": false,
|
|
94
|
+
"stateMutability": "view",
|
|
95
|
+
"type": "function"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"constant": true,
|
|
99
|
+
"inputs": [
|
|
100
|
+
{
|
|
101
|
+
"name": "_owner",
|
|
102
|
+
"type": "address"
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"name": "balanceOf",
|
|
106
|
+
"outputs": [
|
|
107
|
+
{
|
|
108
|
+
"name": "balance",
|
|
109
|
+
"type": "uint256"
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"payable": false,
|
|
113
|
+
"stateMutability": "view",
|
|
114
|
+
"type": "function"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"constant": true,
|
|
118
|
+
"inputs": [],
|
|
119
|
+
"name": "symbol",
|
|
120
|
+
"outputs": [
|
|
121
|
+
{
|
|
122
|
+
"name": "",
|
|
123
|
+
"type": "string"
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"payable": false,
|
|
127
|
+
"stateMutability": "view",
|
|
128
|
+
"type": "function"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"constant": false,
|
|
132
|
+
"inputs": [
|
|
133
|
+
{
|
|
134
|
+
"name": "_to",
|
|
135
|
+
"type": "address"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"name": "_value",
|
|
139
|
+
"type": "uint256"
|
|
140
|
+
}
|
|
141
|
+
],
|
|
142
|
+
"name": "transfer",
|
|
143
|
+
"outputs": [
|
|
144
|
+
{
|
|
145
|
+
"name": "",
|
|
146
|
+
"type": "bool"
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"payable": false,
|
|
150
|
+
"stateMutability": "nonpayable",
|
|
151
|
+
"type": "function"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"constant": true,
|
|
155
|
+
"inputs": [
|
|
156
|
+
{
|
|
157
|
+
"name": "_owner",
|
|
158
|
+
"type": "address"
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"name": "_spender",
|
|
162
|
+
"type": "address"
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"name": "allowance",
|
|
166
|
+
"outputs": [
|
|
167
|
+
{
|
|
168
|
+
"name": "",
|
|
169
|
+
"type": "uint256"
|
|
170
|
+
}
|
|
171
|
+
],
|
|
172
|
+
"payable": false,
|
|
173
|
+
"stateMutability": "view",
|
|
174
|
+
"type": "function"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"payable": true,
|
|
178
|
+
"stateMutability": "payable",
|
|
179
|
+
"type": "fallback"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"anonymous": false,
|
|
183
|
+
"inputs": [
|
|
184
|
+
{
|
|
185
|
+
"indexed": true,
|
|
186
|
+
"name": "owner",
|
|
187
|
+
"type": "address"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"indexed": true,
|
|
191
|
+
"name": "spender",
|
|
192
|
+
"type": "address"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"indexed": false,
|
|
196
|
+
"name": "value",
|
|
197
|
+
"type": "uint256"
|
|
198
|
+
}
|
|
199
|
+
],
|
|
200
|
+
"name": "Approval",
|
|
201
|
+
"type": "event"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"anonymous": false,
|
|
205
|
+
"inputs": [
|
|
206
|
+
{
|
|
207
|
+
"indexed": true,
|
|
208
|
+
"name": "from",
|
|
209
|
+
"type": "address"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"indexed": true,
|
|
213
|
+
"name": "to",
|
|
214
|
+
"type": "address"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"indexed": false,
|
|
218
|
+
"name": "value",
|
|
219
|
+
"type": "uint256"
|
|
220
|
+
}
|
|
221
|
+
],
|
|
222
|
+
"name": "Transfer",
|
|
223
|
+
"type": "event"
|
|
224
|
+
}
|
|
225
|
+
];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EVMModule } from "../EVMModule";
|
|
2
|
+
export declare class EVMAddresses extends EVMModule<any> {
|
|
3
|
+
/**
|
|
4
|
+
* Checks whether an address is a valid EVM address
|
|
5
|
+
*
|
|
6
|
+
* @param value
|
|
7
|
+
*/
|
|
8
|
+
static isValidAddress(value: string): boolean;
|
|
9
|
+
static randomAddress(): string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVMAddresses = void 0;
|
|
4
|
+
const EVMModule_1 = require("../EVMModule");
|
|
5
|
+
const ethers_1 = require("ethers");
|
|
6
|
+
class EVMAddresses extends EVMModule_1.EVMModule {
|
|
7
|
+
///////////////////
|
|
8
|
+
//// Address utils
|
|
9
|
+
/**
|
|
10
|
+
* Checks whether an address is a valid EVM address
|
|
11
|
+
*
|
|
12
|
+
* @param value
|
|
13
|
+
*/
|
|
14
|
+
static isValidAddress(value) {
|
|
15
|
+
if (value.length !== 42)
|
|
16
|
+
return false;
|
|
17
|
+
try {
|
|
18
|
+
(0, ethers_1.isAddress)(value);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
static randomAddress() {
|
|
26
|
+
const wallet = ethers_1.Wallet.createRandom();
|
|
27
|
+
return wallet.address;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.EVMAddresses = EVMAddresses;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EVMModule } from "../EVMModule";
|
|
2
|
+
import { Block } from "ethers";
|
|
3
|
+
export type EVMBlockTag = "safe" | "pending" | "latest" | "finalized";
|
|
4
|
+
export declare class EVMBlocks extends EVMModule<any> {
|
|
5
|
+
private BLOCK_CACHE_TIME;
|
|
6
|
+
private blockCache;
|
|
7
|
+
/**
|
|
8
|
+
* Initiates fetch of a given block & saves it to cache
|
|
9
|
+
*
|
|
10
|
+
* @private
|
|
11
|
+
* @param blockTag
|
|
12
|
+
*/
|
|
13
|
+
private fetchAndSaveBlockTime;
|
|
14
|
+
private cleanupBlocks;
|
|
15
|
+
/**
|
|
16
|
+
* Gets the block for a given blocktag, with caching
|
|
17
|
+
*
|
|
18
|
+
* @param blockTag
|
|
19
|
+
*/
|
|
20
|
+
getBlock(blockTag: EVMBlockTag | number): Promise<Block>;
|
|
21
|
+
/**
|
|
22
|
+
* Gets the block time for a given blocktag, with caching
|
|
23
|
+
*
|
|
24
|
+
* @param blockTag
|
|
25
|
+
*/
|
|
26
|
+
getBlockTime(blockTag: EVMBlockTag | number): Promise<number>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVMBlocks = void 0;
|
|
4
|
+
const EVMModule_1 = require("../EVMModule");
|
|
5
|
+
class EVMBlocks extends EVMModule_1.EVMModule {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.BLOCK_CACHE_TIME = 5 * 1000;
|
|
9
|
+
this.blockCache = {};
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Initiates fetch of a given block & saves it to cache
|
|
13
|
+
*
|
|
14
|
+
* @private
|
|
15
|
+
* @param blockTag
|
|
16
|
+
*/
|
|
17
|
+
fetchAndSaveBlockTime(blockTag) {
|
|
18
|
+
const blockTagStr = blockTag.toString(10);
|
|
19
|
+
const blockPromise = this.provider.getBlock(blockTag, false);
|
|
20
|
+
const timestamp = Date.now();
|
|
21
|
+
this.blockCache[blockTagStr] = {
|
|
22
|
+
block: blockPromise,
|
|
23
|
+
timestamp
|
|
24
|
+
};
|
|
25
|
+
blockPromise.catch(e => {
|
|
26
|
+
if (this.blockCache[blockTagStr] != null && this.blockCache[blockTagStr].block === blockPromise)
|
|
27
|
+
delete this.blockCache[blockTagStr];
|
|
28
|
+
throw e;
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
block: blockPromise,
|
|
32
|
+
timestamp
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
cleanupBlocks() {
|
|
36
|
+
const currentTime = Date.now();
|
|
37
|
+
//Keys are in order that they were added, so we can stop at the first non-expired block
|
|
38
|
+
for (let key in this.blockCache) {
|
|
39
|
+
const block = this.blockCache[key];
|
|
40
|
+
if (currentTime - block.timestamp > this.BLOCK_CACHE_TIME) {
|
|
41
|
+
delete this.blockCache[key];
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
///////////////////
|
|
49
|
+
//// Blocks
|
|
50
|
+
/**
|
|
51
|
+
* Gets the block for a given blocktag, with caching
|
|
52
|
+
*
|
|
53
|
+
* @param blockTag
|
|
54
|
+
*/
|
|
55
|
+
getBlock(blockTag) {
|
|
56
|
+
this.cleanupBlocks();
|
|
57
|
+
let cachedBlockData = this.blockCache[blockTag.toString(10)];
|
|
58
|
+
if (cachedBlockData == null || Date.now() - cachedBlockData.timestamp > this.BLOCK_CACHE_TIME) {
|
|
59
|
+
cachedBlockData = this.fetchAndSaveBlockTime(blockTag);
|
|
60
|
+
}
|
|
61
|
+
return cachedBlockData.block;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Gets the block time for a given blocktag, with caching
|
|
65
|
+
*
|
|
66
|
+
* @param blockTag
|
|
67
|
+
*/
|
|
68
|
+
async getBlockTime(blockTag) {
|
|
69
|
+
const block = await this.getBlock(blockTag);
|
|
70
|
+
return block.timestamp;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.EVMBlocks = EVMBlocks;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { EVMModule } from "../EVMModule";
|
|
2
|
+
import { Log } from "ethers";
|
|
3
|
+
export declare class EVMEvents extends EVMModule<any> {
|
|
4
|
+
/**
|
|
5
|
+
* Wrapper for provider.getLogs(), automatically retries with smaller ranges if limits are reached
|
|
6
|
+
*
|
|
7
|
+
* @param contract
|
|
8
|
+
* @param topics
|
|
9
|
+
* @param startBlock
|
|
10
|
+
* @param endBlock
|
|
11
|
+
* @private
|
|
12
|
+
*/
|
|
13
|
+
private getLogs;
|
|
14
|
+
/**
|
|
15
|
+
* Returns the all the events occuring in a block range as identified by the contract and keys
|
|
16
|
+
*
|
|
17
|
+
* @param contract
|
|
18
|
+
* @param topics
|
|
19
|
+
* @param startBlock
|
|
20
|
+
* @param endBlock
|
|
21
|
+
* @param abortSignal
|
|
22
|
+
*/
|
|
23
|
+
getBlockEvents(contract: string, topics: (string[] | string | null)[], startBlock: number, endBlock?: number, abortSignal?: AbortSignal): Promise<Log[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Runs a search backwards in time, processing events from a specific contract and keys
|
|
26
|
+
*
|
|
27
|
+
* @param contract
|
|
28
|
+
* @param topics
|
|
29
|
+
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
30
|
+
* was found, or null if the search should continue
|
|
31
|
+
* @param abortSignal
|
|
32
|
+
* @param genesisHeight Height when the contract was deployed
|
|
33
|
+
*/
|
|
34
|
+
findInEvents<T>(contract: string, topics: (string[] | string | null)[], processor: (signatures: Log[]) => Promise<T>, abortSignal?: AbortSignal, genesisHeight?: number): Promise<T>;
|
|
35
|
+
/**
|
|
36
|
+
* Runs a search forwards in time, processing events from a specific contract and keys
|
|
37
|
+
*
|
|
38
|
+
* @param contract
|
|
39
|
+
* @param topics
|
|
40
|
+
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
41
|
+
* was found, or null if the search should continue
|
|
42
|
+
* @param abortSignal
|
|
43
|
+
* @param startHeight Blockheight at which to start
|
|
44
|
+
*/
|
|
45
|
+
findInEventsForward<T>(contract: string, topics: (string[] | string | null)[], processor: (signatures: Log[]) => Promise<T>, abortSignal?: AbortSignal, startHeight?: number): Promise<T>;
|
|
46
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVMEvents = void 0;
|
|
4
|
+
const EVMModule_1 = require("../EVMModule");
|
|
5
|
+
class EVMEvents extends EVMModule_1.EVMModule {
|
|
6
|
+
/**
|
|
7
|
+
* Wrapper for provider.getLogs(), automatically retries with smaller ranges if limits are reached
|
|
8
|
+
*
|
|
9
|
+
* @param contract
|
|
10
|
+
* @param topics
|
|
11
|
+
* @param startBlock
|
|
12
|
+
* @param endBlock
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
async getLogs(contract, topics, startBlock, endBlock) {
|
|
16
|
+
try {
|
|
17
|
+
return await this.root.provider.getLogs({
|
|
18
|
+
address: contract,
|
|
19
|
+
fromBlock: startBlock,
|
|
20
|
+
toBlock: endBlock,
|
|
21
|
+
topics
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
if (e.error?.code === -32008 || //Response is too big
|
|
26
|
+
e.error?.code === -32005 //Limit exceeded
|
|
27
|
+
) {
|
|
28
|
+
if (startBlock === endBlock)
|
|
29
|
+
throw e;
|
|
30
|
+
const difference = (endBlock - startBlock) / 2;
|
|
31
|
+
const midpoint = startBlock + Math.floor(difference);
|
|
32
|
+
this.logger.warn(`getLogs(): Error getting logs, limits reached, splitting to 2 ranges: ${startBlock}..${midpoint} & ${midpoint + 1}..${endBlock}: `, e);
|
|
33
|
+
return [
|
|
34
|
+
...await this.getLogs(contract, topics, startBlock, midpoint),
|
|
35
|
+
...await this.getLogs(contract, topics, midpoint + 1, endBlock),
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
throw e;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns the all the events occuring in a block range as identified by the contract and keys
|
|
43
|
+
*
|
|
44
|
+
* @param contract
|
|
45
|
+
* @param topics
|
|
46
|
+
* @param startBlock
|
|
47
|
+
* @param endBlock
|
|
48
|
+
* @param abortSignal
|
|
49
|
+
*/
|
|
50
|
+
async getBlockEvents(contract, topics, startBlock, endBlock = startBlock, abortSignal) {
|
|
51
|
+
let events = [];
|
|
52
|
+
if (startBlock === endBlock) {
|
|
53
|
+
events = await this.root.provider.getLogs({
|
|
54
|
+
address: contract,
|
|
55
|
+
fromBlock: startBlock,
|
|
56
|
+
toBlock: endBlock == null ? this.root.config.safeBlockTag : endBlock,
|
|
57
|
+
topics
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else if (endBlock == null) {
|
|
61
|
+
const safeBlock = await this.root.provider.getBlock(this.root.config.safeBlockTag);
|
|
62
|
+
if (safeBlock.number - startBlock > this.root.config.maxLogsBlockRange) {
|
|
63
|
+
for (let i = startBlock + this.root.config.maxLogsBlockRange; i < safeBlock.number; i += this.root.config.maxLogsBlockRange) {
|
|
64
|
+
events.push(...await this.getLogs(contract, topics, i - this.root.config.maxLogsBlockRange, i));
|
|
65
|
+
startBlock = i;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
events.push(...await this.getLogs(contract, topics, startBlock, safeBlock.number));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
//Both numeric
|
|
72
|
+
if (endBlock - startBlock > this.root.config.maxLogsBlockRange) {
|
|
73
|
+
for (let i = startBlock + this.root.config.maxLogsBlockRange; i < endBlock; i += this.root.config.maxLogsBlockRange) {
|
|
74
|
+
events.push(...await this.getLogs(contract, topics, i - this.root.config.maxLogsBlockRange, i));
|
|
75
|
+
startBlock = i;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
events.push(...await this.getLogs(contract, topics, startBlock, endBlock));
|
|
79
|
+
}
|
|
80
|
+
return events.filter(val => !val.removed);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Runs a search backwards in time, processing events from a specific contract and keys
|
|
84
|
+
*
|
|
85
|
+
* @param contract
|
|
86
|
+
* @param topics
|
|
87
|
+
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
88
|
+
* was found, or null if the search should continue
|
|
89
|
+
* @param abortSignal
|
|
90
|
+
* @param genesisHeight Height when the contract was deployed
|
|
91
|
+
*/
|
|
92
|
+
async findInEvents(contract, topics, processor, abortSignal, genesisHeight) {
|
|
93
|
+
const { number: latestBlockNumber } = await this.provider.getBlock(this.root.config.safeBlockTag);
|
|
94
|
+
let promises = [];
|
|
95
|
+
for (let blockNumber = latestBlockNumber; blockNumber >= (genesisHeight ?? 0); blockNumber -= this.root.config.maxLogsBlockRange) {
|
|
96
|
+
promises.push(this.getLogs(contract, topics, Math.max(blockNumber - this.root.config.maxLogsBlockRange, 0), blockNumber));
|
|
97
|
+
if (promises.length >= this.root.config.maxParallelLogRequests) {
|
|
98
|
+
const eventsResult = (await Promise.all(promises)).map(arr => arr.reverse() //Oldest events first
|
|
99
|
+
).flat();
|
|
100
|
+
promises = [];
|
|
101
|
+
if (abortSignal != null)
|
|
102
|
+
abortSignal.throwIfAborted();
|
|
103
|
+
const result = await processor(eventsResult);
|
|
104
|
+
if (result != null)
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const eventsResult = (await Promise.all(promises)).map(arr => arr.reverse() //Oldest events first
|
|
109
|
+
).flat();
|
|
110
|
+
if (abortSignal != null)
|
|
111
|
+
abortSignal.throwIfAborted();
|
|
112
|
+
const result = await processor(eventsResult); //Oldest events first
|
|
113
|
+
if (result != null)
|
|
114
|
+
return result;
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Runs a search forwards in time, processing events from a specific contract and keys
|
|
119
|
+
*
|
|
120
|
+
* @param contract
|
|
121
|
+
* @param topics
|
|
122
|
+
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
123
|
+
* was found, or null if the search should continue
|
|
124
|
+
* @param abortSignal
|
|
125
|
+
* @param startHeight Blockheight at which to start
|
|
126
|
+
*/
|
|
127
|
+
async findInEventsForward(contract, topics, processor, abortSignal, startHeight) {
|
|
128
|
+
const { number: latestBlockNumber } = await this.provider.getBlock(this.root.config.safeBlockTag);
|
|
129
|
+
let promises = [];
|
|
130
|
+
for (let blockNumber = startHeight ?? 0; blockNumber < latestBlockNumber; blockNumber += this.root.config.maxLogsBlockRange) {
|
|
131
|
+
promises.push(this.getLogs(contract, topics, blockNumber, Math.min(blockNumber + this.root.config.maxLogsBlockRange, latestBlockNumber)));
|
|
132
|
+
if (promises.length >= this.root.config.maxParallelLogRequests) {
|
|
133
|
+
const eventsResult = (await Promise.all(promises)).flat();
|
|
134
|
+
promises = [];
|
|
135
|
+
if (abortSignal != null)
|
|
136
|
+
abortSignal.throwIfAborted();
|
|
137
|
+
const result = await processor(eventsResult); //Oldest events first
|
|
138
|
+
if (result != null)
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const eventsResult = (await Promise.all(promises)).flat();
|
|
143
|
+
if (abortSignal != null)
|
|
144
|
+
abortSignal.throwIfAborted();
|
|
145
|
+
const result = await processor(eventsResult); //Oldest events first
|
|
146
|
+
if (result != null)
|
|
147
|
+
return result;
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.EVMEvents = EVMEvents;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { JsonRpcApiProvider, TransactionRequest } from "ethers";
|
|
2
|
+
export type EVMFeeRate = {
|
|
3
|
+
maxFeePerGas: bigint;
|
|
4
|
+
maxPriorityFee: bigint;
|
|
5
|
+
};
|
|
6
|
+
export declare class EVMFees {
|
|
7
|
+
protected MAX_FEE_AGE: number;
|
|
8
|
+
protected readonly logger: import("../../../utils/Utils").LoggerType;
|
|
9
|
+
protected readonly provider: JsonRpcApiProvider;
|
|
10
|
+
protected readonly maxFeeRatePerGas: bigint;
|
|
11
|
+
protected readonly priorityFee: bigint;
|
|
12
|
+
protected readonly feeMultiplierPPM: bigint;
|
|
13
|
+
private blockFeeCache;
|
|
14
|
+
constructor(provider: JsonRpcApiProvider, maxFeeRatePerGas?: bigint, priorityFee?: bigint, feeMultiplier?: number);
|
|
15
|
+
/**
|
|
16
|
+
* Gets evm fee rate
|
|
17
|
+
*
|
|
18
|
+
* @private
|
|
19
|
+
* @returns {Promise<bigint>} L1 gas price denominated in Wei
|
|
20
|
+
*/
|
|
21
|
+
private _getFeeRate;
|
|
22
|
+
/**
|
|
23
|
+
* Gets the gas price with caching, format: <base fee Wei>,<priority fee Wei>
|
|
24
|
+
*
|
|
25
|
+
* @private
|
|
26
|
+
*/
|
|
27
|
+
getFeeRate(): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Calculates the total gas fee paid for a given gas limit at a given fee rate
|
|
30
|
+
*
|
|
31
|
+
* @param gas
|
|
32
|
+
* @param feeRate
|
|
33
|
+
*/
|
|
34
|
+
static getGasFee(gas: number, feeRate: string): bigint;
|
|
35
|
+
static applyFeeRate(tx: TransactionRequest, gas: number, feeRate: string): any;
|
|
36
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVMFees = void 0;
|
|
4
|
+
const Utils_1 = require("../../../utils/Utils");
|
|
5
|
+
class EVMFees {
|
|
6
|
+
constructor(provider, maxFeeRatePerGas = 500n * 1000000000n, priorityFee = 1n * 1000000000n, feeMultiplier = 1.25) {
|
|
7
|
+
this.MAX_FEE_AGE = 5000;
|
|
8
|
+
this.logger = (0, Utils_1.getLogger)("EVMFees: ");
|
|
9
|
+
this.blockFeeCache = null;
|
|
10
|
+
this.provider = provider;
|
|
11
|
+
this.maxFeeRatePerGas = maxFeeRatePerGas;
|
|
12
|
+
this.priorityFee = priorityFee;
|
|
13
|
+
this.feeMultiplierPPM = BigInt(Math.floor(feeMultiplier * 1000000));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Gets evm fee rate
|
|
17
|
+
*
|
|
18
|
+
* @private
|
|
19
|
+
* @returns {Promise<bigint>} L1 gas price denominated in Wei
|
|
20
|
+
*/
|
|
21
|
+
async _getFeeRate() {
|
|
22
|
+
const block = await this.provider.getBlock("latest");
|
|
23
|
+
const baseFee = block.baseFeePerGas * this.feeMultiplierPPM / 1000000n;
|
|
24
|
+
this.logger.debug("_getFeeRate(): Base fee rate: " + baseFee.toString(10));
|
|
25
|
+
return baseFee;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Gets the gas price with caching, format: <base fee Wei>,<priority fee Wei>
|
|
29
|
+
*
|
|
30
|
+
* @private
|
|
31
|
+
*/
|
|
32
|
+
async getFeeRate() {
|
|
33
|
+
if (this.blockFeeCache == null || Date.now() - this.blockFeeCache.timestamp > this.MAX_FEE_AGE) {
|
|
34
|
+
let obj = {
|
|
35
|
+
timestamp: Date.now(),
|
|
36
|
+
feeRate: null
|
|
37
|
+
};
|
|
38
|
+
obj.feeRate = this._getFeeRate().catch(e => {
|
|
39
|
+
if (this.blockFeeCache === obj)
|
|
40
|
+
this.blockFeeCache = null;
|
|
41
|
+
throw e;
|
|
42
|
+
});
|
|
43
|
+
this.blockFeeCache = obj;
|
|
44
|
+
}
|
|
45
|
+
let baseFee = await this.blockFeeCache.feeRate;
|
|
46
|
+
if (baseFee > this.maxFeeRatePerGas)
|
|
47
|
+
baseFee = this.maxFeeRatePerGas;
|
|
48
|
+
const fee = baseFee.toString(10) + "," + this.priorityFee.toString(10);
|
|
49
|
+
this.logger.debug("getFeeRate(): calculated fee: " + fee);
|
|
50
|
+
return fee;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Calculates the total gas fee paid for a given gas limit at a given fee rate
|
|
54
|
+
*
|
|
55
|
+
* @param gas
|
|
56
|
+
* @param feeRate
|
|
57
|
+
*/
|
|
58
|
+
static getGasFee(gas, feeRate) {
|
|
59
|
+
if (feeRate == null)
|
|
60
|
+
return 0n;
|
|
61
|
+
const [baseFee, priorityFee] = feeRate.split(",");
|
|
62
|
+
return BigInt(gas) * (BigInt(baseFee) + BigInt(priorityFee));
|
|
63
|
+
}
|
|
64
|
+
static applyFeeRate(tx, gas, feeRate) {
|
|
65
|
+
if (feeRate == null)
|
|
66
|
+
return null;
|
|
67
|
+
const [baseFee, priorityFee] = feeRate.split(",");
|
|
68
|
+
tx.maxFeePerGas = BigInt(baseFee) + BigInt(priorityFee);
|
|
69
|
+
tx.maxPriorityFeePerGas = BigInt(priorityFee);
|
|
70
|
+
if (gas != null)
|
|
71
|
+
tx.gasLimit = BigInt(gas);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.EVMFees = EVMFees;
|