@monolythium/core-sdk 0.4.15 → 0.4.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -463,7 +463,33 @@ var NODE_REGISTRY_SELECTORS = {
463
463
  /** `publishOperatorSealKey(bytes32,bytes)` — owner-callable LythiumSeal EK publication. */
464
464
  publishOperatorSealKey: "0x" + selectorHex("publishOperatorSealKey(bytes32,bytes)"),
465
465
  /** `getOperatorSealKey(bytes32)` view — returns the operator's published LythiumSeal EK. */
466
- getOperatorSealKey: "0x" + selectorHex("getOperatorSealKey(bytes32)")
466
+ getOperatorSealKey: "0x" + selectorHex("getOperatorSealKey(bytes32)"),
467
+ /**
468
+ * `updateCharter(uint32,bytes,bytes,bytes)` — Component H live charter
469
+ * amendment (Law §6.8); re-signs a new 30-byte charter for a LIVE cluster
470
+ * with a delegator-protective cooldown. Consents verify over
471
+ * `updateCharterMessage` (NOT the formCluster digests).
472
+ */
473
+ updateCharter: "0x" + selectorHex("updateCharter(uint32,bytes,bytes,bytes)"),
474
+ /** `getPendingCharter(uint32)` view — Component H pending-amendment status. */
475
+ getPendingCharter: "0x" + selectorHex("getPendingCharter(uint32)"),
476
+ /** `commitArchiveRoot(bytes32,uint16,bytes32,uint64)` — Component B archive serve-challenge commit. */
477
+ commitArchiveRoot: "0x" + selectorHex("commitArchiveRoot(bytes32,uint16,bytes32,uint64)"),
478
+ /**
479
+ * `answerArchiveChallenge(bytes32,uint16,uint64,bytes,bytes32[])` —
480
+ * Component B answer. BLOCKER-1 (mono-core `service-rewards` d2ee4548):
481
+ * the caller-supplied `roundCertDigest` + `nonce` were REMOVED — the
482
+ * challenge seed is now the protocol-pinned per-epoch quorum-certificate
483
+ * digest and the nonce is derived from it. 5 args: peerId, shardIndex,
484
+ * epoch, leaf, proof.
485
+ */
486
+ answerArchiveChallenge: "0x" + selectorHex("answerArchiveChallenge(bytes32,uint16,uint64,bytes,bytes32[])"),
487
+ /** `setProbeAuthority(address)` — Component C foundation-gated probe-authority rotation. */
488
+ setProbeAuthority: "0x" + selectorHex("setProbeAuthority(address)"),
489
+ /** `getProbeAuthority()` view — Component C configured probe-authority address. */
490
+ getProbeAuthority: "0x" + selectorHex("getProbeAuthority()"),
491
+ /** `attestServiceProbe(bytes32,uint32,uint8,uint64)` — Component C attested score-eligibility path. */
492
+ attestServiceProbe: "0x" + selectorHex("attestServiceProbe(bytes32,uint32,uint8,uint64)")
467
493
  };
468
494
  var NODE_REGISTRY_CLUSTER_MEMBER_REF_BYTES = 48;
469
495
  var NODE_REGISTRY_LEGACY_CLUSTER_MEMBER_PUBKEY_BYTES = NODE_REGISTRY_CLUSTER_MEMBER_REF_BYTES;
@@ -488,6 +514,20 @@ var NODE_REGISTRY_CLUSTER_CHARTER_DELEGATOR_FLOOR_BPS = 2e3;
488
514
  var NODE_REGISTRY_CLUSTER_CHARTER_SHARE_DENOM_BPS = 1e4;
489
515
  var NODE_REGISTRY_OPERATOR_MONIKER_MAX_BYTES = 128;
490
516
  var NODE_REGISTRY_OPERATOR_ALIAS_MAX_BYTES = 64;
517
+ var NODE_REGISTRY_UPDATE_CHARTER_THRESHOLD = NODE_REGISTRY_FORM_CLUSTER_THRESHOLD;
518
+ var NODE_REGISTRY_UPDATE_CHARTER_MESSAGE_DOMAIN = "PROTOCORE_NODE_REGISTRY_CLUSTER_UPDATE_CHARTER_V1\0";
519
+ var NODE_REGISTRY_CHARTER_COOLDOWN_EPOCHS = 2;
520
+ var NODE_REGISTRY_ARCHIVE_CHALLENGE_DOMAIN = "monolythium.archive-challenge.v1";
521
+ var NODE_REGISTRY_ARCHIVE_NONCE_DOMAIN = "monolythium.archive-challenge.nonce.v1";
522
+ var NODE_REGISTRY_MERKLE_LEAF_DOMAIN = 0;
523
+ var NODE_REGISTRY_MERKLE_INNER_DOMAIN = 1;
524
+ var NODE_REGISTRY_MAX_MERKLE_PROOF_DEPTH = 40;
525
+ var NODE_REGISTRY_MIN_ARCHIVE_LEAF_COUNT = 65536n;
526
+ var NODE_REGISTRY_CHALLENGE_EPOCH_WINDOW = 2n;
527
+ var NODE_REGISTRY_ARCHIVE_KIND_EPOCH_SEED = 3;
528
+ var NODE_REGISTRY_TAG_ARCHIVE_CHALLENGE = 50;
529
+ var NODE_REGISTRY_TAG_SERVICE_SCORE = 36;
530
+ var NODE_REGISTRY_TAG_TREASURY = 31;
491
531
  var PENDING_CHANGE_KIND_CODES = {
492
532
  add: 1,
493
533
  remove: 2,
@@ -965,6 +1005,322 @@ function encodeFormClusterV2Calldata(args) {
965
1005
  )
966
1006
  );
967
1007
  }
1008
+ function decodeClusterCharter(charter) {
1009
+ const bytes = expectLength2(toBytes(charter), NODE_REGISTRY_CLUSTER_CHARTER_BYTES, "charter");
1010
+ const memberShareBps = [];
1011
+ let sum = 0;
1012
+ for (let i = 0; i < NODE_REGISTRY_FORM_CLUSTER_MEMBER_COUNT; i += 1) {
1013
+ const bps = bytes[2 * i] << 8 | bytes[2 * i + 1];
1014
+ memberShareBps.push(bps);
1015
+ sum += bps;
1016
+ }
1017
+ if (sum !== NODE_REGISTRY_CLUSTER_CHARTER_SHARE_DENOM_BPS) {
1018
+ throw new NodeRegistryError(
1019
+ `memberShareBps must sum to ${NODE_REGISTRY_CLUSTER_CHARTER_SHARE_DENOM_BPS}, got ${sum}`
1020
+ );
1021
+ }
1022
+ const delegatorShareBps = bytes[20] << 8 | bytes[21];
1023
+ if (delegatorShareBps < NODE_REGISTRY_CLUSTER_CHARTER_DELEGATOR_FLOOR_BPS || delegatorShareBps > NODE_REGISTRY_CLUSTER_CHARTER_SHARE_DENOM_BPS) {
1024
+ throw new NodeRegistryError(
1025
+ `delegatorShareBps must be within [${NODE_REGISTRY_CLUSTER_CHARTER_DELEGATOR_FLOOR_BPS}, ${NODE_REGISTRY_CLUSTER_CHARTER_SHARE_DENOM_BPS}], got ${delegatorShareBps}`
1026
+ );
1027
+ }
1028
+ let expiresMs = 0n;
1029
+ for (let i = 22; i < 30; i += 1) {
1030
+ expiresMs = expiresMs << 8n | BigInt(bytes[i]);
1031
+ }
1032
+ return { memberShareBps, delegatorShareBps, expiresMs };
1033
+ }
1034
+ function updateCharterMessage(clusterId, charter) {
1035
+ const id = toUint32(clusterId, "clusterId");
1036
+ const charterBytes = expectLength2(toBytes(charter), NODE_REGISTRY_CLUSTER_CHARTER_BYTES, "charter");
1037
+ return blake3_js.blake3(
1038
+ concatBytes(
1039
+ new TextEncoder().encode(NODE_REGISTRY_UPDATE_CHARTER_MESSAGE_DOMAIN),
1040
+ u32BeBytes(id),
1041
+ u16BeBytes(NODE_REGISTRY_UPDATE_CHARTER_THRESHOLD),
1042
+ u32BeBytes(charterBytes.length),
1043
+ charterBytes
1044
+ )
1045
+ );
1046
+ }
1047
+ function updateCharterMessageHex(clusterId, charter) {
1048
+ return bytesToHex(updateCharterMessage(clusterId, charter));
1049
+ }
1050
+ function encodeUpdateCharterCalldata(args) {
1051
+ const id = toUint32(args.clusterId, "clusterId");
1052
+ const charter = expectLength2(
1053
+ toBytes(args.charter),
1054
+ NODE_REGISTRY_CLUSTER_CHARTER_BYTES,
1055
+ "charter"
1056
+ );
1057
+ const signerPubkeys = flattenFixedWidth(
1058
+ args.signerPubkeys,
1059
+ NODE_REGISTRY_CONSENSUS_PUBKEY_BYTES,
1060
+ "signerPubkeys"
1061
+ );
1062
+ const signatures = flattenFixedWidth(
1063
+ args.signatures,
1064
+ NODE_REGISTRY_CONSENSUS_SIGNATURE_BYTES,
1065
+ "signatures"
1066
+ );
1067
+ const nPubkeys = signerPubkeys.length / NODE_REGISTRY_CONSENSUS_PUBKEY_BYTES;
1068
+ const nSigs = signatures.length / NODE_REGISTRY_CONSENSUS_SIGNATURE_BYTES;
1069
+ if (nPubkeys !== nSigs) {
1070
+ throw new NodeRegistryError(
1071
+ `signerPubkeys (${nPubkeys}) and signatures (${nSigs}) counts must match`
1072
+ );
1073
+ }
1074
+ if (nPubkeys < NODE_REGISTRY_UPDATE_CHARTER_THRESHOLD || nPubkeys > NODE_REGISTRY_FORM_CLUSTER_MEMBER_COUNT) {
1075
+ throw new NodeRegistryError(
1076
+ `signer count must be in [${NODE_REGISTRY_UPDATE_CHARTER_THRESHOLD}, ${NODE_REGISTRY_FORM_CLUSTER_MEMBER_COUNT}], got ${nPubkeys}`
1077
+ );
1078
+ }
1079
+ const charterPadded = padToWord(charter);
1080
+ const signerPadded = padToWord(signerPubkeys);
1081
+ const sigsPadded = padToWord(signatures);
1082
+ const charterOffset = 4n * 32n;
1083
+ const signerOffset = charterOffset + 32n + BigInt(charterPadded.length);
1084
+ const sigsOffset = signerOffset + 32n + BigInt(signerPadded.length);
1085
+ return bytesToHex(
1086
+ concatBytes(
1087
+ hexToBytes(NODE_REGISTRY_SELECTORS.updateCharter),
1088
+ uint32Word(id),
1089
+ uint64Word(charterOffset, "charterOffset"),
1090
+ uint64Word(signerOffset, "signerPubkeysOffset"),
1091
+ uint64Word(sigsOffset, "signaturesOffset"),
1092
+ uint64Word(BigInt(charter.length), "charterLength"),
1093
+ charterPadded,
1094
+ uint64Word(BigInt(signerPubkeys.length), "signerPubkeysLength"),
1095
+ signerPadded,
1096
+ uint64Word(BigInt(signatures.length), "signaturesLength"),
1097
+ sigsPadded
1098
+ )
1099
+ );
1100
+ }
1101
+ function encodeGetPendingCharterCalldata(clusterId) {
1102
+ return bytesToHex(
1103
+ concatBytes(hexToBytes(NODE_REGISTRY_SELECTORS.getPendingCharter), uint32Word(toUint32(clusterId, "clusterId")))
1104
+ );
1105
+ }
1106
+ function decodePendingCharter(returnData) {
1107
+ const bytes = toBytes(returnData);
1108
+ if (bytes.length < 5 * 32) {
1109
+ throw new NodeRegistryError("getPendingCharter return shorter than the 5-word head");
1110
+ }
1111
+ const word = (i) => bytes.slice(i * 32, (i + 1) * 32);
1112
+ const present = numberFromWord(word(0), "present", 1) === 1;
1113
+ const delegatorShareBps = numberFromWord(word(1), "delegatorShareBps", 65535);
1114
+ const effectiveEpoch = u64FromWord(word(2));
1115
+ const signerCount = numberFromWord(word(3), "signerCount", 65535);
1116
+ if (!present) {
1117
+ return { present: false, delegatorShareBps: 0, effectiveEpoch, signerCount: 0, memberShareBps: [] };
1118
+ }
1119
+ const bytesOffset = Number(u64FromWord(word(4)));
1120
+ const lenAt = bytesOffset;
1121
+ if (bytes.length < lenAt + 32) {
1122
+ throw new NodeRegistryError("getPendingCharter bytes-length word out of range");
1123
+ }
1124
+ const sharesLen = Number(u64FromWord(bytes.slice(lenAt, lenAt + 32)));
1125
+ const sharesAt = lenAt + 32;
1126
+ if (sharesLen < 32 || bytes.length < sharesAt + 32) {
1127
+ throw new NodeRegistryError("getPendingCharter packed-shares word truncated");
1128
+ }
1129
+ const packed = bytes.slice(sharesAt, sharesAt + 32);
1130
+ const memberShareBps = [];
1131
+ for (let i = 0; i < NODE_REGISTRY_FORM_CLUSTER_MEMBER_COUNT; i += 1) {
1132
+ const at = 12 + 2 * i;
1133
+ memberShareBps.push(packed[at] << 8 | packed[at + 1]);
1134
+ }
1135
+ return { present: true, delegatorShareBps, effectiveEpoch, signerCount, memberShareBps };
1136
+ }
1137
+ function encodeCommitArchiveRootCalldata(args) {
1138
+ const leafCount = toUint64(args.leafCount, "leafCount");
1139
+ if (leafCount < NODE_REGISTRY_MIN_ARCHIVE_LEAF_COUNT) {
1140
+ throw new NodeRegistryError(
1141
+ `leafCount must be >= ${NODE_REGISTRY_MIN_ARCHIVE_LEAF_COUNT} (MIN_ARCHIVE_LEAF_COUNT), got ${leafCount}`
1142
+ );
1143
+ }
1144
+ return bytesToHex(
1145
+ concatBytes(
1146
+ hexToBytes(NODE_REGISTRY_SELECTORS.commitArchiveRoot),
1147
+ expectLength2(toBytes(args.peerId), 32, "peerId"),
1148
+ uint16Word(args.shardIndex),
1149
+ expectLength2(toBytes(args.shardRoot), 32, "shardRoot"),
1150
+ uint64Word(leafCount, "leafCount")
1151
+ )
1152
+ );
1153
+ }
1154
+ function encodeAnswerArchiveChallengeCalldata(args) {
1155
+ const leaf = toBytes(args.leaf);
1156
+ const proof = args.proof.map((p, i) => expectLength2(toBytes(p), 32, `proof[${i}]`));
1157
+ if (proof.length > NODE_REGISTRY_MAX_MERKLE_PROOF_DEPTH) {
1158
+ throw new NodeRegistryError(
1159
+ `proof length must be <= ${NODE_REGISTRY_MAX_MERKLE_PROOF_DEPTH}, got ${proof.length}`
1160
+ );
1161
+ }
1162
+ const leafPadded = padToWord(leaf);
1163
+ const leafOffset = 5n * 32n;
1164
+ const proofOffset = leafOffset + 32n + BigInt(leafPadded.length);
1165
+ const proofTail = concatBytes(
1166
+ uint64Word(BigInt(proof.length), "proofLength"),
1167
+ ...proof
1168
+ );
1169
+ return bytesToHex(
1170
+ concatBytes(
1171
+ hexToBytes(NODE_REGISTRY_SELECTORS.answerArchiveChallenge),
1172
+ expectLength2(toBytes(args.peerId), 32, "peerId"),
1173
+ uint16Word(args.shardIndex),
1174
+ uint64Word(args.epoch, "epoch"),
1175
+ uint64Word(leafOffset, "leafOffset"),
1176
+ uint64Word(proofOffset, "proofOffset"),
1177
+ uint64Word(BigInt(leaf.length), "leafLength"),
1178
+ leafPadded,
1179
+ proofTail
1180
+ )
1181
+ );
1182
+ }
1183
+ function slotEpochChallengeSeed(epoch) {
1184
+ const buf = new Uint8Array(1 + 8 + 1);
1185
+ buf[0] = NODE_REGISTRY_TAG_ARCHIVE_CHALLENGE;
1186
+ buf.set(u64BeBytes(toUint64(epoch, "epoch")), 1);
1187
+ buf[9] = NODE_REGISTRY_ARCHIVE_KIND_EPOCH_SEED;
1188
+ return bytesToHex(sha3_js.keccak_256(buf));
1189
+ }
1190
+ function protocolNonceForEpoch(seed, epoch) {
1191
+ const s = expectLength2(toBytes(seed), 32, "seed");
1192
+ const e = toUint64(epoch, "epoch");
1193
+ const digest = blake3_js.blake3(
1194
+ concatBytes(new TextEncoder().encode(NODE_REGISTRY_ARCHIVE_NONCE_DOMAIN), u64BeBytes(e), s)
1195
+ );
1196
+ let n = 0n;
1197
+ for (let i = 0; i < 8; i += 1) {
1198
+ n = n << 8n | BigInt(digest[i]);
1199
+ }
1200
+ return n;
1201
+ }
1202
+ function deriveArchiveChallenge(seed, opHash, shardIndex, epoch, leafCount) {
1203
+ const pinnedSeed = expectLength2(toBytes(seed), 32, "seed");
1204
+ const op = expectLength2(toBytes(opHash), 32, "opHash");
1205
+ const shard = expectUint16(shardIndex, "shardIndex");
1206
+ const e = toUint64(epoch, "epoch");
1207
+ const count = toUint64(leafCount, "leafCount");
1208
+ if (count === 0n) {
1209
+ return null;
1210
+ }
1211
+ const nonce = protocolNonceForEpoch(pinnedSeed, e);
1212
+ const challengeSeed = blake3_js.blake3(
1213
+ concatBytes(
1214
+ new TextEncoder().encode(NODE_REGISTRY_ARCHIVE_CHALLENGE_DOMAIN),
1215
+ pinnedSeed,
1216
+ op,
1217
+ u16BeBytes(shard),
1218
+ u64BeBytes(e),
1219
+ u64BeBytes(nonce)
1220
+ )
1221
+ );
1222
+ let idx = 0n;
1223
+ for (let i = 0; i < 8; i += 1) {
1224
+ idx = idx << 8n | BigInt(challengeSeed[i]);
1225
+ }
1226
+ return {
1227
+ opHash: bytesToHex(op),
1228
+ shardIndex: shard,
1229
+ leafIndex: idx % count,
1230
+ seed: bytesToHex(challengeSeed)
1231
+ };
1232
+ }
1233
+ function archiveMerkleLeafHash(leaf) {
1234
+ return blake3_js.blake3(concatBytes(Uint8Array.from([NODE_REGISTRY_MERKLE_LEAF_DOMAIN]), toBytes(leaf)));
1235
+ }
1236
+ function archiveMerkleInnerHash(left, right) {
1237
+ return blake3_js.blake3(
1238
+ concatBytes(
1239
+ Uint8Array.from([NODE_REGISTRY_MERKLE_INNER_DOMAIN]),
1240
+ expectLength2(toBytes(left), 32, "left"),
1241
+ expectLength2(toBytes(right), 32, "right")
1242
+ )
1243
+ );
1244
+ }
1245
+ function encodeSetProbeAuthorityCalldata(probeAuthority) {
1246
+ return bytesToHex(
1247
+ concatBytes(
1248
+ hexToBytes(NODE_REGISTRY_SELECTORS.setProbeAuthority),
1249
+ addressWord(probeAuthority, "probeAuthority")
1250
+ )
1251
+ );
1252
+ }
1253
+ function encodeGetProbeAuthorityCalldata() {
1254
+ return NODE_REGISTRY_SELECTORS.getProbeAuthority;
1255
+ }
1256
+ function decodeProbeAuthority(returnData) {
1257
+ const bytes = expectLength2(toBytes(returnData), 32, "probeAuthority");
1258
+ return bytesToHex(bytes.slice(12, 32));
1259
+ }
1260
+ function encodeAttestServiceProbeCalldata(args) {
1261
+ if (!isValidPublicServiceProbeMask(args.serviceMask)) {
1262
+ throw new NodeRegistryError(
1263
+ `serviceMask 0x${args.serviceMask.toString(16).padStart(8, "0")} is not a valid public-service mask`
1264
+ );
1265
+ }
1266
+ if (!isConcreteServiceProbeStatus(args.status)) {
1267
+ throw new NodeRegistryError(`status ${args.status} is not a concrete service-probe outcome`);
1268
+ }
1269
+ return bytesToHex(
1270
+ concatBytes(
1271
+ hexToBytes(NODE_REGISTRY_SELECTORS.attestServiceProbe),
1272
+ expectLength2(toBytes(args.opHash), 32, "opHash"),
1273
+ uint32Word(args.serviceMask),
1274
+ uint8Word(args.status),
1275
+ uint64Word(args.epoch, "epoch")
1276
+ )
1277
+ );
1278
+ }
1279
+ function slotClusterServiceScore(clusterId) {
1280
+ return scoreSlotHex(0, u32BeBytes(toUint32(clusterId, "clusterId")));
1281
+ }
1282
+ function slotArchiveChallengePass(clusterId, epoch) {
1283
+ return scoreSlotHex(
1284
+ 1,
1285
+ concatBytes(u32BeBytes(toUint32(clusterId, "clusterId")), u64BeBytes(toUint64(epoch, "epoch")))
1286
+ );
1287
+ }
1288
+ function slotScoreServiceProbe(opHash, serviceBit) {
1289
+ if (!Number.isInteger(serviceBit) || serviceBit < 0 || serviceBit > 255) {
1290
+ throw new NodeRegistryError("serviceBit must be a u8 bit index");
1291
+ }
1292
+ return scoreSlotHex(
1293
+ 2,
1294
+ concatBytes(expectLength2(toBytes(opHash), 32, "opHash"), Uint8Array.from([serviceBit]))
1295
+ );
1296
+ }
1297
+ function serviceMaskToBitIndex(mask) {
1298
+ if (!Number.isInteger(mask) || mask <= 0 || (mask & mask - 1) !== 0) {
1299
+ return null;
1300
+ }
1301
+ let bit = 0;
1302
+ let m = mask >>> 0;
1303
+ while ((m & 1) === 0) {
1304
+ m >>>= 1;
1305
+ bit += 1;
1306
+ }
1307
+ return bit;
1308
+ }
1309
+ function decodeScoreServiceProbe(word) {
1310
+ const bytes = expectLength2(toBytes(word), 32, "scoreServiceProbeWord");
1311
+ const status = bytes[31];
1312
+ let packed = 0n;
1313
+ for (const b of bytes) {
1314
+ packed = packed << 8n | BigInt(b);
1315
+ }
1316
+ return { epoch: packed >> 8n, status };
1317
+ }
1318
+ function slotProbeAuthority() {
1319
+ const buf = new Uint8Array(1 + 32 + 1);
1320
+ buf[0] = NODE_REGISTRY_TAG_TREASURY;
1321
+ buf[33] = 10;
1322
+ return bytesToHex(sha3_js.keccak_256(buf));
1323
+ }
968
1324
  function decodeClusterJoinRequest(returnData) {
969
1325
  const bytes = expectLength2(toBytes(returnData), 8 * 32, "clusterJoinRequest");
970
1326
  const word = (i) => bytes.slice(i * 32, (i + 1) * 32);
@@ -1143,6 +1499,43 @@ function u16BeBytes(value) {
1143
1499
  }
1144
1500
  return Uint8Array.from([value >>> 8 & 255, value & 255]);
1145
1501
  }
1502
+ function expectUint16(value, name) {
1503
+ if (!Number.isInteger(value) || value < 0 || value > 65535) {
1504
+ throw new NodeRegistryError(`${name} must be a uint16`);
1505
+ }
1506
+ return value;
1507
+ }
1508
+ function uint16Word(value) {
1509
+ const out = new Uint8Array(32);
1510
+ out.set(u16BeBytes(value), 30);
1511
+ return out;
1512
+ }
1513
+ function addressWord(value, name) {
1514
+ const addr = expectLength2(toBytes(value), 20, name);
1515
+ const out = new Uint8Array(32);
1516
+ out.set(addr, 12);
1517
+ return out;
1518
+ }
1519
+ function flattenFixedWidth(value, width, name) {
1520
+ let flat;
1521
+ if (Array.isArray(value) && value.length > 0 && typeof value[0] !== "number") {
1522
+ const parts = value.map(
1523
+ (v, i) => expectLength2(toBytes(v), width, `${name}[${i}]`)
1524
+ );
1525
+ flat = concatBytes(...parts);
1526
+ } else {
1527
+ flat = toBytes(value);
1528
+ }
1529
+ if (flat.length === 0 || flat.length % width !== 0) {
1530
+ throw new NodeRegistryError(`${name} must be a non-empty multiple of ${width} bytes, got ${flat.length}`);
1531
+ }
1532
+ return flat;
1533
+ }
1534
+ function scoreSlotHex(kind, tail) {
1535
+ return bytesToHex(
1536
+ sha3_js.keccak_256(concatBytes(Uint8Array.from([NODE_REGISTRY_TAG_SERVICE_SCORE, kind]), tail))
1537
+ );
1538
+ }
1146
1539
  function compareBytes(a, b) {
1147
1540
  const len = Math.min(a.length, b.length);
1148
1541
  for (let i = 0; i < len; i++) {
@@ -3670,7 +4063,7 @@ function encodeStringAddressCall(selector, name, address) {
3670
4063
  hexToBytes4(selector),
3671
4064
  // Two head words (string offset, address) → string tail starts at 0x40.
3672
4065
  uint256Word(0x40n),
3673
- addressWord(address),
4066
+ addressWord2(address),
3674
4067
  uint256Word(BigInt(nameBytes.length)),
3675
4068
  padTo32(nameBytes)
3676
4069
  )
@@ -3694,7 +4087,7 @@ function selectorHex2(signature) {
3694
4087
  const sel = sha3_js.keccak_256(new TextEncoder().encode(signature)).slice(0, 4);
3695
4088
  return `0x${[...sel].map((b) => b.toString(16).padStart(2, "0")).join("")}`;
3696
4089
  }
3697
- function addressWord(value) {
4090
+ function addressWord2(value) {
3698
4091
  const out = new Uint8Array(32);
3699
4092
  if (value == null) return out;
3700
4093
  const bytes = toBytes2(value);
@@ -6238,7 +6631,7 @@ function encodeSetBridgeRouteFinalityCalldata(bridgeId, finalityBlocks) {
6238
6631
  function bridgeSelector(signature) {
6239
6632
  return sha3_js.keccak_256(new TextEncoder().encode(signature)).slice(0, 4);
6240
6633
  }
6241
- function addressWord2(value, name) {
6634
+ function addressWord3(value, name) {
6242
6635
  const addr = expectLength3(toBytes3(value), 20, name);
6243
6636
  const out = new Uint8Array(32);
6244
6637
  out.set(addr, 12);
@@ -6257,7 +6650,7 @@ function encodeBridgeClaimCalldata(bridgeId, depositId, recipient) {
6257
6650
  bridgeSelector("claim(bytes32,bytes32,address)"),
6258
6651
  expectLength3(toBytes3(bridgeId), 32, "bridgeId"),
6259
6652
  expectLength3(toBytes3(depositId), 32, "depositId"),
6260
- addressWord2(recipient, "recipient")
6653
+ addressWord3(recipient, "recipient")
6261
6654
  )
6262
6655
  );
6263
6656
  }
@@ -9251,8 +9644,8 @@ function encodeTokenFactoryTransferFromCalldata(tokenId, from, to, amount) {
9251
9644
  concatBytes2(
9252
9645
  hexToBytes2(TOKEN_FACTORY_SELECTORS.transferFrom, "transferFrom selector"),
9253
9646
  bytes32(tokenId, "tokenId"),
9254
- addressWord3(from, "from"),
9255
- addressWord3(to, "to"),
9647
+ addressWord4(from, "from"),
9648
+ addressWord4(to, "to"),
9256
9649
  uint256Word2(parseUint(amount, "amount"), "amount")
9257
9650
  )
9258
9651
  );
@@ -9274,8 +9667,8 @@ function encodeTokenFactoryAllowanceCalldata(tokenId, owner, spender) {
9274
9667
  concatBytes2(
9275
9668
  hexToBytes2(TOKEN_FACTORY_SELECTORS.allowance, "allowance selector"),
9276
9669
  bytes32(tokenId, "tokenId"),
9277
- addressWord3(owner, "owner"),
9278
- addressWord3(spender, "spender")
9670
+ addressWord4(owner, "owner"),
9671
+ addressWord4(spender, "spender")
9279
9672
  )
9280
9673
  );
9281
9674
  }
@@ -9342,7 +9735,7 @@ function encodeBytes32Address(selector, tokenId, address) {
9342
9735
  concatBytes2(
9343
9736
  hexToBytes2(selector, "selector"),
9344
9737
  bytes32(tokenId, "tokenId"),
9345
- addressWord3(address, "address")
9738
+ addressWord4(address, "address")
9346
9739
  )
9347
9740
  );
9348
9741
  }
@@ -9351,7 +9744,7 @@ function encodeBytes32AddressUint(selector, tokenId, address, amount) {
9351
9744
  concatBytes2(
9352
9745
  hexToBytes2(selector, "selector"),
9353
9746
  bytes32(tokenId, "tokenId"),
9354
- addressWord3(address, "address"),
9747
+ addressWord4(address, "address"),
9355
9748
  uint256Word2(parseUint(amount, "amount"), "amount")
9356
9749
  )
9357
9750
  );
@@ -9377,7 +9770,7 @@ function padTo323(bytes) {
9377
9770
  out.set(bytes);
9378
9771
  return out;
9379
9772
  }
9380
- function addressWord3(value, label) {
9773
+ function addressWord4(value, label) {
9381
9774
  const out = new Uint8Array(32);
9382
9775
  out.set(addressBytes(value, label), 12);
9383
9776
  return out;
@@ -9892,7 +10285,7 @@ function encodeDelegateCalldata(cluster, weightBps) {
9892
10285
  concatBytes8(
9893
10286
  hexToBytes8(DELEGATION_SELECTORS.delegate),
9894
10287
  uint32Word2(cluster, "cluster"),
9895
- uint16Word(weightBps, "weightBps")
10288
+ uint16Word2(weightBps, "weightBps")
9896
10289
  )
9897
10290
  );
9898
10291
  }
@@ -9910,7 +10303,7 @@ function encodeRedelegateCalldata(fromCluster, toCluster, weightBps) {
9910
10303
  hexToBytes8(DELEGATION_SELECTORS.redelegate),
9911
10304
  uint32Word2(fromCluster, "fromCluster"),
9912
10305
  uint32Word2(toCluster, "toCluster"),
9913
- uint16Word(weightBps, "weightBps")
10306
+ uint16Word2(weightBps, "weightBps")
9914
10307
  )
9915
10308
  );
9916
10309
  }
@@ -9940,7 +10333,7 @@ function uint32Word2(value, name) {
9940
10333
  }
9941
10334
  return out;
9942
10335
  }
9943
- function uint16Word(value, name) {
10336
+ function uint16Word2(value, name) {
9944
10337
  const n = toBigint3(value, name);
9945
10338
  if (n < 0n || n > 0xffffn) {
9946
10339
  throw new DelegationPrecompileError(`${name} must fit uint16`);
@@ -10351,9 +10744,9 @@ function decodeHasPubkeyReturn(data) {
10351
10744
  throw new PubkeyRegistryError("hasPubkey bool must be 0 or 1");
10352
10745
  }
10353
10746
  function encodeSingleAddressCall2(selector, address) {
10354
- return bytesToHex11(concatBytes10(hexToBytes10(selector), addressWord4(toAddressBytes(address))));
10747
+ return bytesToHex11(concatBytes10(hexToBytes10(selector), addressWord5(toAddressBytes(address))));
10355
10748
  }
10356
- function addressWord4(address) {
10749
+ function addressWord5(address) {
10357
10750
  return concatBytes10(new Uint8Array(12), address);
10358
10751
  }
10359
10752
  function toAddressBytes(value) {
@@ -10562,7 +10955,7 @@ function encodePlaceMarketOrderCalldata(args) {
10562
10955
  normalized.quoteTokenId,
10563
10956
  uint8Word2(normalized.side),
10564
10957
  uint256Word5(normalized.quantity, "quantity"),
10565
- uint16Word2(normalized.maxSlippageBps, "maxSlippageBps")
10958
+ uint16Word3(normalized.maxSlippageBps, "maxSlippageBps")
10566
10959
  )
10567
10960
  );
10568
10961
  }
@@ -10575,7 +10968,7 @@ function encodePlaceMarketOrderExCalldata(args) {
10575
10968
  normalized.quoteTokenId,
10576
10969
  uint8Word2(normalized.side),
10577
10970
  uint256Word5(normalized.quantity, "quantity"),
10578
- uint16Word2(normalized.maxSlippageBps, "maxSlippageBps"),
10971
+ uint16Word3(normalized.maxSlippageBps, "maxSlippageBps"),
10579
10972
  uint8Word2(normalized.mode)
10580
10973
  )
10581
10974
  );
@@ -10882,7 +11275,7 @@ function encodePlaceLimitOrderViaCalldata(args) {
10882
11275
  return bytesToHex2(
10883
11276
  concatBytes2(
10884
11277
  hexToBytes2(OPERATOR_ROUTER_SELECTORS.placeLimitOrderVia, "placeLimitOrderVia selector"),
10885
- addressWord5(operator.bytes),
11278
+ addressWord6(operator.bytes),
10886
11279
  bytes32FromHex(args.base, "base"),
10887
11280
  bytes32FromHex(args.quote, "quote"),
10888
11281
  uint8Word2(side),
@@ -11190,7 +11583,7 @@ function uint64Word3(value, name) {
11190
11583
  }
11191
11584
  return out;
11192
11585
  }
11193
- function uint16Word2(value, name) {
11586
+ function uint16Word3(value, name) {
11194
11587
  if (value < 0n || value > 0xffffn) {
11195
11588
  throw new MarketActionError(`${name} must fit uint16`);
11196
11589
  }
@@ -11211,7 +11604,7 @@ function uint256Word5(value, name) {
11211
11604
  }
11212
11605
  return out;
11213
11606
  }
11214
- function addressWord5(addr) {
11607
+ function addressWord6(addr) {
11215
11608
  if (addr.length !== 20) {
11216
11609
  throw new MarketActionError("address must be 20 bytes");
11217
11610
  }
@@ -11829,9 +12222,14 @@ exports.NATIVE_MARKET_EVENT_FAMILY = NATIVE_MARKET_EVENT_FAMILY;
11829
12222
  exports.NATIVE_MARKET_MODULE_ADDRESS = NATIVE_MARKET_MODULE_ADDRESS;
11830
12223
  exports.NATIVE_MARKET_MODULE_ADDRESS_BYTES = NATIVE_MARKET_MODULE_ADDRESS_BYTES;
11831
12224
  exports.NATIVE_MARKET_ORDER_BOOK_STREAM_TOPIC = NATIVE_MARKET_ORDER_BOOK_STREAM_TOPIC;
12225
+ exports.NODE_REGISTRY_ARCHIVE_CHALLENGE_DOMAIN = NODE_REGISTRY_ARCHIVE_CHALLENGE_DOMAIN;
12226
+ exports.NODE_REGISTRY_ARCHIVE_KIND_EPOCH_SEED = NODE_REGISTRY_ARCHIVE_KIND_EPOCH_SEED;
12227
+ exports.NODE_REGISTRY_ARCHIVE_NONCE_DOMAIN = NODE_REGISTRY_ARCHIVE_NONCE_DOMAIN;
11832
12228
  exports.NODE_REGISTRY_BLS_PUBKEY_BYTES = NODE_REGISTRY_BLS_PUBKEY_BYTES;
11833
12229
  exports.NODE_REGISTRY_CAPABILITIES = NODE_REGISTRY_CAPABILITIES;
11834
12230
  exports.NODE_REGISTRY_CAPABILITY_MASK = NODE_REGISTRY_CAPABILITY_MASK;
12231
+ exports.NODE_REGISTRY_CHALLENGE_EPOCH_WINDOW = NODE_REGISTRY_CHALLENGE_EPOCH_WINDOW;
12232
+ exports.NODE_REGISTRY_CHARTER_COOLDOWN_EPOCHS = NODE_REGISTRY_CHARTER_COOLDOWN_EPOCHS;
11835
12233
  exports.NODE_REGISTRY_CLUSTER_CHARTER_BYTES = NODE_REGISTRY_CLUSTER_CHARTER_BYTES;
11836
12234
  exports.NODE_REGISTRY_CLUSTER_CHARTER_DELEGATOR_FLOOR_BPS = NODE_REGISTRY_CLUSTER_CHARTER_DELEGATOR_FLOOR_BPS;
11837
12235
  exports.NODE_REGISTRY_CLUSTER_CHARTER_SHARE_DENOM_BPS = NODE_REGISTRY_CLUSTER_CHARTER_SHARE_DENOM_BPS;
@@ -11850,12 +12248,21 @@ exports.NODE_REGISTRY_FORM_CLUSTER_MESSAGE_DOMAIN_V2 = NODE_REGISTRY_FORM_CLUSTE
11850
12248
  exports.NODE_REGISTRY_FORM_CLUSTER_STANDBY_COUNT = NODE_REGISTRY_FORM_CLUSTER_STANDBY_COUNT;
11851
12249
  exports.NODE_REGISTRY_FORM_CLUSTER_THRESHOLD = NODE_REGISTRY_FORM_CLUSTER_THRESHOLD;
11852
12250
  exports.NODE_REGISTRY_LEGACY_CLUSTER_MEMBER_PUBKEY_BYTES = NODE_REGISTRY_LEGACY_CLUSTER_MEMBER_PUBKEY_BYTES;
12251
+ exports.NODE_REGISTRY_MAX_MERKLE_PROOF_DEPTH = NODE_REGISTRY_MAX_MERKLE_PROOF_DEPTH;
12252
+ exports.NODE_REGISTRY_MERKLE_INNER_DOMAIN = NODE_REGISTRY_MERKLE_INNER_DOMAIN;
12253
+ exports.NODE_REGISTRY_MERKLE_LEAF_DOMAIN = NODE_REGISTRY_MERKLE_LEAF_DOMAIN;
12254
+ exports.NODE_REGISTRY_MIN_ARCHIVE_LEAF_COUNT = NODE_REGISTRY_MIN_ARCHIVE_LEAF_COUNT;
11853
12255
  exports.NODE_REGISTRY_OPERATOR_ALIAS_MAX_BYTES = NODE_REGISTRY_OPERATOR_ALIAS_MAX_BYTES;
11854
12256
  exports.NODE_REGISTRY_OPERATOR_MONIKER_MAX_BYTES = NODE_REGISTRY_OPERATOR_MONIKER_MAX_BYTES;
11855
12257
  exports.NODE_REGISTRY_OPERATOR_SEAL_EK_BYTES = NODE_REGISTRY_OPERATOR_SEAL_EK_BYTES;
11856
12258
  exports.NODE_REGISTRY_PENDING_CHANGE_MAX_INTENT_ID = NODE_REGISTRY_PENDING_CHANGE_MAX_INTENT_ID;
11857
12259
  exports.NODE_REGISTRY_PUBLIC_SERVICE_MASK = NODE_REGISTRY_PUBLIC_SERVICE_MASK;
11858
12260
  exports.NODE_REGISTRY_SELECTORS = NODE_REGISTRY_SELECTORS;
12261
+ exports.NODE_REGISTRY_TAG_ARCHIVE_CHALLENGE = NODE_REGISTRY_TAG_ARCHIVE_CHALLENGE;
12262
+ exports.NODE_REGISTRY_TAG_SERVICE_SCORE = NODE_REGISTRY_TAG_SERVICE_SCORE;
12263
+ exports.NODE_REGISTRY_TAG_TREASURY = NODE_REGISTRY_TAG_TREASURY;
12264
+ exports.NODE_REGISTRY_UPDATE_CHARTER_MESSAGE_DOMAIN = NODE_REGISTRY_UPDATE_CHARTER_MESSAGE_DOMAIN;
12265
+ exports.NODE_REGISTRY_UPDATE_CHARTER_THRESHOLD = NODE_REGISTRY_UPDATE_CHARTER_THRESHOLD;
11859
12266
  exports.NO_EVM_ARCHIVE_PROOF_SCHEMA = NO_EVM_ARCHIVE_PROOF_SCHEMA;
11860
12267
  exports.NO_EVM_ARCHIVE_SIGNATURE_SCHEME = NO_EVM_ARCHIVE_SIGNATURE_SCHEME;
11861
12268
  exports.NO_EVM_FINALITY_EVIDENCE_SCHEMA = NO_EVM_FINALITY_EVIDENCE_SCHEMA;
@@ -11924,6 +12331,8 @@ exports.addressToBech32 = addressToBech32;
11924
12331
  exports.addressToTypedBech32 = addressToTypedBech32;
11925
12332
  exports.allowRootFor = allowRootFor;
11926
12333
  exports.apiEndpointFromRpcEndpoint = apiEndpointFromRpcEndpoint;
12334
+ exports.archiveMerkleInnerHash = archiveMerkleInnerHash;
12335
+ exports.archiveMerkleLeafHash = archiveMerkleLeafHash;
11927
12336
  exports.assembleMultisigSigned = assembleMultisigSigned;
11928
12337
  exports.assembleMultisigWitness = assembleMultisigWitness;
11929
12338
  exports.assertMrvCallNativeSubmissionPlan = assertMrvCallNativeSubmissionPlan;
@@ -12009,6 +12418,7 @@ exports.computeNoEvmRoundFinalityMessage = computeNoEvmRoundFinalityMessage;
12009
12418
  exports.computeNoEvmTargetReceiptHash = computeNoEvmTargetReceiptHash;
12010
12419
  exports.computeQuoteLiquidity = computeQuoteLiquidity;
12011
12420
  exports.consumeNativeEvents = consumeNativeEvents;
12421
+ exports.decodeClusterCharter = decodeClusterCharter;
12012
12422
  exports.decodeClusterDiversity = decodeClusterDiversity;
12013
12423
  exports.decodeClusterFormedEvent = decodeClusterFormedEvent;
12014
12424
  exports.decodeClusterJoinRequest = decodeClusterJoinRequest;
@@ -12022,12 +12432,16 @@ exports.decodeOperatorFeeChargedEvent = decodeOperatorFeeChargedEvent;
12022
12432
  exports.decodeOperatorNetworkMetadata = decodeOperatorNetworkMetadata;
12023
12433
  exports.decodeOperatorSealKey = decodeOperatorSealKey;
12024
12434
  exports.decodeOracleEvent = decodeOracleEvent;
12435
+ exports.decodePendingCharter = decodePendingCharter;
12436
+ exports.decodeProbeAuthority = decodeProbeAuthority;
12437
+ exports.decodeScoreServiceProbe = decodeScoreServiceProbe;
12025
12438
  exports.decodeTimeWindow = decodeTimeWindow;
12026
12439
  exports.decodeTokenFactoryTokenId = decodeTokenFactoryTokenId;
12027
12440
  exports.decodeTxFeedResponse = decodeTxFeedResponse;
12028
12441
  exports.decodeVrfOutput = decodeVrfOutput;
12029
12442
  exports.delegationAddressHex = delegationAddressHex;
12030
12443
  exports.denyRootFor = denyRootFor;
12444
+ exports.deriveArchiveChallenge = deriveArchiveChallenge;
12031
12445
  exports.deriveClobMarketId = deriveClobMarketId;
12032
12446
  exports.deriveClusterAnchorAddress = deriveClusterAnchorAddress;
12033
12447
  exports.deriveClusterJoinOperatorId = deriveClusterJoinOperatorId;
@@ -12039,7 +12453,9 @@ exports.deriveNativeSpotMarketId = deriveNativeSpotMarketId;
12039
12453
  exports.deriveNativeSpotOrderId = deriveNativeSpotOrderId;
12040
12454
  exports.deriveTokenFactoryTokenId = deriveTokenFactoryTokenId;
12041
12455
  exports.destinationRoot = destinationRoot;
12456
+ exports.encodeAnswerArchiveChallengeCalldata = encodeAnswerArchiveChallengeCalldata;
12042
12457
  exports.encodeAttestDkgReshareCalldata = encodeAttestDkgReshareCalldata;
12458
+ exports.encodeAttestServiceProbeCalldata = encodeAttestServiceProbeCalldata;
12043
12459
  exports.encodeBlockSelector = encodeBlockSelector;
12044
12460
  exports.encodeBridgeChallengeCalldata = encodeBridgeChallengeCalldata;
12045
12461
  exports.encodeBridgeClaimCalldata = encodeBridgeClaimCalldata;
@@ -12049,6 +12465,7 @@ exports.encodeCancelPendingChangeCalldata = encodeCancelPendingChangeCalldata;
12049
12465
  exports.encodeClaimCalldata = encodeClaimCalldata;
12050
12466
  exports.encodeClaimPolicyByAddressCalldata = encodeClaimPolicyByAddressCalldata;
12051
12467
  exports.encodeClusterCharter = encodeClusterCharter;
12468
+ exports.encodeCommitArchiveRootCalldata = encodeCommitArchiveRootCalldata;
12052
12469
  exports.encodeCreateFixedSupplyMrc20Calldata = encodeCreateFixedSupplyMrc20Calldata;
12053
12470
  exports.encodeCreateRequestCalldata = encodeCreateRequestCalldata;
12054
12471
  exports.encodeCreateRequestCanonical = encodeCreateRequestCanonical;
@@ -12061,6 +12478,8 @@ exports.encodeFormClusterCalldata = encodeFormClusterCalldata;
12061
12478
  exports.encodeFormClusterV2Calldata = encodeFormClusterV2Calldata;
12062
12479
  exports.encodeGetClusterJoinRequestCalldata = encodeGetClusterJoinRequestCalldata;
12063
12480
  exports.encodeGetOperatorSealKeyCalldata = encodeGetOperatorSealKeyCalldata;
12481
+ exports.encodeGetPendingCharterCalldata = encodeGetPendingCharterCalldata;
12482
+ exports.encodeGetProbeAuthorityCalldata = encodeGetProbeAuthorityCalldata;
12064
12483
  exports.encodeHasPubkeyCalldata = encodeHasPubkeyCalldata;
12065
12484
  exports.encodeLockBridgeConfigCalldata = encodeLockBridgeConfigCalldata;
12066
12485
  exports.encodeLookupPubkeyCalldata = encodeLookupPubkeyCalldata;
@@ -12132,6 +12551,7 @@ exports.encodeSetMinNotionalCalldata = encodeSetMinNotionalCalldata;
12132
12551
  exports.encodeSetOperatorDisplayCalldata = encodeSetOperatorDisplayCalldata;
12133
12552
  exports.encodeSetPolicyCalldata = encodeSetPolicyCalldata;
12134
12553
  exports.encodeSetPolicyClaimCalldata = encodeSetPolicyClaimCalldata;
12554
+ exports.encodeSetProbeAuthorityCalldata = encodeSetProbeAuthorityCalldata;
12135
12555
  exports.encodeSetTickSizeCalldata = encodeSetTickSizeCalldata;
12136
12556
  exports.encodeSubmitBridgeProofCalldata = encodeSubmitBridgeProofCalldata;
12137
12557
  exports.encodeSubmitPendingChangeCalldata = encodeSubmitPendingChangeCalldata;
@@ -12150,6 +12570,7 @@ exports.encodeTokenFactoryTransferCalldata = encodeTokenFactoryTransferCalldata;
12150
12570
  exports.encodeTokenFactoryTransferFromCalldata = encodeTokenFactoryTransferFromCalldata;
12151
12571
  exports.encodeTokenFactoryTransferOwnershipCalldata = encodeTokenFactoryTransferOwnershipCalldata;
12152
12572
  exports.encodeUndelegateCalldata = encodeUndelegateCalldata;
12573
+ exports.encodeUpdateCharterCalldata = encodeUpdateCharterCalldata;
12153
12574
  exports.encodeVoteClusterAdmitCalldata = encodeVoteClusterAdmitCalldata;
12154
12575
  exports.encodeVrfEvaluateCalldata = encodeVrfEvaluateCalldata;
12155
12576
  exports.exportBridgeRouteCatalogueJson = exportBridgeRouteCatalogueJson;
@@ -12221,6 +12642,7 @@ exports.parseQuantityBig = parseQuantityBig;
12221
12642
  exports.preflightClusterJoinRequest = preflightClusterJoinRequest;
12222
12643
  exports.previewRequestClusterJoin = previewRequestClusterJoin;
12223
12644
  exports.previewVoteClusterAdmit = previewVoteClusterAdmit;
12645
+ exports.protocolNonceForEpoch = protocolNonceForEpoch;
12224
12646
  exports.proverMarketStateFromByte = proverMarketStateFromByte;
12225
12647
  exports.pubkeyRegistryAddressHex = pubkeyRegistryAddressHex;
12226
12648
  exports.quoteOperatorFee = quoteOperatorFee;
@@ -12235,8 +12657,14 @@ exports.resolveMaxExecutionUnitPrice = resolveMaxExecutionUnitPrice;
12235
12657
  exports.resolveRegistryExecutionFee = resolveRegistryExecutionFee;
12236
12658
  exports.resolveStudioHostStatus = resolveStudioHostStatus;
12237
12659
  exports.selectBridgeTransferRoute = selectBridgeTransferRoute;
12660
+ exports.serviceMaskToBitIndex = serviceMaskToBitIndex;
12238
12661
  exports.serviceProbeStatusLabel = serviceProbeStatusLabel;
12239
12662
  exports.setDestinationRoot = setDestinationRoot;
12663
+ exports.slotArchiveChallengePass = slotArchiveChallengePass;
12664
+ exports.slotClusterServiceScore = slotClusterServiceScore;
12665
+ exports.slotEpochChallengeSeed = slotEpochChallengeSeed;
12666
+ exports.slotProbeAuthority = slotProbeAuthority;
12667
+ exports.slotScoreServiceProbe = slotScoreServiceProbe;
12240
12668
  exports.sortMultisigMembers = sortMultisigMembers;
12241
12669
  exports.spendingPolicyAddressHex = spendingPolicyAddressHex;
12242
12670
  exports.submitMrvCallNativeTx = submitMrvCallNativeTx;
@@ -12249,6 +12677,8 @@ exports.submitVoteClusterAdmit = submitVoteClusterAdmit;
12249
12677
  exports.tokenFactoryAddressHex = tokenFactoryAddressHex;
12250
12678
  exports.transactionFeeExposure = transactionFeeExposure;
12251
12679
  exports.typedBech32ToAddress = typedBech32ToAddress;
12680
+ exports.updateCharterMessage = updateCharterMessage;
12681
+ exports.updateCharterMessageHex = updateCharterMessageHex;
12252
12682
  exports.validateAddress = validateAddress;
12253
12683
  exports.validateBridgeRouteCatalogue = validateBridgeRouteCatalogue;
12254
12684
  exports.validateMrvArtifactMetadata = validateMrvArtifactMetadata;