@sig-net/midnight 0.22.0-rc.4 → 0.22.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/README.md CHANGED
@@ -64,6 +64,7 @@ What clients import from `@sig-net/midnight`:
64
64
  | Task | Exports |
65
65
  |---|---|
66
66
  | Poll for the MPC's responses and verify them (runtime steps 2 to 4) | `SignetRequestResponseReader`: one reader per contract and Signet singleton pair. Its getters `getVerifiedSignatureRespondedEvent`, `getSignedEvmTransaction` and `getVerifiedRespondBidirectionalEvent` map to steps 2, 3 and 4. |
67
+ | Verify responses over events already in hand (explorers, anything that streams the history once) | Decode the stream once with `tryDecodeSignetEvent`, then `reader.verifySignatureRespondedEvents(requestId, expectedSigner, events)` and `findVerifiedRespondBidirectionalEvent(requestId, serializedOutput, mpcResponseKey, events)` judge a request's posts without another walk of the event history. `signetEventRecordsOf` is the routing step both share. |
67
68
  | Derive the key the MPC signs your requests with | `deriveEvmAddress`: the expected signer address checked in step 2 (see [Derived keys](https://github.com/sig-net/midnight-integration/blob/main/README.md#derived-keys)). |
68
69
  | Derive the response key your deploy pins | `deriveMidnightResponseKey`: the key `initialise` stores (setup step 4), derived from your contract's address. |
69
70
  | Look up published counterparty values | `MidnightNetwork`, `getMpcRootPublicKey` and `getSignetContractAddress`: the fixed per-network values (see the notes in [Runtime](https://github.com/sig-net/midnight-integration/blob/main/README.md#runtime)). |
@@ -75,7 +76,7 @@ What clients import from `@sig-net/midnight`:
75
76
  | Read the attested output bytes from the MPC's output cache | `MpcOutputCacheReader`: one reader per network and Signet singleton pair, over the public bucket an MPC configured with output storage writes each request's exact attested bytes to before posting, defaulting to the bucket `getMpcOutputCacheUrl` publishes for the network. `fetchSerializedOutput` yields the bytes step 5 verifies, `undefined` while the object is not written yet. |
76
77
  | Verify attestations without the reader | `verifyRespondBidirectionalSignature`: the check the reader runs internally, exposed for custom pipelines. |
77
78
  | Mint attestations in your contract's unit tests | The `@sig-net/midnight/testing` entry point, see [Testing entry point](#testing-entry-point). |
78
- | Discover requests MPC-side (responders, background workers) | The discovery primitives: decode the signet contract's emitted notification events with `decodeSignBidirectionalEventNotificationPayload` and `decodeSignBidirectionalNotification`, then resolve each pointer against the named caller's own request map with `lookupSignetRequestAt` (the authenticated read). The polling loop belongs to the responder. |
79
+ | Discover requests MPC-side (responders, background workers) | The discovery primitives: decode the signet contract's emitted notification events with `decodeSignetEventNamed(event, SignetEventName.SignBidirectionalEvent)` (or every kind at once with `decodeSignetEvent`, which throws on an undecodable payload anyone can emit, or its non-throwing sibling `tryDecodeSignetEvent`), then resolve each pointer against the named caller's own request map with `lookupSignetRequestAt` (the authenticated read). The polling loop belongs to the responder. |
79
80
  | Call the compiled protocol circuits | `pureCircuits`: the compiled circuits of `Signet.compact`, for example the notification packer. Off-chain code calls these compiled artefacts, so it always agrees with what the contracts prove. |
80
81
 
81
82
  ### Testing entry point
package/dist/constants.js CHANGED
@@ -81,9 +81,9 @@ export var MidnightNetwork;
81
81
  // makes getMpcRootPublicKey throw for that network.
82
82
  const mpcRootPublicKeys = {
83
83
  [MidnightNetwork.Stagenet]:
84
- // Canonical form of the signet.js TESTNET_DEV root key:
85
- // secp256k1:54hU5wcCmVUPFWLDALXMh1fFToZsVXrx9BbTbHzSfQq1Kd1rJZi52iPa4QQxo6s5TgjWqgpY8HamYuUDzG6fAaUq
86
- "0x04cb41bab8bc97121f4902514ca57a284f167b9239ecb8176831d1ef0fede87c61ca3e59da1c194aa90108098a9e5cdc55d3b3297cdefbc085ffafd0f2c34ae61a",
84
+ // Canonical form of the signet.js TESTNET root key:
85
+ // secp256k1:3Ww8iFjqTHufye5aRGUvrQqETegR4gVUcW8FX5xzscaN9ENhpkffojsxJwi6N1RbbHMTxYa9UyKeqK3fsMuwxjR5
86
+ "0x047dd8ecafa5d9c921485b6ac33476870e98c3378e395f3c8fae92ce4943d8432847f591ab25ca454effb522ec2eaf04b7e1c83ba65ae731ea98dd52eb7d458dd4",
87
87
  [MidnightNetwork.Preview]: "",
88
88
  [MidnightNetwork.Preprod]: "",
89
89
  [MidnightNetwork.Mainnet]: "",
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type LogEvent } from "@midnight-ntwrk/compact-runtime";
2
+ import { type RequestIdHex } from "./signet-requests.ts";
2
3
  /**
3
4
  * The event names the signet contract emits, exactly as the contract's
4
5
  * `emit` literals spell them (the on-wire name is this string NUL-padded to
@@ -27,21 +28,47 @@ export interface SignetMiscEvent {
27
28
  /** The packed payload, re-padded to {@link SIGNET_EVENT_PAYLOAD_LENGTH} bytes. */
28
29
  payload: Uint8Array;
29
30
  }
31
+ /**
32
+ * A {@link SignetMiscEvent} read through the indexer, carrying the indexer's
33
+ * event cursor and where on chain the event was emitted, so a consumer can
34
+ * dedup, resume, show progress against the tip, say when the event happened
35
+ * and link it to its transaction. The simulator path
36
+ * ({@link decodeSignetLogEvents}) has none of this and yields plain
37
+ * {@link SignetMiscEvent}s.
38
+ */
39
+ export interface IndexedSignetMiscEvent extends SignetMiscEvent {
40
+ /** The indexer's global event cursor, ascending in emission order. */
41
+ id: number;
42
+ /** The highest event id the indexer knew when the event's page was served. */
43
+ maxId: number;
44
+ /** Indexer row id of the emitting transaction. For the chain's id see {@link transactionHash}. */
45
+ transactionId: number;
46
+ /** Hash of the emitting transaction, lowercase hex, no `0x` prefix. */
47
+ transactionHash: string;
48
+ /** Height of the block holding the emitting transaction. */
49
+ blockHeight: number;
50
+ /** Hash of that block, lowercase hex, no `0x` prefix. */
51
+ blockHash: string;
52
+ /** When that block was produced. */
53
+ blockTimestamp: Date;
54
+ }
30
55
  /**
31
56
  * Source of the signet contract's emitted events, the event-side sibling of
32
- * `SignetPublicStateSource`. Structural, so tests can stub it. Adapt a
33
- * full midnight-js `PublicDataProvider` with
34
- * {@link signetEventSourceFromPublicDataProvider}.
57
+ * `SignetPublicStateSource`. Structural, so tests can stub it with a stream
58
+ * over fixtures. Read a live indexer with {@link signetEventSourceFromIndexer},
59
+ * which yields {@link IndexedSignetMiscEvent}s.
35
60
  */
36
- export interface SignetEventSource {
61
+ export interface SignetEventSource<TEvent extends SignetMiscEvent = SignetMiscEvent> {
37
62
  /**
38
- * Fetch every signet event the contract has emitted so far, in emission
39
- * order.
63
+ * Stream every signet event the contract has emitted so far, oldest
64
+ * first. Events arrive one indexer page at a time: a page's events are
65
+ * yielded before the next page is requested, so a consumer sees progress
66
+ * per page, and leaving the `for await` loop early stops further requests.
40
67
  *
41
68
  * @param contractAddress - The signet contract to read events of.
42
69
  * @returns The decoded events, oldest first.
43
70
  */
44
- querySignetEvents(contractAddress: string): Promise<SignetMiscEvent[]>;
71
+ streamSignetEvents(contractAddress: string): AsyncIterable<TEvent>;
45
72
  }
46
73
  /**
47
74
  * Whether a decoded event carries `name`.
@@ -70,7 +97,7 @@ export declare function decodeSignetEventName(name: Uint8Array): string;
70
97
  /**
71
98
  * Decode the simulator's circuit-execution log into signet events. For
72
99
  * simulator tests. The indexer-path counterpart is
73
- * {@link signetEventSourceFromPublicDataProvider}.
100
+ * {@link signetEventSourceFromIndexer}.
74
101
  *
75
102
  * @param events - The `context.events` of a `CircuitResults`.
76
103
  * @param contractAddress - Optional filter: only events this contract emitted.
@@ -79,49 +106,24 @@ export declare function decodeSignetEventName(name: Uint8Array): string;
79
106
  * name ++ payload width.
80
107
  */
81
108
  export declare function decodeSignetLogEvents(events: readonly LogEvent[], contractAddress?: string): SignetMiscEvent[];
82
- /**
83
- * The least of a midnight-js `PublicDataProvider` the event source adapter
84
- * needs: the `Misc` contract events of one address. Structural, so any full
85
- * provider is assignable.
86
- */
87
- export interface SignetContractEventQuerySource {
88
- /**
89
- * Retrieve one page of a contract's events: see
90
- * `PublicDataProvider.queryContractEvents`. Callers MUST pass `page` and
91
- * keep requesting until a short page: a provider caps an un-paged call at
92
- * its default page size (midnight-js: 100), silently truncating a busy
93
- * contract's history.
94
- *
95
- * @param filter - The contract address and event-type narrowing.
96
- * @param filter.contractAddress - The contract whose events to read.
97
- * @param filter.types - Event types to keep; omit for all of them.
98
- * @param page - The window to read: `limit` events starting at `offset`.
99
- * @param page.limit - Maximum events to return.
100
- * @param page.offset - Events to skip from the start of the history.
101
- * @returns The matching events in the window, oldest first.
102
- */
103
- queryContractEvents(filter: {
104
- contractAddress: string;
105
- types?: "Misc"[];
106
- }, page: {
107
- limit: number;
108
- offset: number;
109
- }): Promise<{
110
- eventType: string;
111
- name?: string;
112
- payload?: string;
113
- }[]>;
109
+ /** Where {@link signetEventSourceFromIndexer} reads the signet contract's events from. */
110
+ export interface SignetIndexerConfig {
111
+ /** The indexer's GraphQL query endpoint over HTTP, e.g. `https://<indexer>/api/v4/graphql`. */
112
+ readonly queryUrl: string;
114
113
  }
115
114
  /**
116
- * Adapt a midnight-js `PublicDataProvider` (or anything exposing its
117
- * `queryContractEvents`) into a {@link SignetEventSource}. Each event's name
118
- * is NUL-trimmed and its payload re-padded to the full
119
- * {@link SIGNET_EVENT_PAYLOAD_LENGTH}.
115
+ * Read the signet contract's events from a Midnight indexer. The stream
116
+ * pages the indexer by offset and pins its end to the tip (`maxId`) of the
117
+ * first page, so the walk is a point-in-time snapshot that ends even while
118
+ * the contract keeps emitting: rows past that tip are dropped. The contract
119
+ * address is parsed with {@link contractAddressFromHex} before the first
120
+ * request, so a malformed one fails without a round trip, and a `0x`
121
+ * prefixed one reaches the indexer as the bare hex it expects.
120
122
  *
121
- * @param provider - The provider to query events through.
122
- * @returns The adapted event source.
123
+ * @param config - Where the indexer is.
124
+ * @returns The event source.
123
125
  */
124
- export declare function signetEventSourceFromPublicDataProvider(provider: SignetContractEventQuerySource): SignetEventSource;
126
+ export declare function signetEventSourceFromIndexer(config: SignetIndexerConfig): SignetEventSource<IndexedSignetMiscEvent>;
125
127
  /**
126
128
  * A curve point in affine coordinates (Compact `AffinePoint`), SEC1
127
129
  * big-endian, the same shape the sig-net EVM and Solana signer contracts
@@ -231,8 +233,14 @@ export declare function decodeSignBidirectionalEventNotificationPayload(payload:
231
233
  * authority.
232
234
  */
233
235
  export interface SignBidirectionalNotification {
234
- /** Payload layout tag: this decoder only produces version 1. */
235
- version: number;
236
+ /**
237
+ * Payload layout tag, the literal of the one layout this decoder produces.
238
+ * A second layout joins as its own interface with its own literal, making
239
+ * the decoded notification a union discriminated on `version`, so every
240
+ * consumer gets a compile error where it must handle the new layout. Keep
241
+ * this a literal: widening it to `number` gives that error away.
242
+ */
243
+ version: 1;
236
244
  /**
237
245
  * Address of the contract whose request map holds the request, rendered
238
246
  * as lowercase hex, no `0x` prefix: directly usable as a
@@ -265,4 +273,108 @@ export interface SignBidirectionalNotification {
265
273
  * or its `requestsPathDepth` is zero or exceeds {@link MAX_LEDGER_PATH_DEPTH}.
266
274
  */
267
275
  export declare function decodeSignBidirectionalNotification(record: SignBidirectionalNotificationRecord): SignBidirectionalNotification;
276
+ /**
277
+ * The decoded record each signet event kind posts, keyed by the event's
278
+ * name: what {@link DecodedSignetEventNamed} carries as `record`.
279
+ */
280
+ export interface SignetEventRecords {
281
+ /** The flat pointer to the stored request (the notification fully decoded). */
282
+ [SignetEventName.SignBidirectionalEvent]: SignBidirectionalNotification;
283
+ /** The MPC's signature over the requested transaction. */
284
+ [SignetEventName.SignatureRespondedEvent]: SignatureRespondedEvent;
285
+ /** The MPC's attestation of the foreign execution. */
286
+ [SignetEventName.RespondBidirectionalEvent]: RespondBidirectionalEvent;
287
+ }
288
+ /**
289
+ * A signet event of kind `TName` in decoded form: a discriminated union over
290
+ * `name`, so narrowing on it narrows `record`. `TEvent` is the shape the
291
+ * event was read in, so an {@link IndexedSignetMiscEvent} keeps its indexer
292
+ * cursor across the decode. Everything here is UNAUTHENTICATED: each record
293
+ * type's own doc names its authenticity check. A shared `requestId` links
294
+ * nothing by itself: events grouped by it are a request, signature and
295
+ * attestation lifecycle only once the request is read from the caller's own
296
+ * ledger with `lookupSignetRequestAt` and each post verifies against it.
297
+ */
298
+ export type DecodedSignetEventNamed<TName extends SignetEventName, TEvent extends SignetMiscEvent = SignetMiscEvent> = {
299
+ [Name in TName]: {
300
+ /** The event kind: the discriminant `record` narrows on. */
301
+ name: Name;
302
+ /** The request id the post declares it concerns. Routing data only. */
303
+ requestId: RequestIdHex;
304
+ /** The posted record, decoded. */
305
+ record: SignetEventRecords[Name];
306
+ /** The event as its source served it: the undecoded payload, and the cursor when indexed. */
307
+ source: TEvent;
308
+ };
309
+ }[TName];
310
+ /** A signet event of any kind in decoded form: see {@link DecodedSignetEventNamed}. */
311
+ export type DecodedSignetEvent<TEvent extends SignetMiscEvent = SignetMiscEvent> = DecodedSignetEventNamed<SignetEventName, TEvent>;
312
+ /**
313
+ * Decode `event` as the signet event kind `name`, or skip it when it carries
314
+ * another name. The name is checked BEFORE the payload is touched, which is
315
+ * what a reader of one kind needs: the signet contract is unauthenticated,
316
+ * so anyone can emit an undecodable event of another kind, and that must not
317
+ * fail a read that never asked for it.
318
+ *
319
+ * @param event - The signet event as its source served it.
320
+ * @param name - The event kind to decode.
321
+ * @returns The decoded event, or `undefined` when `event` is not a `name` event.
322
+ * @throws {Error} When `event` is a `name` event whose payload does not decode
323
+ * (see the payload decoder of that kind).
324
+ */
325
+ export declare function decodeSignetEventNamed<TName extends SignetEventName, TEvent extends SignetMiscEvent>(event: TEvent, name: TName): DecodedSignetEventNamed<TName, TEvent> | undefined;
326
+ /**
327
+ * Decode `event` by whichever signet event name it carries. What to do with
328
+ * an event that is not a signet event, or that does not decode, is the
329
+ * caller's policy: a responder skips both, an explorer shows both.
330
+ *
331
+ * WARNING: this THROWS on input anyone can put on chain. The signet contract
332
+ * is unauthenticated, so a `SignBidirectionalEvent` with an unsupported
333
+ * version or a zero path depth costs its sender one transaction. A loop over
334
+ * a live stream must catch, or use {@link tryDecodeSignetEvent}.
335
+ *
336
+ * @param event - The signet event as its source served it.
337
+ * @returns The decoded event, or `undefined` when `event`'s name is not a
338
+ * {@link SignetEventName}.
339
+ * @throws {Error} When the named kind's payload does not decode.
340
+ */
341
+ export declare function decodeSignetEvent<TEvent extends SignetMiscEvent>(event: TEvent): DecodedSignetEvent<TEvent> | undefined;
342
+ /**
343
+ * The outcome of {@link tryDecodeSignetEvent} on a signet event: the decoded
344
+ * event, or the event that did not decode beside the decoder's reason.
345
+ */
346
+ export type SignetEventDecodeResult<TEvent extends SignetMiscEvent = SignetMiscEvent> = {
347
+ /** The payload decoded. */
348
+ ok: true;
349
+ /** The decoded event. */
350
+ event: DecodedSignetEvent<TEvent>;
351
+ } | {
352
+ /** The payload did not decode. */
353
+ ok: false;
354
+ /** The event as its source served it. */
355
+ source: TEvent;
356
+ /** The payload decoder's error message. */
357
+ reason: string;
358
+ };
359
+ /**
360
+ * {@link decodeSignetEvent} without the throw: an undecodable payload comes
361
+ * back as a result to inspect. It reports the failure and leaves the policy
362
+ * (skip it, show it, count it) to the caller.
363
+ *
364
+ * @param event - The signet event as its source served it.
365
+ * @returns The decode result, or `undefined` when `event`'s name is not a
366
+ * {@link SignetEventName}.
367
+ */
368
+ export declare function tryDecodeSignetEvent<TEvent extends SignetMiscEvent>(event: TEvent): SignetEventDecodeResult<TEvent> | undefined;
369
+ /**
370
+ * The records of kind `name` that declare `requestId`, out of decoded events
371
+ * already in hand, in the order given. The routing step of every per-request
372
+ * read: it selects by the UNAUTHENTICATED declared id and verifies nothing.
373
+ *
374
+ * @param events - Decoded signet events of any kinds.
375
+ * @param name - The event kind to keep.
376
+ * @param requestId - The request id the kept events must declare.
377
+ * @returns The kept events' records.
378
+ */
379
+ export declare function signetEventRecordsOf<TName extends SignetEventName>(events: readonly DecodedSignetEvent[], name: TName, requestId: RequestIdHex): SignetEventRecords[TName][];
268
380
  //# sourceMappingURL=signet-contract-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signet-contract-events.d.ts","sourceRoot":"","sources":["../src/signet-contract-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signet-contract-events.d.ts","sourceRoot":"","sources":["../src/signet-contract-events.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@
14
14
  import { CompactTypeBytes } from "@midnight-ntwrk/compact-runtime";
15
15
  import { bytesToHex, hexToBytes } from "./byte-codecs.js";
16
16
  import { decodeExactly } from "./compact-descriptors.js";
17
+ import { contractAddressFromHex, requestIdHex } from "./signet-requests.js";
17
18
  /**
18
19
  * The event names the signet contract emits, exactly as the contract's
19
20
  * `emit` literals spell them (the on-wire name is this string NUL-padded to
@@ -67,7 +68,7 @@ export function decodeSignetEventName(name) {
67
68
  /**
68
69
  * Decode the simulator's circuit-execution log into signet events. For
69
70
  * simulator tests. The indexer-path counterpart is
70
- * {@link signetEventSourceFromPublicDataProvider}.
71
+ * {@link signetEventSourceFromIndexer}.
71
72
  *
72
73
  * @param events - The `context.events` of a `CircuitResults`.
73
74
  * @param contractAddress - Optional filter: only events this contract emitted.
@@ -96,43 +97,135 @@ export function decodeSignetLogEvents(events, contractAddress) {
96
97
  return out;
97
98
  }
98
99
  /**
99
- * Adapt a midnight-js `PublicDataProvider` (or anything exposing its
100
- * `queryContractEvents`) into a {@link SignetEventSource}. Each event's name
101
- * is NUL-trimmed and its payload re-padded to the full
102
- * {@link SIGNET_EVENT_PAYLOAD_LENGTH}.
100
+ * The events query, written against the indexer v4 schema. It selects the
101
+ * `transaction` relation, which is what carries the emitting transaction's
102
+ * hash and its block.
103
+ */
104
+ const SIGNET_CONTRACT_EVENTS_QUERY = `
105
+ query SignetContractEvents($filter: ContractEventFilter!, $limit: Int, $offset: Int) {
106
+ contractEvents(filter: $filter, limit: $limit, offset: $offset) {
107
+ __typename
108
+ id
109
+ maxId
110
+ transactionId
111
+ transaction { hash block { height hash timestamp } }
112
+ ... on MiscContractEvent { name payload }
113
+ }
114
+ }
115
+ `;
116
+ /** The `__typename` of the one contract event variant the signet contract emits. */
117
+ const MISC_CONTRACT_EVENT_TYPENAME = "MiscContractEvent";
118
+ /** Events requested per page: the page size midnight-js's own contract events query defaults to. */
119
+ const EVENT_PAGE_LIMIT = 100;
120
+ /**
121
+ * Normalise one indexer row into a signet event: the name NUL-trimmed and
122
+ * the payload re-padded to the full {@link SIGNET_EVENT_PAYLOAD_LENGTH}
123
+ * (the indexer trims a stored atom's trailing zeros).
103
124
  *
104
- * @param provider - The provider to query events through.
105
- * @returns The adapted event source.
125
+ * @param row - The row as the indexer served it.
126
+ * @returns The signet event, or `undefined` when the row is not a `Misc` event.
127
+ * @throws {Error} When a `Misc` row lacks a field the query selects, or its
128
+ * name or payload is not a hex byte string.
106
129
  */
107
- export function signetEventSourceFromPublicDataProvider(provider) {
130
+ function signetMiscEventFromIndexerRow(row) {
131
+ if (row.__typename !== MISC_CONTRACT_EVENT_TYPENAME)
132
+ return undefined;
133
+ const { id, maxId, transactionId, name, payload } = row;
134
+ const transactionHash = row.transaction?.hash;
135
+ const block = row.transaction?.block;
136
+ if (id === undefined ||
137
+ maxId === undefined ||
138
+ transactionId === undefined ||
139
+ name === undefined ||
140
+ payload === undefined ||
141
+ transactionHash === undefined ||
142
+ block?.height === undefined ||
143
+ block.hash === undefined ||
144
+ block.timestamp === undefined) {
145
+ throw new Error(`the indexer served a malformed Misc contract event: ${JSON.stringify(row)}`);
146
+ }
147
+ const padded = new Uint8Array(SIGNET_EVENT_PAYLOAD_LENGTH);
148
+ padded.set(hexToBytes(payload).slice(0, SIGNET_EVENT_PAYLOAD_LENGTH), 0);
108
149
  return {
109
- async querySignetEvents(contractAddress) {
110
- // Page until a short page: a single un-paged read caps at the
111
- // provider's default page size and silently truncates a busy signet's
112
- // history, starving every consumer of the events past the cap.
113
- const events = [];
114
- const pageLimit = 100;
115
- for (let pageOffset = 0;; pageOffset += pageLimit) {
116
- const page = await provider.queryContractEvents({ contractAddress, types: ["Misc"] }, { limit: pageLimit, offset: pageOffset });
117
- events.push(...page);
118
- if (page.length < pageLimit)
119
- break;
120
- }
121
- const out = [];
122
- for (const event of events) {
123
- if (event.eventType !== "Misc")
124
- continue;
125
- if (event.name === undefined || event.payload === undefined)
126
- continue;
127
- const payload = hexToBytes(event.payload);
128
- const padded = new Uint8Array(SIGNET_EVENT_PAYLOAD_LENGTH);
129
- padded.set(payload.slice(0, SIGNET_EVENT_PAYLOAD_LENGTH), 0);
130
- out.push({
131
- name: decodeSignetEventName(hexToBytes(event.name)),
132
- payload: padded,
133
- });
150
+ name: decodeSignetEventName(hexToBytes(name)),
151
+ payload: padded,
152
+ id,
153
+ maxId,
154
+ transactionId,
155
+ transactionHash,
156
+ blockHeight: block.height,
157
+ blockHash: block.hash,
158
+ blockTimestamp: new Date(block.timestamp),
159
+ };
160
+ }
161
+ /**
162
+ * Fetch one page of a contract's `Misc` events from the indexer.
163
+ *
164
+ * @param queryUrl - The indexer's GraphQL query endpoint.
165
+ * @param contractAddress - The contract whose events to read.
166
+ * @param offset - Events to skip from the start of the history.
167
+ * @returns The page's rows, oldest first.
168
+ * @throws {Error} When the indexer cannot be reached, answers a status other
169
+ * than 200, rejects the query, or answers without a page.
170
+ */
171
+ async function fetchContractEventPage(queryUrl, contractAddress, offset) {
172
+ const response = await fetch(queryUrl, {
173
+ method: "POST",
174
+ headers: { "content-type": "application/json" },
175
+ body: JSON.stringify({
176
+ query: SIGNET_CONTRACT_EVENTS_QUERY,
177
+ variables: {
178
+ filter: { contractAddress, types: ["MISC"] },
179
+ limit: EVENT_PAGE_LIMIT,
180
+ offset,
181
+ },
182
+ }),
183
+ });
184
+ if (!response.ok) {
185
+ throw new Error(`indexer answered HTTP ${String(response.status)} for ${queryUrl}: ${await response.text()}`);
186
+ }
187
+ const body = (await response.json());
188
+ if (body.errors !== undefined && body.errors.length > 0) {
189
+ const messages = body.errors.map((error) => error.message ?? "unspecified error");
190
+ throw new Error(`indexer rejected the contract events query: ${messages.join(", ")}`);
191
+ }
192
+ const page = body.data?.contractEvents;
193
+ if (page === undefined) {
194
+ throw new Error(`indexer answered the contract events query without a page: ${queryUrl}`);
195
+ }
196
+ return page;
197
+ }
198
+ /**
199
+ * Read the signet contract's events from a Midnight indexer. The stream
200
+ * pages the indexer by offset and pins its end to the tip (`maxId`) of the
201
+ * first page, so the walk is a point-in-time snapshot that ends even while
202
+ * the contract keeps emitting: rows past that tip are dropped. The contract
203
+ * address is parsed with {@link contractAddressFromHex} before the first
204
+ * request, so a malformed one fails without a round trip, and a `0x`
205
+ * prefixed one reaches the indexer as the bare hex it expects.
206
+ *
207
+ * @param config - Where the indexer is.
208
+ * @returns The event source.
209
+ */
210
+ export function signetEventSourceFromIndexer(config) {
211
+ return {
212
+ async *streamSignetEvents(contractAddress) {
213
+ const address = bytesToHex(contractAddressFromHex(contractAddress).bytes);
214
+ let tipId;
215
+ for (let offset = 0;; offset += EVENT_PAGE_LIMIT) {
216
+ const page = await fetchContractEventPage(config.queryUrl, address, offset);
217
+ for (const row of page) {
218
+ const event = signetMiscEventFromIndexerRow(row);
219
+ if (event === undefined)
220
+ continue;
221
+ tipId ??= event.maxId;
222
+ if (event.id > tipId)
223
+ return;
224
+ yield event;
225
+ }
226
+ if (page.length < EVENT_PAGE_LIMIT)
227
+ return;
134
228
  }
135
- return out;
136
229
  },
137
230
  };
138
231
  }
@@ -269,9 +362,109 @@ export function decodeSignBidirectionalNotification(record) {
269
362
  // above, so this slice always yields exactly `depth` bytes.
270
363
  const requestsPath = Array.from(record.payload.slice(NOTIFICATION_PATH_OFFSET, NOTIFICATION_PATH_OFFSET + depth));
271
364
  return {
272
- version: Number(record.version),
365
+ version: 1,
273
366
  callerAddress,
274
367
  requestsPath,
275
368
  };
276
369
  }
370
+ /** The payload decoder of each signet event kind, each yielding that kind's decoded record. */
371
+ const SIGNET_EVENT_PAYLOAD_DECODERS = {
372
+ [SignetEventName.SignBidirectionalEvent]: (payload) => {
373
+ const post = decodeSignBidirectionalEventNotificationPayload(payload);
374
+ return { requestId: post.requestId, event: decodeSignBidirectionalNotification(post.event) };
375
+ },
376
+ [SignetEventName.SignatureRespondedEvent]: decodeSignatureRespondedEventPayload,
377
+ [SignetEventName.RespondBidirectionalEvent]: decodeRespondBidirectionalEventPayload,
378
+ };
379
+ /**
380
+ * Decode `event` as the signet event kind `name`, or skip it when it carries
381
+ * another name. The name is checked BEFORE the payload is touched, which is
382
+ * what a reader of one kind needs: the signet contract is unauthenticated,
383
+ * so anyone can emit an undecodable event of another kind, and that must not
384
+ * fail a read that never asked for it.
385
+ *
386
+ * @param event - The signet event as its source served it.
387
+ * @param name - The event kind to decode.
388
+ * @returns The decoded event, or `undefined` when `event` is not a `name` event.
389
+ * @throws {Error} When `event` is a `name` event whose payload does not decode
390
+ * (see the payload decoder of that kind).
391
+ */
392
+ export function decodeSignetEventNamed(event, name) {
393
+ if (!isSignetEventNamed(event, name))
394
+ return undefined;
395
+ const post = SIGNET_EVENT_PAYLOAD_DECODERS[name](event.payload);
396
+ return { name, requestId: requestIdHex(post.requestId), record: post.event, source: event };
397
+ }
398
+ /**
399
+ * Decode `event` by whichever signet event name it carries. What to do with
400
+ * an event that is not a signet event, or that does not decode, is the
401
+ * caller's policy: a responder skips both, an explorer shows both.
402
+ *
403
+ * WARNING: this THROWS on input anyone can put on chain. The signet contract
404
+ * is unauthenticated, so a `SignBidirectionalEvent` with an unsupported
405
+ * version or a zero path depth costs its sender one transaction. A loop over
406
+ * a live stream must catch, or use {@link tryDecodeSignetEvent}.
407
+ *
408
+ * @param event - The signet event as its source served it.
409
+ * @returns The decoded event, or `undefined` when `event`'s name is not a
410
+ * {@link SignetEventName}.
411
+ * @throws {Error} When the named kind's payload does not decode.
412
+ */
413
+ export function decodeSignetEvent(event) {
414
+ for (const name of Object.values(SignetEventName)) {
415
+ const decoded = decodeSignetEventNamed(event, name);
416
+ if (decoded !== undefined)
417
+ return decoded;
418
+ }
419
+ return undefined;
420
+ }
421
+ /**
422
+ * {@link decodeSignetEvent} without the throw: an undecodable payload comes
423
+ * back as a result to inspect. It reports the failure and leaves the policy
424
+ * (skip it, show it, count it) to the caller.
425
+ *
426
+ * @param event - The signet event as its source served it.
427
+ * @returns The decode result, or `undefined` when `event`'s name is not a
428
+ * {@link SignetEventName}.
429
+ */
430
+ export function tryDecodeSignetEvent(event) {
431
+ try {
432
+ const decoded = decodeSignetEvent(event);
433
+ return decoded === undefined ? undefined : { ok: true, event: decoded };
434
+ }
435
+ catch (error) {
436
+ return {
437
+ ok: false,
438
+ source: event,
439
+ reason: error instanceof Error ? error.message : String(error),
440
+ };
441
+ }
442
+ }
443
+ /** Each signet event kind's record selector: the record of a decoded event of that kind. */
444
+ const SIGNET_EVENT_RECORD_SELECTORS = {
445
+ [SignetEventName.SignBidirectionalEvent]: (event) => event.name === SignetEventName.SignBidirectionalEvent ? event.record : undefined,
446
+ [SignetEventName.SignatureRespondedEvent]: (event) => event.name === SignetEventName.SignatureRespondedEvent ? event.record : undefined,
447
+ [SignetEventName.RespondBidirectionalEvent]: (event) => event.name === SignetEventName.RespondBidirectionalEvent ? event.record : undefined,
448
+ };
449
+ /**
450
+ * The records of kind `name` that declare `requestId`, out of decoded events
451
+ * already in hand, in the order given. The routing step of every per-request
452
+ * read: it selects by the UNAUTHENTICATED declared id and verifies nothing.
453
+ *
454
+ * @param events - Decoded signet events of any kinds.
455
+ * @param name - The event kind to keep.
456
+ * @param requestId - The request id the kept events must declare.
457
+ * @returns The kept events' records.
458
+ */
459
+ export function signetEventRecordsOf(events, name, requestId) {
460
+ const records = [];
461
+ for (const event of events) {
462
+ if (event.requestId !== requestId)
463
+ continue;
464
+ const record = SIGNET_EVENT_RECORD_SELECTORS[name](event);
465
+ if (record !== undefined)
466
+ records.push(record);
467
+ }
468
+ return records;
469
+ }
277
470
  //# sourceMappingURL=signet-contract-events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signet-contract-events.js","sourceRoot":"","sources":["../src/signet-contract-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signet-contract-events.js","sourceRoot":"","sources":["../src/signet-contract-events.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,wEAAwE;AACxE,4EAA4E;AAC5E,2CAA2C;AAC3C,0GAA0G;AAC1G,wHAAwH;AACxH,wHAAwH;AACxH,wEAAwE;AACxE,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;AACxE,wEAAwE;AACxE,2CAA2C;AAE3C,OAAO,EAAE,gBAAgB,EAAiB,MAAM,iCAAiC,CAAC;AAElF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAqB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE/F;;;;GAIG;AACH,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,gEAAgE;IAChE,oEAAiD,CAAA;IACjD,iDAAiD;IACjD,sEAAmD,CAAA;IACnD,0EAA0E;IAC1E,0EAAuD,CAAA;AACzD,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,yDAAyD;AACzD,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AA0D/C,4EAA4E;AAC5E,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,wBAAwB,GAAG,2BAA2B,CAAC,CAAC;AAEhG;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAuB,EAAE,IAAqB;IAC/E,OAAO,KAAK,CAAC,IAAI,KAAM,IAAe,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAgB;IACpD,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAA2B,EAC3B,eAAwB;IAExB,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM;YAAE,SAAS;QACzC,IAAI,eAAe,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;YACvE,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAC;QAC/E,CAAC;QACD,8DAA8D;QAC9D,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QACrF,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;YACrE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAQD;;;;GAIG;AACH,MAAM,4BAA4B,GAAG;;;;;;;;;;;CAWpC,CAAC;AAEF,oFAAoF;AACpF,MAAM,4BAA4B,GAAG,mBAAmB,CAAC;AAEzD,oGAAoG;AACpG,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAoC7B;;;;;;;;;GASG;AACH,SAAS,6BAA6B,CACpC,GAA4B;IAE5B,IAAI,GAAG,CAAC,UAAU,KAAK,4BAA4B;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;IACxD,MAAM,eAAe,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC;IACrC,IACE,EAAE,KAAK,SAAS;QAChB,KAAK,KAAK,SAAS;QACnB,aAAa,KAAK,SAAS;QAC3B,IAAI,KAAK,SAAS;QAClB,OAAO,KAAK,SAAS;QACrB,eAAe,KAAK,SAAS;QAC7B,KAAK,EAAE,MAAM,KAAK,SAAS;QAC3B,KAAK,CAAC,IAAI,KAAK,SAAS;QACxB,KAAK,CAAC,SAAS,KAAK,SAAS,EAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uDAAuD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO;QACL,IAAI,EAAE,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,EAAE,MAAM;QACf,EAAE;QACF,KAAK;QACL,aAAa;QACb,eAAe;QACf,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,cAAc,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;KAC1C,CAAC;AACJ,CAAC;AAgBD;;;;;;;;;GASG;AACH,KAAK,UAAU,sBAAsB,CACnC,QAAgB,EAChB,eAAuB,EACvB,MAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACrC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,4BAA4B;YACnC,SAAS,EAAE;gBACT,MAAM,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE;gBAC5C,KAAK,EAAE,gBAAgB;gBACvB,MAAM;aACP;SACF,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,yBAAyB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,QAAQ,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAC7F,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkC,CAAC;IACtE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAC,CAAC;QAClF,MAAM,IAAI,KAAK,CAAC,+CAA+C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;IACvC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,8DAA8D,QAAQ,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAA2B;IAE3B,OAAO;QACL,KAAK,CAAC,CAAC,kBAAkB,CAAC,eAAe;YACvC,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1E,IAAI,KAAyB,CAAC;YAC9B,KAAK,IAAI,MAAM,GAAG,CAAC,GAAI,MAAM,IAAI,gBAAgB,EAAE,CAAC;gBAClD,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC5E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,KAAK,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC;oBACjD,IAAI,KAAK,KAAK,SAAS;wBAAE,SAAS;oBAClC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;oBACtB,IAAI,KAAK,CAAC,EAAE,GAAG,KAAK;wBAAE,OAAO;oBAC7B,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,GAAG,gBAAgB;oBAAE,OAAO;YAC7C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAoED,uEAAuE;AACvE,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAQzC;;;;;;;;GAQG;AACH,SAAS,oBAAoB,CAAC,OAAmB;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACzD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,2BAA2B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,iDAAiD,CACnG,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,wBAAwB,CAAC;QAC7E,SAAS,EAAE;YACT,IAAI,EAAE;gBACJ,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;gBACpE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,kBAAkB,CAAC;aAC/D;YACD,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,4BAA4B,CAAC;YAClE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;SAC/B;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oCAAoC,CAClD,OAAmB;IAEnB,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC/D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sCAAsC,CACpD,OAAmB;IAEnB,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC/D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC;AAC7C,CAAC;AAeD,qEAAqE;AACrE,MAAM,iCAAiC,GAAG,CAAC,CAAC;AAE5C,8DAA8D;AAC9D,MAAM,oCAAoC,GAAG,CAAC,CAAC;AAE/C,sEAAsE;AACtE,MAAM,iCAAiC,GAAG,EAAE,CAAC;AAE7C,4EAA4E;AAC5E,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAExC;;;;;;;;;GASG;AACH,MAAM,UAAU,+CAA+C,CAC7D,OAAmB;IAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,iCAAiC,GAAG,2BAA2B,CAAC;IAC5E,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,2BAA2B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,+CAA+C,CACjG,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,KAAK,CACtB,oCAAoC,EACpC,iCAAiC,CAClC;QACD,KAAK,EAAE;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;YACxB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC;SAC/D;KACF,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAE7C,+EAA+E;AAC/E,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAE1C,sEAAsE;AACtE,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAEpC;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,qGAAqG;AACrG,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAiC1C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mCAAmC,CACjD,MAA2C;IAE3C,IAAI,MAAM,CAAC,OAAO,KAAK,8BAA8B,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,8CAA8C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB;YACtF,qCAAqC,MAAM,CAAC,8BAA8B,CAAC,GAAG,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,UAAU,CAC9B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,8BAA8B,CAAC,CACzF,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,qBAAqB,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CACb,wDAAwD,MAAM,CAAC,KAAK,CAAC,mBAAmB;YACtF,kBAAkB,MAAM,CAAC,qBAAqB,CAAC,GAAG,CACrD,CAAC;IACJ,CAAC;IACD,kFAAkF;IAClF,4DAA4D;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAC7B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,wBAAwB,GAAG,KAAK,CAAC,CACjF,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC;QACV,aAAa;QACb,YAAY;KACb,CAAC;AACJ,CAAC;AA6CD,+FAA+F;AAC/F,MAAM,6BAA6B,GAE/B;IACF,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,+CAA+C,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,mCAAmC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IAC/F,CAAC;IACD,CAAC,eAAe,CAAC,uBAAuB,CAAC,EAAE,oCAAoC;IAC/E,CAAC,eAAe,CAAC,yBAAyB,CAAC,EAAE,sCAAsC;CACpF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAGpC,KAAa,EAAE,IAAW;IAC1B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACvD,MAAM,IAAI,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC9F,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAa;IAEb,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAsBD;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC/D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,MAAM,6BAA6B,GAE/B;IACF,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAClD,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;IAClF,CAAC,eAAe,CAAC,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CACnD,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;IACnF,CAAC,eAAe,CAAC,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CACrD,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;CACtF,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAqC,EACrC,IAAW,EACX,SAAuB;IAEvB,MAAM,OAAO,GAAgC,EAAE,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,SAAS;QAC5C,MAAM,MAAM,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -2,7 +2,7 @@ import type { PublicDataProvider } from "@midnight-ntwrk/midnight-js-types";
2
2
  import type { Transaction } from "ethers";
3
3
  import { type Secp256k1Point } from "./ecdsa-attestation.ts";
4
4
  import type { RawContractState } from "./raw-contract-state.ts";
5
- import { type RespondBidirectionalEvent, type SignatureRespondedEvent, type SignetEventSource } from "./signet-contract-events.ts";
5
+ import { type DecodedSignetEvent, type RespondBidirectionalEvent, type SignatureRespondedEvent, type SignetEventSource } from "./signet-contract-events.ts";
6
6
  import { type RequestIdHex, type SignBidirectionalEvent } from "./signet-requests.ts";
7
7
  /**
8
8
  * The least of midnight-js's `PublicDataProvider` the reader needs: raw
@@ -37,8 +37,8 @@ export interface SignetRequestResponseReaderConfig {
37
37
  /** Source of raw contract state, e.g. midnight-js's `indexerPublicDataProvider`. */
38
38
  readonly publicDataProvider: SignetPublicStateSource;
39
39
  /**
40
- * Source of the signet contract's emitted events. Adapt a full provider
41
- * with `signetEventSourceFromPublicDataProvider`.
40
+ * Source of the signet contract's emitted events. Read a live indexer
41
+ * with `signetEventSourceFromIndexer`.
42
42
  */
43
43
  readonly eventSource: SignetEventSource;
44
44
  }
@@ -63,6 +63,23 @@ export interface VerifiedSignatureResponseResult {
63
63
  /** One verdict per post, emission order. */
64
64
  verdicts: SignatureResponseVerdict[];
65
65
  }
66
+ /**
67
+ * `SignetRequestResponseReader.getVerifiedRespondBidirectionalEvent` over
68
+ * decoded events already in hand: no walk of the signet contract's event
69
+ * history, and no ledger read either, since the attestation verifies against
70
+ * the output and the response key alone.
71
+ *
72
+ * @param requestId - The request id the posts must declare and the
73
+ * attestation must commit to.
74
+ * @param serializedOutput - The serialised execution output the attestation
75
+ * must commit to, exact unpadded bytes.
76
+ * @param mpcResponseKey - The MPC response key the requesting contract
77
+ * pinned at deploy (see `deriveMidnightResponseKey`).
78
+ * @param events - Decoded signet events of any kinds and request ids, in
79
+ * emission order. Only attestations declaring `requestId` are judged.
80
+ * @returns The first verifying post, or `undefined` when none attests this output.
81
+ */
82
+ export declare function findVerifiedRespondBidirectionalEvent(requestId: RequestIdHex, serializedOutput: Uint8Array, mpcResponseKey: Secp256k1Point, events: readonly DecodedSignetEvent[]): RespondBidirectionalEvent | undefined;
66
83
  /**
67
84
  * Reader over one requester contract / signet contract pair. Construct once
68
85
  * per pair and reuse: fetched request records are cached, so repeated
@@ -91,11 +108,10 @@ export declare class SignetRequestResponseReader {
91
108
  * `requestId`, in emission order. The declared id is routing data only.
92
109
  *
93
110
  * @param name - The signet event name to keep.
94
- * @param decode - The payload decoder for that event kind.
95
111
  * @param requestId - The request id the kept posts must declare.
96
112
  * @returns The kept posts' records, oldest first.
97
113
  */
98
- private getRespondPostsNamed;
114
+ private getRecordsNamed;
99
115
  /**
100
116
  * Fetch every signature response posted under `requestId`, in emission
101
117
  * order. UNVERIFIED: any post may still be garbage, sift with
@@ -120,6 +136,35 @@ export declare class SignetRequestResponseReader {
120
136
  * not on its ledger.
121
137
  */
122
138
  getVerifiedSignatureRespondedEvent(requestId: RequestIdHex, expectedSigner: string): Promise<VerifiedSignatureResponseResult>;
139
+ /**
140
+ * {@link getVerifiedSignatureRespondedEvent} over decoded events already in
141
+ * hand: the one ledger read for the request (cached), and no walk of the
142
+ * signet contract's event history. For a consumer that streamed and decoded
143
+ * the history once and verifies many requests against it.
144
+ *
145
+ * @param requestId - The request id to verify responses for.
146
+ * @param expectedSigner - The EVM address (0x hex, any case) the genuine
147
+ * response must be signed by: the requester's MPC-derived address.
148
+ * @param events - Decoded signet events of any kinds and request ids, in
149
+ * emission order. Only signature responses declaring `requestId` are judged.
150
+ * @returns The first valid response (if any) plus per-post verdicts.
151
+ * @throws {Error} When the requester contract has no state or the request is
152
+ * not on its ledger.
153
+ */
154
+ verifySignatureRespondedEvents(requestId: RequestIdHex, expectedSigner: string, events: readonly DecodedSignetEvent[]): Promise<VerifiedSignatureResponseResult>;
155
+ /**
156
+ * Judge each of a request's posted signature responses against the request:
157
+ * the verdict step {@link getVerifiedSignatureRespondedEvent} and
158
+ * {@link verifySignatureRespondedEvents} share.
159
+ *
160
+ * @param requestId - The request id the responses were posted under.
161
+ * @param expectedSigner - The EVM address the genuine response must be signed by.
162
+ * @param responses - The request's posted responses, in emission order.
163
+ * @returns The first valid response (if any) plus per-post verdicts.
164
+ * @throws {Error} When the requester contract has no state or the request is
165
+ * not on its ledger.
166
+ */
167
+ private verifySignatureResponses;
123
168
  /**
124
169
  * Rebuild the unsigned EIP-1559 transaction for `requestId`: the exact
125
170
  * transaction the MPC signs, from the request record alone (fetched via
@@ -1 +1 @@
1
- {"version":3,"file":"signet-request-response-reader.d.ts","sourceRoot":"","sources":["../src/signet-request-response-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signet-request-response-reader.d.ts","sourceRoot":"","sources":["../src/signet-request-response-reader.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,9 @@
7
7
  import { verifyRespondBidirectionalSignature } from "./ecdsa-attestation.js";
8
8
  import { lookupSignetRequestAt } from "./signature-requests-state-reader.js";
9
9
  import { recoverSignatureResponseSigner } from "./signature-response-verification.js";
10
- import { decodeRespondBidirectionalEventPayload, decodeSignatureRespondedEventPayload, isSignetEventNamed, SignetEventName, } from "./signet-contract-events.js";
10
+ import { decodeSignetEventNamed, SignetEventName, signetEventRecordsOf, } from "./signet-contract-events.js";
11
11
  import { signBidirectionalEventToSignedEvmTransaction, signBidirectionalEventToUnsignedEvmTransaction, } from "./signet-evtype2tx-requests.js";
12
- import { requestIdBytes, requestIdHex, TxParamType, } from "./signet-requests.js";
12
+ import { requestIdBytes, TxParamType, } from "./signet-requests.js";
13
13
  /**
14
14
  * Assert a fetched request carries the evmType2 decomposition, the only one
15
15
  * the EVM-transaction methods may read `txParams` from.
@@ -22,6 +22,38 @@ function assertEvmType2Request(request) {
22
22
  throw new Error(`unsupported txParamType ${String(request.txParamType)}`);
23
23
  }
24
24
  }
25
+ /**
26
+ * The first (oldest) of a request's respond-bidirectional posts whose
27
+ * signature verifies over `serializedOutput` against `mpcResponseKey`.
28
+ *
29
+ * @param requestId - The request id the attestation must commit to.
30
+ * @param serializedOutput - The serialised execution output, exact unpadded bytes.
31
+ * @param mpcResponseKey - The MPC response key the requesting contract pinned.
32
+ * @param posts - The request's posts, in emission order.
33
+ * @returns The first verifying post, or `undefined` when none verifies.
34
+ */
35
+ function firstVerifiedRespondBidirectionalEvent(requestId, serializedOutput, mpcResponseKey, posts) {
36
+ return posts.find((post) => verifyRespondBidirectionalSignature(requestIdBytes(requestId), serializedOutput, post, mpcResponseKey));
37
+ }
38
+ /**
39
+ * `SignetRequestResponseReader.getVerifiedRespondBidirectionalEvent` over
40
+ * decoded events already in hand: no walk of the signet contract's event
41
+ * history, and no ledger read either, since the attestation verifies against
42
+ * the output and the response key alone.
43
+ *
44
+ * @param requestId - The request id the posts must declare and the
45
+ * attestation must commit to.
46
+ * @param serializedOutput - The serialised execution output the attestation
47
+ * must commit to, exact unpadded bytes.
48
+ * @param mpcResponseKey - The MPC response key the requesting contract
49
+ * pinned at deploy (see `deriveMidnightResponseKey`).
50
+ * @param events - Decoded signet events of any kinds and request ids, in
51
+ * emission order. Only attestations declaring `requestId` are judged.
52
+ * @returns The first verifying post, or `undefined` when none attests this output.
53
+ */
54
+ export function findVerifiedRespondBidirectionalEvent(requestId, serializedOutput, mpcResponseKey, events) {
55
+ return firstVerifiedRespondBidirectionalEvent(requestId, serializedOutput, mpcResponseKey, signetEventRecordsOf(events, SignetEventName.RespondBidirectionalEvent, requestId));
56
+ }
25
57
  /**
26
58
  * Reader over one requester contract / signet contract pair. Construct once
27
59
  * per pair and reuse: fetched request records are cached, so repeated
@@ -69,17 +101,18 @@ export class SignetRequestResponseReader {
69
101
  * `requestId`, in emission order. The declared id is routing data only.
70
102
  *
71
103
  * @param name - The signet event name to keep.
72
- * @param decode - The payload decoder for that event kind.
73
104
  * @param requestId - The request id the kept posts must declare.
74
105
  * @returns The kept posts' records, oldest first.
75
106
  */
76
- async getRespondPostsNamed(name, decode, requestId) {
77
- const events = await this.config.eventSource.querySignetEvents(this.config.signetContractAddress);
78
- return events
79
- .filter((event) => isSignetEventNamed(event, name))
80
- .map((event) => decode(event.payload))
81
- .filter((post) => requestIdHex(post.requestId) === requestId)
82
- .map((post) => post.event);
107
+ async getRecordsNamed(name, requestId) {
108
+ const records = [];
109
+ const events = this.config.eventSource.streamSignetEvents(this.config.signetContractAddress);
110
+ for await (const event of events) {
111
+ const decoded = decodeSignetEventNamed(event, name);
112
+ if (decoded?.requestId === requestId)
113
+ records.push(decoded.record);
114
+ }
115
+ return records;
83
116
  }
84
117
  /**
85
118
  * Fetch every signature response posted under `requestId`, in emission
@@ -90,7 +123,7 @@ export class SignetRequestResponseReader {
90
123
  * @returns The request's posted records, oldest first, empty when none yet.
91
124
  */
92
125
  async getSignatureRespondedEvents(requestId) {
93
- return this.getRespondPostsNamed(SignetEventName.SignatureRespondedEvent, decodeSignatureRespondedEventPayload, requestId);
126
+ return this.getRecordsNamed(SignetEventName.SignatureRespondedEvent, requestId);
94
127
  }
95
128
  /**
96
129
  * Fetch the signature responses posted under `requestId` and verify each
@@ -107,8 +140,40 @@ export class SignetRequestResponseReader {
107
140
  * not on its ledger.
108
141
  */
109
142
  async getVerifiedSignatureRespondedEvent(requestId, expectedSigner) {
143
+ return this.verifySignatureResponses(requestId, expectedSigner, await this.getSignatureRespondedEvents(requestId));
144
+ }
145
+ /**
146
+ * {@link getVerifiedSignatureRespondedEvent} over decoded events already in
147
+ * hand: the one ledger read for the request (cached), and no walk of the
148
+ * signet contract's event history. For a consumer that streamed and decoded
149
+ * the history once and verifies many requests against it.
150
+ *
151
+ * @param requestId - The request id to verify responses for.
152
+ * @param expectedSigner - The EVM address (0x hex, any case) the genuine
153
+ * response must be signed by: the requester's MPC-derived address.
154
+ * @param events - Decoded signet events of any kinds and request ids, in
155
+ * emission order. Only signature responses declaring `requestId` are judged.
156
+ * @returns The first valid response (if any) plus per-post verdicts.
157
+ * @throws {Error} When the requester contract has no state or the request is
158
+ * not on its ledger.
159
+ */
160
+ async verifySignatureRespondedEvents(requestId, expectedSigner, events) {
161
+ return this.verifySignatureResponses(requestId, expectedSigner, signetEventRecordsOf(events, SignetEventName.SignatureRespondedEvent, requestId));
162
+ }
163
+ /**
164
+ * Judge each of a request's posted signature responses against the request:
165
+ * the verdict step {@link getVerifiedSignatureRespondedEvent} and
166
+ * {@link verifySignatureRespondedEvents} share.
167
+ *
168
+ * @param requestId - The request id the responses were posted under.
169
+ * @param expectedSigner - The EVM address the genuine response must be signed by.
170
+ * @param responses - The request's posted responses, in emission order.
171
+ * @returns The first valid response (if any) plus per-post verdicts.
172
+ * @throws {Error} When the requester contract has no state or the request is
173
+ * not on its ledger.
174
+ */
175
+ async verifySignatureResponses(requestId, expectedSigner, responses) {
110
176
  const request = await this.getSignatureRequest(requestId);
111
- const responses = await this.getSignatureRespondedEvents(requestId);
112
177
  const verdicts = responses.map((response, position) => {
113
178
  const index = BigInt(position);
114
179
  let signer;
@@ -187,7 +252,7 @@ export class SignetRequestResponseReader {
187
252
  * @returns The request's posted records, oldest first, empty when none yet.
188
253
  */
189
254
  async getRespondBidirectionalEvents(requestId) {
190
- return this.getRespondPostsNamed(SignetEventName.RespondBidirectionalEvent, decodeRespondBidirectionalEventPayload, requestId);
255
+ return this.getRecordsNamed(SignetEventName.RespondBidirectionalEvent, requestId);
191
256
  }
192
257
  /**
193
258
  * Fetch the respond-bidirectional posts declared under `requestId` and
@@ -207,8 +272,7 @@ export class SignetRequestResponseReader {
207
272
  * posted yet (poll again) or none attests this output.
208
273
  */
209
274
  async getVerifiedRespondBidirectionalEvent(requestId, serializedOutput, mpcResponseKey) {
210
- const events = await this.getRespondBidirectionalEvents(requestId);
211
- return events.find((event) => verifyRespondBidirectionalSignature(requestIdBytes(requestId), serializedOutput, event, mpcResponseKey));
275
+ return firstVerifiedRespondBidirectionalEvent(requestId, serializedOutput, mpcResponseKey, await this.getRespondBidirectionalEvents(requestId));
212
276
  }
213
277
  }
214
278
  //# sourceMappingURL=signet-request-response-reader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signet-request-response-reader.js","sourceRoot":"","sources":["../src/signet-request-response-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signet-request-response-reader.js","sourceRoot":"","sources":["../src/signet-request-response-reader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sig-net/midnight",
3
- "version": "0.22.0-rc.4",
3
+ "version": "0.22.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/sig-net/midnight-integration",
@@ -49,7 +49,7 @@
49
49
  "@midnight-ntwrk/compact-runtime": "0.18.0-rc.1",
50
50
  "@midnight-ntwrk/midnight-js-types": "5.0.0-beta.6",
51
51
  "@noble/curves": "^2.2.0",
52
- "@sig-net/midnight-serde": "^0.22.0-rc.1",
52
+ "@sig-net/midnight-serde": "^0.22.0",
53
53
  "ethers": "^6.17.0"
54
54
  },
55
55
  "devDependencies": {