@my-packages-changeit/evm-address-tx-extractor 3.0.2
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/CHANGELOG.md +311 -0
- package/README.md +24 -0
- package/dist/actions/db.d.ts +43 -0
- package/dist/actions/db.d.ts.map +1 -0
- package/dist/actions/db.js +87 -0
- package/dist/entities/addressTxsEntity.d.ts +11 -0
- package/dist/entities/addressTxsEntity.d.ts.map +1 -0
- package/dist/entities/addressTxsEntity.js +57 -0
- package/dist/extractors/evmTxExtractor.d.ts +55 -0
- package/dist/extractors/evmTxExtractor.d.ts.map +1 -0
- package/dist/extractors/evmTxExtractor.js +131 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/interfaces/types.d.ts +12 -0
- package/dist/interfaces/types.d.ts.map +1 -0
- package/dist/interfaces/types.js +6 -0
- package/dist/migrations/index.d.ts +8 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +9 -0
- package/dist/migrations/postgres/1713694851290-migration.d.ts +7 -0
- package/dist/migrations/postgres/1713694851290-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1713694851290-migration.js +23 -0
- package/dist/migrations/postgres/1722346608595-migration.d.ts +7 -0
- package/dist/migrations/postgres/1722346608595-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1722346608595-migration.js +15 -0
- package/dist/migrations/sqlite/1713694799333-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1713694799333-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1713694799333-migration.js +22 -0
- package/dist/migrations/sqlite/1722346500068-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1722346500068-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1722346500068-migration.js +85 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +42 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
# @rosen-bridge/evm-address-tx-extractor
|
|
2
|
+
|
|
3
|
+
## 3.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Update dependencies
|
|
8
|
+
- @rosen-bridge/abstract-extractor@3.2.3
|
|
9
|
+
- @rosen-bridge/abstract-scanner@2.0.3
|
|
10
|
+
|
|
11
|
+
## 3.0.1
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Update dependencies
|
|
16
|
+
- @rosen-bridge/abstract-extractor@3.2.2
|
|
17
|
+
- @rosen-bridge/abstract-scanner@2.0.2
|
|
18
|
+
|
|
19
|
+
## 3.0.0
|
|
20
|
+
|
|
21
|
+
### Major Changes
|
|
22
|
+
|
|
23
|
+
- **Add Nonce-Based Range Validation**: Added the `hasEventInHeightRange` method to `EvmTxExtractor` to determine if an address may have transactions within a specified block range by comparing stored nonce values with network nonce data.
|
|
24
|
+
- Added `checkNonceAtToHeight` option to the constructor, allowing the extractor to fetch nonce at the specified `toHeight` before falling back to the latest nonce (useful for archive nodes).
|
|
25
|
+
- Added RPC URL and optional auth token to the constructor so the extractor can directly fetch nonce data from the network via ethers `JsonRpcProvider`.
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- Add dependency
|
|
30
|
+
- @rosen-bridge/abstract-scanner@2.0.1
|
|
31
|
+
- Update dependencies
|
|
32
|
+
- @rosen-bridge/abstract-extractor@3.2.1
|
|
33
|
+
|
|
34
|
+
## 2.0.5
|
|
35
|
+
|
|
36
|
+
### Patch Changes
|
|
37
|
+
|
|
38
|
+
- Update dependencies
|
|
39
|
+
- @rosen-bridge/abstract-extractor@3.2.0
|
|
40
|
+
- @rosen-bridge/scanner-interfaces@1.0.0
|
|
41
|
+
|
|
42
|
+
## 2.0.4
|
|
43
|
+
|
|
44
|
+
### Patch Changes
|
|
45
|
+
|
|
46
|
+
- Update dependencies
|
|
47
|
+
- @rosen-bridge/abstract-extractor@3.1.2
|
|
48
|
+
- @rosen-bridge/extended-typeorm@1.1.0
|
|
49
|
+
|
|
50
|
+
## 2.0.3
|
|
51
|
+
|
|
52
|
+
### Patch Changes
|
|
53
|
+
|
|
54
|
+
- Update dependencies
|
|
55
|
+
- @rosen-bridge/abstract-extractor@3.1.1
|
|
56
|
+
|
|
57
|
+
## 2.0.2
|
|
58
|
+
|
|
59
|
+
### Patch Changes
|
|
60
|
+
|
|
61
|
+
- Fix typo in logs descriptions
|
|
62
|
+
- Update dependencies
|
|
63
|
+
- @rosen-bridge/abstract-extractor@3.1.0
|
|
64
|
+
|
|
65
|
+
## 2.0.1
|
|
66
|
+
|
|
67
|
+
### Patch Changes
|
|
68
|
+
|
|
69
|
+
- Update dependencies
|
|
70
|
+
- @rosen-bridge/abstract-extractor@3.0.1
|
|
71
|
+
- @rosen-bridge/scanner-interfaces@0.2.2
|
|
72
|
+
- ethers@6.16.0
|
|
73
|
+
|
|
74
|
+
## 2.0.0
|
|
75
|
+
|
|
76
|
+
### Major Changes
|
|
77
|
+
|
|
78
|
+
- Update AbstractExtractor interface; use `BlockInfo` in `processTransactions` and rename `initializeBoxes` to `initializeData`
|
|
79
|
+
|
|
80
|
+
### Minor Changes
|
|
81
|
+
|
|
82
|
+
- Update AbstractExtractor interface; add `createUsedBlocksQuery` method that returns the query for used blocks
|
|
83
|
+
|
|
84
|
+
### Patch Changes
|
|
85
|
+
|
|
86
|
+
- Update dependencies
|
|
87
|
+
- @rosen-bridge/abstract-logger@4.0.0
|
|
88
|
+
- @rosen-bridge/abstract-extractor@3.0.0
|
|
89
|
+
|
|
90
|
+
## 1.2.3
|
|
91
|
+
|
|
92
|
+
### Patch Changes
|
|
93
|
+
|
|
94
|
+
- Update Dependencies
|
|
95
|
+
- @rosen-bridge/rosen-extractor@11.0.0
|
|
96
|
+
|
|
97
|
+
## 1.2.2
|
|
98
|
+
|
|
99
|
+
### Patch Changes
|
|
100
|
+
|
|
101
|
+
- Fix package-lock and move typescript and types/node into root
|
|
102
|
+
- Update eslint and plugins:
|
|
103
|
+
- Apply new rules such as sort imports and file name
|
|
104
|
+
- Update dependencies
|
|
105
|
+
- @rosen-bridge/extended-typeorm@1.0.1
|
|
106
|
+
- @rosen-clients/rate-limited-axios@1.1.0
|
|
107
|
+
- @rosen-bridge/rosen-extractor@10.1.1
|
|
108
|
+
- @rosen-bridge/tokens@4.0.1
|
|
109
|
+
- @rosen-bridge/abstract-logger@3.0.1
|
|
110
|
+
- @rosen-bridge/json-bigint@1.1.0
|
|
111
|
+
- @rosen-clients/ergo-explorer@2.1.0
|
|
112
|
+
- @rosen-clients/ergo-node@3.1.0
|
|
113
|
+
- @rosen-bridge/abstract-extractor@2.1.2
|
|
114
|
+
- @rosen-bridge/scanner-interfaces@0.2.1
|
|
115
|
+
|
|
116
|
+
## 1.2.1
|
|
117
|
+
|
|
118
|
+
### Patch Changes
|
|
119
|
+
|
|
120
|
+
- Update dependencies
|
|
121
|
+
- @rosen-bridge/abstract-extractor@2.1.1
|
|
122
|
+
- @rosen-bridge/extended-typeorm@1.0.0
|
|
123
|
+
- @rosen-bridge/abstract-logger@3.0.0
|
|
124
|
+
|
|
125
|
+
## 1.2.0
|
|
126
|
+
|
|
127
|
+
### Minor Changes
|
|
128
|
+
|
|
129
|
+
- Upgrade to Node.js version 22.18.0
|
|
130
|
+
|
|
131
|
+
### Patch Changes
|
|
132
|
+
|
|
133
|
+
- Update dependencies
|
|
134
|
+
- @rosen-bridge/abstract-extractor@2.1.0
|
|
135
|
+
- @rosen-bridge/scanner-interfaces@0.2.0
|
|
136
|
+
|
|
137
|
+
## 1.1.4
|
|
138
|
+
|
|
139
|
+
### Patch Changes
|
|
140
|
+
|
|
141
|
+
- Update package license to MIT
|
|
142
|
+
- Update dependencies
|
|
143
|
+
- @rosen-bridge/abstract-extractor@2.0.3
|
|
144
|
+
- @rosen-bridge/scanner-interfaces@0.1.1
|
|
145
|
+
|
|
146
|
+
## 1.1.3
|
|
147
|
+
|
|
148
|
+
### Patch Changes
|
|
149
|
+
|
|
150
|
+
- Downgrade ethers version
|
|
151
|
+
|
|
152
|
+
## 1.1.2
|
|
153
|
+
|
|
154
|
+
### Patch Changes
|
|
155
|
+
|
|
156
|
+
- Update network clients and ethers and rateLimitedAxios packages
|
|
157
|
+
- Update dependencies
|
|
158
|
+
- @rosen-bridge/abstract-extractor@2.0.2
|
|
159
|
+
|
|
160
|
+
## 1.1.1
|
|
161
|
+
|
|
162
|
+
### Patch Changes
|
|
163
|
+
|
|
164
|
+
- Updated dependencies
|
|
165
|
+
- @rosen-bridge/abstract-extractor@2.0.1
|
|
166
|
+
|
|
167
|
+
## 1.1.0
|
|
168
|
+
|
|
169
|
+
### Minor Changes
|
|
170
|
+
|
|
171
|
+
- Unify and move shared interfaces and update all package dependencies
|
|
172
|
+
|
|
173
|
+
### Patch Changes
|
|
174
|
+
|
|
175
|
+
- Updated dependencies
|
|
176
|
+
- @rosen-bridge/abstract-extractor@2.0.0
|
|
177
|
+
|
|
178
|
+
## 1.0.8
|
|
179
|
+
|
|
180
|
+
### Patch Changes
|
|
181
|
+
|
|
182
|
+
- Improve extraction speed by applying the checks on response and transform only the desired transactions
|
|
183
|
+
- Updated dependencies
|
|
184
|
+
- @rosen-bridge/abstract-extractor@1.0.2
|
|
185
|
+
|
|
186
|
+
## 1.0.7
|
|
187
|
+
|
|
188
|
+
### Patch Changes
|
|
189
|
+
|
|
190
|
+
- Update node version to 20
|
|
191
|
+
- Update logger package
|
|
192
|
+
- Updated dependencies
|
|
193
|
+
- @rosen-bridge/abstract-extractor@1.0.1
|
|
194
|
+
- @rosen-bridge/scanner@5.0.2
|
|
195
|
+
|
|
196
|
+
## 1.0.6
|
|
197
|
+
|
|
198
|
+
### Patch Changes
|
|
199
|
+
|
|
200
|
+
- Prevent redundant store function calls
|
|
201
|
+
- Updated dependencies
|
|
202
|
+
- @rosen-bridge/abstract-extractor@1.0.0
|
|
203
|
+
- @rosen-bridge/scanner@5.0.1
|
|
204
|
+
|
|
205
|
+
## 1.0.5
|
|
206
|
+
|
|
207
|
+
### Patch Changes
|
|
208
|
+
|
|
209
|
+
- Updated dependencies
|
|
210
|
+
- @rosen-bridge/scanner@5.0.0
|
|
211
|
+
- @rosen-bridge/abstract-extractor@0.3.1
|
|
212
|
+
|
|
213
|
+
## 1.0.4
|
|
214
|
+
|
|
215
|
+
### Patch Changes
|
|
216
|
+
|
|
217
|
+
- Updated dependencies
|
|
218
|
+
- @rosen-bridge/scanner@4.1.3
|
|
219
|
+
|
|
220
|
+
## 1.0.3
|
|
221
|
+
|
|
222
|
+
### Patch Changes
|
|
223
|
+
|
|
224
|
+
- fix address comparision (uses lower case address while comparing)
|
|
225
|
+
- change log levels to debug
|
|
226
|
+
- Updated dependencies
|
|
227
|
+
- @rosen-bridge/abstract-extractor@0.3.0
|
|
228
|
+
- @rosen-bridge/scanner@4.1.2
|
|
229
|
+
|
|
230
|
+
## 1.0.2
|
|
231
|
+
|
|
232
|
+
### Patch Changes
|
|
233
|
+
|
|
234
|
+
- Updated dependencies
|
|
235
|
+
- @rosen-bridge/scanner@4.1.1
|
|
236
|
+
|
|
237
|
+
## 1.0.1
|
|
238
|
+
|
|
239
|
+
### Patch Changes
|
|
240
|
+
|
|
241
|
+
- Updated dependencies
|
|
242
|
+
- @rosen-bridge/abstract-extractor@0.2.0
|
|
243
|
+
- @rosen-bridge/scanner@4.1.0
|
|
244
|
+
|
|
245
|
+
## 1.0.0
|
|
246
|
+
|
|
247
|
+
### Major Changes
|
|
248
|
+
|
|
249
|
+
- change transaction type to TransactionResponse
|
|
250
|
+
- add status to AddressTxsEntity which represents if the transaction succeeded or failed
|
|
251
|
+
|
|
252
|
+
## 0.1.8
|
|
253
|
+
|
|
254
|
+
### Patch Changes
|
|
255
|
+
|
|
256
|
+
- Updated dependencies
|
|
257
|
+
- @rosen-bridge/abstract-extractor@0.1.5
|
|
258
|
+
- @rosen-bridge/scanner@4.0.5
|
|
259
|
+
|
|
260
|
+
## 0.1.7
|
|
261
|
+
|
|
262
|
+
### Patch Changes
|
|
263
|
+
|
|
264
|
+
- Updated dependencies
|
|
265
|
+
- @rosen-bridge/abstract-extractor@0.1.4
|
|
266
|
+
- @rosen-bridge/scanner@4.0.4
|
|
267
|
+
|
|
268
|
+
## 0.1.6
|
|
269
|
+
|
|
270
|
+
### Patch Changes
|
|
271
|
+
|
|
272
|
+
- Updated dependencies
|
|
273
|
+
- @rosen-bridge/abstract-extractor@0.1.3
|
|
274
|
+
- @rosen-bridge/scanner@4.0.3
|
|
275
|
+
|
|
276
|
+
## 0.1.5
|
|
277
|
+
|
|
278
|
+
### Patch Changes
|
|
279
|
+
|
|
280
|
+
- Updated dependencies
|
|
281
|
+
- @rosen-bridge/abstract-extractor@0.1.2
|
|
282
|
+
- @rosen-bridge/scanner@4.0.2
|
|
283
|
+
|
|
284
|
+
## 0.1.4
|
|
285
|
+
|
|
286
|
+
### Patch Changes
|
|
287
|
+
|
|
288
|
+
- Updated dependencies
|
|
289
|
+
- @rosen-bridge/abstract-extractor@0.1.1
|
|
290
|
+
- @rosen-bridge/scanner@4.0.1
|
|
291
|
+
|
|
292
|
+
## 0.1.3
|
|
293
|
+
|
|
294
|
+
### Patch Changes
|
|
295
|
+
|
|
296
|
+
- Updated dependencies
|
|
297
|
+
- @rosen-bridge/scanner@4.0.0
|
|
298
|
+
|
|
299
|
+
## 0.1.2
|
|
300
|
+
|
|
301
|
+
### Patch Changes
|
|
302
|
+
|
|
303
|
+
- Updated dependencies
|
|
304
|
+
- @rosen-bridge/scanner@3.2.9
|
|
305
|
+
|
|
306
|
+
## 0.1.1
|
|
307
|
+
|
|
308
|
+
### Patch Changes
|
|
309
|
+
|
|
310
|
+
- Updated dependencies
|
|
311
|
+
- @rosen-bridge/scanner@3.2.8
|
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# @rosen-bridge/evm-address-tx-extractor
|
|
2
|
+
|
|
3
|
+
## Table of contents
|
|
4
|
+
|
|
5
|
+
- [Introduction](#introduction)
|
|
6
|
+
- [Installation](#installation)
|
|
7
|
+
|
|
8
|
+
## Introduction
|
|
9
|
+
|
|
10
|
+
Extract and store EVM chain notable data of transactions for an address
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
npm:
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
npm i @rosen-bridge/evm-address-tx-extractor
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
yarn:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
yarn add @rosen-bridge/evm-address-tx-extractor
|
|
24
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { DataSource, SelectQueryBuilder } from '@rosen-bridge/extended-typeorm';
|
|
3
|
+
import { BlockInfo } from '@rosen-bridge/scanner-interfaces';
|
|
4
|
+
import { AddressTxsEntity } from '../entities/addressTxsEntity';
|
|
5
|
+
import { ExtractedTx } from '../interfaces/types';
|
|
6
|
+
export declare class TxAction {
|
|
7
|
+
private readonly repository;
|
|
8
|
+
readonly logger: AbstractLogger;
|
|
9
|
+
constructor(dataSource: DataSource, logger?: AbstractLogger);
|
|
10
|
+
/**
|
|
11
|
+
* remove all inserted transaction for specific block in specific extractor from database
|
|
12
|
+
* @param blockId selected block id
|
|
13
|
+
* @param extractor selected extractor
|
|
14
|
+
*/
|
|
15
|
+
deleteBlockTxs: (blockId: string, extractor: string) => Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* remove old list of transactions and
|
|
18
|
+
* store a new list of transactions database for specific block and extractor
|
|
19
|
+
* @param txs
|
|
20
|
+
* @param block
|
|
21
|
+
* @param extractor
|
|
22
|
+
*/
|
|
23
|
+
storeTxs: (txs: Array<ExtractedTx>, block: BlockInfo, extractor: string) => Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Builds a query that returns used blocks by selecting the `block` column from the `evmAddressTxEntity` repository,
|
|
26
|
+
* filtered by the provided `extractorId`
|
|
27
|
+
*
|
|
28
|
+
* @param extractorId - Identifier of the extractor
|
|
29
|
+
* @returns A query builder selecting used blocks
|
|
30
|
+
*/
|
|
31
|
+
createUsedBlocksQuery: (extractorId: string) => SelectQueryBuilder<AddressTxsEntity>;
|
|
32
|
+
/**
|
|
33
|
+
* Returns the highest nonce recorded for the specified extractor and address
|
|
34
|
+
* up to and including the given block height.
|
|
35
|
+
*
|
|
36
|
+
* @param extractor - Extractor identifier.
|
|
37
|
+
* @param address - The address to filter transactions by.
|
|
38
|
+
* @param height - Upper bound block height (Inclusive).
|
|
39
|
+
* @returns The highest nonce up to the given height, or -1 if no transaction found.
|
|
40
|
+
*/
|
|
41
|
+
getNonceUpToHeight: (extractor: string, address: string, height: number) => Promise<number>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../lib/actions/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAE5E,OAAO,EACL,UAAU,EAEV,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAC1D,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;gBAEpB,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,cAAc;IAK3D;;;;OAIG;IACH,cAAc,GAAU,SAAS,MAAM,EAAE,WAAW,MAAM,mBAYxD;IAEF;;;;;;OAMG;IACH,QAAQ,GACN,KAAK,KAAK,CAAC,WAAW,CAAC,EACvB,OAAO,SAAS,EAChB,WAAW,MAAM,mBAuBjB;IAEF;;;;;;OAMG;IACH,qBAAqB,GACnB,aAAa,MAAM,KAClB,kBAAkB,CAAC,gBAAgB,CAAC,CAKrC;IAEF;;;;;;;;OAQG;IACH,kBAAkB,GAChB,WAAW,MAAM,EACjB,SAAS,MAAM,EACf,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,CAAC,CAahB;CACH"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { BlockEntity } from '@rosen-bridge/abstract-scanner';
|
|
3
|
+
import { AddressTxsEntity } from '../entities/addressTxsEntity';
|
|
4
|
+
export class TxAction {
|
|
5
|
+
repository;
|
|
6
|
+
logger;
|
|
7
|
+
constructor(dataSource, logger) {
|
|
8
|
+
this.repository = dataSource.getRepository(AddressTxsEntity);
|
|
9
|
+
this.logger = logger ? logger : new DummyLogger();
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* remove all inserted transaction for specific block in specific extractor from database
|
|
13
|
+
* @param blockId selected block id
|
|
14
|
+
* @param extractor selected extractor
|
|
15
|
+
*/
|
|
16
|
+
deleteBlockTxs = async (blockId, extractor) => {
|
|
17
|
+
this.logger.debug(`Deleting transactions of block ${blockId} and extractor ${extractor}`);
|
|
18
|
+
await this.repository
|
|
19
|
+
.createQueryBuilder()
|
|
20
|
+
.delete()
|
|
21
|
+
.where('extractor = :extractor AND blockId = :blockId', {
|
|
22
|
+
blockId: blockId,
|
|
23
|
+
extractor: extractor,
|
|
24
|
+
})
|
|
25
|
+
.execute();
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* remove old list of transactions and
|
|
29
|
+
* store a new list of transactions database for specific block and extractor
|
|
30
|
+
* @param txs
|
|
31
|
+
* @param block
|
|
32
|
+
* @param extractor
|
|
33
|
+
*/
|
|
34
|
+
storeTxs = async (txs, block, extractor) => {
|
|
35
|
+
await this.deleteBlockTxs(block.hash, extractor);
|
|
36
|
+
this.logger.debug(`Inserting new transactions [${txs.map((tx) => tx.signedHash)}] in block ${block.hash} and extractor ${extractor}`);
|
|
37
|
+
await this.repository
|
|
38
|
+
.createQueryBuilder()
|
|
39
|
+
.insert()
|
|
40
|
+
.values(txs.map((tx) => ({
|
|
41
|
+
unsignedHash: tx.unsignedHash,
|
|
42
|
+
signedHash: tx.signedHash,
|
|
43
|
+
nonce: tx.nonce,
|
|
44
|
+
address: tx.address,
|
|
45
|
+
blockId: block.hash,
|
|
46
|
+
extractor: extractor,
|
|
47
|
+
status: tx.status,
|
|
48
|
+
})))
|
|
49
|
+
.execute();
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Builds a query that returns used blocks by selecting the `block` column from the `evmAddressTxEntity` repository,
|
|
53
|
+
* filtered by the provided `extractorId`
|
|
54
|
+
*
|
|
55
|
+
* @param extractorId - Identifier of the extractor
|
|
56
|
+
* @returns A query builder selecting used blocks
|
|
57
|
+
*/
|
|
58
|
+
createUsedBlocksQuery = (extractorId) => {
|
|
59
|
+
return this.repository
|
|
60
|
+
.createQueryBuilder('evmAddressTxEntity')
|
|
61
|
+
.select('evmAddressTxEntity.blockId', 'block')
|
|
62
|
+
.where('evmAddressTxEntity.extractor = :extractorId', { extractorId });
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Returns the highest nonce recorded for the specified extractor and address
|
|
66
|
+
* up to and including the given block height.
|
|
67
|
+
*
|
|
68
|
+
* @param extractor - Extractor identifier.
|
|
69
|
+
* @param address - The address to filter transactions by.
|
|
70
|
+
* @param height - Upper bound block height (Inclusive).
|
|
71
|
+
* @returns The highest nonce up to the given height, or -1 if no transaction found.
|
|
72
|
+
*/
|
|
73
|
+
getNonceUpToHeight = async (extractor, address, height) => {
|
|
74
|
+
const result = await this.repository
|
|
75
|
+
.createQueryBuilder('tx')
|
|
76
|
+
.innerJoin(BlockEntity, 'block', 'block.hash = tx.blockId')
|
|
77
|
+
.select('MAX(tx.nonce)', 'nonce')
|
|
78
|
+
.where('tx.extractor = :extractor', { extractor })
|
|
79
|
+
.andWhere('tx.address = :address', { address })
|
|
80
|
+
.andWhere('block.height <= :height', { height })
|
|
81
|
+
.getRawOne();
|
|
82
|
+
return result?.nonce !== null && result?.nonce !== undefined
|
|
83
|
+
? Number(result.nonce)
|
|
84
|
+
: -1;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYWN0aW9ucy9kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQVE3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUdoRSxNQUFNLE9BQU8sUUFBUTtJQUNGLFVBQVUsQ0FBK0I7SUFDakQsTUFBTSxDQUFpQjtJQUVoQyxZQUFZLFVBQXNCLEVBQUUsTUFBdUI7UUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsR0FBRyxLQUFLLEVBQUUsT0FBZSxFQUFFLFNBQWlCLEVBQUUsRUFBRTtRQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixrQ0FBa0MsT0FBTyxrQkFBa0IsU0FBUyxFQUFFLENBQ3ZFLENBQUM7UUFDRixNQUFNLElBQUksQ0FBQyxVQUFVO2FBQ2xCLGtCQUFrQixFQUFFO2FBQ3BCLE1BQU0sRUFBRTthQUNSLEtBQUssQ0FBQywrQ0FBK0MsRUFBRTtZQUN0RCxPQUFPLEVBQUUsT0FBTztZQUNoQixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO2FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRjs7Ozs7O09BTUc7SUFDSCxRQUFRLEdBQUcsS0FBSyxFQUNkLEdBQXVCLEVBQ3ZCLEtBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLEVBQUU7UUFDRixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZiwrQkFBK0IsR0FBRyxDQUFDLEdBQUcsQ0FDcEMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQ3RCLGNBQWMsS0FBSyxDQUFDLElBQUksa0JBQWtCLFNBQVMsRUFBRSxDQUN2RCxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsVUFBVTthQUNsQixrQkFBa0IsRUFBRTthQUNwQixNQUFNLEVBQUU7YUFDUixNQUFNLENBQ0wsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNmLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWTtZQUM3QixVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVU7WUFDekIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLO1lBQ2YsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPO1lBQ25CLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNuQixTQUFTLEVBQUUsU0FBUztZQUNwQixNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU07U0FDbEIsQ0FBQyxDQUFDLENBQ0o7YUFDQSxPQUFPLEVBQUUsQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGOzs7Ozs7T0FNRztJQUNILHFCQUFxQixHQUFHLENBQ3RCLFdBQW1CLEVBQ21CLEVBQUU7UUFDeEMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQzthQUN4QyxNQUFNLENBQUMsNEJBQTRCLEVBQUUsT0FBTyxDQUFDO2FBQzdDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQyxDQUFDO0lBRUY7Ozs7Ozs7O09BUUc7SUFDSCxrQkFBa0IsR0FBRyxLQUFLLEVBQ3hCLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixNQUFjLEVBQ0csRUFBRTtRQUNuQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVO2FBQ2pDLGtCQUFrQixDQUFDLElBQUksQ0FBQzthQUN4QixTQUFTLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQzthQUMxRCxNQUFNLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQzthQUNoQyxLQUFLLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQzthQUNqRCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUM5QyxRQUFRLENBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUMvQyxTQUFTLEVBQUUsQ0FBQztRQUVmLE9BQU8sTUFBTSxFQUFFLEtBQUssS0FBSyxJQUFJLElBQUksTUFBTSxFQUFFLEtBQUssS0FBSyxTQUFTO1lBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDVCxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyLCBEdW1teUxvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IEJsb2NrRW50aXR5IH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1zY2FubmVyJztcbmltcG9ydCB7XG4gIERhdGFTb3VyY2UsXG4gIFJlcG9zaXRvcnksXG4gIFNlbGVjdFF1ZXJ5QnVpbGRlcixcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcbmltcG9ydCB7IEJsb2NrSW5mbyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgQWRkcmVzc1R4c0VudGl0eSB9IGZyb20gJy4uL2VudGl0aWVzL2FkZHJlc3NUeHNFbnRpdHknO1xuaW1wb3J0IHsgRXh0cmFjdGVkVHggfSBmcm9tICcuLi9pbnRlcmZhY2VzL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFR4QWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvc2l0b3J5OiBSZXBvc2l0b3J5PEFkZHJlc3NUeHNFbnRpdHk+O1xuICByZWFkb25seSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgdGhpcy5yZXBvc2l0b3J5ID0gZGF0YVNvdXJjZS5nZXRSZXBvc2l0b3J5KEFkZHJlc3NUeHNFbnRpdHkpO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyID8gbG9nZ2VyIDogbmV3IER1bW15TG9nZ2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlIGFsbCBpbnNlcnRlZCB0cmFuc2FjdGlvbiBmb3Igc3BlY2lmaWMgYmxvY2sgaW4gc3BlY2lmaWMgZXh0cmFjdG9yIGZyb20gZGF0YWJhc2VcbiAgICogQHBhcmFtIGJsb2NrSWQgc2VsZWN0ZWQgYmxvY2sgaWRcbiAgICogQHBhcmFtIGV4dHJhY3RvciBzZWxlY3RlZCBleHRyYWN0b3JcbiAgICovXG4gIGRlbGV0ZUJsb2NrVHhzID0gYXN5bmMgKGJsb2NrSWQ6IHN0cmluZywgZXh0cmFjdG9yOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBEZWxldGluZyB0cmFuc2FjdGlvbnMgb2YgYmxvY2sgJHtibG9ja0lkfSBhbmQgZXh0cmFjdG9yICR7ZXh0cmFjdG9yfWAsXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLnJlcG9zaXRvcnlcbiAgICAgIC5jcmVhdGVRdWVyeUJ1aWxkZXIoKVxuICAgICAgLmRlbGV0ZSgpXG4gICAgICAud2hlcmUoJ2V4dHJhY3RvciA9IDpleHRyYWN0b3IgQU5EIGJsb2NrSWQgPSA6YmxvY2tJZCcsIHtcbiAgICAgICAgYmxvY2tJZDogYmxvY2tJZCxcbiAgICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICB9KVxuICAgICAgLmV4ZWN1dGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogcmVtb3ZlIG9sZCBsaXN0IG9mIHRyYW5zYWN0aW9ucyBhbmRcbiAgICogc3RvcmUgYSBuZXcgbGlzdCBvZiB0cmFuc2FjdGlvbnMgZGF0YWJhc2UgZm9yIHNwZWNpZmljIGJsb2NrIGFuZCBleHRyYWN0b3JcbiAgICogQHBhcmFtIHR4c1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgc3RvcmVUeHMgPSBhc3luYyAoXG4gICAgdHhzOiBBcnJheTxFeHRyYWN0ZWRUeD4sXG4gICAgYmxvY2s6IEJsb2NrSW5mbyxcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5kZWxldGVCbG9ja1R4cyhibG9jay5oYXNoLCBleHRyYWN0b3IpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgYEluc2VydGluZyBuZXcgdHJhbnNhY3Rpb25zIFske3R4cy5tYXAoXG4gICAgICAgICh0eCkgPT4gdHguc2lnbmVkSGFzaCxcbiAgICAgICl9XSBpbiBibG9jayAke2Jsb2NrLmhhc2h9IGFuZCBleHRyYWN0b3IgJHtleHRyYWN0b3J9YCxcbiAgICApO1xuICAgIGF3YWl0IHRoaXMucmVwb3NpdG9yeVxuICAgICAgLmNyZWF0ZVF1ZXJ5QnVpbGRlcigpXG4gICAgICAuaW5zZXJ0KClcbiAgICAgIC52YWx1ZXMoXG4gICAgICAgIHR4cy5tYXAoKHR4KSA9PiAoe1xuICAgICAgICAgIHVuc2lnbmVkSGFzaDogdHgudW5zaWduZWRIYXNoLFxuICAgICAgICAgIHNpZ25lZEhhc2g6IHR4LnNpZ25lZEhhc2gsXG4gICAgICAgICAgbm9uY2U6IHR4Lm5vbmNlLFxuICAgICAgICAgIGFkZHJlc3M6IHR4LmFkZHJlc3MsXG4gICAgICAgICAgYmxvY2tJZDogYmxvY2suaGFzaCxcbiAgICAgICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICAgICAgICBzdGF0dXM6IHR4LnN0YXR1cyxcbiAgICAgICAgfSkpLFxuICAgICAgKVxuICAgICAgLmV4ZWN1dGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogQnVpbGRzIGEgcXVlcnkgdGhhdCByZXR1cm5zIHVzZWQgYmxvY2tzIGJ5IHNlbGVjdGluZyB0aGUgYGJsb2NrYCBjb2x1bW4gZnJvbSB0aGUgYGV2bUFkZHJlc3NUeEVudGl0eWAgcmVwb3NpdG9yeSxcbiAgICogZmlsdGVyZWQgYnkgdGhlIHByb3ZpZGVkIGBleHRyYWN0b3JJZGBcbiAgICpcbiAgICogQHBhcmFtIGV4dHJhY3RvcklkIC0gSWRlbnRpZmllciBvZiB0aGUgZXh0cmFjdG9yXG4gICAqIEByZXR1cm5zIEEgcXVlcnkgYnVpbGRlciBzZWxlY3RpbmcgdXNlZCBibG9ja3NcbiAgICovXG4gIGNyZWF0ZVVzZWRCbG9ja3NRdWVyeSA9IChcbiAgICBleHRyYWN0b3JJZDogc3RyaW5nLFxuICApOiBTZWxlY3RRdWVyeUJ1aWxkZXI8QWRkcmVzc1R4c0VudGl0eT4gPT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG9zaXRvcnlcbiAgICAgIC5jcmVhdGVRdWVyeUJ1aWxkZXIoJ2V2bUFkZHJlc3NUeEVudGl0eScpXG4gICAgICAuc2VsZWN0KCdldm1BZGRyZXNzVHhFbnRpdHkuYmxvY2tJZCcsICdibG9jaycpXG4gICAgICAud2hlcmUoJ2V2bUFkZHJlc3NUeEVudGl0eS5leHRyYWN0b3IgPSA6ZXh0cmFjdG9ySWQnLCB7IGV4dHJhY3RvcklkIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBoaWdoZXN0IG5vbmNlIHJlY29yZGVkIGZvciB0aGUgc3BlY2lmaWVkIGV4dHJhY3RvciBhbmQgYWRkcmVzc1xuICAgKiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBnaXZlbiBibG9jayBoZWlnaHQuXG4gICAqXG4gICAqIEBwYXJhbSBleHRyYWN0b3IgLSBFeHRyYWN0b3IgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIGFkZHJlc3MgLSBUaGUgYWRkcmVzcyB0byBmaWx0ZXIgdHJhbnNhY3Rpb25zIGJ5LlxuICAgKiBAcGFyYW0gaGVpZ2h0IC0gVXBwZXIgYm91bmQgYmxvY2sgaGVpZ2h0IChJbmNsdXNpdmUpLlxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGVzdCBub25jZSB1cCB0byB0aGUgZ2l2ZW4gaGVpZ2h0LCBvciAtMSBpZiBubyB0cmFuc2FjdGlvbiBmb3VuZC5cbiAgICovXG4gIGdldE5vbmNlVXBUb0hlaWdodCA9IGFzeW5jIChcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5XG4gICAgICAuY3JlYXRlUXVlcnlCdWlsZGVyKCd0eCcpXG4gICAgICAuaW5uZXJKb2luKEJsb2NrRW50aXR5LCAnYmxvY2snLCAnYmxvY2suaGFzaCA9IHR4LmJsb2NrSWQnKVxuICAgICAgLnNlbGVjdCgnTUFYKHR4Lm5vbmNlKScsICdub25jZScpXG4gICAgICAud2hlcmUoJ3R4LmV4dHJhY3RvciA9IDpleHRyYWN0b3InLCB7IGV4dHJhY3RvciB9KVxuICAgICAgLmFuZFdoZXJlKCd0eC5hZGRyZXNzID0gOmFkZHJlc3MnLCB7IGFkZHJlc3MgfSlcbiAgICAgIC5hbmRXaGVyZSgnYmxvY2suaGVpZ2h0IDw9IDpoZWlnaHQnLCB7IGhlaWdodCB9KVxuICAgICAgLmdldFJhd09uZSgpO1xuXG4gICAgcmV0dXJuIHJlc3VsdD8ubm9uY2UgIT09IG51bGwgJiYgcmVzdWx0Py5ub25jZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IE51bWJlcihyZXN1bHQubm9uY2UpXG4gICAgICA6IC0xO1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addressTxsEntity.d.ts","sourceRoot":"","sources":["../../lib/entities/addressTxsEntity.ts"],"names":[],"mappings":"AAMA,qBACa,gBAAgB;IAE3B,EAAE,EAAE,MAAM,CAAC;IAGX,YAAY,EAAE,MAAM,CAAC;IAGrB,UAAU,EAAE,MAAM,CAAC;IAGnB,KAAK,EAAE,MAAM,CAAC;IAGd,OAAO,EAAE,MAAM,CAAC;IAGhB,OAAO,EAAE,MAAM,CAAC;IAGhB,SAAS,EAAE,MAAM,CAAC;IAGlB,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Column, Entity, PrimaryGeneratedColumn, } from '@rosen-bridge/extended-typeorm';
|
|
11
|
+
let AddressTxsEntity = class AddressTxsEntity {
|
|
12
|
+
id;
|
|
13
|
+
unsignedHash;
|
|
14
|
+
signedHash;
|
|
15
|
+
nonce;
|
|
16
|
+
address;
|
|
17
|
+
blockId;
|
|
18
|
+
extractor;
|
|
19
|
+
status;
|
|
20
|
+
};
|
|
21
|
+
__decorate([
|
|
22
|
+
PrimaryGeneratedColumn({ type: 'integer' }),
|
|
23
|
+
__metadata("design:type", Number)
|
|
24
|
+
], AddressTxsEntity.prototype, "id", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
Column({ type: 'varchar' }),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], AddressTxsEntity.prototype, "unsignedHash", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
Column({ type: 'varchar' }),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], AddressTxsEntity.prototype, "signedHash", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
Column({ type: 'integer' }),
|
|
35
|
+
__metadata("design:type", Number)
|
|
36
|
+
], AddressTxsEntity.prototype, "nonce", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
Column({ type: 'varchar' }),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], AddressTxsEntity.prototype, "address", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
Column({ type: 'varchar' }),
|
|
43
|
+
__metadata("design:type", String)
|
|
44
|
+
], AddressTxsEntity.prototype, "blockId", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
Column({ type: 'varchar' }),
|
|
47
|
+
__metadata("design:type", String)
|
|
48
|
+
], AddressTxsEntity.prototype, "extractor", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
Column({ type: 'varchar' }),
|
|
51
|
+
__metadata("design:type", String)
|
|
52
|
+
], AddressTxsEntity.prototype, "status", void 0);
|
|
53
|
+
AddressTxsEntity = __decorate([
|
|
54
|
+
Entity('address_txs_entity')
|
|
55
|
+
], AddressTxsEntity);
|
|
56
|
+
export { AddressTxsEntity };
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc1R4c0VudGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lbnRpdGllcy9hZGRyZXNzVHhzRW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLHNCQUFzQixHQUN2QixNQUFNLGdDQUFnQyxDQUFDO0FBR2pDLElBQU0sZ0JBQWdCLEdBQXRCLE1BQU0sZ0JBQWdCO0lBRTNCLEVBQUUsQ0FBUztJQUdYLFlBQVksQ0FBUztJQUdyQixVQUFVLENBQVM7SUFHbkIsS0FBSyxDQUFTO0lBR2QsT0FBTyxDQUFTO0lBR2hCLE9BQU8sQ0FBUztJQUdoQixTQUFTLENBQVM7SUFHbEIsTUFBTSxDQUFTO0NBQ2hCLENBQUE7QUF0QkM7SUFEQyxzQkFBc0IsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7NENBQ2pDO0FBR1g7SUFEQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7O3NEQUNQO0FBR3JCO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOztvREFDVDtBQUduQjtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7K0NBQ2Q7QUFHZDtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7aURBQ1o7QUFHaEI7SUFEQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7O2lEQUNaO0FBR2hCO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOzttREFDVjtBQUdsQjtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7Z0RBQ2I7QUF2QkosZ0JBQWdCO0lBRDVCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQztHQUNoQixnQkFBZ0IsQ0F3QjVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29sdW1uLFxuICBFbnRpdHksXG4gIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4sXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5cbkBFbnRpdHkoJ2FkZHJlc3NfdHhzX2VudGl0eScpXG5leHBvcnQgY2xhc3MgQWRkcmVzc1R4c0VudGl0eSB7XG4gIEBQcmltYXJ5R2VuZXJhdGVkQ29sdW1uKHsgdHlwZTogJ2ludGVnZXInIH0pXG4gIGlkOiBudW1iZXI7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICB1bnNpZ25lZEhhc2g6IHN0cmluZztcblxuICBAQ29sdW1uKHsgdHlwZTogJ3ZhcmNoYXInIH0pXG4gIHNpZ25lZEhhc2g6IHN0cmluZztcblxuICBAQ29sdW1uKHsgdHlwZTogJ2ludGVnZXInIH0pXG4gIG5vbmNlOiBudW1iZXI7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICBhZGRyZXNzOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICBibG9ja0lkOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICBleHRyYWN0b3I6IHN0cmluZztcblxuICBAQ29sdW1uKHsgdHlwZTogJ3ZhcmNoYXInIH0pXG4gIHN0YXR1czogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { TransactionResponse } from 'ethers';
|
|
2
|
+
import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
|
|
3
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
4
|
+
import { DataSource, SelectQueryBuilder } from '@rosen-bridge/extended-typeorm';
|
|
5
|
+
import { BlockInfo } from '@rosen-bridge/scanner-interfaces';
|
|
6
|
+
import { TxAction } from '../actions/db';
|
|
7
|
+
import { AddressTxsEntity } from '../entities/addressTxsEntity';
|
|
8
|
+
export declare class EvmTxExtractor extends AbstractExtractor<TransactionResponse, AddressTxsEntity> {
|
|
9
|
+
readonly logger: AbstractLogger;
|
|
10
|
+
readonly action: TxAction;
|
|
11
|
+
private readonly id;
|
|
12
|
+
private readonly address;
|
|
13
|
+
private readonly provider;
|
|
14
|
+
private readonly checkNonceAtToHeight;
|
|
15
|
+
/**
|
|
16
|
+
* address should be lower case (without checksum)
|
|
17
|
+
*/
|
|
18
|
+
constructor(dataSource: DataSource, id: string, address: string, rpcUrl: string, authToken?: string, checkNonceAtToHeight?: boolean, logger?: AbstractLogger);
|
|
19
|
+
/**
|
|
20
|
+
* get Id for current extractor
|
|
21
|
+
*/
|
|
22
|
+
getId: () => string;
|
|
23
|
+
/**
|
|
24
|
+
* gets block id and transactions corresponding to the block and saves all transaction ids in database
|
|
25
|
+
* @param txs
|
|
26
|
+
* @param block
|
|
27
|
+
*/
|
|
28
|
+
processTransactions: (txs: Array<TransactionResponse>, block: BlockInfo) => Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* fork one block and remove all stored txId for this block
|
|
31
|
+
* @param hash: block hash
|
|
32
|
+
*/
|
|
33
|
+
forkBlock: (hash: string) => Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Initializes the database with older boxes related to the address
|
|
36
|
+
*/
|
|
37
|
+
initializeData: () => Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Builds a query that returns used blocks by selecting the `block` column from the `evmAddressTxEntity` repository,
|
|
40
|
+
* filtered by the provided `extractorId`
|
|
41
|
+
*
|
|
42
|
+
* @returns A query builder selecting used blocks
|
|
43
|
+
*/
|
|
44
|
+
createUsedBlocksQuery: () => SelectQueryBuilder<AddressTxsEntity>;
|
|
45
|
+
/**
|
|
46
|
+
* checks if nonce changes within the specified height range
|
|
47
|
+
*
|
|
48
|
+
* @param fromHeight - Start height of the range being evaluated.
|
|
49
|
+
* @param toHeight - End height of the range being evaluated.
|
|
50
|
+
* @returns `true` if the range may contain relevant transactions,
|
|
51
|
+
* `false` if it is guaranteed to be empty.
|
|
52
|
+
*/
|
|
53
|
+
hasEventInHeightRange: (fromHeight: number, toHeight: number) => Promise<boolean>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=evmTxExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evmTxExtractor.d.ts","sourceRoot":"","sources":["../../lib/extractors/evmTxExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,mBAAmB,EACpB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,qBAAa,cAAe,SAAQ,iBAAiB,CACnD,mBAAmB,EACnB,gBAAgB,CACjB;IACC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAE/C;;OAEG;gBAED,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,oBAAoB,UAAQ,EAC5B,MAAM,GAAE,cAAkC;IAa5C;;OAEG;IACH,KAAK,eAAiB;IAEtB;;;;OAIG;IACH,mBAAmB,GACjB,KAAK,KAAK,CAAC,mBAAmB,CAAC,EAC/B,OAAO,SAAS,KACf,OAAO,CAAC,OAAO,CAAC,CAkCjB;IAEF;;;OAGG;IACH,SAAS,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAE7C;IAEF;;OAEG;IACH,cAAc,sBAEZ;IAEF;;;;;OAKG;IACH,qBAAqB,QAAO,kBAAkB,CAAC,gBAAgB,CAAC,CACd;IAElD;;;;;;;OAOG;IACH,qBAAqB,GACnB,YAAY,MAAM,EAClB,UAAU,MAAM,KACf,OAAO,CAAC,OAAO,CAAC,CAgDjB;CACH"}
|