@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.
Files changed (203) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +201 -0
  3. package/dist/abis.d.ts +79 -0
  4. package/dist/abis.d.ts.map +1 -0
  5. package/dist/abis.js +159 -0
  6. package/dist/abis.js.map +1 -0
  7. package/dist/cli/lib/cli.d.ts +92 -0
  8. package/dist/cli/lib/cli.d.ts.map +1 -0
  9. package/dist/cli/lib/cli.js +562 -0
  10. package/dist/cli/lib/cli.js.map +1 -0
  11. package/dist/cli/lib/election-check.d.ts +46 -0
  12. package/dist/cli/lib/election-check.d.ts.map +1 -0
  13. package/dist/cli/lib/election-check.js +136 -0
  14. package/dist/cli/lib/election-check.js.map +1 -0
  15. package/dist/cli/lib/json-state.d.ts +100 -0
  16. package/dist/cli/lib/json-state.d.ts.map +1 -0
  17. package/dist/cli/lib/json-state.js +225 -0
  18. package/dist/cli/lib/json-state.js.map +1 -0
  19. package/dist/cli/monitor.d.ts +3 -0
  20. package/dist/cli/monitor.d.ts.map +1 -0
  21. package/dist/cli/monitor.js +442 -0
  22. package/dist/cli/monitor.js.map +1 -0
  23. package/dist/constants.d.ts +235 -0
  24. package/dist/constants.d.ts.map +1 -0
  25. package/dist/constants.js +293 -0
  26. package/dist/constants.js.map +1 -0
  27. package/dist/discovery/governor-discovery.d.ts +84 -0
  28. package/dist/discovery/governor-discovery.d.ts.map +1 -0
  29. package/dist/discovery/governor-discovery.js +310 -0
  30. package/dist/discovery/governor-discovery.js.map +1 -0
  31. package/dist/discovery/security-council.d.ts +68 -0
  32. package/dist/discovery/security-council.d.ts.map +1 -0
  33. package/dist/discovery/security-council.js +181 -0
  34. package/dist/discovery/security-council.js.map +1 -0
  35. package/dist/discovery/timelock-discovery.d.ts +99 -0
  36. package/dist/discovery/timelock-discovery.d.ts.map +1 -0
  37. package/dist/discovery/timelock-discovery.js +322 -0
  38. package/dist/discovery/timelock-discovery.js.map +1 -0
  39. package/dist/election.d.ts +172 -0
  40. package/dist/election.d.ts.map +1 -0
  41. package/dist/election.js +464 -0
  42. package/dist/election.js.map +1 -0
  43. package/dist/index.d.ts +56 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +164 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/stages/base.d.ts +127 -0
  48. package/dist/stages/base.d.ts.map +1 -0
  49. package/dist/stages/base.js +280 -0
  50. package/dist/stages/base.js.map +1 -0
  51. package/dist/stages/l2-to-l1-message.d.ts +108 -0
  52. package/dist/stages/l2-to-l1-message.d.ts.map +1 -0
  53. package/dist/stages/l2-to-l1-message.js +422 -0
  54. package/dist/stages/l2-to-l1-message.js.map +1 -0
  55. package/dist/stages/proposal-created.d.ts +20 -0
  56. package/dist/stages/proposal-created.d.ts.map +1 -0
  57. package/dist/stages/proposal-created.js +62 -0
  58. package/dist/stages/proposal-created.js.map +1 -0
  59. package/dist/stages/proposal-queued.d.ts +39 -0
  60. package/dist/stages/proposal-queued.d.ts.map +1 -0
  61. package/dist/stages/proposal-queued.js +131 -0
  62. package/dist/stages/proposal-queued.js.map +1 -0
  63. package/dist/stages/retryables.d.ts +79 -0
  64. package/dist/stages/retryables.d.ts.map +1 -0
  65. package/dist/stages/retryables.js +307 -0
  66. package/dist/stages/retryables.js.map +1 -0
  67. package/dist/stages/stage-builder.d.ts +46 -0
  68. package/dist/stages/stage-builder.d.ts.map +1 -0
  69. package/dist/stages/stage-builder.js +87 -0
  70. package/dist/stages/stage-builder.js.map +1 -0
  71. package/dist/stages/timelock.d.ts +100 -0
  72. package/dist/stages/timelock.d.ts.map +1 -0
  73. package/dist/stages/timelock.js +552 -0
  74. package/dist/stages/timelock.js.map +1 -0
  75. package/dist/stages/voting.d.ts +18 -0
  76. package/dist/stages/voting.d.ts.map +1 -0
  77. package/dist/stages/voting.js +109 -0
  78. package/dist/stages/voting.js.map +1 -0
  79. package/dist/tracker/context.d.ts +111 -0
  80. package/dist/tracker/context.d.ts.map +1 -0
  81. package/dist/tracker/context.js +264 -0
  82. package/dist/tracker/context.js.map +1 -0
  83. package/dist/tracker/discovery.d.ts +89 -0
  84. package/dist/tracker/discovery.d.ts.map +1 -0
  85. package/dist/tracker/discovery.js +228 -0
  86. package/dist/tracker/discovery.js.map +1 -0
  87. package/dist/tracker/execute.d.ts +44 -0
  88. package/dist/tracker/execute.d.ts.map +1 -0
  89. package/dist/tracker/execute.js +126 -0
  90. package/dist/tracker/execute.js.map +1 -0
  91. package/dist/tracker/index.d.ts +18 -0
  92. package/dist/tracker/index.d.ts.map +1 -0
  93. package/dist/tracker/index.js +70 -0
  94. package/dist/tracker/index.js.map +1 -0
  95. package/dist/tracker/pipeline.d.ts +47 -0
  96. package/dist/tracker/pipeline.d.ts.map +1 -0
  97. package/dist/tracker/pipeline.js +299 -0
  98. package/dist/tracker/pipeline.js.map +1 -0
  99. package/dist/tracker/query.d.ts +45 -0
  100. package/dist/tracker/query.d.ts.map +1 -0
  101. package/dist/tracker/query.js +159 -0
  102. package/dist/tracker/query.js.map +1 -0
  103. package/dist/tracker/state.d.ts +104 -0
  104. package/dist/tracker/state.d.ts.map +1 -0
  105. package/dist/tracker/state.js +287 -0
  106. package/dist/tracker/state.js.map +1 -0
  107. package/dist/tracker.d.ts +261 -0
  108. package/dist/tracker.d.ts.map +1 -0
  109. package/dist/tracker.js +556 -0
  110. package/dist/tracker.js.map +1 -0
  111. package/dist/types/config.d.ts +81 -0
  112. package/dist/types/config.d.ts.map +1 -0
  113. package/dist/types/config.js +6 -0
  114. package/dist/types/config.js.map +1 -0
  115. package/dist/types/core.d.ts +51 -0
  116. package/dist/types/core.d.ts.map +1 -0
  117. package/dist/types/core.js +6 -0
  118. package/dist/types/core.js.map +1 -0
  119. package/dist/types/cross-chain.d.ts +80 -0
  120. package/dist/types/cross-chain.d.ts.map +1 -0
  121. package/dist/types/cross-chain.js +6 -0
  122. package/dist/types/cross-chain.js.map +1 -0
  123. package/dist/types/election.d.ts +59 -0
  124. package/dist/types/election.d.ts.map +1 -0
  125. package/dist/types/election.js +6 -0
  126. package/dist/types/election.js.map +1 -0
  127. package/dist/types/governor.d.ts +71 -0
  128. package/dist/types/governor.d.ts.map +1 -0
  129. package/dist/types/governor.js +6 -0
  130. package/dist/types/governor.js.map +1 -0
  131. package/dist/types/index.d.ts +22 -0
  132. package/dist/types/index.d.ts.map +1 -0
  133. package/dist/types/index.js +21 -0
  134. package/dist/types/index.js.map +1 -0
  135. package/dist/types/stages.d.ts +189 -0
  136. package/dist/types/stages.d.ts.map +1 -0
  137. package/dist/types/stages.js +23 -0
  138. package/dist/types/stages.js.map +1 -0
  139. package/dist/types/timelock.d.ts +108 -0
  140. package/dist/types/timelock.d.ts.map +1 -0
  141. package/dist/types/timelock.js +6 -0
  142. package/dist/types/timelock.js.map +1 -0
  143. package/dist/types/tracking.d.ts +180 -0
  144. package/dist/types/tracking.d.ts.map +1 -0
  145. package/dist/types/tracking.js +6 -0
  146. package/dist/types/tracking.js.map +1 -0
  147. package/dist/types.d.ts +6 -0
  148. package/dist/types.d.ts.map +1 -0
  149. package/dist/types.js +22 -0
  150. package/dist/types.js.map +1 -0
  151. package/dist/utils/chain.d.ts +18 -0
  152. package/dist/utils/chain.d.ts.map +1 -0
  153. package/dist/utils/chain.js +34 -0
  154. package/dist/utils/chain.js.map +1 -0
  155. package/dist/utils/log-filters.d.ts +67 -0
  156. package/dist/utils/log-filters.d.ts.map +1 -0
  157. package/dist/utils/log-filters.js +116 -0
  158. package/dist/utils/log-filters.js.map +1 -0
  159. package/dist/utils/log-search.d.ts +76 -0
  160. package/dist/utils/log-search.d.ts.map +1 -0
  161. package/dist/utils/log-search.js +142 -0
  162. package/dist/utils/log-search.js.map +1 -0
  163. package/dist/utils/logger.d.ts +41 -0
  164. package/dist/utils/logger.d.ts.map +1 -0
  165. package/dist/utils/logger.js +50 -0
  166. package/dist/utils/logger.js.map +1 -0
  167. package/dist/utils/operation-id.d.ts +48 -0
  168. package/dist/utils/operation-id.d.ts.map +1 -0
  169. package/dist/utils/operation-id.js +102 -0
  170. package/dist/utils/operation-id.js.map +1 -0
  171. package/dist/utils/rpc-utils.d.ts +30 -0
  172. package/dist/utils/rpc-utils.d.ts.map +1 -0
  173. package/dist/utils/rpc-utils.js +99 -0
  174. package/dist/utils/rpc-utils.js.map +1 -0
  175. package/dist/utils/salt-computation.d.ts +78 -0
  176. package/dist/utils/salt-computation.d.ts.map +1 -0
  177. package/dist/utils/salt-computation.js +132 -0
  178. package/dist/utils/salt-computation.js.map +1 -0
  179. package/dist/utils/salt-resolver.d.ts +63 -0
  180. package/dist/utils/salt-resolver.d.ts.map +1 -0
  181. package/dist/utils/salt-resolver.js +144 -0
  182. package/dist/utils/salt-resolver.js.map +1 -0
  183. package/dist/utils/scoped-logger.d.ts +43 -0
  184. package/dist/utils/scoped-logger.d.ts.map +1 -0
  185. package/dist/utils/scoped-logger.js +72 -0
  186. package/dist/utils/scoped-logger.js.map +1 -0
  187. package/dist/utils/stage-helpers.d.ts +51 -0
  188. package/dist/utils/stage-helpers.d.ts.map +1 -0
  189. package/dist/utils/stage-helpers.js +143 -0
  190. package/dist/utils/stage-helpers.js.map +1 -0
  191. package/dist/utils/stage-metadata.d.ts +62 -0
  192. package/dist/utils/stage-metadata.d.ts.map +1 -0
  193. package/dist/utils/stage-metadata.js +140 -0
  194. package/dist/utils/stage-metadata.js.map +1 -0
  195. package/dist/utils/timing.d.ts +115 -0
  196. package/dist/utils/timing.d.ts.map +1 -0
  197. package/dist/utils/timing.js +303 -0
  198. package/dist/utils/timing.js.map +1 -0
  199. package/dist/utils/urls.d.ts +20 -0
  200. package/dist/utils/urls.d.ts.map +1 -0
  201. package/dist/utils/urls.js +51 -0
  202. package/dist/utils/urls.js.map +1 -0
  203. package/package.json +72 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * L2 to L1 Message Stage Tracking and Preparation
3
+ *
4
+ * Stage 5: L2_TO_L1_MESSAGE - Unified cross-chain message tracking
5
+ *
6
+ * Status semantics:
7
+ * - NOT_STARTED: No L2→L1 messages found or L2 timelock not executed
8
+ * - PENDING: Message sent, in challenge period
9
+ * - READY: Challenge period complete, ready to execute outbox
10
+ * - COMPLETED: Outbox executed (message confirmed on L1)
11
+ * - SKIPPED: L2-only path (Treasury Governor)
12
+ *
13
+ * Uses @arbitrum/sdk v4 for cross-chain message tracking.
14
+ * Includes preparation functions for outbox execution.
15
+ */
16
+ import { BigNumber, ethers } from "ethers";
17
+ import { ChildToParentMessageStatus, ChildToParentMessageReader } from "@arbitrum/sdk";
18
+ import { ChildToParentMessageReaderNitro } from "@arbitrum/sdk/dist/lib/message/ChildToParentMessageNitro";
19
+ import { TrackedStage, PrepareResult } from "../types";
20
+ import { SimpleBulkResult } from "../utils/stage-helpers";
21
+ /**
22
+ * Find the L1 transaction that executed the L2→L1 message (OutBox execution).
23
+ * Uses the message position to match OutBoxTransactionExecuted events.
24
+ *
25
+ * This transaction is important because:
26
+ * 1. It confirms the L2→L1 message was executed
27
+ * 2. It contains the CallScheduled event for the L1 timelock operation
28
+ */
29
+ export declare function findOutboxExecutionTransaction(messagePosition: BigNumber, l2Provider: ethers.providers.Provider, l1Provider: ethers.providers.Provider, options: {
30
+ fromBlock: number;
31
+ toBlock?: number;
32
+ chunkSize?: number;
33
+ }): Promise<{
34
+ hash: string;
35
+ blockNumber: number;
36
+ } | undefined>;
37
+ /**
38
+ * Extract all message positions from L2ToL1Tx events in a transaction receipt.
39
+ * The position uniquely identifies each message for matching on L1 OutBox execution.
40
+ */
41
+ export declare function getAllMessagePositionsFromReceipt(receipt: ethers.providers.TransactionReceipt): BigNumber[];
42
+ /**
43
+ * Result from L2→L1 message stage tracking.
44
+ */
45
+ export interface L2ToL1MessageResult {
46
+ stage: TrackedStage;
47
+ messages: ChildToParentMessageReader[];
48
+ messagePosition?: BigNumber;
49
+ messagePositions: BigNumber[];
50
+ l2ExecutionBlock?: number;
51
+ isConfirmed: boolean;
52
+ isExecuted: boolean;
53
+ firstExecutableBlock?: number;
54
+ l1SearchFromBlock?: number;
55
+ /** OutBox execution transaction (contains L1 timelock CallScheduled event) */
56
+ outboxExecutionTx?: {
57
+ hash: string;
58
+ blockNumber: number;
59
+ };
60
+ }
61
+ /**
62
+ * Track L2→L1 message stage (Stage 5)
63
+ *
64
+ * Unified tracking of L2→L1 message lifecycle with status:
65
+ * - NOT_STARTED: L2 timelock not executed or no messages found
66
+ * - PENDING: Message sent, in challenge period
67
+ * - READY: Challenge period complete, ready to execute outbox
68
+ * - COMPLETED: Outbox executed (message confirmed on L1)
69
+ * - SKIPPED: L2-only path
70
+ *
71
+ * Returns:
72
+ * - `l1SearchFromBlock` - earliest L1 block where OutBox execution could occur
73
+ * - `outboxExecutionTx` - the OutBox execution transaction (when status is COMPLETED)
74
+ *
75
+ * The OutBox execution transaction is important because it contains both:
76
+ * 1. The confirmation that the L2→L1 message was executed
77
+ * 2. The CallScheduled event for the L1 timelock operation
78
+ */
79
+ export declare function trackL2ToL1Message(executionTxHash: string, l2Provider: ethers.providers.Provider, l1Provider: ethers.providers.Provider): Promise<L2ToL1MessageResult>;
80
+ /**
81
+ * Options for preparing L2→L1 messages
82
+ */
83
+ export interface OutboxPrepareOptions {
84
+ /** Force preparation even if stage is completed (for historical validation) */
85
+ force?: boolean;
86
+ /** Outbox contract address (resolved automatically if not provided) */
87
+ outboxAddress?: string;
88
+ }
89
+ /**
90
+ * Prepare an L2→L1 message for execution on L1.
91
+ *
92
+ * This generates the Merkle proof required for Outbox execution.
93
+ * The proof is based on current L2 state and should be used promptly.
94
+ */
95
+ export declare function prepareL2ToL1Message(reader: ChildToParentMessageReaderNitro, l2Provider: ethers.providers.Provider, options?: OutboxPrepareOptions): Promise<PrepareResult>;
96
+ /**
97
+ * Get all L2→L1 messages from a transaction
98
+ */
99
+ export declare function getL2ToL1Messages(l2TxHash: string, l2Provider: ethers.providers.Provider, l1Provider: ethers.providers.Provider): Promise<ChildToParentMessageReader[]>;
100
+ /**
101
+ * Prepare all L2→L1 messages from a stage for execution.
102
+ *
103
+ * Note: This uses internal SDK types. For simpler usage, consumers can use
104
+ * the SDK's ChildToParentMessageWriter.execute() method directly.
105
+ */
106
+ export declare function prepareL2ToL1MessageStage(stage: TrackedStage, l2Provider: ethers.providers.Provider, l1Provider: ethers.providers.Provider, options?: OutboxPrepareOptions): Promise<SimpleBulkResult>;
107
+ export { ChildToParentMessageReader, ChildToParentMessageStatus };
108
+ //# sourceMappingURL=l2-to-l1-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"l2-to-l1-message.d.ts","sourceRoot":"","sources":["../../src/stages/l2-to-l1-message.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAG3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,+BAA+B,EAAE,MAAM,0DAA0D,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAa,aAAa,EAAgB,MAAM,UAAU,CAAC;AAShF,OAAO,EAGL,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAQhC;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAClD,eAAe,EAAE,SAAS,EAC1B,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,OAAO,EAAE;IACP,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAmE5D;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,kBAAkB,GAC3C,SAAS,EAAE,CAYb;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,gBAAgB,EAAE,SAAS,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,CACtC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GACpC,OAAO,CAAC,mBAAmB,CAAC,CAqP9B;AAID;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,+BAA+B,EACvC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAuDxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GACpC,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAQvC;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACrC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA+B3B;AAGD,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,CAAC"}
@@ -0,0 +1,422 @@
1
+ "use strict";
2
+ /**
3
+ * L2 to L1 Message Stage Tracking and Preparation
4
+ *
5
+ * Stage 5: L2_TO_L1_MESSAGE - Unified cross-chain message tracking
6
+ *
7
+ * Status semantics:
8
+ * - NOT_STARTED: No L2→L1 messages found or L2 timelock not executed
9
+ * - PENDING: Message sent, in challenge period
10
+ * - READY: Challenge period complete, ready to execute outbox
11
+ * - COMPLETED: Outbox executed (message confirmed on L1)
12
+ * - SKIPPED: L2-only path (Treasury Governor)
13
+ *
14
+ * Uses @arbitrum/sdk v4 for cross-chain message tracking.
15
+ * Includes preparation functions for outbox execution.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ChildToParentMessageStatus = exports.ChildToParentMessageReader = void 0;
19
+ exports.findOutboxExecutionTransaction = findOutboxExecutionTransaction;
20
+ exports.getAllMessagePositionsFromReceipt = getAllMessagePositionsFromReceipt;
21
+ exports.trackL2ToL1Message = trackL2ToL1Message;
22
+ exports.prepareL2ToL1Message = prepareL2ToL1Message;
23
+ exports.getL2ToL1Messages = getL2ToL1Messages;
24
+ exports.prepareL2ToL1MessageStage = prepareL2ToL1MessageStage;
25
+ const ethers_1 = require("ethers");
26
+ const sdk_1 = require("@arbitrum/sdk");
27
+ Object.defineProperty(exports, "ChildToParentMessageStatus", { enumerable: true, get: function () { return sdk_1.ChildToParentMessageStatus; } });
28
+ Object.defineProperty(exports, "ChildToParentMessageReader", { enumerable: true, get: function () { return sdk_1.ChildToParentMessageReader; } });
29
+ const types_1 = require("../types");
30
+ const constants_1 = require("../constants");
31
+ const logger_1 = require("../utils/logger");
32
+ const logStage = logger_1.loggers.stage.l2ToL1;
33
+ const logExecution = logger_1.loggers.execution;
34
+ const base_1 = require("./base");
35
+ const stage_builder_1 = require("./stage-builder");
36
+ const rpc_utils_1 = require("../utils/rpc-utils");
37
+ const stage_helpers_1 = require("../utils/stage-helpers");
38
+ const log_search_1 = require("../utils/log-search");
39
+ const log_filters_1 = require("../utils/log-filters");
40
+ const timing_1 = require("../utils/timing");
41
+ const abis_1 = require("../abis");
42
+ const ARB_SYS_ADDRESS = constants_1.ADDRESSES.ARB_SYS;
43
+ /**
44
+ * Find the L1 transaction that executed the L2→L1 message (OutBox execution).
45
+ * Uses the message position to match OutBoxTransactionExecuted events.
46
+ *
47
+ * This transaction is important because:
48
+ * 1. It confirms the L2→L1 message was executed
49
+ * 2. It contains the CallScheduled event for the L1 timelock operation
50
+ */
51
+ async function findOutboxExecutionTransaction(messagePosition, l2Provider, l1Provider, options) {
52
+ const { blockNumber: currentBlock } = await (0, timing_1.getCurrentBlockInfo)(l1Provider);
53
+ // Get the Outbox address from Arbitrum network config
54
+ let outboxAddress;
55
+ try {
56
+ const network = await (0, sdk_1.getArbitrumNetwork)(l2Provider);
57
+ outboxAddress = network.ethBridge.outbox;
58
+ }
59
+ catch {
60
+ outboxAddress = constants_1.ADDRESSES.ARB1_OUTBOX;
61
+ }
62
+ const executedTopic = abis_1.outboxInterface.getEventTopic("OutBoxTransactionExecuted");
63
+ // Filter by destination = L1 Timelock (indexed)
64
+ const toTopic = ethers_1.ethers.utils.hexZeroPad(constants_1.ADDRESSES.L1_TIMELOCK.toLowerCase(), 32);
65
+ const fromBlock = options.fromBlock;
66
+ const toBlock = options.toBlock ?? currentBlock;
67
+ logStage("searching for OutBox execution: position=%s fromBlock=%d toBlock=%d", messagePosition.toString(), fromBlock, toBlock);
68
+ const result = await (0, log_search_1.searchLogsInChunks)(l1Provider, {
69
+ address: outboxAddress,
70
+ topics: [executedTopic, toTopic],
71
+ fromBlock,
72
+ toBlock,
73
+ }, {
74
+ chunkSize: options.chunkSize ?? 1000,
75
+ delayBetweenChunks: 100,
76
+ earlyExitCheck: (chunkLogs) => {
77
+ for (const log of chunkLogs) {
78
+ try {
79
+ const parsed = abis_1.outboxInterface.parseLog(log);
80
+ if (parsed.args.transactionIndex.eq(messagePosition)) {
81
+ return log;
82
+ }
83
+ }
84
+ catch {
85
+ // Continue to next log
86
+ }
87
+ }
88
+ return undefined;
89
+ },
90
+ });
91
+ if (result.matchedLog) {
92
+ logStage("found OutBox execution tx=%s block=%d", result.matchedLog.transactionHash, result.matchedLog.blockNumber);
93
+ return {
94
+ hash: result.matchedLog.transactionHash,
95
+ blockNumber: result.matchedLog.blockNumber,
96
+ };
97
+ }
98
+ return undefined;
99
+ }
100
+ /**
101
+ * Extract all message positions from L2ToL1Tx events in a transaction receipt.
102
+ * The position uniquely identifies each message for matching on L1 OutBox execution.
103
+ */
104
+ function getAllMessagePositionsFromReceipt(receipt) {
105
+ const l2ToL1TxTopic = abis_1.arbSysInterface.getEventTopic("L2ToL1Tx");
106
+ const matchingLogs = (0, log_filters_1.filterLogs)(receipt.logs, {
107
+ topic: l2ToL1TxTopic,
108
+ address: ARB_SYS_ADDRESS,
109
+ });
110
+ return (0, log_filters_1.parseLogsSafe)(matchingLogs, (log) => {
111
+ const parsed = abis_1.arbSysInterface.parseLog(log);
112
+ return parsed.args.position;
113
+ });
114
+ }
115
+ /**
116
+ * Track L2→L1 message stage (Stage 5)
117
+ *
118
+ * Unified tracking of L2→L1 message lifecycle with status:
119
+ * - NOT_STARTED: L2 timelock not executed or no messages found
120
+ * - PENDING: Message sent, in challenge period
121
+ * - READY: Challenge period complete, ready to execute outbox
122
+ * - COMPLETED: Outbox executed (message confirmed on L1)
123
+ * - SKIPPED: L2-only path
124
+ *
125
+ * Returns:
126
+ * - `l1SearchFromBlock` - earliest L1 block where OutBox execution could occur
127
+ * - `outboxExecutionTx` - the OutBox execution transaction (when status is COMPLETED)
128
+ *
129
+ * The OutBox execution transaction is important because it contains both:
130
+ * 1. The confirmation that the L2→L1 message was executed
131
+ * 2. The CallScheduled event for the L1 timelock operation
132
+ */
133
+ async function trackL2ToL1Message(executionTxHash, l2Provider, l1Provider) {
134
+ const builder = new stage_builder_1.StageBuilder("L2_TO_L1_MESSAGE", "L2");
135
+ if (!executionTxHash) {
136
+ return {
137
+ stage: builder.status("NOT_STARTED").build(),
138
+ messages: [],
139
+ messagePositions: [],
140
+ isConfirmed: false,
141
+ isExecuted: false,
142
+ };
143
+ }
144
+ // Get transaction receipt
145
+ const receipt = await (0, rpc_utils_1.queryWithRetry)(() => l2Provider.getTransactionReceipt(executionTxHash));
146
+ if (!receipt) {
147
+ return {
148
+ stage: builder
149
+ .status("NOT_STARTED")
150
+ .data({ reason: "Transaction receipt not found" })
151
+ .build(),
152
+ messages: [],
153
+ messagePositions: [],
154
+ isConfirmed: false,
155
+ isExecuted: false,
156
+ };
157
+ }
158
+ // Extract all message positions for L1 matching
159
+ const messagePositions = getAllMessagePositionsFromReceipt(receipt);
160
+ const messagePosition = messagePositions[0];
161
+ const l2ExecutionBlock = receipt.blockNumber;
162
+ // Wrap receipt for Arbitrum SDK v4
163
+ const childReceipt = new sdk_1.ChildTransactionReceipt(receipt);
164
+ // Get L2→L1 messages from the receipt
165
+ const messages = await childReceipt.getChildToParentMessages(l1Provider);
166
+ if (messages.length === 0) {
167
+ // No L2→L1 messages - this path doesn't go through L1
168
+ return {
169
+ stage: builder.skip("No L2→L1 messages in transaction").build(),
170
+ messages: [],
171
+ messagePositions: [],
172
+ isConfirmed: false,
173
+ isExecuted: false,
174
+ };
175
+ }
176
+ // Store the L2ToL1Tx event for downstream salt computation
177
+ const l2ToL1TxEvent = messages[0].nitroReader.event;
178
+ const l2Timestamp = await (0, base_1.getBlockTimestamp)(receipt.blockNumber, l2Provider);
179
+ // Add data about the messages
180
+ builder.data({
181
+ messageCount: messages.length,
182
+ l2Block: receipt.blockNumber,
183
+ l2TxHash: executionTxHash,
184
+ messagePositions: messagePositions.map((p) => p.toString()),
185
+ hasMultipleMessages: messages.length > 1,
186
+ l2ToL1TxEvent,
187
+ });
188
+ // Warn about multi-message limitation
189
+ if (messages.length > 1) {
190
+ logStage("WARNING: Multiple L2→L1 messages detected (%d messages). " +
191
+ "Only the first message's OutBox execution will be tracked for L1 timelock discovery. " +
192
+ "Downstream stages (L1 timelock, retryables) for messages 2-%d may not be fully tracked. ", messages.length, messages.length);
193
+ }
194
+ // Check status of ALL messages - they may have different states
195
+ const messageStatuses = [];
196
+ for (const message of messages) {
197
+ const status = await (0, rpc_utils_1.queryWithRetry)(() => message.status(l2Provider));
198
+ messageStatuses.push(status);
199
+ }
200
+ const { blockNumber: currentL1Block, timestamp: currentTimestamp } = await (0, timing_1.getCurrentBlockInfo)(l1Provider);
201
+ // Determine aggregate status based on all messages
202
+ const allExecuted = messageStatuses.every((s) => s === sdk_1.ChildToParentMessageStatus.EXECUTED);
203
+ const anyUnconfirmed = messageStatuses.some((s) => s === sdk_1.ChildToParentMessageStatus.UNCONFIRMED);
204
+ const allConfirmedOrExecuted = messageStatuses.every((s) => s === sdk_1.ChildToParentMessageStatus.CONFIRMED || s === sdk_1.ChildToParentMessageStatus.EXECUTED);
205
+ let aggregateStatus;
206
+ if (allExecuted) {
207
+ aggregateStatus = sdk_1.ChildToParentMessageStatus.EXECUTED;
208
+ }
209
+ else if (anyUnconfirmed) {
210
+ aggregateStatus = sdk_1.ChildToParentMessageStatus.UNCONFIRMED;
211
+ }
212
+ else if (allConfirmedOrExecuted) {
213
+ aggregateStatus = sdk_1.ChildToParentMessageStatus.CONFIRMED;
214
+ }
215
+ else {
216
+ aggregateStatus = messageStatuses[0];
217
+ }
218
+ // Get first executable block from unconfirmed messages
219
+ let firstExecutableBlock;
220
+ if (anyUnconfirmed) {
221
+ for (let i = 0; i < messages.length; i++) {
222
+ if (messageStatuses[i] === sdk_1.ChildToParentMessageStatus.UNCONFIRMED) {
223
+ try {
224
+ const blockBN = await (0, rpc_utils_1.queryWithRetry)(() => messages[i].getFirstExecutableBlock(l2Provider));
225
+ if (blockBN) {
226
+ const blockNum = blockBN.toNumber();
227
+ if (!firstExecutableBlock || blockNum < firstExecutableBlock) {
228
+ firstExecutableBlock = blockNum;
229
+ }
230
+ }
231
+ }
232
+ catch (err) {
233
+ // Log the error to help distinguish RPC failures from "not available yet"
234
+ logStage("Warning: failed to get first executable block for message %d: %s", i, err instanceof Error ? err.message : String(err));
235
+ }
236
+ }
237
+ }
238
+ }
239
+ // Build per-message status details
240
+ const messageDetails = messageStatuses.map((status, i) => ({
241
+ index: i,
242
+ status: sdk_1.ChildToParentMessageStatus[status],
243
+ }));
244
+ builder.data({
245
+ status: sdk_1.ChildToParentMessageStatus[aggregateStatus],
246
+ messageDetails,
247
+ firstExecutableBlock,
248
+ currentL1Block,
249
+ });
250
+ // Calculate L1 search block for OutBox execution
251
+ const l1BlockAtL2Execution = await (0, timing_1.getL1BlockForL2Block)(l2Provider, l2ExecutionBlock);
252
+ let l1SearchFromBlock = l1BlockAtL2Execution + constants_1.TIMING.CHALLENGE_PERIOD_BLOCKS_L1;
253
+ // Use firstExecutableBlock if more accurate
254
+ if (firstExecutableBlock && firstExecutableBlock <= currentL1Block) {
255
+ l1SearchFromBlock = firstExecutableBlock;
256
+ logStage("L1 search hint from firstExecutableBlock=%d", firstExecutableBlock);
257
+ }
258
+ let outboxExecutionTx;
259
+ switch (aggregateStatus) {
260
+ case sdk_1.ChildToParentMessageStatus.CONFIRMED:
261
+ // Challenge period complete, ready to execute
262
+ builder
263
+ .status("READY")
264
+ .tx(executionTxHash, receipt.blockNumber, "L2", {
265
+ timestamp: l2Timestamp,
266
+ description: "L2 sent",
267
+ })
268
+ .timing({ startedAt: l2Timestamp });
269
+ break;
270
+ case sdk_1.ChildToParentMessageStatus.EXECUTED:
271
+ // Already executed - find the OutBox execution transaction
272
+ builder.status("COMPLETED").tx(executionTxHash, receipt.blockNumber, "L2", {
273
+ timestamp: l2Timestamp,
274
+ description: "L2 sent",
275
+ });
276
+ if (messagePosition) {
277
+ if (messages.length > 1) {
278
+ logStage("WARNING: Finding OutBox execution for first message only (position=%s). " +
279
+ "%d additional messages have separate OutBox executions that will not be tracked.", messagePosition.toString(), messages.length - 1);
280
+ }
281
+ outboxExecutionTx = await findOutboxExecutionTransaction(messagePosition, l2Provider, l1Provider, { fromBlock: l1SearchFromBlock });
282
+ if (outboxExecutionTx) {
283
+ const timestamp = await (0, base_1.getBlockTimestamp)(outboxExecutionTx.blockNumber, l1Provider);
284
+ builder
285
+ .tx(outboxExecutionTx.hash, outboxExecutionTx.blockNumber, "L1", {
286
+ timestamp,
287
+ description: "L1 confirmed",
288
+ })
289
+ .timing({ startedAt: l2Timestamp });
290
+ }
291
+ }
292
+ break;
293
+ case sdk_1.ChildToParentMessageStatus.UNCONFIRMED:
294
+ // Still in challenge period
295
+ builder.status("PENDING").tx(executionTxHash, receipt.blockNumber, "L2", {
296
+ timestamp: l2Timestamp,
297
+ description: "L2 sent",
298
+ });
299
+ if (firstExecutableBlock) {
300
+ // Ensure remaining time is non-negative (message may already be executable)
301
+ const remainingBlocks = Math.max(0, firstExecutableBlock - currentL1Block);
302
+ const remainingSeconds = remainingBlocks * constants_1.BLOCK_TIMES.L1;
303
+ builder.timing({
304
+ startedAt: l2Timestamp,
305
+ eta: remainingSeconds > 0 ? currentTimestamp + remainingSeconds : undefined,
306
+ delaySeconds: remainingSeconds,
307
+ });
308
+ }
309
+ else {
310
+ builder.timing({
311
+ startedAt: l2Timestamp,
312
+ delaySeconds: constants_1.TIMING.CHALLENGE_PERIOD_BLOCKS_L1 * constants_1.BLOCK_TIMES.L1,
313
+ });
314
+ }
315
+ break;
316
+ default:
317
+ builder.status("NOT_STARTED");
318
+ }
319
+ return {
320
+ stage: builder.build(),
321
+ messages,
322
+ messagePosition,
323
+ messagePositions,
324
+ l2ExecutionBlock,
325
+ isConfirmed: aggregateStatus === sdk_1.ChildToParentMessageStatus.CONFIRMED,
326
+ isExecuted: allExecuted,
327
+ firstExecutableBlock,
328
+ l1SearchFromBlock,
329
+ outboxExecutionTx,
330
+ };
331
+ }
332
+ /**
333
+ * Prepare an L2→L1 message for execution on L1.
334
+ *
335
+ * This generates the Merkle proof required for Outbox execution.
336
+ * The proof is based on current L2 state and should be used promptly.
337
+ */
338
+ async function prepareL2ToL1Message(reader, l2Provider, options = {}) {
339
+ logExecution("Preparing L2→L1 message execution");
340
+ const status = await (0, rpc_utils_1.queryWithRetry)(() => reader.status(l2Provider));
341
+ logExecution("Message status: %s", sdk_1.ChildToParentMessageStatus[status]);
342
+ // Skip state check if force=true for historical validation
343
+ if (!options.force) {
344
+ if (status === sdk_1.ChildToParentMessageStatus.EXECUTED) {
345
+ return (0, base_1.failPrepare)("Message already executed");
346
+ }
347
+ if (status !== sdk_1.ChildToParentMessageStatus.CONFIRMED) {
348
+ return (0, base_1.failPrepare)(`Message not ready. Status: ${sdk_1.ChildToParentMessageStatus[status]}, expected: CONFIRMED`);
349
+ }
350
+ }
351
+ // Get the outbox proof - this is the expensive part
352
+ logExecution("Generating outbox proof...");
353
+ const proof = await reader.getOutboxProof(l2Provider);
354
+ // Access event data from the Nitro reader
355
+ const event = reader.event;
356
+ // Get outbox address from options or fall back to default
357
+ const outboxAddress = options.outboxAddress ?? constants_1.ADDRESSES.ARB1_OUTBOX;
358
+ if (!outboxAddress) {
359
+ return (0, base_1.failPrepare)("Could not determine outbox address");
360
+ }
361
+ // Encode the executeTransaction call
362
+ const calldata = abis_1.outboxExecuteInterface.encodeFunctionData("executeTransaction", [
363
+ proof,
364
+ event.position,
365
+ event.caller,
366
+ event.destination,
367
+ event.arbBlockNum,
368
+ event.ethBlockNum,
369
+ event.timestamp,
370
+ event.callvalue,
371
+ event.data,
372
+ ]);
373
+ return {
374
+ success: true,
375
+ prepared: {
376
+ to: outboxAddress,
377
+ data: calldata,
378
+ value: "0",
379
+ chain: "L1",
380
+ description: `Execute L2→L1 message #${event.position.toString()} via Outbox`,
381
+ },
382
+ };
383
+ }
384
+ /**
385
+ * Get all L2→L1 messages from a transaction
386
+ */
387
+ async function getL2ToL1Messages(l2TxHash, l2Provider, l1Provider) {
388
+ const receipt = await (0, rpc_utils_1.queryWithRetry)(() => l2Provider.getTransactionReceipt(l2TxHash));
389
+ if (!receipt) {
390
+ return [];
391
+ }
392
+ const childReceipt = new sdk_1.ChildTransactionReceipt(receipt);
393
+ return childReceipt.getChildToParentMessages(l1Provider);
394
+ }
395
+ /**
396
+ * Prepare all L2→L1 messages from a stage for execution.
397
+ *
398
+ * Note: This uses internal SDK types. For simpler usage, consumers can use
399
+ * the SDK's ChildToParentMessageWriter.execute() method directly.
400
+ */
401
+ async function prepareL2ToL1MessageStage(stage, l2Provider, l1Provider, options = {}) {
402
+ const validationError = (0, stage_helpers_1.validateStageForSimpleBulk)(stage, { force: options.force });
403
+ if (validationError)
404
+ return validationError;
405
+ const stageData = (0, types_1.getStageData)(stage, "L2_TO_L1_MESSAGE");
406
+ if (!stageData?.l2TxHash)
407
+ return (0, stage_helpers_1.simpleBulkError)("L2 transaction hash not found");
408
+ const readers = await getL2ToL1Messages(stageData.l2TxHash, l2Provider, l1Provider);
409
+ if (readers.length === 0)
410
+ return (0, stage_helpers_1.simpleBulkError)("No L2→L1 messages found");
411
+ // Resolve outbox address
412
+ let outboxAddress = options.outboxAddress;
413
+ if (!outboxAddress) {
414
+ const network = await (0, sdk_1.getArbitrumNetwork)(l2Provider);
415
+ outboxAddress = network.ethBridge.outbox;
416
+ }
417
+ logExecution("Preparing %d L2→L1 messages", readers.length);
418
+ const prepareOptions = { ...options, outboxAddress };
419
+ const results = await Promise.all(readers.map((reader) => prepareL2ToL1Message(reader.nitroReader, l2Provider, prepareOptions)));
420
+ return { total: readers.length, results };
421
+ }
422
+ //# sourceMappingURL=l2-to-l1-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"l2-to-l1-message.js","sourceRoot":"","sources":["../../src/stages/l2-to-l1-message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Proposal Created Stage Tracking
3
+ *
4
+ * Stage 1: Track ProposalCreated event from Governor contract
5
+ */
6
+ import { ethers } from "ethers";
7
+ import { ProposalData, TrackedStage } from "../types";
8
+ /**
9
+ * Track proposal creation stage
10
+ *
11
+ * Entry point: Governor address + proposalId or creationTxHash
12
+ */
13
+ export declare function trackProposalCreated(governorAddress: string, proposalId: string, provider: ethers.providers.Provider, options?: {
14
+ creationTxHash?: string;
15
+ fromBlock?: number;
16
+ }): Promise<{
17
+ stage: TrackedStage;
18
+ proposalData: ProposalData | null;
19
+ }>;
20
+ //# sourceMappingURL=proposal-created.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-created.d.ts","sourceRoot":"","sources":["../../src/stages/proposal-created.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAUtD;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,OAAO,CAAC;IACT,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC,CAAC,CAiDD"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * Proposal Created Stage Tracking
4
+ *
5
+ * Stage 1: Track ProposalCreated event from Governor contract
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.trackProposalCreated = trackProposalCreated;
9
+ const constants_1 = require("../constants");
10
+ const governor_discovery_1 = require("../discovery/governor-discovery");
11
+ const base_1 = require("./base");
12
+ const stage_builder_1 = require("./stage-builder");
13
+ /**
14
+ * Track proposal creation stage
15
+ *
16
+ * Entry point: Governor address + proposalId or creationTxHash
17
+ */
18
+ async function trackProposalCreated(governorAddress, proposalId, provider, options = {}) {
19
+ const builder = new stage_builder_1.StageBuilder("PROPOSAL_CREATED", "L2");
20
+ // Detect governor type
21
+ const proposalType = (0, governor_discovery_1.detectProposalType)(governorAddress);
22
+ builder.data({ proposalType });
23
+ // Try to find proposal data
24
+ let proposalData = null;
25
+ // Fast path: use creation tx hash if provided
26
+ if (options.creationTxHash) {
27
+ proposalData = await (0, governor_discovery_1.findProposalByTxHash)(options.creationTxHash, provider);
28
+ }
29
+ // Fallback: search for ProposalCreated event
30
+ if (!proposalData) {
31
+ proposalData = await (0, governor_discovery_1.findProposalCreatedEvent)(governorAddress, proposalId, provider, {
32
+ startBlock: options.fromBlock ?? constants_1.GOVERNANCE_START_BLOCKS.L2,
33
+ });
34
+ }
35
+ if (proposalData) {
36
+ // Stage completed - proposal was created
37
+ const valuesArray = Array.from(proposalData.values);
38
+ const timestamp = await (0, base_1.getBlockTimestamp)(proposalData.creationBlock, provider);
39
+ builder
40
+ .status("COMPLETED")
41
+ .tx(proposalData.creationTxHash, proposalData.creationBlock, "L2", { timestamp })
42
+ .timing({ startedAt: timestamp })
43
+ .data({
44
+ proposalId: proposalData.proposalId,
45
+ proposer: proposalData.proposer,
46
+ description: proposalData.description,
47
+ startBlock: proposalData.startBlock.toString(),
48
+ endBlock: proposalData.endBlock.toString(),
49
+ targetCount: proposalData.targets.length,
50
+ targets: proposalData.targets,
51
+ values: valuesArray.map((v) => v.toString()),
52
+ signatures: proposalData.signatures,
53
+ calldatas: proposalData.calldatas,
54
+ });
55
+ }
56
+ else {
57
+ // Proposal not found - either not created yet or invalid
58
+ builder.status("NOT_STARTED");
59
+ }
60
+ return { stage: builder.build(), proposalData };
61
+ }
62
+ //# sourceMappingURL=proposal-created.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-created.js","sourceRoot":"","sources":["../../src/stages/proposal-created.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAkBH,oDA4DC;AA1ED,4CAAuD;AACvD,wEAIyC;AACzC,iCAA2C;AAC3C,mDAA+C;AAE/C;;;;GAIG;AACI,KAAK,UAAU,oBAAoB,CACxC,eAAuB,EACvB,UAAkB,EAClB,QAAmC,EACnC,UAGI,EAAE;IAKN,MAAM,OAAO,GAAG,IAAI,4BAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAE3D,uBAAuB;IACvB,MAAM,YAAY,GAAG,IAAA,uCAAkB,EAAC,eAAe,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;IAE/B,4BAA4B;IAC5B,IAAI,YAAY,GAAwB,IAAI,CAAC;IAE7C,8CAA8C;IAC9C,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,YAAY,GAAG,MAAM,IAAA,yCAAoB,EAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAED,6CAA6C;IAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,MAAM,IAAA,6CAAwB,EAAC,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE;YACnF,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,mCAAuB,CAAC,EAAE;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,yCAAyC;QACzC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,IAAA,wBAAiB,EAAC,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAEhF,OAAO;aACJ,MAAM,CAAC,WAAW,CAAC;aACnB,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,YAAY,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC;aAChF,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;aAChC,IAAI,CAAC;YACJ,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE;YAC9C,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC1C,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM;YACxC,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5C,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,SAAS,EAAE,YAAY,CAAC,SAAS;SAClC,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACN,yDAAyD;QACzD,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC;AAClD,CAAC"}