@sig-net/midnight 0.0.8 → 0.10.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 (32) hide show
  1. package/README.md +254 -112
  2. package/dist/index.d.ts +4 -11
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +4 -11
  5. package/dist/index.js.map +1 -1
  6. package/dist/managed/compiler/contract-info.json +88 -0
  7. package/dist/managed/compiler/contract-manifest.json +8 -8
  8. package/dist/managed/contract/index.d.ts +12 -0
  9. package/dist/managed/contract/index.js +328 -54
  10. package/dist/managed/contract/index.js.map +1 -1
  11. package/dist/signature-requests-state-reader.d.ts.map +1 -1
  12. package/dist/signature-requests-state-reader.js +2 -1
  13. package/dist/signature-requests-state-reader.js.map +1 -1
  14. package/dist/signature-response-verification.d.ts +1 -1
  15. package/dist/signature-response-verification.d.ts.map +1 -1
  16. package/dist/signature-response-verification.js +1 -1
  17. package/dist/signature-response-verification.js.map +1 -1
  18. package/dist/signet-evtype2tx-requests.d.ts +247 -0
  19. package/dist/signet-evtype2tx-requests.d.ts.map +1 -0
  20. package/dist/signet-evtype2tx-requests.js +371 -0
  21. package/dist/signet-evtype2tx-requests.js.map +1 -0
  22. package/dist/signet-request-response-reader.d.ts +1 -1
  23. package/dist/signet-request-response-reader.d.ts.map +1 -1
  24. package/dist/signet-request-response-reader.js +1 -1
  25. package/dist/signet-request-response-reader.js.map +1 -1
  26. package/dist/signet-requests.d.ts +36 -202
  27. package/dist/signet-requests.d.ts.map +1 -1
  28. package/dist/signet-requests.js +31 -300
  29. package/dist/signet-requests.js.map +1 -1
  30. package/package.json +1 -1
  31. package/src/Signet.compact +74 -4
  32. package/src/circuits.compact +13 -27
@@ -1,11 +1,16 @@
1
- // TypeScript twins of the request-side structs in the Compact library
2
- // `Signet.compact` (same directory). The shapes MUST stay in lockstep with the Compact structs: the
1
+ // TypeScript twins of the CHAIN-AGNOSTIC request-side structs in the Compact
2
+ // library `Signet.compact` (same directory): the request record, its enums,
3
+ // request ids, and the runtime-descriptor toolkit shared by every tx-params
4
+ // decomposition. Everything specific to the EVM Type-2 decomposition (the
5
+ // only decomposition so far) lives in `signet-evtype2tx-requests.ts`.
6
+ //
7
+ // The shapes MUST stay in lockstep with the Compact structs: the
3
8
  // compiler inlines struct types anonymously into each contract's generated
4
9
  // managed/contract/index.d.ts, and these named types match them structurally,
5
10
  // so ledger reads assign to them without casts.
6
11
  //
7
12
  // The lockstep is enforced by each consuming contract's simulator tests: the
8
- // "signet-caller ledger shape" test in packages/caller-contract/tests/
13
+ // "test-caller-contract ledger shape" test in packages/test-caller-contract/tests/
9
14
  // contract.test.ts assigns the generated `ledger().signBidirectionalEventMap`
10
15
  // to the named SignBidirectionalEventLedgerMap type — the assignment itself is
11
16
  // the assertion, so any structural drift between the generated managed types
@@ -13,9 +18,7 @@
13
18
  //
14
19
  // Read more: https://docs.sig.network/ (signet protocol) and the module
15
20
  // header in Signet.compact (key derivation, event flow).
16
- import { CompactTypeBoolean, CompactTypeBytes, CompactTypeEnum, CompactTypeUnsignedInteger, CompactTypeVector, persistentHash, } from "@midnight-ntwrk/compact-runtime";
17
- import { getAddress, getBytes, Signature, Transaction } from "ethers";
18
- import { bigintToBytes32, bytesToBigint } from "./ecdsa-attestation.js";
21
+ import { CompactTypeBoolean, CompactTypeBytes, CompactTypeEnum, CompactTypeUnsignedInteger, } from "@midnight-ntwrk/compact-runtime";
19
22
  /**
20
23
  * Which transaction-param decomposition a request carries (Compact:
21
24
  * `enum TxParamType`), as the generated code represents enums: a `number`
@@ -23,7 +26,7 @@ import { bigintToBytes32, bytesToBigint } from "./ecdsa-attestation.js";
23
26
  * `enum`) so the values stay structurally `number`.
24
27
  */
25
28
  export const TxParamType = {
26
- /** {@link EVMType2TxParams}: an EIP-1559 EVM transaction. */
29
+ /** `EVMType2TxParams` (signet-evtype2tx-requests.ts): an EIP-1559 EVM transaction. */
27
30
  evmType2: 0,
28
31
  /**
29
32
  * Never emitted — mirrors the Compact-side padding variant that keeps the
@@ -52,40 +55,37 @@ export const MPCDestination = {
52
55
  /** Never emitted — the >= 2 variants padding (see {@link TxParamType}). */
53
56
  reserved: 1,
54
57
  };
55
- // ---- Request id (TS twin of the Compact circuit) ---------------------------
58
+ // ---- Runtime descriptor toolkit (TS twin of the compiled struct codecs) ----
56
59
  //
57
60
  // DEVIATION from the "pure circuits are compiled, never re-written in TS"
58
- // rule (see circuits.compact): `calculateRequestId` is generic over the
61
+ // rule (see circuits.compact): the request-id circuit is generic over the
59
62
  // tx-params type and schema lengths, the Compact compiler cannot export
60
63
  // type-parameterized circuits from the top level, and a compiled copy would
61
64
  // have to be monomorphized at ONE capacity instantiation — a client
62
65
  // contract's choice that never belongs in this client-agnostic package. So
63
- // the request-id circuit alone gets a TS twin here.
66
+ // the record descriptor (and the per-decomposition `calculateRequestId`
67
+ // built on it, see signet-evtype2tx-requests.ts) alone gets a TS twin here.
64
68
  //
65
- // It is NOT a hand-port of the hash algorithm: it calls the very
69
+ // It is NOT a hand-port of the hash algorithm: ids come from the very
66
70
  // `persistentHash` runtime builtin that compiled circuits call, over runtime
67
71
  // type descriptors mirroring the ones the compiler generates (compare
68
72
  // `_calculateRequestId_0` in any consuming contract's
69
73
  // managed/contract/index.js). What must stay in lockstep with Signet.compact
70
74
  // is exactly what this file already keeps in lockstep — the struct shapes,
71
- // field by field, in declaration order. Enforced by caller-contract's
75
+ // field by field, in declaration order. Enforced by test-caller-contract's
72
76
  // "submitSignatureRequest round-trip" test, which asserts the id computed
73
77
  // here equals the ledger map key minted by the REAL compiled contract.
74
- // Runtime descriptors of the Compact base types the request record uses.
75
- // CompactTypeUnsignedInteger takes (maxValue, byte length) — same literals
76
- // the compiler emits for Uint<8/64/128>. CompactTypeEnum takes
78
+ // Runtime descriptors of the Compact base types the generic record fields
79
+ // use. CompactTypeUnsignedInteger takes (maxValue, byte length) — same
80
+ // literals the compiler emits for Uint<8/64>. CompactTypeEnum takes
77
81
  // (variantCount - 1, byte length); NOTE a 1-variant enum would compile to
78
82
  // `CompactTypeEnum(0, 0)` — zero bytes, which the proof server cannot parse
79
83
  // inside persistentHash preimages. Every enum therefore carries a padding
80
84
  // `reserved` variant so it stays at (1, 1).
81
- const BYTES_4 = new CompactTypeBytes(4);
82
- const BYTES_20 = new CompactTypeBytes(20);
83
85
  const BYTES_32 = new CompactTypeBytes(32);
84
86
  const BYTES_64 = new CompactTypeBytes(64);
85
87
  const UINT_8 = new CompactTypeUnsignedInteger(2n ** 8n - 1n, 1);
86
- const UINT_16 = new CompactTypeUnsignedInteger(2n ** 16n - 1n, 2);
87
88
  const UINT_64 = new CompactTypeUnsignedInteger(2n ** 64n - 1n, 8);
88
- const UINT_128 = new CompactTypeUnsignedInteger(2n ** 128n - 1n, 16);
89
89
  const TX_PARAM_TYPE = new CompactTypeEnum(1, 1);
90
90
  const MPC_SIGNATURE_ALGORITHM = new CompactTypeEnum(1, 1);
91
91
  const MPC_DESTINATION = new CompactTypeEnum(1, 1);
@@ -110,7 +110,7 @@ const CONTRACT_ADDRESS = {
110
110
  * @param fields - One runtime descriptor per struct field, in declaration order.
111
111
  * @returns The composed struct descriptor.
112
112
  */
113
- function compactStructDescriptor(fields) {
113
+ export function compactStructDescriptor(fields) {
114
114
  const entries = Object.entries(fields);
115
115
  return {
116
116
  alignment: () => entries.flatMap(([, type]) => type.alignment()),
@@ -131,77 +131,29 @@ function compactStructDescriptor(fields) {
131
131
  * @param inner - Descriptor of the wrapped type.
132
132
  * @returns The Maybe struct descriptor.
133
133
  */
134
- function compactMaybeDescriptor(inner) {
134
+ export function compactMaybeDescriptor(inner) {
135
135
  return compactStructDescriptor({
136
136
  is_some: CompactTypeBoolean,
137
137
  value: inner,
138
138
  });
139
139
  }
140
140
  /**
141
- * Descriptor of {@link EVMCalldata} at one word capacity — the TS analogue
142
- * of instantiating Compact's `EVMCalldata<#maxWords>`.
143
- *
144
- * @param maxWords - The contract's calldata word capacity (the vault uses 2).
145
- * @returns The calldata descriptor.
146
- */
147
- export function evmCalldataDescriptor(maxWords) {
148
- return compactStructDescriptor({
149
- selector: BYTES_4,
150
- noWords: UINT_16,
151
- words: new CompactTypeVector(maxWords, BYTES_32),
152
- });
153
- }
154
- /**
155
- * Descriptor of {@link EVMAccessListEntry} at one storage-key capacity
156
- * (Compact: `EVMAccessListEntry<#maxStorageKeys>`).
157
- *
158
- * @param maxStorageKeys - Storage-key capacity per entry.
159
- * @returns The entry descriptor.
160
- */
161
- export function evmAccessListEntryDescriptor(maxStorageKeys) {
162
- return compactStructDescriptor({
163
- address: BYTES_20,
164
- storageKeyCount: UINT_8,
165
- storageKeys: new CompactTypeVector(maxStorageKeys, BYTES_32),
166
- });
167
- }
168
- /**
169
- * Descriptor of {@link EVMType2TxParams} at one capacity instantiation —
170
- * the TS analogue of Compact's `EVMType2TxParams<#maxCalldataWords,
171
- * #maxAccessListEntries, #maxStorageKeysPerEntry>`.
172
- *
173
- * @param maxCalldataWords - Calldata word capacity.
174
- * @param maxAccessListEntries - Access-list entry capacity.
175
- * @param maxStorageKeysPerEntry - Storage-key capacity per entry.
176
- * @returns The tx-params descriptor.
177
- */
178
- export function evmType2TxParamsDescriptor(maxCalldataWords, maxAccessListEntries, maxStorageKeysPerEntry) {
179
- return compactStructDescriptor({
180
- to: BYTES_20,
181
- chainId: UINT_64,
182
- nonce: UINT_64,
183
- gasLimit: UINT_64,
184
- maxFeePerGas: UINT_128,
185
- maxPriorityFeePerGas: UINT_128,
186
- value: UINT_128,
187
- accessListEntryCount: UINT_8,
188
- accessList: new CompactTypeVector(maxAccessListEntries, evmAccessListEntryDescriptor(maxStorageKeysPerEntry)),
189
- calldata: compactMaybeDescriptor(evmCalldataDescriptor(maxCalldataWords)),
190
- });
191
- }
192
- /**
193
- * Descriptor of {@link SignBidirectionalEvent} at one capacity instantiation.
141
+ * Descriptor of {@link SignBidirectionalEvent} over ANY tx-params
142
+ * decomposition — the TS analogue of Compact's generic
143
+ * `SignBidirectionalEvent<TxParams, #LenOutputDeserialization,
144
+ * #LenRespondSerialization>`. Each decomposition wraps this with its own
145
+ * capacity-parameterized convenience (see `signBidirectionalEventDescriptor`
146
+ * in signet-evtype2tx-requests.ts for the EVM Type-2 one).
194
147
  *
195
- * @param maxCalldataWords - Calldata word capacity.
196
- * @param maxAccessListEntries - Access-list entry capacity.
197
- * @param maxStorageKeysPerEntry - Storage-key capacity per entry.
148
+ * @param txParams - Descriptor of the tx-params decomposition, already at
149
+ * its capacity instantiation.
198
150
  * @param lenOutputDeserialization - Declared byte width of
199
151
  * `outputDeserializationSchema` (Compact `#LenOutputDeserialization`).
200
152
  * @param lenRespondSerialization - Declared byte width of
201
153
  * `respondSerializationSchema` (Compact `#LenRespondSerialization`).
202
154
  * @returns The event record descriptor.
203
155
  */
204
- export function signBidirectionalEventDescriptor(maxCalldataWords, maxAccessListEntries, maxStorageKeysPerEntry, lenOutputDeserialization, lenRespondSerialization) {
156
+ export function signBidirectionalEventDescriptorWith(txParams, lenOutputDeserialization, lenRespondSerialization) {
205
157
  return compactStructDescriptor({
206
158
  sender: CONTRACT_ADDRESS,
207
159
  requestNonce: UINT_64,
@@ -211,233 +163,12 @@ export function signBidirectionalEventDescriptor(maxCalldataWords, maxAccessList
211
163
  dest: MPC_DESTINATION,
212
164
  params: BYTES_64,
213
165
  txParamType: TX_PARAM_TYPE,
214
- txParams: evmType2TxParamsDescriptor(maxCalldataWords, maxAccessListEntries, maxStorageKeysPerEntry),
166
+ txParams,
215
167
  caip2Id: BYTES_32,
216
168
  outputDeserializationSchema: new CompactTypeBytes(lenOutputDeserialization),
217
169
  respondSerializationSchema: new CompactTypeBytes(lenRespondSerialization),
218
170
  });
219
171
  }
220
- /**
221
- * Canonical id of a signet request: the persistent hash of the entire event
222
- * record (which commits to every field, the sender address included — there
223
- * is deliberately no extra domain tag). TS twin of Signet.compact's
224
- * `calculateRequestId` circuit (see the deviation note atop this section),
225
- * generic over the capacity instantiation via the record's own array
226
- * lengths — pass the record exactly as the ledger stores it, unused slots
227
- * included and schemas at their declared widths.
228
- *
229
- * @param request - The full event record (contract-shaped, all slots).
230
- * @returns The 32-byte request id — the record's ledger map key.
231
- */
232
- export function calculateRequestId(request) {
233
- const { txParams } = request;
234
- const maxCalldataWords = txParams.calldata.value.words.length;
235
- const maxAccessListEntries = txParams.accessList.length;
236
- const maxStorageKeysPerEntry = maxAccessListEntries === 0 ? 0 : txParams.accessList[0].storageKeys.length;
237
- return persistentHash(signBidirectionalEventDescriptor(maxCalldataWords, maxAccessListEntries, maxStorageKeysPerEntry, request.outputDeserializationSchema.length, request.respondSerializationSchema.length), request);
238
- }
239
- // ---- Calldata / transaction assembly ----------------------------------------
240
- /**
241
- * The 32-byte value of a numeric ABI word: the little-endian field embed of
242
- * the number, exactly what Compact's `x as Field as Bytes<32>` cast produces
243
- * in-circuit. Use when building words off-chain (UIs, expected-record
244
- * builders, tests).
245
- *
246
- * @param value - The word's numeric value (e.g. an amount).
247
- * @returns The 32-byte LE embed to store in an {@link EVMCalldata} word.
248
- */
249
- export function numericAbiWordValue(value) {
250
- return bigintToBytes32(value);
251
- }
252
- /**
253
- * The 32-byte staticArg word value for an EVM address: the BIG-ENDIAN
254
- * numeric reading of its 20 display-order bytes, LE-embedded. TS mirror of
255
- * Signet.compact's `evmAddressAbiValue` circuit (+ `as Bytes<32>`); see the
256
- * warning there — embedding the display-order bytes directly would come out
257
- * byte-reversed in the assembled calldata.
258
- *
259
- * @param address - The 20-byte address in display order.
260
- * @returns The 32-byte word value to store in an {@link EVMCalldata} word.
261
- */
262
- export function evmAddressAbiWord(address) {
263
- let value = 0n;
264
- for (const byte of address) {
265
- value = value * 256n + BigInt(byte);
266
- }
267
- return bigintToBytes32(value);
268
- }
269
- /**
270
- * Re-assemble the raw calldata a request's words describe:
271
- * `data = selector || BE(words[0..noWords])`. Each word is a little-endian
272
- * field embed (the contract's `x as Field as Bytes<32>` cast); the leading
273
- * `noWords` are re-encoded big-endian into 32-byte ABI words and any remaining
274
- * capacity slots are dropped. This is THE implementation of the MPC re-assembly
275
- * documented on `EVMCalldata` in Signet.compact.
276
- *
277
- * @param calldata - The request's calldata field.
278
- * @returns Hex calldata for the transaction (`"0x"` when absent).
279
- */
280
- export function assembleCalldata(calldata) {
281
- if (!calldata.is_some) {
282
- return "0x";
283
- }
284
- const { selector, noWords, words } = calldata.value;
285
- let data = `0x${bytesToHex(selector)}`;
286
- for (let i = 0; i < Number(noWords); i++) {
287
- data += bytesToHex(bigintToBytes32BE(bytesToBigint(words[i])));
288
- }
289
- return data;
290
- }
291
- /**
292
- * Decode the real (count-trimmed) access list of a request into the shape
293
- * ethers' `Transaction.from` accepts.
294
- *
295
- * @param txParams - The request's transaction decomposition.
296
- * @returns The access list, possibly empty.
297
- */
298
- function decodeAccessList(txParams) {
299
- return txParams.accessList
300
- .slice(0, Number(txParams.accessListEntryCount))
301
- .map((entry) => ({
302
- address: getAddress(`0x${bytesToHex(entry.address)}`),
303
- storageKeys: entry.storageKeys
304
- .slice(0, Number(entry.storageKeyCount))
305
- .map((key) => `0x${bytesToHex(key)}`),
306
- }));
307
- }
308
- /**
309
- * Rebuild the unsigned EIP-1559 transaction a request record describes,
310
- * byte-identical to the one the MPC assembles and signs: calldata from the
311
- * tagged words (see {@link assembleCalldata}), the count-trimmed access
312
- * list, and the stored envelope fields. This is the canonical
313
- * request→transaction transform; response-side verification
314
- * (`signature-response-verification.ts`) and the signed-transaction builder
315
- * below both go through it, so the transaction a client broadcasts is
316
- * provably the one the MPC put its signature over.
317
- *
318
- * @param request - The on-ledger request record.
319
- * @returns The unsigned ethers transaction (`unsignedHash` is the digest the
320
- * MPC signs).
321
- * @throws Error if a calldata word carries an unknown kind.
322
- */
323
- export function signBidirectionalEventToUnsignedEVMTransaction(request) {
324
- const { txParams } = request;
325
- return Transaction.from({
326
- type: 2,
327
- chainId: txParams.chainId,
328
- nonce: Number(txParams.nonce),
329
- gasLimit: txParams.gasLimit,
330
- maxFeePerGas: txParams.maxFeePerGas,
331
- maxPriorityFeePerGas: txParams.maxPriorityFeePerGas,
332
- to: getAddress(`0x${bytesToHex(txParams.to)}`),
333
- value: txParams.value,
334
- accessList: decodeAccessList(txParams),
335
- data: assembleCalldata(txParams.calldata),
336
- });
337
- }
338
- /**
339
- * Decode a response signature record (as posted to the signet contract's
340
- * signature response log — the canonical MPC `Signature { big_r, s,
341
- * recovery_id }` shape) into an ethers {@link Signature}: `r` is `bigR`'s x
342
- * coordinate, `v` the legacy parity derived from the recovery id.
343
- *
344
- * @param response - The posted signature record.
345
- * @returns The ethers signature.
346
- * @throws Error if the recovery id is not 0 or 1.
347
- */
348
- export function signatureRespondedEventToSignature(response) {
349
- const recoveryId = Number(response.recoveryId);
350
- if (recoveryId !== 0 && recoveryId !== 1) {
351
- throw new Error(`expected a recovery id of 0 or 1, got ${recoveryId}`);
352
- }
353
- return Signature.from({
354
- r: `0x${bytesToHex(response.bigRx)}`,
355
- s: `0x${bytesToHex(response.s)}`,
356
- v: recoveryId + 27,
357
- });
358
- }
359
- /** secp256k1 base field prime (2^256 - 2^32 - 977). */
360
- const SECP256K1_P = 2n ** 256n - 2n ** 32n - 977n;
361
- /** Modular exponentiation by squaring. */
362
- function modPow(base, exponent, modulus) {
363
- let result = 1n;
364
- let b = base % modulus;
365
- let e = exponent;
366
- while (e > 0n) {
367
- if (e & 1n)
368
- result = (result * b) % modulus;
369
- b = (b * b) % modulus;
370
- e >>= 1n;
371
- }
372
- return result;
373
- }
374
- /** Encode a bigint as exactly 32 BIG-endian bytes (secp256k1 scalar form). */
375
- function bigintToBytes32BE(value) {
376
- const out = new Uint8Array(32);
377
- let v = value;
378
- for (let i = 31; i >= 0; i--) {
379
- out[i] = Number(v & 0xffn);
380
- v >>= 8n;
381
- }
382
- return out;
383
- }
384
- /**
385
- * Encode an ECDSA signature as the response record posted to the signet
386
- * contract — the inverse of {@link signatureRespondedEventToSignature},
387
- * for MPC-side posters (the fakenet signer, tests). The canonical record
388
- * carries `bigR` as a full affine point but an `r || s || v` signature only
389
- * has R.x and the parity of R.y, so R.y is recovered by decompressing the
390
- * point on the curve (y² = x³ + 7 over the secp256k1 base field).
391
- *
392
- * The parameter is structural (the r/s/yParity subset of an ethers
393
- * {@link Signature}) so signatures from ANY ethers instance qualify — posters
394
- * living in other repos resolve their own ethers install, and nominal class
395
- * typing would reject it.
396
- *
397
- * @param signature - The signature to encode (`r`/`s` as 0x hex, `yParity` 0 or 1).
398
- * @returns The response record, ready to post.
399
- * @throws Error if `r` is not the x coordinate of a curve point.
400
- */
401
- export function signatureToSignatureRespondedEvent(signature) {
402
- const x = BigInt(signature.r);
403
- const ySquared = (modPow(x, 3n, SECP256K1_P) + 7n) % SECP256K1_P;
404
- // P ≡ 3 (mod 4), so a square root (when one exists) is c^((P+1)/4).
405
- let y = modPow(ySquared, (SECP256K1_P + 1n) / 4n, SECP256K1_P);
406
- if ((y * y) % SECP256K1_P !== ySquared) {
407
- throw new Error("signature r is not the x coordinate of a secp256k1 point");
408
- }
409
- if ((y & 1n) !== BigInt(signature.yParity)) {
410
- y = SECP256K1_P - y;
411
- }
412
- return {
413
- bigRx: getBytes(signature.r),
414
- bigRy: bigintToBytes32BE(y),
415
- s: getBytes(signature.s),
416
- recoveryId: BigInt(signature.yParity),
417
- };
418
- }
419
- /**
420
- * Assemble the broadcast-ready signed EIP-1559 transaction for a request from
421
- * its MPC signature response: rebuild the exact unsigned transaction the MPC
422
- * signed (see {@link signBidirectionalEventToUnsignedEVMTransaction}) and
423
- * attach the signature. Does NOT check that the signature recovers to the
424
- * requester's derived address — the response log is unauthenticated, so
425
- * verify first with `verifySignatureRespondedEvent`.
426
- *
427
- * @param request - The on-ledger request record.
428
- * @param response - The posted signature record answering it.
429
- * @returns The signed ethers transaction; `serialized` is the raw payload for
430
- * `eth_sendRawTransaction`, `hash` its on-chain hash, `from` the recovered
431
- * sender.
432
- * @throws Error if the request record is malformed (see
433
- * {@link signBidirectionalEventToUnsignedEVMTransaction}) or the response
434
- * is not a decodable signature.
435
- */
436
- export function signBidirectionalEventToSignedEVMTransaction(request, response) {
437
- const transaction = signBidirectionalEventToUnsignedEVMTransaction(request);
438
- transaction.signature = signatureRespondedEventToSignature(response);
439
- return transaction;
440
- }
441
172
  /**
442
173
  * Render bytes as a lowercase hex string, no `0x` prefix.
443
174
  *
@@ -1 +1 @@
1
- {"version":3,"file":"signet-requests.js","sourceRoot":"","sources":["../src/signet-requests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signet-requests.js","sourceRoot":"","sources":["../src/signet-requests.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.0.8",
3
+ "version": "0.10.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/sig-net/midnight-integration",
@@ -97,7 +97,9 @@ module Signet {
97
97
  // outputDeserializationSchema tells the MPC how to deserialise the destination chain's
98
98
  // execution output (destination chain -> MPC). respondSerializationSchema tells the MPC
99
99
  // how to serialise that output into the RespondBidirectionalEvent it posts back
100
- // (MPC -> Midnight). Both are ABI-style JSON schema strings, sized per client contract.
100
+ // (MPC -> Midnight).
101
+ // Both are ABI-style JSON schema strings, sized per client contract
102
+ // (see: https://docs.soliditylang.org/en/v0.8.30/abi-spec.html#json)
101
103
  outputDeserializationSchema: Bytes<LenOutputDeserialization>;
102
104
  respondSerializationSchema: Bytes<LenRespondSerialization>;
103
105
  }
@@ -238,7 +240,7 @@ module Signet {
238
240
  // Posted by MPC back to Signet singleton for clients to extract, verify and deliver
239
241
  // back to the client contract. The singleton stores posts UNVERIFIED: client contracts
240
242
  // must verify the signature themselves against their MPC response key, via
241
- // verifyRespondBidirectionalEvent (see verifyResponse in the caller-contract example).
243
+ // verifyRespondBidirectionalEvent.
242
244
  export struct RespondBidirectionalEvent {
243
245
  // ABI-encoded return data of the remote call (canonical
244
246
  // serialized_output), zero-padded. First 32-byte word == 1 signals
@@ -359,9 +361,77 @@ module Signet {
359
361
 
360
362
  // ABI calldata for the EVM call: 4-byte selector + 32-byte slots
361
363
  // (https://docs.soliditylang.org/en/latest/abi-spec.html).
364
+ // CRITICAL: every ABI word here must be stored in canonical ABI form, as
365
+ // the MPC signs a transaction composed of exactly these words. See the
366
+ // ABI Calldata Word Construction Utilities below for help constructing
367
+ // canonical ABI words for common types.
362
368
  export struct EVMCalldata<#maxWords> {
363
- selector: Bytes<4>; // the literal first 4 calldata bytes (big-endian, as broadcast)
369
+ selector: Bytes<4>; // the literal first 4 calldata bytes
364
370
  noWords: Uint<16>; // No. of used words in the words list
365
- words: Vector<maxWords, Bytes<32>>;
371
+ words: Vector<maxWords, Bytes<32>>; // canonical ABI words (big-endian)
372
+ }
373
+
374
+ // ---- ABI Calldata Word Construction Utilities ------------------------------------------------------
375
+ // Canonical ABI word builders and readers. Words MUST be stored in canonical
376
+ // ABI form (big-endian, per the ABI spec). These utilities help construct
377
+ // canonical ABI words for common types.
378
+
379
+ // Construct the canonical ABI word for a 20-byte EVM address.
380
+ // Output format: 12 zero bytes, then the 20 display-order address bytes.
381
+ export pure circuit evmAddressAbiWord(addr: Bytes<20>): Bytes<32> {
382
+ return Bytes[...default<Bytes<12>>, ...addr];
383
+ }
384
+
385
+ // Construct the canonical ABI word for a Uint<128> value (e.g. an ERC20 amount).
386
+ // Output format: the value as a 32-byte big-endian integer.
387
+ export pure circuit numericAbiWord(value: Uint<128>): Bytes<32> {
388
+ // Compact's Uint->Bytes cast is little-endian,
389
+ // so cast to 16 LE bytes and emit them reversed into the low half.
390
+ const le = (value as Bytes<16>) as Vector<16, Uint<8>>;
391
+ return Bytes[
392
+ ...default<Bytes<16>>,
393
+ le[15], le[14], le[13], le[12], le[11], le[10], le[9], le[8],
394
+ le[7], le[6], le[5], le[4], le[3], le[2], le[1], le[0]
395
+ ];
396
+ }
397
+
398
+ // Construct the canonical ABI word for a Boolean.
399
+ // Output format: 31 zero bytes, then 0x01 (true) or 0x00 (false).
400
+ export pure circuit boolAbiWord(value: Boolean): Bytes<32> {
401
+ return Bytes[...default<Bytes<31>>, value as Uint<8>];
402
+ }
403
+
404
+ // Read a numeric ABI word back into a Uint<128>: the big-endian fold of
405
+ // bytes 16..31. The leading half must be zero (a canonical Uint<128> word);
406
+ // rejecting junk there keeps settle circuits from silently truncating a
407
+ // wider value. Max fold result is 2^128 - 1, well inside the field.
408
+ export pure circuit abiWordToUint128(word: Bytes<32>): Uint<128> {
409
+ assert(slice<16>(word, 0) as Field == 0 as Field, "ABI word exceeds Uint<128>");
410
+ const b0 = slice<1>(word, 16) as Field;
411
+ const b1 = b0 * 256 + (slice<1>(word, 17) as Field);
412
+ const b2 = b1 * 256 + (slice<1>(word, 18) as Field);
413
+ const b3 = b2 * 256 + (slice<1>(word, 19) as Field);
414
+ const b4 = b3 * 256 + (slice<1>(word, 20) as Field);
415
+ const b5 = b4 * 256 + (slice<1>(word, 21) as Field);
416
+ const b6 = b5 * 256 + (slice<1>(word, 22) as Field);
417
+ const b7 = b6 * 256 + (slice<1>(word, 23) as Field);
418
+ const b8 = b7 * 256 + (slice<1>(word, 24) as Field);
419
+ const b9 = b8 * 256 + (slice<1>(word, 25) as Field);
420
+ const b10 = b9 * 256 + (slice<1>(word, 26) as Field);
421
+ const b11 = b10 * 256 + (slice<1>(word, 27) as Field);
422
+ const b12 = b11 * 256 + (slice<1>(word, 28) as Field);
423
+ const b13 = b12 * 256 + (slice<1>(word, 29) as Field);
424
+ const b14 = b13 * 256 + (slice<1>(word, 30) as Field);
425
+ const b15 = b14 * 256 + (slice<1>(word, 31) as Field);
426
+ return b15 as Uint<128>;
427
+ }
428
+
429
+ // Read a Boolean ABI word back into a Boolean. The first 31 bytes must be
430
+ // zero and the last byte 0 or 1: any non-canonical word is rejected.
431
+ export pure circuit abiWordToBool(word: Bytes<32>): Boolean {
432
+ assert(slice<31>(word, 0) as Field == 0 as Field, "ABI word is not a canonical Boolean");
433
+ const last = slice<1>(word, 31) as Field;
434
+ assert(last == 0 as Field || last == 1 as Field, "ABI word is not a canonical Boolean");
435
+ return last == 1 as Field;
366
436
  }
367
437
  }
@@ -1,31 +1,12 @@
1
1
  pragma language_version >= 0.25;
2
2
 
3
- // Compiled export surface of the Signet module.
4
- //
5
- // Signet.compact must stay a module-only file (that is what lets contracts
6
- // import it), but a bare module compiles to nothing. This contract-less
7
- // program re-exports the module's pure circuits so the compiler emits them as
8
- // pureCircuits in managed/contract/index.js, giving the package an
9
- // in-process, provable-logic-identical reference implementation: unit tests
10
- // exercise the REAL circuits, and off-chain code (the attestation digest,
11
- // response verification, key-pin hashing, notification packing) reuses them
12
- // instead of hand-porting the algorithms. Off-chain code only ever DECODES a
13
- // SignBidirectionalEventNotification (fixed-offset byte reads), but tests
14
- // build fixtures with the compiled packer to pin the pack<->decode lockstep.
15
- //
16
- // ONLY the non-generic circuits are exported here. The request circuits
17
- // (calculateRequestId, constructSignBidirectionalEvent) are generic over the
18
- // tx-params type and schema lengths, the compiler cannot export
19
- // type-parameterized circuits from the top level, and this package is
20
- // client-agnostic: a capacity instantiation is a CLIENT contract's choice and
21
- // never belongs here. constructSignBidirectionalEvent is contract-only, so it
22
- // needs no off-chain copy. calculateRequestId IS needed off-chain (clients
23
- // recompute ledger map keys), so it alone has a documented-deviation TS twin
24
- // in signet-requests.ts, kept honest by caller-contract's
25
- // submitSignatureRequest round-trip test.
26
- //
27
- // Compile with --skip-zk only: pure circuits run in TS without proving keys.
28
- // The secp256k1 types require the --feature-zkir-v3 compiler flag.
3
+ // Compiled export surface of the Signet module. Signet.compact is
4
+ // module-only and compiles to nothing on its own, so this contract-less
5
+ // program re-exports its pure circuits: the compiler emits them as
6
+ // pureCircuits for unit tests and off-chain code to reuse instead of
7
+ // re-porting the algorithms. Only non-generic circuits can be exported
8
+ // (the compiler cannot export type-parameterised circuits top-level).
9
+ // Compile with --skip-zk and --feature-zkir-v3.
29
10
 
30
11
  import CompactStandardLibrary;
31
12
  import "./Signet";
@@ -34,5 +15,10 @@ export {
34
15
  signetAttestationDigest,
35
16
  verifyRespondBidirectionalEvent,
36
17
  signetKeyHash,
37
- constructSignBidirectionalEventNotificationV1
18
+ constructSignBidirectionalEventNotificationV1,
19
+ evmAddressAbiWord,
20
+ numericAbiWord,
21
+ boolAbiWord,
22
+ abiWordToUint128,
23
+ abiWordToBool
38
24
  };