@gzeoneth/gov-tracker 0.1.0
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 +191 -0
- package/README.md +201 -0
- package/dist/abis.d.ts +79 -0
- package/dist/abis.d.ts.map +1 -0
- package/dist/abis.js +159 -0
- package/dist/abis.js.map +1 -0
- package/dist/cli/lib/cli.d.ts +92 -0
- package/dist/cli/lib/cli.d.ts.map +1 -0
- package/dist/cli/lib/cli.js +562 -0
- package/dist/cli/lib/cli.js.map +1 -0
- package/dist/cli/lib/election-check.d.ts +46 -0
- package/dist/cli/lib/election-check.d.ts.map +1 -0
- package/dist/cli/lib/election-check.js +136 -0
- package/dist/cli/lib/election-check.js.map +1 -0
- package/dist/cli/lib/json-state.d.ts +100 -0
- package/dist/cli/lib/json-state.d.ts.map +1 -0
- package/dist/cli/lib/json-state.js +225 -0
- package/dist/cli/lib/json-state.js.map +1 -0
- package/dist/cli/monitor.d.ts +3 -0
- package/dist/cli/monitor.d.ts.map +1 -0
- package/dist/cli/monitor.js +442 -0
- package/dist/cli/monitor.js.map +1 -0
- package/dist/constants.d.ts +235 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +293 -0
- package/dist/constants.js.map +1 -0
- package/dist/discovery/governor-discovery.d.ts +84 -0
- package/dist/discovery/governor-discovery.d.ts.map +1 -0
- package/dist/discovery/governor-discovery.js +310 -0
- package/dist/discovery/governor-discovery.js.map +1 -0
- package/dist/discovery/security-council.d.ts +68 -0
- package/dist/discovery/security-council.d.ts.map +1 -0
- package/dist/discovery/security-council.js +181 -0
- package/dist/discovery/security-council.js.map +1 -0
- package/dist/discovery/timelock-discovery.d.ts +99 -0
- package/dist/discovery/timelock-discovery.d.ts.map +1 -0
- package/dist/discovery/timelock-discovery.js +322 -0
- package/dist/discovery/timelock-discovery.js.map +1 -0
- package/dist/election.d.ts +172 -0
- package/dist/election.d.ts.map +1 -0
- package/dist/election.js +464 -0
- package/dist/election.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +164 -0
- package/dist/index.js.map +1 -0
- package/dist/stages/base.d.ts +127 -0
- package/dist/stages/base.d.ts.map +1 -0
- package/dist/stages/base.js +280 -0
- package/dist/stages/base.js.map +1 -0
- package/dist/stages/l2-to-l1-message.d.ts +108 -0
- package/dist/stages/l2-to-l1-message.d.ts.map +1 -0
- package/dist/stages/l2-to-l1-message.js +422 -0
- package/dist/stages/l2-to-l1-message.js.map +1 -0
- package/dist/stages/proposal-created.d.ts +20 -0
- package/dist/stages/proposal-created.d.ts.map +1 -0
- package/dist/stages/proposal-created.js +62 -0
- package/dist/stages/proposal-created.js.map +1 -0
- package/dist/stages/proposal-queued.d.ts +39 -0
- package/dist/stages/proposal-queued.d.ts.map +1 -0
- package/dist/stages/proposal-queued.js +131 -0
- package/dist/stages/proposal-queued.js.map +1 -0
- package/dist/stages/retryables.d.ts +79 -0
- package/dist/stages/retryables.d.ts.map +1 -0
- package/dist/stages/retryables.js +307 -0
- package/dist/stages/retryables.js.map +1 -0
- package/dist/stages/stage-builder.d.ts +46 -0
- package/dist/stages/stage-builder.d.ts.map +1 -0
- package/dist/stages/stage-builder.js +87 -0
- package/dist/stages/stage-builder.js.map +1 -0
- package/dist/stages/timelock.d.ts +100 -0
- package/dist/stages/timelock.d.ts.map +1 -0
- package/dist/stages/timelock.js +552 -0
- package/dist/stages/timelock.js.map +1 -0
- package/dist/stages/voting.d.ts +18 -0
- package/dist/stages/voting.d.ts.map +1 -0
- package/dist/stages/voting.js +109 -0
- package/dist/stages/voting.js.map +1 -0
- package/dist/tracker/context.d.ts +111 -0
- package/dist/tracker/context.d.ts.map +1 -0
- package/dist/tracker/context.js +264 -0
- package/dist/tracker/context.js.map +1 -0
- package/dist/tracker/discovery.d.ts +89 -0
- package/dist/tracker/discovery.d.ts.map +1 -0
- package/dist/tracker/discovery.js +228 -0
- package/dist/tracker/discovery.js.map +1 -0
- package/dist/tracker/execute.d.ts +44 -0
- package/dist/tracker/execute.d.ts.map +1 -0
- package/dist/tracker/execute.js +126 -0
- package/dist/tracker/execute.js.map +1 -0
- package/dist/tracker/index.d.ts +18 -0
- package/dist/tracker/index.d.ts.map +1 -0
- package/dist/tracker/index.js +70 -0
- package/dist/tracker/index.js.map +1 -0
- package/dist/tracker/pipeline.d.ts +47 -0
- package/dist/tracker/pipeline.d.ts.map +1 -0
- package/dist/tracker/pipeline.js +299 -0
- package/dist/tracker/pipeline.js.map +1 -0
- package/dist/tracker/query.d.ts +45 -0
- package/dist/tracker/query.d.ts.map +1 -0
- package/dist/tracker/query.js +159 -0
- package/dist/tracker/query.js.map +1 -0
- package/dist/tracker/state.d.ts +104 -0
- package/dist/tracker/state.d.ts.map +1 -0
- package/dist/tracker/state.js +287 -0
- package/dist/tracker/state.js.map +1 -0
- package/dist/tracker.d.ts +261 -0
- package/dist/tracker.d.ts.map +1 -0
- package/dist/tracker.js +556 -0
- package/dist/tracker.js.map +1 -0
- package/dist/types/config.d.ts +81 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/core.d.ts +51 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +6 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/cross-chain.d.ts +80 -0
- package/dist/types/cross-chain.d.ts.map +1 -0
- package/dist/types/cross-chain.js +6 -0
- package/dist/types/cross-chain.js.map +1 -0
- package/dist/types/election.d.ts +59 -0
- package/dist/types/election.d.ts.map +1 -0
- package/dist/types/election.js +6 -0
- package/dist/types/election.js.map +1 -0
- package/dist/types/governor.d.ts +71 -0
- package/dist/types/governor.d.ts.map +1 -0
- package/dist/types/governor.js +6 -0
- package/dist/types/governor.js.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/stages.d.ts +189 -0
- package/dist/types/stages.d.ts.map +1 -0
- package/dist/types/stages.js +23 -0
- package/dist/types/stages.js.map +1 -0
- package/dist/types/timelock.d.ts +108 -0
- package/dist/types/timelock.d.ts.map +1 -0
- package/dist/types/timelock.js +6 -0
- package/dist/types/timelock.js.map +1 -0
- package/dist/types/tracking.d.ts +180 -0
- package/dist/types/tracking.d.ts.map +1 -0
- package/dist/types/tracking.js +6 -0
- package/dist/types/tracking.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/chain.d.ts +18 -0
- package/dist/utils/chain.d.ts.map +1 -0
- package/dist/utils/chain.js +34 -0
- package/dist/utils/chain.js.map +1 -0
- package/dist/utils/log-filters.d.ts +67 -0
- package/dist/utils/log-filters.d.ts.map +1 -0
- package/dist/utils/log-filters.js +116 -0
- package/dist/utils/log-filters.js.map +1 -0
- package/dist/utils/log-search.d.ts +76 -0
- package/dist/utils/log-search.d.ts.map +1 -0
- package/dist/utils/log-search.js +142 -0
- package/dist/utils/log-search.js.map +1 -0
- package/dist/utils/logger.d.ts +41 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +50 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/operation-id.d.ts +48 -0
- package/dist/utils/operation-id.d.ts.map +1 -0
- package/dist/utils/operation-id.js +102 -0
- package/dist/utils/operation-id.js.map +1 -0
- package/dist/utils/rpc-utils.d.ts +30 -0
- package/dist/utils/rpc-utils.d.ts.map +1 -0
- package/dist/utils/rpc-utils.js +99 -0
- package/dist/utils/rpc-utils.js.map +1 -0
- package/dist/utils/salt-computation.d.ts +78 -0
- package/dist/utils/salt-computation.d.ts.map +1 -0
- package/dist/utils/salt-computation.js +132 -0
- package/dist/utils/salt-computation.js.map +1 -0
- package/dist/utils/salt-resolver.d.ts +63 -0
- package/dist/utils/salt-resolver.d.ts.map +1 -0
- package/dist/utils/salt-resolver.js +144 -0
- package/dist/utils/salt-resolver.js.map +1 -0
- package/dist/utils/scoped-logger.d.ts +43 -0
- package/dist/utils/scoped-logger.d.ts.map +1 -0
- package/dist/utils/scoped-logger.js +72 -0
- package/dist/utils/scoped-logger.js.map +1 -0
- package/dist/utils/stage-helpers.d.ts +51 -0
- package/dist/utils/stage-helpers.d.ts.map +1 -0
- package/dist/utils/stage-helpers.js +143 -0
- package/dist/utils/stage-helpers.js.map +1 -0
- package/dist/utils/stage-metadata.d.ts +62 -0
- package/dist/utils/stage-metadata.d.ts.map +1 -0
- package/dist/utils/stage-metadata.js +140 -0
- package/dist/utils/stage-metadata.js.map +1 -0
- package/dist/utils/timing.d.ts +115 -0
- package/dist/utils/timing.d.ts.map +1 -0
- package/dist/utils/timing.js +303 -0
- package/dist/utils/timing.js.map +1 -0
- package/dist/utils/urls.d.ts +20 -0
- package/dist/utils/urls.d.ts.map +1 -0
- package/dist/utils/urls.js +51 -0
- package/dist/utils/urls.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timelock-related types for Arbitrum Governance
|
|
3
|
+
*/
|
|
4
|
+
import { BigNumber } from "ethers";
|
|
5
|
+
/**
|
|
6
|
+
* Timelock operation state
|
|
7
|
+
*/
|
|
8
|
+
export type TimelockOperationState = "UNKNOWN" | "PENDING" | "READY" | "DONE";
|
|
9
|
+
/**
|
|
10
|
+
* Serialized CallScheduledData for JSON storage
|
|
11
|
+
*/
|
|
12
|
+
export interface SerializedCallScheduledData {
|
|
13
|
+
operationId: string;
|
|
14
|
+
index: string;
|
|
15
|
+
target: string;
|
|
16
|
+
value: string;
|
|
17
|
+
data: string;
|
|
18
|
+
predecessor: string;
|
|
19
|
+
delay: string;
|
|
20
|
+
blockNumber: number;
|
|
21
|
+
txHash: string;
|
|
22
|
+
logIndex: number;
|
|
23
|
+
timelockAddress: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parsed CallScheduled event data
|
|
27
|
+
*/
|
|
28
|
+
export interface CallScheduledData {
|
|
29
|
+
operationId: string;
|
|
30
|
+
index: BigNumber;
|
|
31
|
+
target: string;
|
|
32
|
+
value: BigNumber;
|
|
33
|
+
data: string;
|
|
34
|
+
predecessor: string;
|
|
35
|
+
delay: BigNumber;
|
|
36
|
+
blockNumber: number;
|
|
37
|
+
txHash: string;
|
|
38
|
+
logIndex: number;
|
|
39
|
+
timelockAddress: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Parsed CallExecuted event data
|
|
43
|
+
*/
|
|
44
|
+
export interface CallExecutedData {
|
|
45
|
+
operationId: string;
|
|
46
|
+
index: BigNumber;
|
|
47
|
+
target: string;
|
|
48
|
+
value: BigNumber;
|
|
49
|
+
data: string;
|
|
50
|
+
blockNumber: number;
|
|
51
|
+
txHash: string;
|
|
52
|
+
logIndex: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Parameters for a timelock operation
|
|
56
|
+
*/
|
|
57
|
+
export interface TimelockParams {
|
|
58
|
+
target: string;
|
|
59
|
+
value: BigNumber;
|
|
60
|
+
data: string;
|
|
61
|
+
predecessor: string;
|
|
62
|
+
salt: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Parameters for a batch timelock operation
|
|
66
|
+
*/
|
|
67
|
+
export interface TimelockBatchParams {
|
|
68
|
+
targets: string[];
|
|
69
|
+
values: BigNumber[];
|
|
70
|
+
payloads: string[];
|
|
71
|
+
predecessor: string;
|
|
72
|
+
salt: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Combined state of a timelock operation
|
|
76
|
+
*/
|
|
77
|
+
export interface TimelockState {
|
|
78
|
+
operationId: string;
|
|
79
|
+
state: TimelockOperationState;
|
|
80
|
+
eta?: number;
|
|
81
|
+
isReady: boolean;
|
|
82
|
+
isDone: boolean;
|
|
83
|
+
scheduledData?: CallScheduledData;
|
|
84
|
+
allScheduledData?: CallScheduledData[];
|
|
85
|
+
executedData?: CallExecutedData;
|
|
86
|
+
isBatch?: boolean;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Operation state from timelock contract state checks
|
|
90
|
+
*/
|
|
91
|
+
export interface OperationState {
|
|
92
|
+
isOperation: boolean;
|
|
93
|
+
isPending: boolean;
|
|
94
|
+
isReady: boolean;
|
|
95
|
+
isDone: boolean;
|
|
96
|
+
state: string;
|
|
97
|
+
timestamp: BigNumber;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Link from proposal to timelock operation
|
|
101
|
+
*/
|
|
102
|
+
export interface TimelockLink {
|
|
103
|
+
txHash: string;
|
|
104
|
+
operationId: string;
|
|
105
|
+
timelockAddress: string;
|
|
106
|
+
queueBlockNumber: number;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=timelock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timelock.d.ts","sourceRoot":"","sources":["../../src/types/timelock.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACvC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timelock.js","sourceRoot":"","sources":["../../src/types/timelock.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracking context, results, checkpoint, and execution types
|
|
3
|
+
*/
|
|
4
|
+
import { BigNumber } from "ethers";
|
|
5
|
+
import { ChainType, StageType } from "./core";
|
|
6
|
+
import { TrackedStage } from "./stages";
|
|
7
|
+
import { CallScheduledData } from "./timelock";
|
|
8
|
+
import { ProposalType, ProposalData, ProposalState } from "./governor";
|
|
9
|
+
import { TimelockState, TimelockLink } from "./timelock";
|
|
10
|
+
export interface PrepareOptions {
|
|
11
|
+
salt?: string;
|
|
12
|
+
predecessor?: string;
|
|
13
|
+
skipSaltValidation?: boolean;
|
|
14
|
+
skipRetryableValueCalculation?: boolean;
|
|
15
|
+
force?: boolean;
|
|
16
|
+
/** Proposal description (needed for salt derivation if not in stage data) */
|
|
17
|
+
description?: string;
|
|
18
|
+
}
|
|
19
|
+
export type PrepareResult = {
|
|
20
|
+
success: true;
|
|
21
|
+
prepared: PreparedTransaction;
|
|
22
|
+
} | {
|
|
23
|
+
success: false;
|
|
24
|
+
error: string;
|
|
25
|
+
};
|
|
26
|
+
export interface PreparedTransaction {
|
|
27
|
+
to: string;
|
|
28
|
+
data: string;
|
|
29
|
+
value: string;
|
|
30
|
+
chain: ChainType;
|
|
31
|
+
description: string;
|
|
32
|
+
operationId?: string;
|
|
33
|
+
hashValidation?: {
|
|
34
|
+
isValid: boolean;
|
|
35
|
+
error?: string;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface ExecutionResult {
|
|
39
|
+
success: boolean;
|
|
40
|
+
txHash: string;
|
|
41
|
+
blockNumber: number;
|
|
42
|
+
gasUsed: BigNumber;
|
|
43
|
+
error?: string;
|
|
44
|
+
prepared?: PreparedTransaction;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Input for tracking from a governor proposal
|
|
48
|
+
*/
|
|
49
|
+
export interface GovernorTrackingInput {
|
|
50
|
+
type: "governor";
|
|
51
|
+
governorAddress: string;
|
|
52
|
+
proposalId: string;
|
|
53
|
+
creationTxHash: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Input for tracking from a timelock operation
|
|
57
|
+
*/
|
|
58
|
+
export interface TimelockTrackingInput {
|
|
59
|
+
type: "timelock";
|
|
60
|
+
timelockAddress: string;
|
|
61
|
+
operationId: string;
|
|
62
|
+
scheduledTxHash: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Input for discovery metadata checkpoint
|
|
66
|
+
*/
|
|
67
|
+
export interface DiscoveryTrackingInput {
|
|
68
|
+
type: "discovery";
|
|
69
|
+
id: "watermarks";
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Union type for all tracking entry points
|
|
73
|
+
*/
|
|
74
|
+
export type TrackingInput = GovernorTrackingInput | TimelockTrackingInput | DiscoveryTrackingInput;
|
|
75
|
+
/**
|
|
76
|
+
* Common context for stage tracking operations
|
|
77
|
+
*/
|
|
78
|
+
export interface StageTrackingContext {
|
|
79
|
+
fromBlock?: number;
|
|
80
|
+
toBlock?: number;
|
|
81
|
+
direction?: "forward" | "backward";
|
|
82
|
+
cachedData?: {
|
|
83
|
+
txHash?: string;
|
|
84
|
+
operationId?: string;
|
|
85
|
+
callScheduledData?: CallScheduledData | CallScheduledData[];
|
|
86
|
+
executionTxHash?: string;
|
|
87
|
+
};
|
|
88
|
+
checkpoint?: TrackingCheckpoint;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Hints for the next stage in the pipeline
|
|
92
|
+
*/
|
|
93
|
+
export interface NextStageHints {
|
|
94
|
+
fromBlock?: number;
|
|
95
|
+
timelockAddress?: string;
|
|
96
|
+
operationId?: string;
|
|
97
|
+
callScheduledData?: CallScheduledData | CallScheduledData[];
|
|
98
|
+
executionTxHash?: string;
|
|
99
|
+
firstExecutableBlock?: number;
|
|
100
|
+
messagePosition?: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Result structure for stage tracking functions
|
|
104
|
+
*/
|
|
105
|
+
export interface StageTrackResult {
|
|
106
|
+
stage: TrackedStage;
|
|
107
|
+
hints: NextStageHints;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Extend StageTrackResult with additional stage-specific data
|
|
111
|
+
*/
|
|
112
|
+
export type StageTrackResultWith<TExtra> = StageTrackResult & TExtra;
|
|
113
|
+
/**
|
|
114
|
+
* Discovery target keys (shared between watermarks and targets)
|
|
115
|
+
*/
|
|
116
|
+
export type DiscoveryKey = "constitutionalGovernor" | "nonConstitutionalGovernor" | "electionNomineeGovernor" | "electionMemberGovernor" | "l2ConstitutionalTimelock" | "l2NonConstitutionalTimelock";
|
|
117
|
+
/** Discovery watermarks for incremental block scanning */
|
|
118
|
+
export type DiscoveryWatermarks = Partial<Record<DiscoveryKey, number>>;
|
|
119
|
+
/** Discovery targets configuration */
|
|
120
|
+
export type DiscoveryTargets = Partial<Record<DiscoveryKey, boolean>>;
|
|
121
|
+
/**
|
|
122
|
+
* Checkpoint for resuming tracking
|
|
123
|
+
*/
|
|
124
|
+
export interface TrackingCheckpoint {
|
|
125
|
+
version: 1;
|
|
126
|
+
createdAt: number;
|
|
127
|
+
input: TrackingInput;
|
|
128
|
+
lastProcessedStage: StageType | null;
|
|
129
|
+
lastProcessedBlock: {
|
|
130
|
+
l1: number;
|
|
131
|
+
l2: number;
|
|
132
|
+
nova?: number;
|
|
133
|
+
};
|
|
134
|
+
cachedData: {
|
|
135
|
+
completedStages?: TrackedStage[];
|
|
136
|
+
discoveryWatermarks?: DiscoveryWatermarks;
|
|
137
|
+
};
|
|
138
|
+
metadata?: {
|
|
139
|
+
errorCount: number;
|
|
140
|
+
lastTrackedAt: number;
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Aggregated cache statistics
|
|
145
|
+
*/
|
|
146
|
+
export interface TrackerStats {
|
|
147
|
+
total: number;
|
|
148
|
+
proposals: {
|
|
149
|
+
total: number;
|
|
150
|
+
complete: number;
|
|
151
|
+
active: number;
|
|
152
|
+
errored: number;
|
|
153
|
+
};
|
|
154
|
+
timelocks: {
|
|
155
|
+
total: number;
|
|
156
|
+
complete: number;
|
|
157
|
+
active: number;
|
|
158
|
+
errored: number;
|
|
159
|
+
};
|
|
160
|
+
elections: {
|
|
161
|
+
total: number;
|
|
162
|
+
complete: number;
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Full tracking result
|
|
167
|
+
*/
|
|
168
|
+
export interface TrackingResult {
|
|
169
|
+
input: TrackingInput;
|
|
170
|
+
stages: TrackedStage[];
|
|
171
|
+
checkpoint: TrackingCheckpoint;
|
|
172
|
+
isComplete: boolean;
|
|
173
|
+
proposalType?: ProposalType;
|
|
174
|
+
proposalData?: ProposalData;
|
|
175
|
+
timelockState?: TimelockState;
|
|
176
|
+
timelockLink?: TimelockLink;
|
|
177
|
+
currentState?: ProposalState;
|
|
178
|
+
isElection?: boolean;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=tracking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracking.d.ts","sourceRoot":"","sources":["../../src/types/tracking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../src/types/tracking.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,eAAe,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
/**
|
|
18
|
+
* Type definitions for Arbitrum Governance Stage Tracking SDK
|
|
19
|
+
* Re-exports from domain modules in ./types/
|
|
20
|
+
*/
|
|
21
|
+
__exportStar(require("./types/index"), exports);
|
|
22
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,gDAA8B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain and address utilities
|
|
3
|
+
*/
|
|
4
|
+
import { ethers } from "ethers";
|
|
5
|
+
import { ChainType } from "../types";
|
|
6
|
+
/**
|
|
7
|
+
* Get chain type from provider network.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getChainType(provider: ethers.providers.Provider): Promise<ChainType>;
|
|
10
|
+
/**
|
|
11
|
+
* Case-insensitive address comparison.
|
|
12
|
+
*/
|
|
13
|
+
export declare function addressEquals(a: string, b: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Check if an address is in a set of addresses (case-insensitive).
|
|
16
|
+
*/
|
|
17
|
+
export declare function isAddressIn(address: string, addresses: readonly string[]): boolean;
|
|
18
|
+
//# sourceMappingURL=chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/utils/chain.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAK1F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAGlF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Chain and address utilities
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getChainType = getChainType;
|
|
7
|
+
exports.addressEquals = addressEquals;
|
|
8
|
+
exports.isAddressIn = isAddressIn;
|
|
9
|
+
const constants_1 = require("../constants");
|
|
10
|
+
/**
|
|
11
|
+
* Get chain type from provider network.
|
|
12
|
+
*/
|
|
13
|
+
async function getChainType(provider) {
|
|
14
|
+
const network = await provider.getNetwork();
|
|
15
|
+
if (network.chainId === constants_1.CHAIN_IDS.NOVA)
|
|
16
|
+
return "NOVA";
|
|
17
|
+
if (network.chainId === constants_1.CHAIN_IDS.ARB_ONE)
|
|
18
|
+
return "L2";
|
|
19
|
+
return "L1";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Case-insensitive address comparison.
|
|
23
|
+
*/
|
|
24
|
+
function addressEquals(a, b) {
|
|
25
|
+
return a.toLowerCase() === b.toLowerCase();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if an address is in a set of addresses (case-insensitive).
|
|
29
|
+
*/
|
|
30
|
+
function isAddressIn(address, addresses) {
|
|
31
|
+
const normalized = address.toLowerCase();
|
|
32
|
+
return addresses.some((a) => a.toLowerCase() === normalized);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/utils/chain.ts"],"names":[],"mappings":";AAAA;;GAEG;;AASH,oCAKC;AAKD,sCAEC;AAKD,kCAGC;AAzBD,4CAAyC;AAEzC;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,QAAmC;IACpE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC5C,IAAI,OAAO,CAAC,OAAO,KAAK,qBAAS,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IACtD,IAAI,OAAO,CAAC,OAAO,KAAK,qBAAS,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAe,EAAE,SAA4B;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for filtering and parsing transaction receipt logs
|
|
3
|
+
*
|
|
4
|
+
* These helpers reduce duplication across discovery and stage modules
|
|
5
|
+
* that need to find specific events in transaction receipts.
|
|
6
|
+
*/
|
|
7
|
+
import { ethers } from "ethers";
|
|
8
|
+
type Log = ethers.providers.Log;
|
|
9
|
+
/**
|
|
10
|
+
* Filter options for finding logs in a receipt
|
|
11
|
+
*/
|
|
12
|
+
export interface LogFilterOptions {
|
|
13
|
+
/** Event topic (topics[0]) to match */
|
|
14
|
+
topic?: string;
|
|
15
|
+
/** Contract address to match */
|
|
16
|
+
address?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Filter logs from a receipt by topic and/or address
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* // Find all CallScheduled events
|
|
23
|
+
* const logs = filterLogs(receipt.logs, { topic: EVENT_TOPICS.CALL_SCHEDULED });
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // Find L2ToL1Tx events from ArbSys
|
|
27
|
+
* const logs = filterLogs(receipt.logs, { topic: l2ToL1Topic, address: ARB_SYS });
|
|
28
|
+
*/
|
|
29
|
+
export declare function filterLogs(logs: Log[], options: LogFilterOptions): Log[];
|
|
30
|
+
/**
|
|
31
|
+
* Parse logs with a parser function, silently skipping parse failures
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* const events = parseLogsSafe(logs, parseCallScheduledEvent);
|
|
35
|
+
*/
|
|
36
|
+
export declare function parseLogsSafe<T>(logs: Log[], parser: (log: Log) => T | null): T[];
|
|
37
|
+
/**
|
|
38
|
+
* Find and parse logs in one operation
|
|
39
|
+
*
|
|
40
|
+
* Combines filterLogs and parseLogsSafe for the common pattern of
|
|
41
|
+
* filtering logs by topic/address and parsing them.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* const events = findAndParseLogs(
|
|
45
|
+
* receipt.logs,
|
|
46
|
+
* { topic: EVENT_TOPICS.CALL_SCHEDULED },
|
|
47
|
+
* parseCallScheduledEvent
|
|
48
|
+
* );
|
|
49
|
+
*/
|
|
50
|
+
export declare function findAndParseLogs<T>(logs: Log[], options: LogFilterOptions, parser: (log: Log) => T | null): T[];
|
|
51
|
+
/**
|
|
52
|
+
* Find first matching log and parse it
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* const event = findFirstLog(
|
|
56
|
+
* receipt.logs,
|
|
57
|
+
* { topic: EVENT_TOPICS.PROPOSAL_CREATED },
|
|
58
|
+
* parseProposalCreatedEvent
|
|
59
|
+
* );
|
|
60
|
+
*/
|
|
61
|
+
export declare function findFirstLog<T>(logs: Log[], options: LogFilterOptions, parser: (log: Log) => T | null): T | null;
|
|
62
|
+
/**
|
|
63
|
+
* Count logs by address after filtering by topic
|
|
64
|
+
*/
|
|
65
|
+
export declare function countLogsByAddress(logs: Log[], options: Omit<LogFilterOptions, "address">): Map<string, number>;
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=log-filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-filters.d.ts","sourceRoot":"","sources":["../../src/utils/log-filters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,KAAK,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,GAAG,EAAE,CAUxE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAajF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,GAC7B,CAAC,EAAE,CAGL;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,GAC7B,CAAC,GAAG,IAAI,CAeV;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GACzC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAWrB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utilities for filtering and parsing transaction receipt logs
|
|
4
|
+
*
|
|
5
|
+
* These helpers reduce duplication across discovery and stage modules
|
|
6
|
+
* that need to find specific events in transaction receipts.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.filterLogs = filterLogs;
|
|
10
|
+
exports.parseLogsSafe = parseLogsSafe;
|
|
11
|
+
exports.findAndParseLogs = findAndParseLogs;
|
|
12
|
+
exports.findFirstLog = findFirstLog;
|
|
13
|
+
exports.countLogsByAddress = countLogsByAddress;
|
|
14
|
+
const chain_1 = require("./chain");
|
|
15
|
+
/**
|
|
16
|
+
* Filter logs from a receipt by topic and/or address
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Find all CallScheduled events
|
|
20
|
+
* const logs = filterLogs(receipt.logs, { topic: EVENT_TOPICS.CALL_SCHEDULED });
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Find L2ToL1Tx events from ArbSys
|
|
24
|
+
* const logs = filterLogs(receipt.logs, { topic: l2ToL1Topic, address: ARB_SYS });
|
|
25
|
+
*/
|
|
26
|
+
function filterLogs(logs, options) {
|
|
27
|
+
return logs.filter((log) => {
|
|
28
|
+
if (options.topic && log.topics[0] !== options.topic) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
if (options.address && !(0, chain_1.addressEquals)(log.address, options.address)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Parse logs with a parser function, silently skipping parse failures
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* const events = parseLogsSafe(logs, parseCallScheduledEvent);
|
|
42
|
+
*/
|
|
43
|
+
function parseLogsSafe(logs, parser) {
|
|
44
|
+
const results = [];
|
|
45
|
+
for (const log of logs) {
|
|
46
|
+
try {
|
|
47
|
+
const parsed = parser(log);
|
|
48
|
+
if (parsed !== null) {
|
|
49
|
+
results.push(parsed);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Skip logs that fail to parse
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return results;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Find and parse logs in one operation
|
|
60
|
+
*
|
|
61
|
+
* Combines filterLogs and parseLogsSafe for the common pattern of
|
|
62
|
+
* filtering logs by topic/address and parsing them.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* const events = findAndParseLogs(
|
|
66
|
+
* receipt.logs,
|
|
67
|
+
* { topic: EVENT_TOPICS.CALL_SCHEDULED },
|
|
68
|
+
* parseCallScheduledEvent
|
|
69
|
+
* );
|
|
70
|
+
*/
|
|
71
|
+
function findAndParseLogs(logs, options, parser) {
|
|
72
|
+
const filtered = filterLogs(logs, options);
|
|
73
|
+
return parseLogsSafe(filtered, parser);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Find first matching log and parse it
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* const event = findFirstLog(
|
|
80
|
+
* receipt.logs,
|
|
81
|
+
* { topic: EVENT_TOPICS.PROPOSAL_CREATED },
|
|
82
|
+
* parseProposalCreatedEvent
|
|
83
|
+
* );
|
|
84
|
+
*/
|
|
85
|
+
function findFirstLog(logs, options, parser) {
|
|
86
|
+
for (const log of logs) {
|
|
87
|
+
if (options.topic && log.topics[0] !== options.topic)
|
|
88
|
+
continue;
|
|
89
|
+
if (options.address && !(0, chain_1.addressEquals)(log.address, options.address))
|
|
90
|
+
continue;
|
|
91
|
+
try {
|
|
92
|
+
const parsed = parser(log);
|
|
93
|
+
if (parsed !== null) {
|
|
94
|
+
return parsed;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Continue to next log
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Count logs by address after filtering by topic
|
|
105
|
+
*/
|
|
106
|
+
function countLogsByAddress(logs, options) {
|
|
107
|
+
const counts = new Map();
|
|
108
|
+
for (const log of logs) {
|
|
109
|
+
if (options.topic && log.topics[0] !== options.topic)
|
|
110
|
+
continue;
|
|
111
|
+
const addr = log.address.toLowerCase();
|
|
112
|
+
counts.set(addr, (counts.get(addr) ?? 0) + 1);
|
|
113
|
+
}
|
|
114
|
+
return counts;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=log-filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-filters.js","sourceRoot":"","sources":["../../src/utils/log-filters.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA4BH,gCAUC;AAQD,sCAaC;AAeD,4CAOC;AAYD,oCAmBC;AAKD,gDAcC;AAhID,mCAAwC;AAcxC;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CAAC,IAAW,EAAE,OAAyB;IAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,IAAA,qBAAa,EAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAI,IAAW,EAAE,MAA8B;IAC1E,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,gBAAgB,CAC9B,IAAW,EACX,OAAyB,EACzB,MAA8B;IAE9B,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,IAAW,EACX,OAAyB,EACzB,MAA8B;IAE9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK;YAAE,SAAS;QAC/D,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,IAAA,qBAAa,EAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;YAAE,SAAS;QAE9E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,IAAW,EACX,OAA0C;IAE1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK;YAAE,SAAS;QAE/D,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|