@monolythium/core-sdk 0.1.0 → 0.2.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.
@@ -1,4 +1,5 @@
1
1
  import { ml_dsa65 } from '@noble/post-quantum/ml-dsa.js';
2
+ import { blake3 } from '@noble/hashes/blake3.js';
2
3
  import { keccak_256, shake256 } from '@noble/hashes/sha3.js';
3
4
  import { entropyToMnemonic, mnemonicToEntropy } from '@scure/bip39';
4
5
  import { wordlist } from '@scure/bip39/wordlists/english.js';
@@ -143,8 +144,7 @@ function encodeTransactionForHash(fields, tag) {
143
144
  n.input,
144
145
  new Uint8Array(4),
145
146
  // access_list length
146
- new Uint8Array(4)
147
- // extensions length
147
+ encodeExtensionsForHash(n.extensions)
148
148
  );
149
149
  }
150
150
  function bincodeSignedTransaction(fields, signature, publicKey) {
@@ -161,7 +161,8 @@ function bincodeSignedTransaction(fields, signature, publicKey) {
161
161
  w.rawBytes(uint256Le(n.value, "value"));
162
162
  w.bytes(n.input);
163
163
  w.u64(0n);
164
- w.u64(0n);
164
+ w.u64(BigInt(n.extensions.length));
165
+ for (const ext of n.extensions) bincodeTypedExtensionInto(w, ext);
165
166
  bincodeMlDsa65OpaqueInto(w, sig);
166
167
  bincodeMlDsa65OpaqueInto(w, pk);
167
168
  return w.toBytes();
@@ -175,7 +176,8 @@ function normalizeTxFields(fields) {
175
176
  gasLimit: parseBigint(fields.gasLimit, "gasLimit"),
176
177
  to: normalizeTo(fields.to),
177
178
  value: parseBigint(fields.value, "value"),
178
- input: normalizeBytes(fields.input ?? new Uint8Array(0), "input")
179
+ input: normalizeBytes(fields.input ?? new Uint8Array(0), "input"),
180
+ extensions: normalizeExtensions(fields.extensions)
179
181
  };
180
182
  }
181
183
  function normalizeTo(value) {
@@ -187,6 +189,30 @@ function normalizeBytes(value, label) {
187
189
  if (typeof value === "string") return hexToBytes(value, label);
188
190
  return value instanceof Uint8Array ? value : Uint8Array.from(value);
189
191
  }
192
+ function normalizeExtensions(value) {
193
+ if (value === void 0) return [];
194
+ return value.map((ext, index) => {
195
+ if (!Number.isInteger(ext.kind) || ext.kind < 0 || ext.kind > 255) {
196
+ throw new Error(`extensions[${index}].kind out of u8 range`);
197
+ }
198
+ const body = normalizeBytes("bodyHex" in ext ? ext.bodyHex : ext.body, `extensions[${index}].body`);
199
+ if (body.length > 4294967295) {
200
+ throw new Error(`extensions[${index}].body exceeds u32 length`);
201
+ }
202
+ return { kind: ext.kind, body };
203
+ });
204
+ }
205
+ function encodeExtensionsForHash(extensions) {
206
+ const chunks = [bigintToBeBytes(BigInt(extensions.length), 4, "extensions.length")];
207
+ for (const ext of extensions) {
208
+ chunks.push(
209
+ Uint8Array.of(ext.kind),
210
+ bigintToBeBytes(BigInt(ext.body.length), 4, "extension.body.length"),
211
+ ext.body
212
+ );
213
+ }
214
+ return concatBytes(...chunks);
215
+ }
190
216
  function uint256Le(value, label) {
191
217
  if (value < 0n || value >= 1n << 256n) throw new Error(`${label} out of u256 range`);
192
218
  const out = new Uint8Array(32);
@@ -202,6 +228,10 @@ function bincodeMlDsa65OpaqueInto(w, raw) {
202
228
  w.u16(STANDARD_ALGO_NUMBER_ML_DSA_65);
203
229
  w.bytes(raw);
204
230
  }
231
+ function bincodeTypedExtensionInto(w, ext) {
232
+ w.u8(ext.kind);
233
+ w.bytes(ext.body);
234
+ }
205
235
 
206
236
  // src/crypto/ml-dsa.ts
207
237
  var ML_DSA_65_SEED_LEN = 32;
@@ -210,6 +240,8 @@ var ML_DSA_65_PUBLIC_KEY_LEN = 1952;
210
240
  var ML_DSA_65_SIGNATURE_LEN = 3309;
211
241
  var STANDARD_ALGO_NUMBER_ML_DSA_65 = 1001;
212
242
  var ENUM_VARIANT_INDEX_ML_DSA_65 = 5;
243
+ var ADDRESS_DERIVATION_DOMAIN = "MONO_ADDRESS_BLAKE3_20_V1";
244
+ var ADDRESS_DERIVATION_DOMAIN_BYTES = new TextEncoder().encode(ADDRESS_DERIVATION_DOMAIN);
213
245
  var MlDsa65Backend = class _MlDsa65Backend {
214
246
  #secretKey;
215
247
  #publicKey;
@@ -217,7 +249,7 @@ var MlDsa65Backend = class _MlDsa65Backend {
217
249
  constructor(secretKey, publicKey) {
218
250
  this.#secretKey = expectBytes(secretKey, ML_DSA_65_SIGNING_KEY_LEN, "ML-DSA-65 secret key").slice();
219
251
  this.#publicKey = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, "ML-DSA-65 public key").slice();
220
- this.#addressBytes = keccak_256(this.#publicKey).slice(12);
252
+ this.#addressBytes = mlDsa65AddressBytes(this.#publicKey);
221
253
  }
222
254
  static fromSeed(seed) {
223
255
  const kp = ml_dsa65.keygen(expectBytes(seed, ML_DSA_65_SEED_LEN, "ML-DSA-65 seed"));
@@ -266,7 +298,15 @@ var MlDsa65Backend = class _MlDsa65Backend {
266
298
  }
267
299
  };
268
300
  function mlDsa65AddressFromPublicKey(publicKey) {
269
- return bytesToHex(keccak_256(expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, "ML-DSA-65 public key")).slice(12));
301
+ return bytesToHex(mlDsa65AddressBytes(publicKey));
302
+ }
303
+ function mlDsa65AddressBytes(publicKey) {
304
+ const bytes = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, "ML-DSA-65 public key");
305
+ return blake3(concatBytes(
306
+ ADDRESS_DERIVATION_DOMAIN_BYTES,
307
+ bigintToBeBytes(BigInt(STANDARD_ALGO_NUMBER_ML_DSA_65), 2, "ML-DSA-65 algo id"),
308
+ bytes
309
+ )).slice(0, 20);
270
310
  }
271
311
  function encodeMlDsa65Opaque(raw) {
272
312
  const bytes = raw instanceof Uint8Array ? raw : Uint8Array.from(raw);
@@ -385,6 +425,8 @@ var MempoolClass = {
385
425
  PrivacyOp: 2,
386
426
  CLOBOp: 3,
387
427
  AgentOp: 4,
428
+ FoundationOp: 5,
429
+ /** @deprecated Use FoundationOp. */
388
430
  GovernanceOp: 5,
389
431
  RWAOp: 6
390
432
  };
@@ -488,7 +530,6 @@ async function fetchEncryptionKey(client) {
488
530
  };
489
531
  }
490
532
  async function buildEncryptedSubmission(args) {
491
- const signed = args.backend.signEvmTx(args.tx);
492
533
  const input = normalizeInput(args.tx.input);
493
534
  const to = normalizeTo2(args.tx.to);
494
535
  const nonceAad = {
@@ -496,10 +537,14 @@ async function buildEncryptedSubmission(args) {
496
537
  nonce: parseBigint(args.tx.nonce, "nonce"),
497
538
  chainId: parseBigint(args.tx.chainId, "chainId"),
498
539
  class: args.class ?? (to !== null && input.length === 0 ? MempoolClass.Transfer : MempoolClass.ContractCall),
499
- maxFeePerGas: u128Saturate(parseBigint(args.tx.maxFeePerGas, "maxFeePerGas")),
500
- maxPriorityFeePerGas: u128Saturate(parseBigint(args.tx.maxPriorityFeePerGas, "maxPriorityFeePerGas")),
540
+ maxFeePerGas: u128Checked(parseBigint(args.tx.maxFeePerGas, "maxFeePerGas"), "maxFeePerGas"),
541
+ maxPriorityFeePerGas: u128Checked(
542
+ parseBigint(args.tx.maxPriorityFeePerGas, "maxPriorityFeePerGas"),
543
+ "maxPriorityFeePerGas"
544
+ ),
501
545
  gasLimit: parseBigint(args.tx.gasLimit, "gasLimit")
502
546
  };
547
+ const signed = args.backend.signEvmTx(args.tx);
503
548
  const decryptionHint = { epoch: args.encryptionKey.epoch, scheme: 0 };
504
549
  const built = await buildEncryptedEnvelope({
505
550
  signedInnerTxBincode: signed.wireBytes,
@@ -513,16 +558,19 @@ async function buildEncryptedSubmission(args) {
513
558
  return {
514
559
  envelopeWireHex: built.wireHex,
515
560
  innerSighashHex: `0x${[...signed.sighash].map((b) => b.toString(16).padStart(2, "0")).join("")}`,
561
+ innerTxHashHex: bytesToHex(signed.txHash),
516
562
  innerWireBytes: signed.wireBytes.length
517
563
  };
518
564
  }
519
565
  async function submitEncryptedEnvelope(client, envelopeWireHex) {
520
566
  return client.call("lyth_submitEncrypted", [envelopeWireHex]);
521
567
  }
522
- function u128Saturate(value) {
568
+ function u128Checked(value, field) {
523
569
  const cap = (1n << 128n) - 1n;
524
- if (value < 0n) return 0n;
525
- return value > cap ? cap : value;
570
+ if (value < 0n || value > cap) {
571
+ throw new Error(`${field} must fit in u128 for encrypted nonce AAD`);
572
+ }
573
+ return value;
526
574
  }
527
575
  function normalizeTo2(value) {
528
576
  if (value === null) return null;
@@ -537,6 +585,6 @@ function normalizeInput(value) {
537
585
  return value instanceof Uint8Array ? value : Uint8Array.from(value);
538
586
  }
539
587
 
540
- export { BincodeWriter, DKG_AEAD_TAG_LEN, DKG_NONCE_LEN, ENUM_VARIANT_INDEX_ML_DSA_65, ML_DSA_65_PUBLIC_KEY_LEN, ML_DSA_65_SEED_LEN, ML_DSA_65_SIGNATURE_LEN, ML_DSA_65_SIGNING_KEY_LEN, ML_KEM_768_CIPHERTEXT_LEN, ML_KEM_768_ENCAPSULATION_KEY_LEN, ML_KEM_768_SHARED_SECRET_LEN, MempoolClass, MlDsa65Backend, PQM1_ALGO_TAG_FALCON512_RESERVED, PQM1_ALGO_TAG_MLDSA65, PQM1_ALGO_TAG_MLDSA87_RESERVED, PQM1_ALGO_TAG_SLHDSA128S_RESERVED, PQM1_ENTROPY_LEN, PQM1_PAYLOAD_LEN, PQM1_V1_MLDSA65_DOMAIN_TAG, PQM1_V1_MNEMONIC_WORDS, PQM1_VERSION_V1, Pqm1Error, STANDARD_ALGO_NUMBER_ML_DSA_65, assemblePqm1Payload, bincodeDecryptHint, bincodeEncryptedEnvelope, bincodeNonceAad, bincodeSignedTransaction, buildEncryptedEnvelope, buildEncryptedSubmission, bytesToHex, concatBytes, derivePqm1MlDsa65SeedFromPayload, encodeMlDsa65Opaque, encodeTransactionForHash, encryptInnerTx, expectBytes, fetchEncryptionKey, generatePqm1Mnemonic, hexToBytes, mlDsa65AddressFromPublicKey, outerSigDigest, parsePqm1Payload, pqm1MnemonicToAddress, pqm1MnemonicToMlDsa65Backend, pqm1MnemonicToMlDsa65Seed, pqm1MnemonicToPayload, pqm1PayloadToMnemonic, submitEncryptedEnvelope };
588
+ export { ADDRESS_DERIVATION_DOMAIN, BincodeWriter, DKG_AEAD_TAG_LEN, DKG_NONCE_LEN, ENUM_VARIANT_INDEX_ML_DSA_65, ML_DSA_65_PUBLIC_KEY_LEN, ML_DSA_65_SEED_LEN, ML_DSA_65_SIGNATURE_LEN, ML_DSA_65_SIGNING_KEY_LEN, ML_KEM_768_CIPHERTEXT_LEN, ML_KEM_768_ENCAPSULATION_KEY_LEN, ML_KEM_768_SHARED_SECRET_LEN, MempoolClass, MlDsa65Backend, PQM1_ALGO_TAG_FALCON512_RESERVED, PQM1_ALGO_TAG_MLDSA65, PQM1_ALGO_TAG_MLDSA87_RESERVED, PQM1_ALGO_TAG_SLHDSA128S_RESERVED, PQM1_ENTROPY_LEN, PQM1_PAYLOAD_LEN, PQM1_V1_MLDSA65_DOMAIN_TAG, PQM1_V1_MNEMONIC_WORDS, PQM1_VERSION_V1, Pqm1Error, STANDARD_ALGO_NUMBER_ML_DSA_65, assemblePqm1Payload, bincodeDecryptHint, bincodeEncryptedEnvelope, bincodeNonceAad, bincodeSignedTransaction, buildEncryptedEnvelope, buildEncryptedSubmission, bytesToHex, concatBytes, derivePqm1MlDsa65SeedFromPayload, encodeMlDsa65Opaque, encodeTransactionForHash, encryptInnerTx, expectBytes, fetchEncryptionKey, generatePqm1Mnemonic, hexToBytes, mlDsa65AddressBytes, mlDsa65AddressFromPublicKey, outerSigDigest, parsePqm1Payload, pqm1MnemonicToAddress, pqm1MnemonicToMlDsa65Backend, pqm1MnemonicToMlDsa65Seed, pqm1MnemonicToPayload, pqm1PayloadToMnemonic, submitEncryptedEnvelope };
541
589
  //# sourceMappingURL=index.js.map
542
590
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/crypto/bincode.ts","../../src/crypto/bytes.ts","../../src/crypto/tx.ts","../../src/crypto/ml-dsa.ts","../../src/crypto/pqm1.ts","../../src/crypto/envelope.ts","../../src/address.ts","../../src/crypto/submission.ts"],"names":["bincodeMlDsa65OpaqueInto","keccak_256","normalizeTo"],"mappings":"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","file":"index.js","sourcesContent":["export class BincodeWriter {\n #chunks: number[] = [];\n\n u8(value: number): void {\n this.#int(value, 1);\n }\n\n u16(value: number): void {\n this.#int(value, 2);\n }\n\n u32(value: number): void {\n this.#int(value, 4);\n }\n\n u64(value: bigint | number): void {\n this.#big(value, 8);\n }\n\n u128(value: bigint | number): void {\n this.#big(value, 16);\n }\n\n enumVariant(value: number): void {\n this.u32(value);\n }\n\n rawBytes(bytes: Uint8Array): void {\n for (const b of bytes) this.#chunks.push(b);\n }\n\n bytes(bytes: Uint8Array): void {\n this.u64(BigInt(bytes.length));\n this.rawBytes(bytes);\n }\n\n optionBytes(bytes: Uint8Array | null): void {\n if (bytes === null) {\n this.u8(0);\n return;\n }\n this.u8(1);\n this.rawBytes(bytes);\n }\n\n toBytes(): Uint8Array {\n return Uint8Array.from(this.#chunks);\n }\n\n #int(value: number, bytes: number): void {\n if (!Number.isSafeInteger(value) || value < 0 || value >= 2 ** (bytes * 8)) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push((value >> (8 * i)) & 0xff);\n }\n }\n\n #big(value: bigint | number, bytes: number): void {\n let v = typeof value === \"bigint\" ? value : BigInt(value);\n if (v < 0n || v >= (1n << BigInt(bytes * 8))) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push(Number(v & 0xffn));\n v >>= 8n;\n }\n }\n}\n","export function concatBytes(...chunks: Uint8Array[]): Uint8Array {\n const len = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(len);\n let off = 0;\n for (const chunk of chunks) {\n out.set(chunk, off);\n off += chunk.length;\n }\n return out;\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n let out = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n out += bytes[i]!.toString(16).padStart(2, \"0\");\n }\n return out;\n}\n\nexport function hexToBytes(hex: string, label = \"hex\"): Uint8Array {\n const stripped = hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n if (stripped.length % 2 !== 0) {\n throw new Error(`${label} must have even length`);\n }\n const out = new Uint8Array(stripped.length / 2);\n for (let i = 0; i < out.length; i++) {\n const b = Number.parseInt(stripped.slice(i * 2, i * 2 + 2), 16);\n if (Number.isNaN(b)) {\n throw new Error(`${label} contains invalid hex`);\n }\n out[i] = b;\n }\n return out;\n}\n\nexport function expectBytes(value: Uint8Array | readonly number[], len: number, label: string): Uint8Array {\n if (value.length !== len) {\n throw new Error(`${label} must be ${len} bytes, got ${value.length}`);\n }\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nexport function bigintToBeBytes(value: bigint, bytes: number, label: string): Uint8Array {\n if (value < 0n || value >= (1n << BigInt(bytes * 8))) {\n throw new Error(`${label} out of ${bytes * 8}-bit range`);\n }\n const out = new Uint8Array(bytes);\n let v = value;\n for (let i = bytes - 1; i >= 0; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nexport function parseBigint(value: bigint | number | string | undefined, label: string): bigint {\n if (value === undefined) throw new Error(`${label} missing`);\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value) || value < 0) throw new Error(`${label} must be a non-negative safe integer`);\n return BigInt(value);\n }\n if (value.startsWith(\"0x\") || value.startsWith(\"0X\")) return BigInt(value);\n return BigInt(value);\n}\n","import { BincodeWriter } from \"./bincode.js\";\nimport { bigintToBeBytes, concatBytes, expectBytes, hexToBytes, parseBigint } from \"./bytes.js\";\nimport {\n ENUM_VARIANT_INDEX_ML_DSA_65,\n ML_DSA_65_PUBLIC_KEY_LEN,\n ML_DSA_65_SIGNATURE_LEN,\n STANDARD_ALGO_NUMBER_ML_DSA_65,\n} from \"./ml-dsa.js\";\n\nexport interface NativeEvmTxFields {\n chainId: bigint | number | string;\n nonce: bigint | number | string;\n maxPriorityFeePerGas: bigint | number | string;\n maxFeePerGas: bigint | number | string;\n gasLimit: bigint | number | string;\n to: Uint8Array | readonly number[] | string | null;\n value: bigint | number | string;\n input?: Uint8Array | readonly number[] | string;\n}\n\nexport function encodeTransactionForHash(fields: NativeEvmTxFields, tag: 0x01 | 0x02): Uint8Array {\n const n = normalizeTxFields(fields);\n return concatBytes(\n Uint8Array.of(tag),\n bigintToBeBytes(n.chainId, 8, \"chainId\"),\n bigintToBeBytes(n.nonce, 8, \"nonce\"),\n bigintToBeBytes(n.maxPriorityFeePerGas, 32, \"maxPriorityFeePerGas\"),\n bigintToBeBytes(n.maxFeePerGas, 32, \"maxFeePerGas\"),\n bigintToBeBytes(n.gasLimit, 8, \"gasLimit\"),\n n.to === null ? Uint8Array.of(0) : concatBytes(Uint8Array.of(1), n.to),\n bigintToBeBytes(n.value, 32, \"value\"),\n bigintToBeBytes(BigInt(n.input.length), 4, \"input.length\"),\n n.input,\n new Uint8Array(4), // access_list length\n new Uint8Array(4), // extensions length\n );\n}\n\nexport function bincodeSignedTransaction(\n fields: NativeEvmTxFields,\n signature: Uint8Array | readonly number[],\n publicKey: Uint8Array | readonly number[],\n): Uint8Array {\n const n = normalizeTxFields(fields);\n const sig = expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\");\n const pk = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n const w = new BincodeWriter();\n w.u64(n.chainId);\n w.u64(n.nonce);\n w.rawBytes(uint256Le(n.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"));\n w.rawBytes(uint256Le(n.maxFeePerGas, \"maxFeePerGas\"));\n w.u64(n.gasLimit);\n w.optionBytes(n.to);\n w.rawBytes(uint256Le(n.value, \"value\"));\n w.bytes(n.input);\n w.u64(0n); // access_list length\n w.u64(0n); // extensions length\n bincodeMlDsa65OpaqueInto(w, sig);\n bincodeMlDsa65OpaqueInto(w, pk);\n return w.toBytes();\n}\n\ninterface NormalizedNativeEvmTxFields {\n chainId: bigint;\n nonce: bigint;\n maxPriorityFeePerGas: bigint;\n maxFeePerGas: bigint;\n gasLimit: bigint;\n to: Uint8Array | null;\n value: bigint;\n input: Uint8Array;\n}\n\nfunction normalizeTxFields(fields: NativeEvmTxFields): NormalizedNativeEvmTxFields {\n return {\n chainId: parseBigint(fields.chainId, \"chainId\"),\n nonce: parseBigint(fields.nonce, \"nonce\"),\n maxPriorityFeePerGas: parseBigint(fields.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"),\n maxFeePerGas: parseBigint(fields.maxFeePerGas, \"maxFeePerGas\"),\n gasLimit: parseBigint(fields.gasLimit, \"gasLimit\"),\n to: normalizeTo(fields.to),\n value: parseBigint(fields.value, \"value\"),\n input: normalizeBytes(fields.input ?? new Uint8Array(0), \"input\"),\n };\n}\n\nfunction normalizeTo(value: NativeEvmTxFields[\"to\"]): Uint8Array | null {\n if (value === null) return null;\n const bytes = normalizeBytes(value, \"to\");\n return expectBytes(bytes, 20, \"to\");\n}\n\nfunction normalizeBytes(value: Uint8Array | readonly number[] | string, label: string): Uint8Array {\n if (typeof value === \"string\") return hexToBytes(value, label);\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nfunction uint256Le(value: bigint, label: string): Uint8Array {\n if (value < 0n || value >= 1n << 256n) throw new Error(`${label} out of u256 range`);\n const out = new Uint8Array(32);\n let v = value;\n for (let i = 0; i < 32; i++) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nfunction bincodeMlDsa65OpaqueInto(w: BincodeWriter, raw: Uint8Array): void {\n w.enumVariant(ENUM_VARIANT_INDEX_ML_DSA_65);\n w.u16(STANDARD_ALGO_NUMBER_ML_DSA_65);\n w.bytes(raw);\n}\n","import { ml_dsa65 } from \"@noble/post-quantum/ml-dsa.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { bigintToBeBytes, bytesToHex, concatBytes, expectBytes } from \"./bytes.js\";\nimport { bincodeSignedTransaction, encodeTransactionForHash, type NativeEvmTxFields } from \"./tx.js\";\n\nexport const ML_DSA_65_SEED_LEN = 32;\nexport const ML_DSA_65_SIGNING_KEY_LEN = 4032;\nexport const ML_DSA_65_PUBLIC_KEY_LEN = 1952;\nexport const ML_DSA_65_SIGNATURE_LEN = 3309;\nexport const STANDARD_ALGO_NUMBER_ML_DSA_65 = 1001;\nexport const ENUM_VARIANT_INDEX_ML_DSA_65 = 5;\n\nexport class MlDsa65Backend {\n readonly #secretKey: Uint8Array;\n readonly #publicKey: Uint8Array;\n readonly #addressBytes: Uint8Array;\n\n private constructor(secretKey: Uint8Array, publicKey: Uint8Array) {\n this.#secretKey = expectBytes(secretKey, ML_DSA_65_SIGNING_KEY_LEN, \"ML-DSA-65 secret key\").slice();\n this.#publicKey = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\").slice();\n this.#addressBytes = keccak_256(this.#publicKey).slice(12);\n }\n\n static fromSeed(seed: Uint8Array | readonly number[]): MlDsa65Backend {\n const kp = ml_dsa65.keygen(expectBytes(seed, ML_DSA_65_SEED_LEN, \"ML-DSA-65 seed\"));\n return new MlDsa65Backend(kp.secretKey, kp.publicKey);\n }\n\n publicKey(): Uint8Array {\n return this.#publicKey.slice();\n }\n\n addressBytes(): Uint8Array {\n return this.#addressBytes.slice();\n }\n\n getAddress(): string {\n return bytesToHex(this.#addressBytes);\n }\n\n sign(message: Uint8Array): Uint8Array {\n return ml_dsa65.sign(message, this.#secretKey, { extraEntropy: false });\n }\n\n signPrehash(digest: Uint8Array): Uint8Array {\n return this.sign(expectBytes(digest, 32, \"prehash\"));\n }\n\n verify(message: Uint8Array, signature: Uint8Array): boolean {\n return ml_dsa65.verify(\n expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\"),\n message,\n this.#publicKey,\n );\n }\n\n signEvmTx(fields: NativeEvmTxFields): {\n wireHex: string;\n wireBytes: Uint8Array;\n sighash: Uint8Array;\n txHash: Uint8Array;\n } {\n const txHashPreimage = encodeTransactionForHash(fields, 0x01);\n const sighash = keccak_256(txHashPreimage);\n const signature = this.sign(sighash);\n const wireBytes = bincodeSignedTransaction(fields, signature, this.#publicKey);\n const txHash = keccak_256(\n concatBytes(\n encodeTransactionForHash(fields, 0x02),\n signature,\n this.#publicKey,\n ),\n );\n return {\n wireHex: bytesToHex(wireBytes).slice(2),\n wireBytes,\n sighash,\n txHash,\n };\n }\n}\n\nexport function mlDsa65AddressFromPublicKey(publicKey: Uint8Array | readonly number[]): string {\n return bytesToHex(keccak_256(expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\")).slice(12));\n}\n\nexport function encodeMlDsa65Opaque(raw: Uint8Array | readonly number[]): Uint8Array {\n const bytes = raw instanceof Uint8Array ? raw : Uint8Array.from(raw);\n const len = bytes.length === ML_DSA_65_PUBLIC_KEY_LEN ? ML_DSA_65_PUBLIC_KEY_LEN : ML_DSA_65_SIGNATURE_LEN;\n expectBytes(bytes, len, \"ML-DSA-65 opaque bytes\");\n const out = new Uint8Array(4 + 2 + 8 + bytes.length);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, ENUM_VARIANT_INDEX_ML_DSA_65, true);\n dv.setUint16(4, STANDARD_ALGO_NUMBER_ML_DSA_65, true);\n dv.setBigUint64(6, BigInt(bytes.length), true);\n out.set(bytes, 14);\n return out;\n}\n\nexport function uint256Bytes(value: bigint | number | string, label: string): Uint8Array {\n const v = typeof value === \"bigint\" ? value : typeof value === \"number\" ? BigInt(value) : BigInt(value);\n return bigintToBeBytes(v, 32, label);\n}\n","import { shake256 } from \"@noble/hashes/sha3.js\";\nimport { entropyToMnemonic, mnemonicToEntropy } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\nimport { concatBytes, expectBytes } from \"./bytes.js\";\nimport { ML_DSA_65_SEED_LEN, MlDsa65Backend } from \"./ml-dsa.js\";\n\nexport const PQM1_ALGO_TAG_MLDSA65 = 0x01;\nexport const PQM1_ALGO_TAG_MLDSA87_RESERVED = 0x02;\nexport const PQM1_ALGO_TAG_SLHDSA128S_RESERVED = 0x03;\nexport const PQM1_ALGO_TAG_FALCON512_RESERVED = 0x04;\nexport const PQM1_VERSION_V1 = 0x01;\nexport const PQM1_PAYLOAD_LEN = 32;\nexport const PQM1_ENTROPY_LEN = 30;\nexport const PQM1_V1_MNEMONIC_WORDS = 24;\nexport const PQM1_V1_MLDSA65_DOMAIN_TAG = \"monolythium.pqm1.v1.mldsa65\";\n\nexport type Pqm1ErrorKind =\n | \"badWordCount\"\n | \"bip39Decode\"\n | \"badPayloadLength\"\n | \"unsupportedAlgorithm\"\n | \"unsupportedVersion\"\n | \"missingRandom\";\n\nexport class Pqm1Error extends Error {\n constructor(\n readonly kind: Pqm1ErrorKind,\n message: string,\n ) {\n super(message);\n this.name = \"Pqm1Error\";\n }\n}\n\nexport interface Pqm1Payload {\n algoTag: typeof PQM1_ALGO_TAG_MLDSA65;\n version: typeof PQM1_VERSION_V1;\n entropy: Uint8Array;\n bytes: Uint8Array;\n}\n\nexport type Pqm1Rng = (bytes: Uint8Array) => void;\n\nconst DOMAIN_BYTES = new TextEncoder().encode(PQM1_V1_MLDSA65_DOMAIN_TAG);\n\nfunction normalizeMnemonic(mnemonic: string): string {\n return mnemonic.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\nfunction ensureSupportedPayload(bytes: Uint8Array): void {\n if (bytes.length !== PQM1_PAYLOAD_LEN) {\n throw new Pqm1Error(\"badPayloadLength\", `PQM-1 payload must be ${PQM1_PAYLOAD_LEN} bytes, got ${bytes.length}`);\n }\n if (bytes[0] !== PQM1_ALGO_TAG_MLDSA65) {\n throw new Pqm1Error(\"unsupportedAlgorithm\", `unsupported PQM-1 algorithm tag 0x${bytes[0]!.toString(16).padStart(2, \"0\")}`);\n }\n if (bytes[1] !== PQM1_VERSION_V1) {\n throw new Pqm1Error(\"unsupportedVersion\", `unsupported PQM-1 version 0x${bytes[1]!.toString(16).padStart(2, \"0\")}`);\n }\n}\n\nfunction defaultRandomFill(bytes: Uint8Array): void {\n const cryptoObj = globalThis.crypto;\n if (!cryptoObj?.getRandomValues) {\n throw new Pqm1Error(\"missingRandom\", \"globalThis.crypto.getRandomValues is unavailable\");\n }\n cryptoObj.getRandomValues(bytes);\n}\n\nexport function assemblePqm1Payload(entropy: Uint8Array | readonly number[]): Uint8Array {\n const ent = expectBytes(entropy, PQM1_ENTROPY_LEN, \"PQM-1 entropy\");\n const payload = new Uint8Array(PQM1_PAYLOAD_LEN);\n payload[0] = PQM1_ALGO_TAG_MLDSA65;\n payload[1] = PQM1_VERSION_V1;\n payload.set(ent, 2);\n return payload;\n}\n\nexport function parsePqm1Payload(payload: Uint8Array | readonly number[]): Pqm1Payload {\n const bytes = expectBytes(payload, PQM1_PAYLOAD_LEN, \"PQM-1 payload\").slice();\n ensureSupportedPayload(bytes);\n return {\n algoTag: PQM1_ALGO_TAG_MLDSA65,\n version: PQM1_VERSION_V1,\n entropy: bytes.slice(2),\n bytes,\n };\n}\n\nexport function pqm1PayloadToMnemonic(payload: Uint8Array | readonly number[]): string {\n const parsed = parsePqm1Payload(payload);\n return entropyToMnemonic(parsed.bytes, wordlist);\n}\n\nexport function pqm1MnemonicToPayload(mnemonic: string): Pqm1Payload {\n const normalized = normalizeMnemonic(mnemonic);\n const words = normalized.length === 0 ? [] : normalized.split(\" \");\n if (words.length !== PQM1_V1_MNEMONIC_WORDS) {\n throw new Pqm1Error(\"badWordCount\", `PQM-1 mnemonic must be ${PQM1_V1_MNEMONIC_WORDS} words, got ${words.length}`);\n }\n let payload: Uint8Array;\n try {\n payload = mnemonicToEntropy(normalized, wordlist);\n } catch (e) {\n throw new Pqm1Error(\"bip39Decode\", `invalid PQM-1 mnemonic: ${(e as Error).message}`);\n }\n return parsePqm1Payload(payload);\n}\n\nexport function derivePqm1MlDsa65SeedFromPayload(payload: Uint8Array | readonly number[]): Uint8Array {\n const parsed = parsePqm1Payload(payload);\n return shake256(concatBytes(DOMAIN_BYTES, parsed.bytes), { dkLen: ML_DSA_65_SEED_LEN });\n}\n\nexport function pqm1MnemonicToMlDsa65Seed(mnemonic: string): Uint8Array {\n return derivePqm1MlDsa65SeedFromPayload(pqm1MnemonicToPayload(mnemonic).bytes);\n}\n\nexport function pqm1MnemonicToMlDsa65Backend(mnemonic: string): MlDsa65Backend {\n return MlDsa65Backend.fromSeed(pqm1MnemonicToMlDsa65Seed(mnemonic));\n}\n\nexport function pqm1MnemonicToAddress(mnemonic: string): string {\n return pqm1MnemonicToMlDsa65Backend(mnemonic).getAddress();\n}\n\nexport function generatePqm1Mnemonic(rng: Pqm1Rng = defaultRandomFill): string {\n const entropy = new Uint8Array(PQM1_ENTROPY_LEN);\n rng(entropy);\n return pqm1PayloadToMnemonic(assemblePqm1Payload(entropy));\n}\n","import { ml_kem768 } from \"@noble/post-quantum/ml-kem.js\";\nimport { chacha20poly1305 } from \"@noble/ciphers/chacha.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { randomBytes } from \"@noble/hashes/utils.js\";\nimport { BincodeWriter } from \"./bincode.js\";\nimport { bytesToHex, concatBytes, expectBytes } from \"./bytes.js\";\nimport {\n ENUM_VARIANT_INDEX_ML_DSA_65,\n ML_DSA_65_PUBLIC_KEY_LEN,\n ML_DSA_65_SIGNATURE_LEN,\n STANDARD_ALGO_NUMBER_ML_DSA_65,\n} from \"./ml-dsa.js\";\n\nconst DKG_AEAD_DOMAIN_TAG = new TextEncoder().encode(\"protocore/v2/mempool/dkg-mlkem768/1\");\n\nexport const ML_KEM_768_CIPHERTEXT_LEN = 1088;\nexport const ML_KEM_768_ENCAPSULATION_KEY_LEN = 1184;\nexport const ML_KEM_768_SHARED_SECRET_LEN = 32;\nexport const DKG_NONCE_LEN = 12;\nexport const DKG_AEAD_TAG_LEN = 16;\n\nexport const MempoolClass = {\n Transfer: 0,\n ContractCall: 1,\n PrivacyOp: 2,\n CLOBOp: 3,\n AgentOp: 4,\n GovernanceOp: 5,\n RWAOp: 6,\n} as const;\nexport type MempoolClass = (typeof MempoolClass)[keyof typeof MempoolClass];\n\nexport interface NonceAad {\n sender: Uint8Array;\n nonce: bigint;\n chainId: bigint;\n class: MempoolClass;\n maxFeePerGas: bigint;\n maxPriorityFeePerGas: bigint;\n gasLimit: bigint;\n}\n\nexport interface DecryptHint {\n epoch: bigint;\n scheme: number;\n}\n\nexport interface EncryptedEnvelope {\n nonceAad: NonceAad;\n ciphertext: Uint8Array;\n decryptionHint: DecryptHint;\n senderPubkey: Uint8Array;\n outerSignature: Uint8Array;\n sender: Uint8Array;\n}\n\nexport function bincodeNonceAad(aad: NonceAad): Uint8Array {\n const w = new BincodeWriter();\n w.bytes(expectBytes(aad.sender, 20, \"NonceAad.sender\"));\n w.u64(aad.nonce);\n w.u64(aad.chainId);\n w.enumVariant(aad.class);\n w.u128(aad.maxFeePerGas);\n w.u128(aad.maxPriorityFeePerGas);\n w.u64(aad.gasLimit);\n return w.toBytes();\n}\n\nexport function bincodeDecryptHint(hint: DecryptHint): Uint8Array {\n const w = new BincodeWriter();\n w.u64(hint.epoch);\n w.u16(hint.scheme);\n return w.toBytes();\n}\n\nexport function bincodeEncryptedEnvelope(env: EncryptedEnvelope): Uint8Array {\n const w = new BincodeWriter();\n w.rawBytes(bincodeNonceAad(env.nonceAad));\n w.bytes(env.ciphertext);\n w.rawBytes(bincodeDecryptHint(env.decryptionHint));\n bincodeMlDsa65OpaqueInto(w, expectBytes(env.senderPubkey, ML_DSA_65_PUBLIC_KEY_LEN, \"senderPubkey\"));\n bincodeMlDsa65OpaqueInto(w, expectBytes(env.outerSignature, ML_DSA_65_SIGNATURE_LEN, \"outerSignature\"));\n w.bytes(expectBytes(env.sender, 20, \"sender\"));\n return w.toBytes();\n}\n\nexport function encryptInnerTx(\n signedInnerTxBincode: Uint8Array,\n nonceAad: NonceAad,\n kemEncapsulationKey: Uint8Array,\n): Uint8Array {\n expectBytes(kemEncapsulationKey, ML_KEM_768_ENCAPSULATION_KEY_LEN, \"kemEncapsulationKey\");\n const { cipherText: kemCt, sharedSecret } = ml_kem768.encapsulate(kemEncapsulationKey);\n const nonce = randomBytes(DKG_NONCE_LEN);\n const cipher = chacha20poly1305(sharedSecret, nonce, aadFor(nonceAad));\n const aeadCt = cipher.encrypt(signedInnerTxBincode);\n sharedSecret.fill(0);\n return concatBytes(kemCt, nonce, aeadCt);\n}\n\nexport function outerSigDigest(\n nonceAad: NonceAad,\n ciphertext: Uint8Array,\n decryptionHint: DecryptHint,\n senderPubkey: Uint8Array,\n): Uint8Array {\n const aad = bincodeNonceAad(nonceAad);\n const hint = bincodeDecryptHint(decryptionHint);\n return keccak_256(concatBytes(aad, ciphertext, hint, expectBytes(senderPubkey, ML_DSA_65_PUBLIC_KEY_LEN, \"senderPubkey\")));\n}\n\nexport async function buildEncryptedEnvelope(args: {\n signedInnerTxBincode: Uint8Array;\n nonceAad: NonceAad;\n decryptionHint: DecryptHint;\n kemEncapsulationKey: Uint8Array;\n senderAddress: Uint8Array;\n senderPubkey: Uint8Array;\n signOuterDigest: (digest: Uint8Array) => Promise<Uint8Array> | Uint8Array;\n}): Promise<{ envelope: EncryptedEnvelope; wireBytes: Uint8Array; wireHex: string }> {\n const ciphertext = encryptInnerTx(args.signedInnerTxBincode, args.nonceAad, args.kemEncapsulationKey);\n const digest = outerSigDigest(args.nonceAad, ciphertext, args.decryptionHint, args.senderPubkey);\n const outerSignature = await args.signOuterDigest(digest);\n const envelope: EncryptedEnvelope = {\n nonceAad: args.nonceAad,\n ciphertext,\n decryptionHint: args.decryptionHint,\n senderPubkey: expectBytes(args.senderPubkey, ML_DSA_65_PUBLIC_KEY_LEN, \"senderPubkey\"),\n outerSignature: expectBytes(outerSignature, ML_DSA_65_SIGNATURE_LEN, \"outerSignature\"),\n sender: expectBytes(args.senderAddress, 20, \"senderAddress\"),\n };\n const wireBytes = bincodeEncryptedEnvelope(envelope);\n return { envelope, wireBytes, wireHex: bytesToHex(wireBytes) };\n}\n\nfunction aadFor(aad: NonceAad): Uint8Array {\n return concatBytes(DKG_AEAD_DOMAIN_TAG, bincodeNonceAad(aad));\n}\n\nfunction bincodeMlDsa65OpaqueInto(w: BincodeWriter, raw: Uint8Array): void {\n w.enumVariant(ENUM_VARIANT_INDEX_ML_DSA_65);\n w.u16(STANDARD_ALGO_NUMBER_ML_DSA_65);\n w.bytes(raw);\n}\n","/**\n * Address display helpers.\n *\n * Monolythium keeps 20-byte EVM-compatible addresses on the wire, but\n * user-facing surfaces display them as `mono1...` bech32m strings.\n */\n\nexport const ADDRESS_HRP = \"mono\" as const;\n\nconst CHARSET = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\";\nconst CHARSET_MAP = new Map([...CHARSET].map((c, i) => [c, i]));\nconst BECH32M_CONST = 0x2bc830a3;\nconst HEX_20_BYTE_RE = /^0x[0-9a-fA-F]{40}$/;\n\nexport class AddressError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AddressError\";\n }\n}\n\nexport function hexToAddressBytes(address: string): Uint8Array {\n if (!HEX_20_BYTE_RE.test(address)) {\n throw new AddressError(\"expected 0x-prefixed 20-byte hex address\");\n }\n const out = new Uint8Array(20);\n const body = address.slice(2);\n for (let i = 0; i < 20; i++) {\n out[i] = Number.parseInt(body.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\nexport function addressBytesToHex(address: Uint8Array | readonly number[]): string {\n const bytes = expectLength(address, 20, \"address\");\n return `0x${[...bytes].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\nexport function addressToBech32(address: string | Uint8Array | readonly number[]): string {\n const bytes = typeof address === \"string\" ? hexToAddressBytes(address) : expectLength(address, 20, \"address\");\n const words = convertBits([...bytes], 8, 5, true);\n const checksum = createChecksum(ADDRESS_HRP, words);\n return `${ADDRESS_HRP}1${[...words, ...checksum].map((v) => CHARSET[v]).join(\"\")}`;\n}\n\nexport function bech32ToAddressBytes(address: string): Uint8Array {\n const parsed = decodeBech32m(address);\n if (parsed.hrp !== ADDRESS_HRP) {\n throw new AddressError(`unexpected hrp '${parsed.hrp}', expected '${ADDRESS_HRP}'`);\n }\n const bytes = convertBits(parsed.data, 5, 8, false);\n if (bytes.length !== 20) {\n throw new AddressError(`expected 20-byte payload, got ${bytes.length} bytes`);\n }\n return Uint8Array.from(bytes);\n}\n\nexport function bech32ToAddress(address: string): string {\n return addressBytesToHex(bech32ToAddressBytes(address));\n}\n\nexport function parseAddress(address: string): Uint8Array {\n if (address.startsWith(\"0x\") || address.startsWith(\"0X\")) {\n return hexToAddressBytes(address);\n }\n return bech32ToAddressBytes(address);\n}\n\nexport function normalizeAddressHex(address: string): string {\n return addressBytesToHex(parseAddress(address));\n}\n\nfunction decodeBech32m(input: string): { hrp: string; data: number[] } {\n if (input.length < 8) {\n throw new AddressError(\"bech32m address is too short\");\n }\n const hasLower = input !== input.toUpperCase();\n const hasUpper = input !== input.toLowerCase();\n if (hasLower && hasUpper) {\n throw new AddressError(\"bech32m address cannot mix upper and lower case\");\n }\n const s = input.toLowerCase();\n const sep = s.lastIndexOf(\"1\");\n if (sep <= 0 || sep + 7 > s.length) {\n throw new AddressError(\"bech32m separator/checksum shape is invalid\");\n }\n const hrp = s.slice(0, sep);\n const values: number[] = [];\n for (const c of s.slice(sep + 1)) {\n const v = CHARSET_MAP.get(c);\n if (v === undefined) {\n throw new AddressError(`invalid bech32m character '${c}'`);\n }\n values.push(v);\n }\n if (!verifyChecksum(hrp, values)) {\n throw new AddressError(\"bech32m checksum mismatch\");\n }\n return { hrp, data: values.slice(0, -6) };\n}\n\nfunction hrpExpand(hrp: string): number[] {\n const high = [...hrp].map((c) => c.charCodeAt(0) >> 5);\n const low = [...hrp].map((c) => c.charCodeAt(0) & 31);\n return [...high, 0, ...low];\n}\n\nfunction polymod(values: number[]): number {\n const generators = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\n let chk = 1;\n for (const value of values) {\n const top = chk >> 25;\n chk = ((chk & 0x1ffffff) << 5) ^ value;\n for (let i = 0; i < 5; i++) {\n if (((top >> i) & 1) === 1) {\n chk ^= generators[i];\n }\n }\n }\n return chk >>> 0;\n}\n\nfunction createChecksum(hrp: string, data: number[]): number[] {\n const values = [...hrpExpand(hrp), ...data, 0, 0, 0, 0, 0, 0];\n const mod = polymod(values) ^ BECH32M_CONST;\n const out: number[] = [];\n for (let p = 0; p < 6; p++) {\n out.push((mod >> (5 * (5 - p))) & 31);\n }\n return out;\n}\n\nfunction verifyChecksum(hrp: string, values: number[]): boolean {\n return polymod([...hrpExpand(hrp), ...values]) === BECH32M_CONST;\n}\n\nfunction convertBits(data: readonly number[], fromBits: number, toBits: number, pad: boolean): number[] {\n let acc = 0;\n let bits = 0;\n const ret: number[] = [];\n const maxv = (1 << toBits) - 1;\n const maxAcc = (1 << (fromBits + toBits - 1)) - 1;\n for (const value of data) {\n if (value < 0 || value >> fromBits !== 0) {\n throw new AddressError(\"invalid address payload value\");\n }\n acc = ((acc << fromBits) | value) & maxAcc;\n bits += fromBits;\n while (bits >= toBits) {\n bits -= toBits;\n ret.push((acc >> bits) & maxv);\n }\n }\n if (pad) {\n if (bits > 0) {\n ret.push((acc << (toBits - bits)) & maxv);\n }\n } else if (bits >= fromBits || ((acc << (toBits - bits)) & maxv) !== 0) {\n throw new AddressError(\"invalid bech32m padding\");\n }\n return ret;\n}\n\nfunction expectLength(value: Uint8Array | readonly number[], len: number, name: string): Uint8Array {\n if (value.length !== len) {\n throw new AddressError(`${name} must be ${len} bytes`);\n }\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n","import { RpcClient } from \"../client.js\";\nimport { hexToAddressBytes } from \"../address.js\";\nimport { hexToBytes, parseBigint } from \"./bytes.js\";\nimport { buildEncryptedEnvelope, MempoolClass, type DecryptHint, type NonceAad } from \"./envelope.js\";\nimport type { MlDsa65Backend } from \"./ml-dsa.js\";\nimport type { NativeEvmTxFields } from \"./tx.js\";\n\nexport interface EncryptionKey {\n algo: string;\n epoch: bigint;\n encapsulationKey: Uint8Array;\n}\n\nexport interface EncryptedSubmission {\n envelopeWireHex: string;\n innerSighashHex: string;\n innerWireBytes: number;\n}\n\nexport async function fetchEncryptionKey(client: RpcClient): Promise<EncryptionKey> {\n const result = await client.call<{ algo?: string; epoch: number | string; encapsulationKey: string }>(\n \"lyth_getEncryptionKey\",\n [],\n );\n return {\n algo: result.algo ?? \"ml-kem-768\",\n epoch: typeof result.epoch === \"string\" ? BigInt(result.epoch) : BigInt(result.epoch),\n encapsulationKey: hexToBytes(result.encapsulationKey, \"encapsulationKey\"),\n };\n}\n\nexport async function buildEncryptedSubmission(args: {\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n encryptionKey: EncryptionKey;\n class?: MempoolClass;\n}): Promise<EncryptedSubmission> {\n const signed = args.backend.signEvmTx(args.tx);\n const input = normalizeInput(args.tx.input);\n const to = normalizeTo(args.tx.to);\n const nonceAad: NonceAad = {\n sender: args.backend.addressBytes(),\n nonce: parseBigint(args.tx.nonce, \"nonce\"),\n chainId: parseBigint(args.tx.chainId, \"chainId\"),\n class: args.class ?? (to !== null && input.length === 0 ? MempoolClass.Transfer : MempoolClass.ContractCall),\n maxFeePerGas: u128Saturate(parseBigint(args.tx.maxFeePerGas, \"maxFeePerGas\")),\n maxPriorityFeePerGas: u128Saturate(parseBigint(args.tx.maxPriorityFeePerGas, \"maxPriorityFeePerGas\")),\n gasLimit: parseBigint(args.tx.gasLimit, \"gasLimit\"),\n };\n const decryptionHint: DecryptHint = { epoch: args.encryptionKey.epoch, scheme: 0 };\n const built = await buildEncryptedEnvelope({\n signedInnerTxBincode: signed.wireBytes,\n nonceAad,\n decryptionHint,\n kemEncapsulationKey: args.encryptionKey.encapsulationKey,\n senderAddress: args.backend.addressBytes(),\n senderPubkey: args.backend.publicKey(),\n signOuterDigest: (digest) => args.backend.signPrehash(digest),\n });\n return {\n envelopeWireHex: built.wireHex,\n innerSighashHex: `0x${[...signed.sighash].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\")}`,\n innerWireBytes: signed.wireBytes.length,\n };\n}\n\nexport async function submitEncryptedEnvelope(client: RpcClient, envelopeWireHex: string): Promise<string> {\n return client.call(\"lyth_submitEncrypted\", [envelopeWireHex]);\n}\n\nfunction u128Saturate(value: bigint): bigint {\n const cap = (1n << 128n) - 1n;\n if (value < 0n) return 0n;\n return value > cap ? cap : value;\n}\n\nfunction normalizeTo(value: NativeEvmTxFields[\"to\"]): Uint8Array | null {\n if (value === null) return null;\n if (typeof value === \"string\") return hexToAddressBytes(value);\n const bytes = value instanceof Uint8Array ? value : Uint8Array.from(value);\n if (bytes.length !== 20) throw new Error(\"to must be 20 bytes\");\n return bytes;\n}\n\nfunction normalizeInput(value: NativeEvmTxFields[\"input\"]): Uint8Array {\n if (value === undefined) return new Uint8Array(0);\n if (typeof value === \"string\") return hexToBytes(value, \"input\");\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n"]}
1
+ {"version":3,"sources":["../../src/crypto/bincode.ts","../../src/crypto/bytes.ts","../../src/crypto/tx.ts","../../src/crypto/ml-dsa.ts","../../src/crypto/pqm1.ts","../../src/crypto/envelope.ts","../../src/address.ts","../../src/crypto/submission.ts"],"names":["bincodeMlDsa65OpaqueInto","keccak_256","normalizeTo"],"mappings":"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","file":"index.js","sourcesContent":["export class BincodeWriter {\n #chunks: number[] = [];\n\n u8(value: number): void {\n this.#int(value, 1);\n }\n\n u16(value: number): void {\n this.#int(value, 2);\n }\n\n u32(value: number): void {\n this.#int(value, 4);\n }\n\n u64(value: bigint | number): void {\n this.#big(value, 8);\n }\n\n u128(value: bigint | number): void {\n this.#big(value, 16);\n }\n\n enumVariant(value: number): void {\n this.u32(value);\n }\n\n rawBytes(bytes: Uint8Array): void {\n for (const b of bytes) this.#chunks.push(b);\n }\n\n bytes(bytes: Uint8Array): void {\n this.u64(BigInt(bytes.length));\n this.rawBytes(bytes);\n }\n\n optionBytes(bytes: Uint8Array | null): void {\n if (bytes === null) {\n this.u8(0);\n return;\n }\n this.u8(1);\n this.rawBytes(bytes);\n }\n\n toBytes(): Uint8Array {\n return Uint8Array.from(this.#chunks);\n }\n\n #int(value: number, bytes: number): void {\n if (!Number.isSafeInteger(value) || value < 0 || value >= 2 ** (bytes * 8)) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push((value >> (8 * i)) & 0xff);\n }\n }\n\n #big(value: bigint | number, bytes: number): void {\n let v = typeof value === \"bigint\" ? value : BigInt(value);\n if (v < 0n || v >= (1n << BigInt(bytes * 8))) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push(Number(v & 0xffn));\n v >>= 8n;\n }\n }\n}\n","export function concatBytes(...chunks: Uint8Array[]): Uint8Array {\n const len = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(len);\n let off = 0;\n for (const chunk of chunks) {\n out.set(chunk, off);\n off += chunk.length;\n }\n return out;\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n let out = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n out += bytes[i]!.toString(16).padStart(2, \"0\");\n }\n return out;\n}\n\nexport function hexToBytes(hex: string, label = \"hex\"): Uint8Array {\n const stripped = hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n if (stripped.length % 2 !== 0) {\n throw new Error(`${label} must have even length`);\n }\n const out = new Uint8Array(stripped.length / 2);\n for (let i = 0; i < out.length; i++) {\n const b = Number.parseInt(stripped.slice(i * 2, i * 2 + 2), 16);\n if (Number.isNaN(b)) {\n throw new Error(`${label} contains invalid hex`);\n }\n out[i] = b;\n }\n return out;\n}\n\nexport function expectBytes(value: Uint8Array | readonly number[], len: number, label: string): Uint8Array {\n if (value.length !== len) {\n throw new Error(`${label} must be ${len} bytes, got ${value.length}`);\n }\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nexport function bigintToBeBytes(value: bigint, bytes: number, label: string): Uint8Array {\n if (value < 0n || value >= (1n << BigInt(bytes * 8))) {\n throw new Error(`${label} out of ${bytes * 8}-bit range`);\n }\n const out = new Uint8Array(bytes);\n let v = value;\n for (let i = bytes - 1; i >= 0; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nexport function parseBigint(value: bigint | number | string | undefined, label: string): bigint {\n if (value === undefined) throw new Error(`${label} missing`);\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value) || value < 0) throw new Error(`${label} must be a non-negative safe integer`);\n return BigInt(value);\n }\n if (value.startsWith(\"0x\") || value.startsWith(\"0X\")) return BigInt(value);\n return BigInt(value);\n}\n","import { BincodeWriter } from \"./bincode.js\";\nimport { bigintToBeBytes, concatBytes, expectBytes, hexToBytes, parseBigint } from \"./bytes.js\";\nimport {\n ENUM_VARIANT_INDEX_ML_DSA_65,\n ML_DSA_65_PUBLIC_KEY_LEN,\n ML_DSA_65_SIGNATURE_LEN,\n STANDARD_ALGO_NUMBER_ML_DSA_65,\n} from \"./ml-dsa.js\";\n\nexport interface NativeEvmTxFields {\n chainId: bigint | number | string;\n nonce: bigint | number | string;\n maxPriorityFeePerGas: bigint | number | string;\n maxFeePerGas: bigint | number | string;\n gasLimit: bigint | number | string;\n to: Uint8Array | readonly number[] | string | null;\n value: bigint | number | string;\n input?: Uint8Array | readonly number[] | string;\n extensions?: readonly NativeTxExtensionLike[];\n}\n\nexport interface NativeTxExtension {\n kind: number;\n body: Uint8Array | readonly number[] | string;\n}\n\nexport interface NativeTxExtensionDescriptor {\n kind: number;\n bodyHex: string;\n}\n\nexport type NativeTxExtensionLike = NativeTxExtension | NativeTxExtensionDescriptor;\n\nexport function encodeTransactionForHash(fields: NativeEvmTxFields, tag: 0x01 | 0x02): Uint8Array {\n const n = normalizeTxFields(fields);\n return concatBytes(\n Uint8Array.of(tag),\n bigintToBeBytes(n.chainId, 8, \"chainId\"),\n bigintToBeBytes(n.nonce, 8, \"nonce\"),\n bigintToBeBytes(n.maxPriorityFeePerGas, 32, \"maxPriorityFeePerGas\"),\n bigintToBeBytes(n.maxFeePerGas, 32, \"maxFeePerGas\"),\n bigintToBeBytes(n.gasLimit, 8, \"gasLimit\"),\n n.to === null ? Uint8Array.of(0) : concatBytes(Uint8Array.of(1), n.to),\n bigintToBeBytes(n.value, 32, \"value\"),\n bigintToBeBytes(BigInt(n.input.length), 4, \"input.length\"),\n n.input,\n new Uint8Array(4), // access_list length\n encodeExtensionsForHash(n.extensions),\n );\n}\n\nexport function bincodeSignedTransaction(\n fields: NativeEvmTxFields,\n signature: Uint8Array | readonly number[],\n publicKey: Uint8Array | readonly number[],\n): Uint8Array {\n const n = normalizeTxFields(fields);\n const sig = expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\");\n const pk = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n const w = new BincodeWriter();\n w.u64(n.chainId);\n w.u64(n.nonce);\n w.rawBytes(uint256Le(n.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"));\n w.rawBytes(uint256Le(n.maxFeePerGas, \"maxFeePerGas\"));\n w.u64(n.gasLimit);\n w.optionBytes(n.to);\n w.rawBytes(uint256Le(n.value, \"value\"));\n w.bytes(n.input);\n w.u64(0n); // access_list length\n w.u64(BigInt(n.extensions.length));\n for (const ext of n.extensions) bincodeTypedExtensionInto(w, ext);\n bincodeMlDsa65OpaqueInto(w, sig);\n bincodeMlDsa65OpaqueInto(w, pk);\n return w.toBytes();\n}\n\ninterface NormalizedNativeTxExtension {\n kind: number;\n body: Uint8Array;\n}\n\ninterface NormalizedNativeEvmTxFields {\n chainId: bigint;\n nonce: bigint;\n maxPriorityFeePerGas: bigint;\n maxFeePerGas: bigint;\n gasLimit: bigint;\n to: Uint8Array | null;\n value: bigint;\n input: Uint8Array;\n extensions: NormalizedNativeTxExtension[];\n}\n\nfunction normalizeTxFields(fields: NativeEvmTxFields): NormalizedNativeEvmTxFields {\n return {\n chainId: parseBigint(fields.chainId, \"chainId\"),\n nonce: parseBigint(fields.nonce, \"nonce\"),\n maxPriorityFeePerGas: parseBigint(fields.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"),\n maxFeePerGas: parseBigint(fields.maxFeePerGas, \"maxFeePerGas\"),\n gasLimit: parseBigint(fields.gasLimit, \"gasLimit\"),\n to: normalizeTo(fields.to),\n value: parseBigint(fields.value, \"value\"),\n input: normalizeBytes(fields.input ?? new Uint8Array(0), \"input\"),\n extensions: normalizeExtensions(fields.extensions),\n };\n}\n\nfunction normalizeTo(value: NativeEvmTxFields[\"to\"]): Uint8Array | null {\n if (value === null) return null;\n const bytes = normalizeBytes(value, \"to\");\n return expectBytes(bytes, 20, \"to\");\n}\n\nfunction normalizeBytes(value: Uint8Array | readonly number[] | string, label: string): Uint8Array {\n if (typeof value === \"string\") return hexToBytes(value, label);\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nfunction normalizeExtensions(value: NativeEvmTxFields[\"extensions\"]): NormalizedNativeTxExtension[] {\n if (value === undefined) return [];\n return value.map((ext, index) => {\n if (!Number.isInteger(ext.kind) || ext.kind < 0 || ext.kind > 0xff) {\n throw new Error(`extensions[${index}].kind out of u8 range`);\n }\n const body = normalizeBytes(\"bodyHex\" in ext ? ext.bodyHex : ext.body, `extensions[${index}].body`);\n if (body.length > 0xffff_ffff) {\n throw new Error(`extensions[${index}].body exceeds u32 length`);\n }\n return { kind: ext.kind, body };\n });\n}\n\nfunction encodeExtensionsForHash(extensions: readonly NormalizedNativeTxExtension[]): Uint8Array {\n const chunks: Uint8Array[] = [bigintToBeBytes(BigInt(extensions.length), 4, \"extensions.length\")];\n for (const ext of extensions) {\n chunks.push(\n Uint8Array.of(ext.kind),\n bigintToBeBytes(BigInt(ext.body.length), 4, \"extension.body.length\"),\n ext.body,\n );\n }\n return concatBytes(...chunks);\n}\n\nfunction uint256Le(value: bigint, label: string): Uint8Array {\n if (value < 0n || value >= 1n << 256n) throw new Error(`${label} out of u256 range`);\n const out = new Uint8Array(32);\n let v = value;\n for (let i = 0; i < 32; i++) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nfunction bincodeMlDsa65OpaqueInto(w: BincodeWriter, raw: Uint8Array): void {\n w.enumVariant(ENUM_VARIANT_INDEX_ML_DSA_65);\n w.u16(STANDARD_ALGO_NUMBER_ML_DSA_65);\n w.bytes(raw);\n}\n\nfunction bincodeTypedExtensionInto(w: BincodeWriter, ext: NormalizedNativeTxExtension): void {\n w.u8(ext.kind);\n w.bytes(ext.body);\n}\n","import { ml_dsa65 } from \"@noble/post-quantum/ml-dsa.js\";\nimport { blake3 } from \"@noble/hashes/blake3.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { bigintToBeBytes, bytesToHex, concatBytes, expectBytes } from \"./bytes.js\";\nimport { bincodeSignedTransaction, encodeTransactionForHash, type NativeEvmTxFields } from \"./tx.js\";\n\nexport const ML_DSA_65_SEED_LEN = 32;\nexport const ML_DSA_65_SIGNING_KEY_LEN = 4032;\nexport const ML_DSA_65_PUBLIC_KEY_LEN = 1952;\nexport const ML_DSA_65_SIGNATURE_LEN = 3309;\nexport const STANDARD_ALGO_NUMBER_ML_DSA_65 = 1001;\nexport const ENUM_VARIANT_INDEX_ML_DSA_65 = 5;\nexport const ADDRESS_DERIVATION_DOMAIN = \"MONO_ADDRESS_BLAKE3_20_V1\";\n\nconst ADDRESS_DERIVATION_DOMAIN_BYTES = new TextEncoder().encode(ADDRESS_DERIVATION_DOMAIN);\n\nexport class MlDsa65Backend {\n readonly #secretKey: Uint8Array;\n readonly #publicKey: Uint8Array;\n readonly #addressBytes: Uint8Array;\n\n private constructor(secretKey: Uint8Array, publicKey: Uint8Array) {\n this.#secretKey = expectBytes(secretKey, ML_DSA_65_SIGNING_KEY_LEN, \"ML-DSA-65 secret key\").slice();\n this.#publicKey = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\").slice();\n this.#addressBytes = mlDsa65AddressBytes(this.#publicKey);\n }\n\n static fromSeed(seed: Uint8Array | readonly number[]): MlDsa65Backend {\n const kp = ml_dsa65.keygen(expectBytes(seed, ML_DSA_65_SEED_LEN, \"ML-DSA-65 seed\"));\n return new MlDsa65Backend(kp.secretKey, kp.publicKey);\n }\n\n publicKey(): Uint8Array {\n return this.#publicKey.slice();\n }\n\n addressBytes(): Uint8Array {\n return this.#addressBytes.slice();\n }\n\n getAddress(): string {\n return bytesToHex(this.#addressBytes);\n }\n\n sign(message: Uint8Array): Uint8Array {\n return ml_dsa65.sign(message, this.#secretKey, { extraEntropy: false });\n }\n\n signPrehash(digest: Uint8Array): Uint8Array {\n return this.sign(expectBytes(digest, 32, \"prehash\"));\n }\n\n verify(message: Uint8Array, signature: Uint8Array): boolean {\n return ml_dsa65.verify(\n expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\"),\n message,\n this.#publicKey,\n );\n }\n\n signEvmTx(fields: NativeEvmTxFields): {\n wireHex: string;\n wireBytes: Uint8Array;\n sighash: Uint8Array;\n txHash: Uint8Array;\n } {\n const txHashPreimage = encodeTransactionForHash(fields, 0x01);\n const sighash = keccak_256(txHashPreimage);\n const signature = this.sign(sighash);\n const wireBytes = bincodeSignedTransaction(fields, signature, this.#publicKey);\n const txHash = keccak_256(\n concatBytes(\n encodeTransactionForHash(fields, 0x02),\n signature,\n this.#publicKey,\n ),\n );\n return {\n wireHex: bytesToHex(wireBytes).slice(2),\n wireBytes,\n sighash,\n txHash,\n };\n }\n}\n\nexport function mlDsa65AddressFromPublicKey(publicKey: Uint8Array | readonly number[]): string {\n return bytesToHex(mlDsa65AddressBytes(publicKey));\n}\n\nexport function mlDsa65AddressBytes(publicKey: Uint8Array | readonly number[]): Uint8Array {\n const bytes = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n return blake3(concatBytes(\n ADDRESS_DERIVATION_DOMAIN_BYTES,\n bigintToBeBytes(BigInt(STANDARD_ALGO_NUMBER_ML_DSA_65), 2, \"ML-DSA-65 algo id\"),\n bytes,\n )).slice(0, 20);\n}\n\nexport function encodeMlDsa65Opaque(raw: Uint8Array | readonly number[]): Uint8Array {\n const bytes = raw instanceof Uint8Array ? raw : Uint8Array.from(raw);\n const len = bytes.length === ML_DSA_65_PUBLIC_KEY_LEN ? ML_DSA_65_PUBLIC_KEY_LEN : ML_DSA_65_SIGNATURE_LEN;\n expectBytes(bytes, len, \"ML-DSA-65 opaque bytes\");\n const out = new Uint8Array(4 + 2 + 8 + bytes.length);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, ENUM_VARIANT_INDEX_ML_DSA_65, true);\n dv.setUint16(4, STANDARD_ALGO_NUMBER_ML_DSA_65, true);\n dv.setBigUint64(6, BigInt(bytes.length), true);\n out.set(bytes, 14);\n return out;\n}\n\nexport function uint256Bytes(value: bigint | number | string, label: string): Uint8Array {\n const v = typeof value === \"bigint\" ? value : typeof value === \"number\" ? BigInt(value) : BigInt(value);\n return bigintToBeBytes(v, 32, label);\n}\n","import { shake256 } from \"@noble/hashes/sha3.js\";\nimport { entropyToMnemonic, mnemonicToEntropy } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\nimport { concatBytes, expectBytes } from \"./bytes.js\";\nimport { ML_DSA_65_SEED_LEN, MlDsa65Backend } from \"./ml-dsa.js\";\n\nexport const PQM1_ALGO_TAG_MLDSA65 = 0x01;\nexport const PQM1_ALGO_TAG_MLDSA87_RESERVED = 0x02;\nexport const PQM1_ALGO_TAG_SLHDSA128S_RESERVED = 0x03;\nexport const PQM1_ALGO_TAG_FALCON512_RESERVED = 0x04;\nexport const PQM1_VERSION_V1 = 0x01;\nexport const PQM1_PAYLOAD_LEN = 32;\nexport const PQM1_ENTROPY_LEN = 30;\nexport const PQM1_V1_MNEMONIC_WORDS = 24;\nexport const PQM1_V1_MLDSA65_DOMAIN_TAG = \"monolythium.pqm1.v1.mldsa65\";\n\nexport type Pqm1ErrorKind =\n | \"badWordCount\"\n | \"bip39Decode\"\n | \"badPayloadLength\"\n | \"unsupportedAlgorithm\"\n | \"unsupportedVersion\"\n | \"missingRandom\";\n\nexport class Pqm1Error extends Error {\n constructor(\n readonly kind: Pqm1ErrorKind,\n message: string,\n ) {\n super(message);\n this.name = \"Pqm1Error\";\n }\n}\n\nexport interface Pqm1Payload {\n algoTag: typeof PQM1_ALGO_TAG_MLDSA65;\n version: typeof PQM1_VERSION_V1;\n entropy: Uint8Array;\n bytes: Uint8Array;\n}\n\nexport type Pqm1Rng = (bytes: Uint8Array) => void;\n\nconst DOMAIN_BYTES = new TextEncoder().encode(PQM1_V1_MLDSA65_DOMAIN_TAG);\n\nfunction normalizeMnemonic(mnemonic: string): string {\n return mnemonic.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\nfunction ensureSupportedPayload(bytes: Uint8Array): void {\n if (bytes.length !== PQM1_PAYLOAD_LEN) {\n throw new Pqm1Error(\"badPayloadLength\", `PQM-1 payload must be ${PQM1_PAYLOAD_LEN} bytes, got ${bytes.length}`);\n }\n if (bytes[0] !== PQM1_ALGO_TAG_MLDSA65) {\n throw new Pqm1Error(\"unsupportedAlgorithm\", `unsupported PQM-1 algorithm tag 0x${bytes[0]!.toString(16).padStart(2, \"0\")}`);\n }\n if (bytes[1] !== PQM1_VERSION_V1) {\n throw new Pqm1Error(\"unsupportedVersion\", `unsupported PQM-1 version 0x${bytes[1]!.toString(16).padStart(2, \"0\")}`);\n }\n}\n\nfunction defaultRandomFill(bytes: Uint8Array): void {\n const cryptoObj = globalThis.crypto;\n if (!cryptoObj?.getRandomValues) {\n throw new Pqm1Error(\"missingRandom\", \"globalThis.crypto.getRandomValues is unavailable\");\n }\n cryptoObj.getRandomValues(bytes);\n}\n\nexport function assemblePqm1Payload(entropy: Uint8Array | readonly number[]): Uint8Array {\n const ent = expectBytes(entropy, PQM1_ENTROPY_LEN, \"PQM-1 entropy\");\n const payload = new Uint8Array(PQM1_PAYLOAD_LEN);\n payload[0] = PQM1_ALGO_TAG_MLDSA65;\n payload[1] = PQM1_VERSION_V1;\n payload.set(ent, 2);\n return payload;\n}\n\nexport function parsePqm1Payload(payload: Uint8Array | readonly number[]): Pqm1Payload {\n const bytes = expectBytes(payload, PQM1_PAYLOAD_LEN, \"PQM-1 payload\").slice();\n ensureSupportedPayload(bytes);\n return {\n algoTag: PQM1_ALGO_TAG_MLDSA65,\n version: PQM1_VERSION_V1,\n entropy: bytes.slice(2),\n bytes,\n };\n}\n\nexport function pqm1PayloadToMnemonic(payload: Uint8Array | readonly number[]): string {\n const parsed = parsePqm1Payload(payload);\n return entropyToMnemonic(parsed.bytes, wordlist);\n}\n\nexport function pqm1MnemonicToPayload(mnemonic: string): Pqm1Payload {\n const normalized = normalizeMnemonic(mnemonic);\n const words = normalized.length === 0 ? [] : normalized.split(\" \");\n if (words.length !== PQM1_V1_MNEMONIC_WORDS) {\n throw new Pqm1Error(\"badWordCount\", `PQM-1 mnemonic must be ${PQM1_V1_MNEMONIC_WORDS} words, got ${words.length}`);\n }\n let payload: Uint8Array;\n try {\n payload = mnemonicToEntropy(normalized, wordlist);\n } catch (e) {\n throw new Pqm1Error(\"bip39Decode\", `invalid PQM-1 mnemonic: ${(e as Error).message}`);\n }\n return parsePqm1Payload(payload);\n}\n\nexport function derivePqm1MlDsa65SeedFromPayload(payload: Uint8Array | readonly number[]): Uint8Array {\n const parsed = parsePqm1Payload(payload);\n return shake256(concatBytes(DOMAIN_BYTES, parsed.bytes), { dkLen: ML_DSA_65_SEED_LEN });\n}\n\nexport function pqm1MnemonicToMlDsa65Seed(mnemonic: string): Uint8Array {\n return derivePqm1MlDsa65SeedFromPayload(pqm1MnemonicToPayload(mnemonic).bytes);\n}\n\nexport function pqm1MnemonicToMlDsa65Backend(mnemonic: string): MlDsa65Backend {\n return MlDsa65Backend.fromSeed(pqm1MnemonicToMlDsa65Seed(mnemonic));\n}\n\nexport function pqm1MnemonicToAddress(mnemonic: string): string {\n return pqm1MnemonicToMlDsa65Backend(mnemonic).getAddress();\n}\n\nexport function generatePqm1Mnemonic(rng: Pqm1Rng = defaultRandomFill): string {\n const entropy = new Uint8Array(PQM1_ENTROPY_LEN);\n rng(entropy);\n return pqm1PayloadToMnemonic(assemblePqm1Payload(entropy));\n}\n","import { ml_kem768 } from \"@noble/post-quantum/ml-kem.js\";\nimport { chacha20poly1305 } from \"@noble/ciphers/chacha.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { randomBytes } from \"@noble/hashes/utils.js\";\nimport { BincodeWriter } from \"./bincode.js\";\nimport { bytesToHex, concatBytes, expectBytes } from \"./bytes.js\";\nimport {\n ENUM_VARIANT_INDEX_ML_DSA_65,\n ML_DSA_65_PUBLIC_KEY_LEN,\n ML_DSA_65_SIGNATURE_LEN,\n STANDARD_ALGO_NUMBER_ML_DSA_65,\n} from \"./ml-dsa.js\";\n\nconst DKG_AEAD_DOMAIN_TAG = new TextEncoder().encode(\"protocore/v2/mempool/dkg-mlkem768/1\");\n\nexport const ML_KEM_768_CIPHERTEXT_LEN = 1088;\nexport const ML_KEM_768_ENCAPSULATION_KEY_LEN = 1184;\nexport const ML_KEM_768_SHARED_SECRET_LEN = 32;\nexport const DKG_NONCE_LEN = 12;\nexport const DKG_AEAD_TAG_LEN = 16;\n\nexport const MempoolClass = {\n Transfer: 0,\n ContractCall: 1,\n PrivacyOp: 2,\n CLOBOp: 3,\n AgentOp: 4,\n FoundationOp: 5,\n /** @deprecated Use FoundationOp. */\n GovernanceOp: 5,\n RWAOp: 6,\n} as const;\nexport type MempoolClass = (typeof MempoolClass)[keyof typeof MempoolClass];\n\nexport interface NonceAad {\n sender: Uint8Array;\n nonce: bigint;\n chainId: bigint;\n class: MempoolClass;\n maxFeePerGas: bigint;\n maxPriorityFeePerGas: bigint;\n gasLimit: bigint;\n}\n\nexport interface DecryptHint {\n epoch: bigint;\n scheme: number;\n}\n\nexport interface EncryptedEnvelope {\n nonceAad: NonceAad;\n ciphertext: Uint8Array;\n decryptionHint: DecryptHint;\n senderPubkey: Uint8Array;\n outerSignature: Uint8Array;\n sender: Uint8Array;\n}\n\nexport function bincodeNonceAad(aad: NonceAad): Uint8Array {\n const w = new BincodeWriter();\n w.bytes(expectBytes(aad.sender, 20, \"NonceAad.sender\"));\n w.u64(aad.nonce);\n w.u64(aad.chainId);\n w.enumVariant(aad.class);\n w.u128(aad.maxFeePerGas);\n w.u128(aad.maxPriorityFeePerGas);\n w.u64(aad.gasLimit);\n return w.toBytes();\n}\n\nexport function bincodeDecryptHint(hint: DecryptHint): Uint8Array {\n const w = new BincodeWriter();\n w.u64(hint.epoch);\n w.u16(hint.scheme);\n return w.toBytes();\n}\n\nexport function bincodeEncryptedEnvelope(env: EncryptedEnvelope): Uint8Array {\n const w = new BincodeWriter();\n w.rawBytes(bincodeNonceAad(env.nonceAad));\n w.bytes(env.ciphertext);\n w.rawBytes(bincodeDecryptHint(env.decryptionHint));\n bincodeMlDsa65OpaqueInto(w, expectBytes(env.senderPubkey, ML_DSA_65_PUBLIC_KEY_LEN, \"senderPubkey\"));\n bincodeMlDsa65OpaqueInto(w, expectBytes(env.outerSignature, ML_DSA_65_SIGNATURE_LEN, \"outerSignature\"));\n w.bytes(expectBytes(env.sender, 20, \"sender\"));\n return w.toBytes();\n}\n\nexport function encryptInnerTx(\n signedInnerTxBincode: Uint8Array,\n nonceAad: NonceAad,\n kemEncapsulationKey: Uint8Array,\n): Uint8Array {\n expectBytes(kemEncapsulationKey, ML_KEM_768_ENCAPSULATION_KEY_LEN, \"kemEncapsulationKey\");\n const { cipherText: kemCt, sharedSecret } = ml_kem768.encapsulate(kemEncapsulationKey);\n const nonce = randomBytes(DKG_NONCE_LEN);\n const cipher = chacha20poly1305(sharedSecret, nonce, aadFor(nonceAad));\n const aeadCt = cipher.encrypt(signedInnerTxBincode);\n sharedSecret.fill(0);\n return concatBytes(kemCt, nonce, aeadCt);\n}\n\nexport function outerSigDigest(\n nonceAad: NonceAad,\n ciphertext: Uint8Array,\n decryptionHint: DecryptHint,\n senderPubkey: Uint8Array,\n): Uint8Array {\n const aad = bincodeNonceAad(nonceAad);\n const hint = bincodeDecryptHint(decryptionHint);\n return keccak_256(concatBytes(aad, ciphertext, hint, expectBytes(senderPubkey, ML_DSA_65_PUBLIC_KEY_LEN, \"senderPubkey\")));\n}\n\nexport async function buildEncryptedEnvelope(args: {\n signedInnerTxBincode: Uint8Array;\n nonceAad: NonceAad;\n decryptionHint: DecryptHint;\n kemEncapsulationKey: Uint8Array;\n senderAddress: Uint8Array;\n senderPubkey: Uint8Array;\n signOuterDigest: (digest: Uint8Array) => Promise<Uint8Array> | Uint8Array;\n}): Promise<{ envelope: EncryptedEnvelope; wireBytes: Uint8Array; wireHex: string }> {\n const ciphertext = encryptInnerTx(args.signedInnerTxBincode, args.nonceAad, args.kemEncapsulationKey);\n const digest = outerSigDigest(args.nonceAad, ciphertext, args.decryptionHint, args.senderPubkey);\n const outerSignature = await args.signOuterDigest(digest);\n const envelope: EncryptedEnvelope = {\n nonceAad: args.nonceAad,\n ciphertext,\n decryptionHint: args.decryptionHint,\n senderPubkey: expectBytes(args.senderPubkey, ML_DSA_65_PUBLIC_KEY_LEN, \"senderPubkey\"),\n outerSignature: expectBytes(outerSignature, ML_DSA_65_SIGNATURE_LEN, \"outerSignature\"),\n sender: expectBytes(args.senderAddress, 20, \"senderAddress\"),\n };\n const wireBytes = bincodeEncryptedEnvelope(envelope);\n return { envelope, wireBytes, wireHex: bytesToHex(wireBytes) };\n}\n\nfunction aadFor(aad: NonceAad): Uint8Array {\n return concatBytes(DKG_AEAD_DOMAIN_TAG, bincodeNonceAad(aad));\n}\n\nfunction bincodeMlDsa65OpaqueInto(w: BincodeWriter, raw: Uint8Array): void {\n w.enumVariant(ENUM_VARIANT_INDEX_ML_DSA_65);\n w.u16(STANDARD_ALGO_NUMBER_ML_DSA_65);\n w.bytes(raw);\n}\n","/**\n * Address display helpers.\n *\n * Monolythium keeps 20-byte account identifiers on the wire, but\n * user-facing surfaces display them as `mono1...` bech32m strings.\n */\n\nexport const ADDRESS_HRP = \"mono\" as const;\nexport const ADDRESS_KIND_HRPS = {\n user: \"mono\",\n smartAccount: \"monos\",\n contract: \"monoc\",\n cluster: \"monok\",\n multisig: \"monom\",\n systemModule: \"monox\",\n} as const;\nexport const RESERVED_ADDRESS_HRPS = [\"monor\", \"monop\", \"monoi\", \"monoa\"] as const;\n\nexport type AddressKind = keyof typeof ADDRESS_KIND_HRPS;\n\nexport interface TypedAddress {\n kind: AddressKind;\n address: string;\n bytes: Uint8Array;\n hex: string;\n}\n\nconst CHARSET = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\";\nconst CHARSET_MAP = new Map([...CHARSET].map((c, i) => [c, i]));\nconst BECH32M_CONST = 0x2bc830a3;\nconst HEX_20_BYTE_RE = /^0x[0-9a-fA-F]{40}$/;\n\nexport class AddressError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AddressError\";\n }\n}\n\nexport function hexToAddressBytes(address: string): Uint8Array {\n if (!HEX_20_BYTE_RE.test(address)) {\n throw new AddressError(\"expected 0x-prefixed 20-byte hex address\");\n }\n const out = new Uint8Array(20);\n const body = address.slice(2);\n for (let i = 0; i < 20; i++) {\n out[i] = Number.parseInt(body.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\nexport function addressBytesToHex(address: Uint8Array | readonly number[]): string {\n const bytes = expectLength(address, 20, \"address\");\n return `0x${[...bytes].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\nexport function addressToBech32(address: string | Uint8Array | readonly number[]): string {\n return addressToTypedBech32(\"user\", address);\n}\n\nexport function addressToTypedBech32(\n kind: AddressKind,\n address: string | Uint8Array | readonly number[],\n): string {\n const bytes = typeof address === \"string\" ? hexToAddressBytes(address) : expectLength(address, 20, \"address\");\n return encodeBech32m(ADDRESS_KIND_HRPS[kind], bytes);\n}\n\nfunction encodeBech32m(hrp: string, bytes: Uint8Array): string {\n const words = convertBits([...bytes], 8, 5, true);\n const checksum = createChecksum(hrp, words);\n return `${hrp}1${[...words, ...checksum].map((v) => CHARSET[v]).join(\"\")}`;\n}\n\nexport function bech32ToAddressBytes(address: string): Uint8Array {\n return typedBech32ToAddress(address, \"user\").bytes;\n}\n\nexport function bech32ToAddress(address: string): string {\n return addressBytesToHex(bech32ToAddressBytes(address));\n}\n\nexport function typedBech32ToAddress(address: string, expectedKind?: AddressKind): TypedAddress {\n const parsed = decodeBech32m(address);\n if ((RESERVED_ADDRESS_HRPS as readonly string[]).includes(parsed.hrp)) {\n throw new AddressError(`reserved address hrp '${parsed.hrp}'`);\n }\n const kind = addressKindFromHrp(parsed.hrp);\n if (kind === undefined) {\n throw new AddressError(`unknown address hrp '${parsed.hrp}'`);\n }\n if (expectedKind !== undefined && kind !== expectedKind) {\n throw new AddressError(`unexpected hrp '${parsed.hrp}', expected '${ADDRESS_KIND_HRPS[expectedKind]}'`);\n }\n const bytes = convertBits(parsed.data, 5, 8, false);\n if (bytes.length !== 20) {\n throw new AddressError(`expected 20-byte payload, got ${bytes.length} bytes`);\n }\n const out = Uint8Array.from(bytes);\n return { kind, address: address.toLowerCase(), bytes: out, hex: addressBytesToHex(out) };\n}\n\nexport function requireTypedAddress(\n address: string,\n expectedKind: AddressKind,\n label = \"address\",\n): string {\n if (address.startsWith(\"0x\") || address.startsWith(\"0X\")) {\n throw new AddressError(\n `${label} raw 0x addresses are retired; use typed ${ADDRESS_KIND_HRPS[expectedKind]} bech32m addresses`,\n );\n }\n try {\n return typedBech32ToAddress(address, expectedKind).address;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new AddressError(\n `${label} must be typed ${ADDRESS_KIND_HRPS[expectedKind]} bech32m address: ${message}`,\n );\n }\n}\n\nexport function parseAddress(address: string): Uint8Array {\n if (address.startsWith(\"0x\") || address.startsWith(\"0X\")) {\n return hexToAddressBytes(address);\n }\n return bech32ToAddressBytes(address);\n}\n\nexport function normalizeAddressHex(address: string): string {\n return addressBytesToHex(parseAddress(address));\n}\n\nfunction decodeBech32m(input: string): { hrp: string; data: number[] } {\n if (input.length < 8) {\n throw new AddressError(\"bech32m address is too short\");\n }\n const hasLower = input !== input.toUpperCase();\n const hasUpper = input !== input.toLowerCase();\n if (hasLower && hasUpper) {\n throw new AddressError(\"bech32m address cannot mix upper and lower case\");\n }\n const s = input.toLowerCase();\n const sep = s.lastIndexOf(\"1\");\n if (sep <= 0 || sep + 7 > s.length) {\n throw new AddressError(\"bech32m separator/checksum shape is invalid\");\n }\n const hrp = s.slice(0, sep);\n const values: number[] = [];\n for (const c of s.slice(sep + 1)) {\n const v = CHARSET_MAP.get(c);\n if (v === undefined) {\n throw new AddressError(`invalid bech32m character '${c}'`);\n }\n values.push(v);\n }\n if (!verifyChecksum(hrp, values)) {\n throw new AddressError(\"bech32m checksum mismatch\");\n }\n return { hrp, data: values.slice(0, -6) };\n}\n\nfunction addressKindFromHrp(hrp: string): AddressKind | undefined {\n for (const [kind, kindHrp] of Object.entries(ADDRESS_KIND_HRPS) as Array<[AddressKind, string]>) {\n if (kindHrp === hrp) return kind;\n }\n return undefined;\n}\n\nfunction hrpExpand(hrp: string): number[] {\n const high = [...hrp].map((c) => c.charCodeAt(0) >> 5);\n const low = [...hrp].map((c) => c.charCodeAt(0) & 31);\n return [...high, 0, ...low];\n}\n\nfunction polymod(values: number[]): number {\n const generators = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\n let chk = 1;\n for (const value of values) {\n const top = chk >> 25;\n chk = ((chk & 0x1ffffff) << 5) ^ value;\n for (let i = 0; i < 5; i++) {\n if (((top >> i) & 1) === 1) {\n chk ^= generators[i];\n }\n }\n }\n return chk >>> 0;\n}\n\nfunction createChecksum(hrp: string, data: number[]): number[] {\n const values = [...hrpExpand(hrp), ...data, 0, 0, 0, 0, 0, 0];\n const mod = polymod(values) ^ BECH32M_CONST;\n const out: number[] = [];\n for (let p = 0; p < 6; p++) {\n out.push((mod >> (5 * (5 - p))) & 31);\n }\n return out;\n}\n\nfunction verifyChecksum(hrp: string, values: number[]): boolean {\n return polymod([...hrpExpand(hrp), ...values]) === BECH32M_CONST;\n}\n\nfunction convertBits(data: readonly number[], fromBits: number, toBits: number, pad: boolean): number[] {\n let acc = 0;\n let bits = 0;\n const ret: number[] = [];\n const maxv = (1 << toBits) - 1;\n const maxAcc = (1 << (fromBits + toBits - 1)) - 1;\n for (const value of data) {\n if (value < 0 || value >> fromBits !== 0) {\n throw new AddressError(\"invalid address payload value\");\n }\n acc = ((acc << fromBits) | value) & maxAcc;\n bits += fromBits;\n while (bits >= toBits) {\n bits -= toBits;\n ret.push((acc >> bits) & maxv);\n }\n }\n if (pad) {\n if (bits > 0) {\n ret.push((acc << (toBits - bits)) & maxv);\n }\n } else if (bits >= fromBits || ((acc << (toBits - bits)) & maxv) !== 0) {\n throw new AddressError(\"invalid bech32m padding\");\n }\n return ret;\n}\n\nfunction expectLength(value: Uint8Array | readonly number[], len: number, name: string): Uint8Array {\n if (value.length !== len) {\n throw new AddressError(`${name} must be ${len} bytes`);\n }\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n","import { RpcClient } from \"../client.js\";\nimport { hexToAddressBytes } from \"../address.js\";\nimport { bytesToHex, hexToBytes, parseBigint } from \"./bytes.js\";\nimport { buildEncryptedEnvelope, MempoolClass, type DecryptHint, type NonceAad } from \"./envelope.js\";\nimport type { MlDsa65Backend } from \"./ml-dsa.js\";\nimport type { NativeEvmTxFields } from \"./tx.js\";\n\nexport interface EncryptionKey {\n algo: string;\n epoch: bigint;\n encapsulationKey: Uint8Array;\n}\n\nexport interface EncryptedSubmission {\n envelopeWireHex: string;\n innerSighashHex: string;\n innerTxHashHex: string;\n innerWireBytes: number;\n}\n\nexport async function fetchEncryptionKey(client: RpcClient): Promise<EncryptionKey> {\n const result = await client.call<{ algo?: string; epoch: number | string; encapsulationKey: string }>(\n \"lyth_getEncryptionKey\",\n [],\n );\n return {\n algo: result.algo ?? \"ml-kem-768\",\n epoch: typeof result.epoch === \"string\" ? BigInt(result.epoch) : BigInt(result.epoch),\n encapsulationKey: hexToBytes(result.encapsulationKey, \"encapsulationKey\"),\n };\n}\n\nexport async function buildEncryptedSubmission(args: {\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n encryptionKey: EncryptionKey;\n class?: MempoolClass;\n}): Promise<EncryptedSubmission> {\n const input = normalizeInput(args.tx.input);\n const to = normalizeTo(args.tx.to);\n const nonceAad: NonceAad = {\n sender: args.backend.addressBytes(),\n nonce: parseBigint(args.tx.nonce, \"nonce\"),\n chainId: parseBigint(args.tx.chainId, \"chainId\"),\n class: args.class ?? (to !== null && input.length === 0 ? MempoolClass.Transfer : MempoolClass.ContractCall),\n maxFeePerGas: u128Checked(parseBigint(args.tx.maxFeePerGas, \"maxFeePerGas\"), \"maxFeePerGas\"),\n maxPriorityFeePerGas: u128Checked(\n parseBigint(args.tx.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"),\n \"maxPriorityFeePerGas\",\n ),\n gasLimit: parseBigint(args.tx.gasLimit, \"gasLimit\"),\n };\n const signed = args.backend.signEvmTx(args.tx);\n const decryptionHint: DecryptHint = { epoch: args.encryptionKey.epoch, scheme: 0 };\n const built = await buildEncryptedEnvelope({\n signedInnerTxBincode: signed.wireBytes,\n nonceAad,\n decryptionHint,\n kemEncapsulationKey: args.encryptionKey.encapsulationKey,\n senderAddress: args.backend.addressBytes(),\n senderPubkey: args.backend.publicKey(),\n signOuterDigest: (digest) => args.backend.signPrehash(digest),\n });\n return {\n envelopeWireHex: built.wireHex,\n innerSighashHex: `0x${[...signed.sighash].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\")}`,\n innerTxHashHex: bytesToHex(signed.txHash),\n innerWireBytes: signed.wireBytes.length,\n };\n}\n\nexport async function submitEncryptedEnvelope(client: RpcClient, envelopeWireHex: string): Promise<string> {\n return client.call(\"lyth_submitEncrypted\", [envelopeWireHex]);\n}\n\nfunction u128Checked(value: bigint, field: string): bigint {\n const cap = (1n << 128n) - 1n;\n if (value < 0n || value > cap) {\n throw new Error(`${field} must fit in u128 for encrypted nonce AAD`);\n }\n return value;\n}\n\nfunction normalizeTo(value: NativeEvmTxFields[\"to\"]): Uint8Array | null {\n if (value === null) return null;\n if (typeof value === \"string\") return hexToAddressBytes(value);\n const bytes = value instanceof Uint8Array ? value : Uint8Array.from(value);\n if (bytes.length !== 20) throw new Error(\"to must be 20 bytes\");\n return bytes;\n}\n\nfunction normalizeInput(value: NativeEvmTxFields[\"input\"]): Uint8Array {\n if (value === undefined) return new Uint8Array(0);\n if (typeof value === \"string\") return hexToBytes(value, \"input\");\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n"]}