@monolythium/core-sdk 0.4.17 → 0.4.19

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,5 +1,5 @@
1
- import { I as MlDsa65Backend } from '../submission-DwcVARLM.cjs';
2
- export { kb as ADDRESS_DERIVATION_DOMAIN, kc as CLUSTER_MLKEM_SHAMIR, kd as CLUSTER_MLKEM_SHAMIR_ALGO, ke as ClusterSealKeyEntryInput, K as ClusterSealKeys, L as ClusterSealKeysSource, kf as DKG_AEAD_TAG_LEN, kg as DKG_NONCE_LEN, kh as DecryptHint, ki as ENCRYPTED_SUBMISSION_UNAVAILABLE_MESSAGE, kj as ENUM_VARIANT_INDEX_ML_DSA_65, kk as EncryptedEnvelope, kl as EncryptedSubmission, E as EncryptionKey, km as JsonRpcCallClient, kn as LythiumSealEnvelope, ko as ML_DSA_65_PUBLIC_KEY_LEN, kp as ML_DSA_65_SEED_LEN, kq as ML_DSA_65_SIGNATURE_LEN, kr as ML_DSA_65_SIGNING_KEY_LEN, ks as ML_KEM_768_CIPHERTEXT_LEN, kt as ML_KEM_768_ENCAPSULATION_KEY_LEN, ku as ML_KEM_768_SHARED_SECRET_LEN, F as MempoolClass, D as NativeEvmTxFields, kv as NativeTxExtension, kw as NativeTxExtensionDescriptor, kx as NativeTxExtensionLike, ky as NonceAad, kz as OperatorSealKeypair, kA as PlaintextSubmission, kB as SEAL_COMMIT_LEN, kC as SEAL_DK_LEN, kD as SEAL_EK_LEN, kE as SEAL_KEM_CT_LEN, kF as SEAL_KEM_SEED_LEN, kG as SEAL_KEY_LEN, kH as SEAL_NONCE_LEN, kI as SEAL_SHARE_LEN, kJ as SEAL_TAG_LEN, kK as STANDARD_ALGO_NUMBER_ML_DSA_65, kL as SealRandomSource, kM as SealRecipient, kN as SealedSubmission, kO as bincodeDecryptHint, kP as bincodeEncryptedEnvelope, kQ as bincodeNonceAad, kR as bincodeSignedTransaction, kS as buildEncryptedEnvelope, kT as buildEncryptedSubmission, kU as buildPlaintextSubmission, kV as cryptoRandomSource, kW as encodeMlDsa65Opaque, kX as encodeSealEnvelope, kY as encodeTransactionForHash, kZ as encryptInnerTx, k_ as fetchEncryptionKey, k$ as generateOperatorSealKeypair, l0 as getClusterSealKeys, l1 as mlDsa65AddressBytes, l2 as mlDsa65AddressFromPublicKey, l3 as outerSigDigest, l4 as parseClusterSealKeys, l5 as sealRosterHash, l6 as sealToCluster, l7 as sealTransaction, l8 as submitEncryptedEnvelope, l9 as submitPlaintextTransaction, la as submitSealedTransaction, lb as submitTransactionWithPrivacy } from '../submission-DwcVARLM.cjs';
1
+ import { L as MlDsa65Backend } from '../submission-B4FmDnm_.cjs';
2
+ export { kb as ADDRESS_DERIVATION_DOMAIN, kc as CLUSTER_MLKEM_SHAMIR, kd as CLUSTER_MLKEM_SHAMIR_ALGO, ke as ClusterSealKeyEntryInput, U as ClusterSealKeys, V as ClusterSealKeysSource, kf as DKG_AEAD_TAG_LEN, kg as DKG_NONCE_LEN, kh as DecryptHint, ki as ENCRYPTED_SUBMISSION_UNAVAILABLE_MESSAGE, kj as ENUM_VARIANT_INDEX_ML_DSA_65, kk as EncryptedEnvelope, kl as EncryptedSubmission, I as EncryptionKey, km as JsonRpcCallClient, kn as LythiumSealEnvelope, ko as ML_DSA_65_PUBLIC_KEY_LEN, kp as ML_DSA_65_SEED_LEN, kq as ML_DSA_65_SIGNATURE_LEN, kr as ML_DSA_65_SIGNING_KEY_LEN, ks as ML_KEM_768_CIPHERTEXT_LEN, kt as ML_KEM_768_ENCAPSULATION_KEY_LEN, ku as ML_KEM_768_SHARED_SECRET_LEN, J as MempoolClass, H as NativeEvmTxFields, kv as NativeTxExtension, kw as NativeTxExtensionDescriptor, kx as NativeTxExtensionLike, ky as NonceAad, kz as OperatorSealKeypair, kA as PlaintextSubmission, kB as SEAL_COMMIT_LEN, kC as SEAL_DK_LEN, kD as SEAL_EK_LEN, kE as SEAL_KEM_CT_LEN, kF as SEAL_KEM_SEED_LEN, kG as SEAL_KEY_LEN, kH as SEAL_NONCE_LEN, kI as SEAL_SHARE_LEN, kJ as SEAL_TAG_LEN, kK as STANDARD_ALGO_NUMBER_ML_DSA_65, kL as SealRandomSource, kM as SealRecipient, kN as SealedSubmission, kO as bincodeDecryptHint, kP as bincodeEncryptedEnvelope, kQ as bincodeNonceAad, kR as bincodeSignedTransaction, kS as buildEncryptedEnvelope, kT as buildEncryptedSubmission, kU as buildPlaintextSubmission, kV as cryptoRandomSource, kW as encodeMlDsa65Opaque, kX as encodeSealEnvelope, kY as encodeTransactionForHash, kZ as encryptInnerTx, k_ as fetchEncryptionKey, k$ as generateOperatorSealKeypair, l0 as getClusterSealKeys, l1 as mlDsa65AddressBytes, l2 as mlDsa65AddressFromPublicKey, l3 as outerSigDigest, l4 as parseClusterSealKeys, l5 as sealRosterHash, l6 as sealToCluster, l7 as sealTransaction, l8 as submitEncryptedEnvelope, l9 as submitPlaintextTransaction, la as submitSealedTransaction, lb as submitTransactionWithPrivacy } from '../submission-B4FmDnm_.cjs';
3
3
 
4
4
  declare class BincodeWriter {
5
5
  #private;
@@ -1,5 +1,5 @@
1
- import { I as MlDsa65Backend } from '../submission-DwcVARLM.js';
2
- export { kb as ADDRESS_DERIVATION_DOMAIN, kc as CLUSTER_MLKEM_SHAMIR, kd as CLUSTER_MLKEM_SHAMIR_ALGO, ke as ClusterSealKeyEntryInput, K as ClusterSealKeys, L as ClusterSealKeysSource, kf as DKG_AEAD_TAG_LEN, kg as DKG_NONCE_LEN, kh as DecryptHint, ki as ENCRYPTED_SUBMISSION_UNAVAILABLE_MESSAGE, kj as ENUM_VARIANT_INDEX_ML_DSA_65, kk as EncryptedEnvelope, kl as EncryptedSubmission, E as EncryptionKey, km as JsonRpcCallClient, kn as LythiumSealEnvelope, ko as ML_DSA_65_PUBLIC_KEY_LEN, kp as ML_DSA_65_SEED_LEN, kq as ML_DSA_65_SIGNATURE_LEN, kr as ML_DSA_65_SIGNING_KEY_LEN, ks as ML_KEM_768_CIPHERTEXT_LEN, kt as ML_KEM_768_ENCAPSULATION_KEY_LEN, ku as ML_KEM_768_SHARED_SECRET_LEN, F as MempoolClass, D as NativeEvmTxFields, kv as NativeTxExtension, kw as NativeTxExtensionDescriptor, kx as NativeTxExtensionLike, ky as NonceAad, kz as OperatorSealKeypair, kA as PlaintextSubmission, kB as SEAL_COMMIT_LEN, kC as SEAL_DK_LEN, kD as SEAL_EK_LEN, kE as SEAL_KEM_CT_LEN, kF as SEAL_KEM_SEED_LEN, kG as SEAL_KEY_LEN, kH as SEAL_NONCE_LEN, kI as SEAL_SHARE_LEN, kJ as SEAL_TAG_LEN, kK as STANDARD_ALGO_NUMBER_ML_DSA_65, kL as SealRandomSource, kM as SealRecipient, kN as SealedSubmission, kO as bincodeDecryptHint, kP as bincodeEncryptedEnvelope, kQ as bincodeNonceAad, kR as bincodeSignedTransaction, kS as buildEncryptedEnvelope, kT as buildEncryptedSubmission, kU as buildPlaintextSubmission, kV as cryptoRandomSource, kW as encodeMlDsa65Opaque, kX as encodeSealEnvelope, kY as encodeTransactionForHash, kZ as encryptInnerTx, k_ as fetchEncryptionKey, k$ as generateOperatorSealKeypair, l0 as getClusterSealKeys, l1 as mlDsa65AddressBytes, l2 as mlDsa65AddressFromPublicKey, l3 as outerSigDigest, l4 as parseClusterSealKeys, l5 as sealRosterHash, l6 as sealToCluster, l7 as sealTransaction, l8 as submitEncryptedEnvelope, l9 as submitPlaintextTransaction, la as submitSealedTransaction, lb as submitTransactionWithPrivacy } from '../submission-DwcVARLM.js';
1
+ import { L as MlDsa65Backend } from '../submission-B4FmDnm_.js';
2
+ export { kb as ADDRESS_DERIVATION_DOMAIN, kc as CLUSTER_MLKEM_SHAMIR, kd as CLUSTER_MLKEM_SHAMIR_ALGO, ke as ClusterSealKeyEntryInput, U as ClusterSealKeys, V as ClusterSealKeysSource, kf as DKG_AEAD_TAG_LEN, kg as DKG_NONCE_LEN, kh as DecryptHint, ki as ENCRYPTED_SUBMISSION_UNAVAILABLE_MESSAGE, kj as ENUM_VARIANT_INDEX_ML_DSA_65, kk as EncryptedEnvelope, kl as EncryptedSubmission, I as EncryptionKey, km as JsonRpcCallClient, kn as LythiumSealEnvelope, ko as ML_DSA_65_PUBLIC_KEY_LEN, kp as ML_DSA_65_SEED_LEN, kq as ML_DSA_65_SIGNATURE_LEN, kr as ML_DSA_65_SIGNING_KEY_LEN, ks as ML_KEM_768_CIPHERTEXT_LEN, kt as ML_KEM_768_ENCAPSULATION_KEY_LEN, ku as ML_KEM_768_SHARED_SECRET_LEN, J as MempoolClass, H as NativeEvmTxFields, kv as NativeTxExtension, kw as NativeTxExtensionDescriptor, kx as NativeTxExtensionLike, ky as NonceAad, kz as OperatorSealKeypair, kA as PlaintextSubmission, kB as SEAL_COMMIT_LEN, kC as SEAL_DK_LEN, kD as SEAL_EK_LEN, kE as SEAL_KEM_CT_LEN, kF as SEAL_KEM_SEED_LEN, kG as SEAL_KEY_LEN, kH as SEAL_NONCE_LEN, kI as SEAL_SHARE_LEN, kJ as SEAL_TAG_LEN, kK as STANDARD_ALGO_NUMBER_ML_DSA_65, kL as SealRandomSource, kM as SealRecipient, kN as SealedSubmission, kO as bincodeDecryptHint, kP as bincodeEncryptedEnvelope, kQ as bincodeNonceAad, kR as bincodeSignedTransaction, kS as buildEncryptedEnvelope, kT as buildEncryptedSubmission, kU as buildPlaintextSubmission, kV as cryptoRandomSource, kW as encodeMlDsa65Opaque, kX as encodeSealEnvelope, kY as encodeTransactionForHash, kZ as encryptInnerTx, k_ as fetchEncryptionKey, k$ as generateOperatorSealKeypair, l0 as getClusterSealKeys, l1 as mlDsa65AddressBytes, l2 as mlDsa65AddressFromPublicKey, l3 as outerSigDigest, l4 as parseClusterSealKeys, l5 as sealRosterHash, l6 as sealToCluster, l7 as sealTransaction, l8 as submitEncryptedEnvelope, l9 as submitPlaintextTransaction, la as submitSealedTransaction, lb as submitTransactionWithPrivacy } from '../submission-B4FmDnm_.js';
3
3
 
4
4
  declare class BincodeWriter {
5
5
  #private;
package/dist/index.cjs CHANGED
@@ -1263,7 +1263,7 @@ function slotClusterCharterMembers(clusterId) {
1263
1263
  return slotClusterCharter(clusterId, NODE_REGISTRY_SUBKIND_CHARTER_MEMBER_SHARES);
1264
1264
  }
1265
1265
  function decodeActiveCharter(delegatorWord, membersWord) {
1266
- const presence = expectLength2(toBytes(delegatorWord), 32, "charterDelegatorWord");
1266
+ const presence = leftPadToWord(toBytes(delegatorWord), "charterDelegatorWord");
1267
1267
  let raw = 0n;
1268
1268
  for (const b of presence) {
1269
1269
  raw = raw << 8n | BigInt(b);
@@ -1272,7 +1272,7 @@ function decodeActiveCharter(delegatorWord, membersWord) {
1272
1272
  return { present: false, delegatorShareBps: 0, memberShareBps: [] };
1273
1273
  }
1274
1274
  const delegatorShareBps = Number(raw - 1n > 0xffffn ? 0xffffn : raw - 1n);
1275
- const packed = expectLength2(toBytes(membersWord), 32, "charterMembersWord");
1275
+ const packed = leftPadToWord(toBytes(membersWord), "charterMembersWord");
1276
1276
  const memberShareBps = [];
1277
1277
  for (let i = 0; i < NODE_REGISTRY_FORM_CLUSTER_MEMBER_COUNT; i += 1) {
1278
1278
  const at = 12 + 2 * i;
@@ -1593,6 +1593,15 @@ function padToWord(bytes) {
1593
1593
  out.set(bytes);
1594
1594
  return out;
1595
1595
  }
1596
+ function leftPadToWord(bytes, name) {
1597
+ if (bytes.length === 32) return bytes;
1598
+ if (bytes.length > 32) {
1599
+ throw new NodeRegistryError(`${name} must be <= 32 bytes, got ${bytes.length}`);
1600
+ }
1601
+ const out = new Uint8Array(32);
1602
+ out.set(bytes, 32 - bytes.length);
1603
+ return out;
1604
+ }
1596
1605
  function toBytes(value) {
1597
1606
  if (typeof value === "string") {
1598
1607
  return hexToBytes(value);
@@ -1613,10 +1622,11 @@ function displayTextBytes(value, maxBytes, name) {
1613
1622
  return bytes;
1614
1623
  }
1615
1624
  function hexToBytes(hex) {
1616
- const body = hex.startsWith("0x") || hex.startsWith("0X") ? hex.slice(2) : hex;
1617
- if (body.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(body)) {
1625
+ const raw = hex.startsWith("0x") || hex.startsWith("0X") ? hex.slice(2) : hex;
1626
+ if (!/^[0-9a-fA-F]*$/.test(raw)) {
1618
1627
  throw new NodeRegistryError("invalid hex bytes");
1619
1628
  }
1629
+ const body = raw.length % 2 !== 0 ? `0${raw}` : raw;
1620
1630
  const out = new Uint8Array(body.length / 2);
1621
1631
  for (let i = 0; i < out.length; i++) {
1622
1632
  out[i] = Number.parseInt(body.slice(i * 2, i * 2 + 2), 16);
@@ -4305,17 +4315,35 @@ var RpcClient = class _RpcClient {
4305
4315
  async ethBlockNumber() {
4306
4316
  return parseQuantityBig(await this.call(ethCompatMethod("blockNumber"), []));
4307
4317
  }
4308
- /** `eth_getBalance` — balance + Merkle proof envelope. */
4318
+ /**
4319
+ * `eth_getBalance` — balance + Merkle proof envelope.
4320
+ *
4321
+ * The node may answer with a bare `0x…` hex word or a proof-wrapped
4322
+ * object; both are normalized to a consistent {@link AccountProofResponse}
4323
+ * via {@link normalizeAccountProof} so `.value` is always the bare word.
4324
+ */
4309
4325
  async ethGetBalance(address, block = "latest") {
4310
- return this.call("eth_getBalance", [address, encodeBlockSelector(block)]);
4326
+ return normalizeAccountProof(
4327
+ await this.call("eth_getBalance", [address, encodeBlockSelector(block)])
4328
+ );
4311
4329
  }
4312
- /** `eth_getStorageAt` — storage word + Merkle proof. */
4330
+ /**
4331
+ * `eth_getStorageAt` — storage word + Merkle proof.
4332
+ *
4333
+ * The node returns a proof-wrapped object
4334
+ * `{ value, proof, stateRoot, blockNumber }` (some builds use a bare
4335
+ * `0x…` hex word). Both shapes are normalized to a consistent
4336
+ * {@link AccountProofResponse} via {@link normalizeAccountProof}; `.value`
4337
+ * is always the bare storage word (even-length hex, `0x0` when zero).
4338
+ */
4313
4339
  async ethGetStorageAt(address, slot, block = "latest") {
4314
- return this.call("eth_getStorageAt", [
4315
- address,
4316
- slot,
4317
- encodeBlockSelector(block)
4318
- ]);
4340
+ return normalizeAccountProof(
4341
+ await this.call("eth_getStorageAt", [
4342
+ address,
4343
+ slot,
4344
+ encodeBlockSelector(block)
4345
+ ])
4346
+ );
4319
4347
  }
4320
4348
  /** `eth_getTransactionCount` — sender nonce. */
4321
4349
  async ethGetTransactionCount(address, block = "latest") {
@@ -4424,9 +4452,14 @@ var RpcClient = class _RpcClient {
4424
4452
  async lythGetRegistration(peerId) {
4425
4453
  return this.call("lyth_getRegistration", [peerId]);
4426
4454
  }
4427
- /** `lyth_registryStateProof` — Merkle proof for a registry entry. */
4455
+ /**
4456
+ * `lyth_registryStateProof` — Merkle proof for a registry entry.
4457
+ *
4458
+ * Normalized through {@link normalizeAccountProof} so a bare-hex or
4459
+ * proof-wrapped answer both yield a consistent {@link AccountProofResponse}.
4460
+ */
4428
4461
  async lythRegistryStateProof(peerId) {
4429
- return this.call("lyth_registryStateProof", [peerId]);
4462
+ return normalizeAccountProof(await this.call("lyth_registryStateProof", [peerId]));
4430
4463
  }
4431
4464
  /** `lyth_getAccountPolicy` — privacy posture for an account. */
4432
4465
  async lythGetAccountPolicy(address) {
@@ -5348,6 +5381,38 @@ function parseQuantity(hex) {
5348
5381
  }
5349
5382
  return Number(big);
5350
5383
  }
5384
+ function normalizeStorageWord(value) {
5385
+ if (value === null || value === void 0 || value === "") return "0x0";
5386
+ if (typeof value !== "string") {
5387
+ throw SdkError.malformed(`storage word is not a string: ${typeof value}`);
5388
+ }
5389
+ const body = value.startsWith("0x") || value.startsWith("0X") ? value.slice(2) : value;
5390
+ if (body.length === 0) return "0x0";
5391
+ if (!/^[0-9a-fA-F]+$/.test(body)) {
5392
+ throw SdkError.malformed(`invalid hex storage word: ${value}`);
5393
+ }
5394
+ return body.length % 2 === 0 ? `0x${body}` : `0x0${body}`;
5395
+ }
5396
+ function normalizeAccountProof(result) {
5397
+ if (typeof result === "string" || result === null || result === void 0) {
5398
+ return { value: normalizeStorageWord(result), state_root: "0x", block_number: 0n };
5399
+ }
5400
+ const obj = result;
5401
+ const stateRoot = obj.state_root ?? obj.stateRoot ?? "0x";
5402
+ const rawBlock = obj.block_number ?? obj.blockNumber ?? 0;
5403
+ let blockNumber;
5404
+ try {
5405
+ blockNumber = typeof rawBlock === "bigint" ? rawBlock : BigInt(rawBlock);
5406
+ } catch {
5407
+ blockNumber = 0n;
5408
+ }
5409
+ return {
5410
+ value: normalizeStorageWord(obj.value),
5411
+ state_root: stateRoot,
5412
+ block_number: blockNumber,
5413
+ proof: obj.proof ?? null
5414
+ };
5415
+ }
5351
5416
  function encodeRpcInteger(v) {
5352
5417
  if (typeof v === "bigint") return `0x${v.toString(16)}`;
5353
5418
  return v;
@@ -7445,6 +7510,92 @@ function concatBytes5(...parts) {
7445
7510
  }
7446
7511
  return out;
7447
7512
  }
7513
+
7514
+ // src/operator-trust.ts
7515
+ var GENESIS_HASH_RE = /^0x[0-9a-fA-F]{64}$/;
7516
+ var QUARANTINED_RPC_CODE = -32047;
7517
+ function normaliseHash(input) {
7518
+ return typeof input === "string" && GENESIS_HASH_RE.test(input) ? input.toLowerCase() : null;
7519
+ }
7520
+ function isQuarantineError(err) {
7521
+ if (err instanceof SdkError && err.code === QUARANTINED_RPC_CODE) return true;
7522
+ const message = err instanceof Error ? err.message : String(err);
7523
+ return /quarantin/i.test(message);
7524
+ }
7525
+ async function verifyOperatorGenesis(client, expectedGenesisHash) {
7526
+ const pinned = normaliseHash(expectedGenesisHash);
7527
+ try {
7528
+ const stats = await client.lythChainStats();
7529
+ const observed = normaliseHash(stats.genesisHash);
7530
+ if (observed === null) {
7531
+ return { ok: false, observed: null, quarantined: false };
7532
+ }
7533
+ return { ok: pinned !== null && observed === pinned, observed, quarantined: false };
7534
+ } catch (err) {
7535
+ if (isQuarantineError(err)) {
7536
+ return { ok: false, observed: null, quarantined: true };
7537
+ }
7538
+ return { ok: false, observed: null, quarantined: false };
7539
+ }
7540
+ }
7541
+ var OperatorTrustError = class extends SdkError {
7542
+ reason;
7543
+ constructor(reason, message) {
7544
+ super("endpoint", message);
7545
+ this.name = "OperatorTrustError";
7546
+ this.reason = reason;
7547
+ }
7548
+ };
7549
+ async function selectTrustedOperator(chain, options = {}) {
7550
+ if (chain.rpc.length === 0) {
7551
+ throw new OperatorTrustError(
7552
+ "unreachable",
7553
+ `network ${chain.network} has no RPC endpoints`
7554
+ );
7555
+ }
7556
+ const expectedChainId = BigInt(chain.chain_id);
7557
+ let sawRegenesis = false;
7558
+ let sawWrongChain = false;
7559
+ let sawUntrusted = false;
7560
+ let sawQuarantined = false;
7561
+ const probes = chain.rpc.map(async (ep) => {
7562
+ const client = new RpcClient(ep.url, options);
7563
+ let chainId;
7564
+ try {
7565
+ chainId = await client.ethChainId();
7566
+ } catch (err) {
7567
+ if (isQuarantineError(err)) sawQuarantined = true;
7568
+ throw err;
7569
+ }
7570
+ if (chainId !== expectedChainId) {
7571
+ sawWrongChain = true;
7572
+ throw new SdkError("endpoint", `${ep.url}: chain id ${chainId} != ${chain.chain_id}`);
7573
+ }
7574
+ const verdict = await verifyOperatorGenesis(client, chain.genesis_hash);
7575
+ if (verdict.quarantined) {
7576
+ sawQuarantined = true;
7577
+ throw new SdkError("endpoint", `${ep.url}: quarantined`);
7578
+ }
7579
+ if (!verdict.ok) {
7580
+ if (verdict.observed !== null) sawRegenesis = true;
7581
+ else sawUntrusted = true;
7582
+ throw new SdkError("endpoint", `${ep.url}: genesis not trusted`);
7583
+ }
7584
+ return client;
7585
+ });
7586
+ try {
7587
+ return await Promise.any(probes);
7588
+ } catch {
7589
+ const reason = sawRegenesis ? "regenesis" : sawWrongChain ? "wrong-chain" : sawUntrusted ? "untrusted" : sawQuarantined ? "quarantined" : "unreachable";
7590
+ throw new OperatorTrustError(
7591
+ reason,
7592
+ `no trusted operator for ${chain.network} (${reason})`
7593
+ );
7594
+ }
7595
+ }
7596
+ async function selectTrustedOperatorForNetwork(network = "testnet-69420", options = {}) {
7597
+ return selectTrustedOperator(getChainInfo(network), options);
7598
+ }
7448
7599
  var NO_EVM_RECEIPT_PROOF_SCHEMA = "mono.no_evm_receipt_proof.v1";
7449
7600
  var NO_EVM_RECEIPT_PROOF_TYPE = "canonicalReceiptsTranscript";
7450
7601
  var NO_EVM_RECEIPT_INCLUSION_PROOF_TYPE = "canonicalReceiptInclusion";
@@ -12230,7 +12381,7 @@ var MONOLYTHIUM_NETWORKS = {
12230
12381
  };
12231
12382
 
12232
12383
  // src/index.ts
12233
- var version = "0.4.17";
12384
+ var version = "0.4.18";
12234
12385
 
12235
12386
  exports.ADDRESS_HRP = ADDRESS_HRP;
12236
12387
  exports.ADDRESS_KIND_HRPS = ADDRESS_KIND_HRPS;
@@ -12369,6 +12520,7 @@ exports.OPERATOR_ROUTER_EVENT_SIGS = OPERATOR_ROUTER_EVENT_SIGS;
12369
12520
  exports.OPERATOR_ROUTER_SELECTORS = OPERATOR_ROUTER_SELECTORS;
12370
12521
  exports.OPERATOR_ROUTER_SIGS = OPERATOR_ROUTER_SIGS;
12371
12522
  exports.ORACLE_EVENT_SIGS = ORACLE_EVENT_SIGS;
12523
+ exports.OperatorTrustError = OperatorTrustError;
12372
12524
  exports.OracleEventError = OracleEventError;
12373
12525
  exports.PENDING_CHANGE_KIND_CODES = PENDING_CHANGE_KIND_CODES;
12374
12526
  exports.PRECOMPILE_ADDRESSES = PRECOMPILE_ADDRESSES;
@@ -12385,6 +12537,7 @@ exports.PUBKEY_REGISTRY_ML_DSA_65_PUBLIC_KEY_LEN = PUBKEY_REGISTRY_ML_DSA_65_PUB
12385
12537
  exports.PUBKEY_REGISTRY_SELECTORS = PUBKEY_REGISTRY_SELECTORS;
12386
12538
  exports.ProverMarketError = ProverMarketError;
12387
12539
  exports.PubkeyRegistryError = PubkeyRegistryError;
12540
+ exports.QUARANTINED_RPC_CODE = QUARANTINED_RPC_CODE;
12388
12541
  exports.REGISTRY_DEFAULT_EXECUTION_UNIT_LIMIT = REGISTRY_DEFAULT_EXECUTION_UNIT_LIMIT;
12389
12542
  exports.RESERVED_ADDRESS_HRPS = RESERVED_ADDRESS_HRPS;
12390
12543
  exports.RpcClient = RpcClient;
@@ -12686,6 +12839,7 @@ exports.isBridgeResumeCooldownActiveRevert = isBridgeResumeCooldownActiveRevert;
12686
12839
  exports.isConcreteServiceProbeStatus = isConcreteServiceProbeStatus;
12687
12840
  exports.isNativeDecodedEvent = isNativeDecodedEvent;
12688
12841
  exports.isNativeMarketOrderBookStreamPayload = isNativeMarketOrderBookStreamPayload;
12842
+ exports.isQuarantineError = isQuarantineError;
12689
12843
  exports.isSinglePublicServiceProbeMask = isSinglePublicServiceProbeMask;
12690
12844
  exports.isUnexpectedValueRevert = isUnexpectedValueRevert;
12691
12845
  exports.isValidNodeRegistryCapabilities = isValidNodeRegistryCapabilities;
@@ -12747,6 +12901,8 @@ exports.resolveMaxExecutionUnitPrice = resolveMaxExecutionUnitPrice;
12747
12901
  exports.resolveRegistryExecutionFee = resolveRegistryExecutionFee;
12748
12902
  exports.resolveStudioHostStatus = resolveStudioHostStatus;
12749
12903
  exports.selectBridgeTransferRoute = selectBridgeTransferRoute;
12904
+ exports.selectTrustedOperator = selectTrustedOperator;
12905
+ exports.selectTrustedOperatorForNetwork = selectTrustedOperatorForNetwork;
12750
12906
  exports.serviceMaskToBitIndex = serviceMaskToBitIndex;
12751
12907
  exports.serviceProbeStatusLabel = serviceProbeStatusLabel;
12752
12908
  exports.setDestinationRoot = setDestinationRoot;
@@ -12786,6 +12942,7 @@ exports.verifyNoEvmFinalityEvidenceMultisig = verifyNoEvmFinalityEvidenceMultisi
12786
12942
  exports.verifyNoEvmFinalityEvidenceThreshold = verifyNoEvmFinalityEvidenceThreshold;
12787
12943
  exports.verifyNoEvmReceiptProof = verifyNoEvmReceiptProof;
12788
12944
  exports.verifyNoEvmReceiptProofTrust = verifyNoEvmReceiptProofTrust;
12945
+ exports.verifyOperatorGenesis = verifyOperatorGenesis;
12789
12946
  exports.version = version;
12790
12947
  exports.vrfAddressHex = vrfAddressHex;
12791
12948
  //# sourceMappingURL=index.cjs.map