shinjuku-shielded 0.3.63 → 0.3.64

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/manifest.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "schema": "carbon-shielded-wallet/bundle-manifest/v1",
3
3
  "file": "shinjuku-wallet.mjs",
4
- "sha256": "f3c652001435e22d3e54232fe742166dd8dd5ae183b92c1a24274c7a52ed137c",
5
- "bytes": 12174893,
6
- "sourceCommit": "46ac2745bf8ffeabba0e0cfaf8d052b20d6313e4",
4
+ "sha256": "f7b2fe093da4904a611ef95fb52e7888ad1f23b2f41681474d1bd9bef75a71f8",
5
+ "bytes": 12179295,
6
+ "sourceCommit": "98688d76628c9d7aa02f0215b371e30999e852fa",
7
7
  "sourceDirty": false,
8
8
  "installRecordMatchesLockfile": true,
9
9
  "releaseRule": "valid only when two fresh npm ci --ignore-scripts builds on different OSes give the same sha256; installRecordMatchesLockfile true means every entry npm installed equals its package-lock.json entry and every entry not marked optional, devOptional included, is installed: an optional entry (a package for another platform) may be absent",
@@ -1282,5 +1282,5 @@
1282
1282
  "version": "1.8.0"
1283
1283
  }
1284
1284
  ],
1285
- "publishedAt": "2026-10-22T08:20:53.830Z"
1285
+ "publishedAt": "2026-10-22T09:31:31.971Z"
1286
1286
  }
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "shinjuku-shielded",
3
- "version": "0.3.63",
3
+ "version": "0.3.64",
4
4
  "mcpName": "io.github.ShinjukuStaition/shinjuku-mcp",
5
5
  "description": "Shinjuku Shielded, the private x402 facilitator on Solana: the self-custody wallet CLI and its MCP server. Shield, pay, and unshield USDC from any MCP agent, under caps you set.",
6
- "shinjukuRelease": "f3c65200",
7
- "shinjukuSha256": "f3c652001435e22d3e54232fe742166dd8dd5ae183b92c1a24274c7a52ed137c",
6
+ "shinjukuRelease": "f7b2fe09",
7
+ "shinjukuSha256": "f7b2fe093da4904a611ef95fb52e7888ad1f23b2f41681474d1bd9bef75a71f8",
8
8
  "license": "SEE LICENSE IN LICENSE.txt",
9
9
  "author": "Shinjuku Shielded",
10
10
  "homepage": "https://github.com/ShinjukuStaition/shinjuku-mcp#readme",
@@ -53948,6 +53948,24 @@ function parseE1TreeHeader(header) {
53948
53948
  bufferSize: u642(72)
53949
53949
  };
53950
53950
  }
53951
+ function programDataAddressOf(program) {
53952
+ const key = b58(program);
53953
+ let address5 = PROGRAMDATA_ADDRESSES.get(key);
53954
+ if (address5 === void 0) {
53955
+ address5 = import_web396.PublicKey.findProgramAddressSync([new import_web396.PublicKey(key).toBuffer()], BPF_LOADER_UPGRADEABLE_PROGRAM_ID)[0];
53956
+ PROGRAMDATA_ADDRESSES.set(key, address5);
53957
+ }
53958
+ return address5;
53959
+ }
53960
+ function reuseOptionRefused(connection) {
53961
+ const endpoint2 = connection.rpcEndpoint;
53962
+ return typeof endpoint2 === "string" ? REUSE_REFUSED_ENDPOINTS.has(endpoint2) : REUSE_REFUSED_CONNECTIONS.has(connection);
53963
+ }
53964
+ function rememberReuseOptionRefused(connection) {
53965
+ const endpoint2 = connection.rpcEndpoint;
53966
+ if (typeof endpoint2 === "string") REUSE_REFUSED_ENDPOINTS.add(endpoint2);
53967
+ else REUSE_REFUSED_CONNECTIONS.add(connection);
53968
+ }
53951
53969
  function slicesRefused(connection) {
53952
53970
  const endpoint2 = connection.rpcEndpoint;
53953
53971
  return typeof endpoint2 === "string" ? SLICES_REFUSED_ENDPOINTS.has(endpoint2) : SLICES_REFUSED_CONNECTIONS.has(connection);
@@ -53961,20 +53979,41 @@ function slicesMethodMissing(error) {
53961
53979
  const message = String(error?.message ?? "");
53962
53980
  return /^(404|405|501)\b/.test(message) || /-3260[12]\b/.test(message);
53963
53981
  }
53964
- function slicedAccountBytes(value, accountIndex) {
53982
+ function slicedAccountBytes(value, accountIndex, slices = POOL_SLICES) {
53965
53983
  if (value === null || typeof value !== "object" || typeof value.owner !== "string" || !Number.isSafeInteger(value.space) || value.space < 0 || !Array.isArray(value.data) || value.data.length !== 2 || value.data[1] !== "base64" || typeof value.data[0] !== "string") {
53966
53984
  return void 0;
53967
53985
  }
53968
53986
  const bytes2 = Buffer.from(value.data[0], "base64");
53969
53987
  if (bytes2.toString("base64") !== value.data[0]) return void 0;
53970
53988
  let expected = 0;
53971
- for (const [index, offset, length] of POOL_SLICES) {
53989
+ for (const [index, offset, length] of slices) {
53972
53990
  if (index === accountIndex) expected += Math.max(0, Math.min(offset + length, value.space) - offset);
53973
53991
  }
53974
53992
  return bytes2.length === expected ? bytes2 : void 0;
53975
53993
  }
53976
- function slicedSnapshot(result, program, pool2, tree) {
53977
- if (result === null || typeof result !== "object" || !Array.isArray(result.value) || result.value.length !== 2) return void 0;
53994
+ function slicedSnapshot(result, program, pool2, tree, programData) {
53995
+ if (result === null || typeof result !== "object" || !Array.isArray(result.value) || result.value.length !== (programData === void 0 ? 2 : 3)) return void 0;
53996
+ const snapshot = slicedPoolSnapshot(result, program, pool2, tree);
53997
+ if (snapshot === void 0 || programData === void 0) return snapshot;
53998
+ const value = result.value[2];
53999
+ const data = slicedAccountBytes(value, 2, POOL_SLICES_WITH_PROGRAMDATA);
54000
+ const newest = result.newestSignature;
54001
+ if (data === void 0 || typeof value.executable !== "boolean" || newest === null || typeof newest !== "object" || typeof newest.signature !== "string" || !Number.isSafeInteger(newest.slot)) {
54002
+ return snapshot;
54003
+ }
54004
+ return withPoolStateOf(snapshot, Object.freeze({
54005
+ ...snapshot,
54006
+ programDataReuse: Object.freeze({
54007
+ slot: snapshot.slot,
54008
+ address: programData.toBase58(),
54009
+ owner: value.owner,
54010
+ executable: value.executable,
54011
+ data,
54012
+ newestSignature: newest.signature
54013
+ })
54014
+ }));
54015
+ }
54016
+ function slicedPoolSnapshot(result, program, pool2, tree) {
53978
54017
  const [poolValue, treeValue] = result.value;
53979
54018
  const poolBytes2 = slicedAccountBytes(poolValue, 0);
53980
54019
  if (poolBytes2 === void 0 || poolValue.space > REFRESH_READ_BYTES) return void 0;
@@ -54003,22 +54042,37 @@ function slicedSnapshot(result, program, pool2, tree) {
54003
54042
  async function readFinalizedPoolSliced(connection, program, pool2) {
54004
54043
  if (typeof connection._rpcRequest !== "function" || slicesRefused(connection)) return void 0;
54005
54044
  const tree = new import_web396.PublicKey(e1TreeAddress2(b58(pool2), b58(program)));
54045
+ const programData = reuseOptionRefused(connection) ? void 0 : programDataAddressOf(program);
54046
+ const params = programData === void 0 ? [[b58(pool2), tree.toBase58()], { commitment: "finalized", slices: POOL_SLICES }] : [
54047
+ [b58(pool2), tree.toBase58(), programData.toBase58()],
54048
+ { commitment: "finalized", slices: POOL_SLICES_WITH_PROGRAMDATA, newestSignature: 2 }
54049
+ ];
54006
54050
  let response;
54007
54051
  try {
54008
- response = await connection._rpcRequest(P03_POOL_SLICES_METHOD, [[b58(pool2), tree.toBase58()], { commitment: "finalized", slices: POOL_SLICES }]);
54052
+ response = await connection._rpcRequest(P03_POOL_SLICES_METHOD, params);
54009
54053
  } catch (error) {
54054
+ if (programData !== void 0 && /-32602\b/.test(String(error?.message ?? ""))) {
54055
+ rememberReuseOptionRefused(connection);
54056
+ markPhase("pool-sliced-reuse-refused");
54057
+ return readFinalizedPoolSliced(connection, program, pool2);
54058
+ }
54010
54059
  if (slicesMethodMissing(error)) rememberSlicesRefused(connection);
54011
54060
  markPhase(`pool-sliced-fallback-${reuseRefusalCause(error)}`);
54012
54061
  return void 0;
54013
54062
  }
54014
54063
  if (response?.error !== void 0) {
54064
+ if (programData !== void 0 && response.error?.code === -32602) {
54065
+ rememberReuseOptionRefused(connection);
54066
+ markPhase("pool-sliced-reuse-refused");
54067
+ return readFinalizedPoolSliced(connection, program, pool2);
54068
+ }
54015
54069
  if (response.error?.code === -32601 || response.error?.code === -32602) rememberSlicesRefused(connection);
54016
54070
  markPhase("pool-sliced-fallback-refused");
54017
54071
  return void 0;
54018
54072
  }
54019
54073
  let snapshot;
54020
54074
  try {
54021
- snapshot = slicedSnapshot(response?.result, program, pool2, tree);
54075
+ snapshot = slicedSnapshot(response?.result, program, pool2, tree, programData);
54022
54076
  } catch {
54023
54077
  snapshot = void 0;
54024
54078
  }
@@ -54129,13 +54183,14 @@ async function readProgramDataHeader({ connection, address: address5, snapshotSl
54129
54183
  minContextSlot: snapshotSlot,
54130
54184
  dataSlice: { offset: 0, length: 45 }
54131
54185
  }));
54132
- const observedSlot = safeSlot(account2?.context?.slot, "programdata_snapshot_slot");
54133
- const value = account2?.value;
54186
+ assertProgramDataHeader(safeSlot(account2?.context?.slot, "programdata_snapshot_slot"), account2?.value, { snapshotSlot, deployedAtSlot });
54187
+ }
54188
+ function assertProgramDataHeader(observedSlot, value, { snapshotSlot, deployedAtSlot }) {
54134
54189
  if (observedSlot < snapshotSlot || !value || !canonicalKey(value.owner, "programdata_owner").equals(BPF_LOADER_UPGRADEABLE_PROGRAM_ID) || value.executable === true) {
54135
54190
  throw new Error("p03_history_programdata_account_invalid");
54136
54191
  }
54137
54192
  const data = Buffer.from(value.data);
54138
- if (data.length < 45 || data.readUInt32LE(0) !== 3 || data.readBigUInt64LE(4) !== deployedAtSlot) {
54193
+ if (data.length < PROGRAMDATA_HEADER_BYTES || data.readUInt32LE(0) !== 3 || data.readBigUInt64LE(4) !== deployedAtSlot) {
54139
54194
  throw new Error("p03_history_programdata_identity_invalid");
54140
54195
  }
54141
54196
  }
@@ -54204,7 +54259,11 @@ async function programDataCoverageFor({
54204
54259
  // so one RPC answers both, at or after snapshotSlot, with no history-source floor below it
54205
54260
  // (2026-10-16 c1s: the signature read on the proxy cost a -32016 retry, about 0.2 s).
54206
54261
  // The full attestation and its newest signature keep `connection`. Absent: `connection`.
54207
- reuseConnection = connection
54262
+ reuseConnection = connection,
54263
+ // The pool snapshot's `programDataReuse` (readFinalizedPoolSliced, 2026-10-22): the same two facts
54264
+ // from the same RPC as the pool account, at its slot. Used instead of the two reads only when it
54265
+ // is at `snapshotSlot` and names the cached attestation's address; checked exactly as they are.
54266
+ reuseAnswer
54208
54267
  }) {
54209
54268
  if (deploymentIdentity === void 0) return { coverage: void 0, attestation: void 0, reused: false };
54210
54269
  let priorRefused = false;
@@ -54212,27 +54271,43 @@ async function programDataCoverageFor({
54212
54271
  const key = coverageKey({ program, initialization, deploymentIdentity });
54213
54272
  if (key !== void 0 && prior?.key === key && typeof prior.newestSignature === "string" && prior.coverage?.throughFinalizedSlot <= BigInt(snapshotSlot)) {
54214
54273
  const address5 = new import_web396.PublicKey(prior.coverage.programDataAddress);
54215
- for (let attempt = 1; ; attempt += 1) {
54274
+ const deployedAtSlot = BigInt(prior.coverage.deployedAtSlot);
54275
+ const reuse = (signature2) => {
54276
+ const coverage2 = Object.freeze({ ...prior.coverage, throughFinalizedSlot: BigInt(snapshotSlot) });
54277
+ return { coverage: coverage2, attestation: { key, newestSignature: signature2, coverage: coverage2 }, reused: true };
54278
+ };
54279
+ const pooled = reuseAnswer !== void 0 && reuseAnswer.slot === snapshotSlot && reuseAnswer.address === address5.toBase58() ? reuseAnswer : void 0;
54280
+ if (pooled !== void 0) {
54216
54281
  try {
54217
- const [, newest2] = await Promise.all([
54218
- readProgramDataHeader({
54219
- connection: reuseConnection,
54220
- address: address5,
54221
- snapshotSlot,
54222
- deployedAtSlot: BigInt(prior.coverage.deployedAtSlot)
54223
- }),
54224
- newestSignature(reuseConnection, address5, snapshotSlot)
54225
- ]);
54226
- if (newest2.signature === prior.newestSignature) {
54227
- const coverage2 = Object.freeze({ ...prior.coverage, throughFinalizedSlot: BigInt(snapshotSlot) });
54228
- return { coverage: coverage2, attestation: { key, newestSignature: newest2.signature, coverage: coverage2 }, reused: true };
54282
+ assertProgramDataHeader(pooled.slot, pooled, { snapshotSlot, deployedAtSlot });
54283
+ if (pooled.newestSignature === prior.newestSignature) {
54284
+ markPhase("attest-reuse-in-pool-read");
54285
+ return reuse(pooled.newestSignature);
54229
54286
  }
54230
54287
  cause = "programdata_newest_signature_changed";
54231
- break;
54232
54288
  } catch (error) {
54233
54289
  cause = reuseRefusalCause(error);
54234
- if (attempt >= 2 || typeof onReuseRetry !== "function" || !isTransientRpcError(error)) break;
54235
- await onReuseRetry({ cause });
54290
+ }
54291
+ } else {
54292
+ for (let attempt = 1; ; attempt += 1) {
54293
+ try {
54294
+ const [, newest2] = await Promise.all([
54295
+ readProgramDataHeader({
54296
+ connection: reuseConnection,
54297
+ address: address5,
54298
+ snapshotSlot,
54299
+ deployedAtSlot
54300
+ }),
54301
+ newestSignature(reuseConnection, address5, snapshotSlot)
54302
+ ]);
54303
+ if (newest2.signature === prior.newestSignature) return reuse(newest2.signature);
54304
+ cause = "programdata_newest_signature_changed";
54305
+ break;
54306
+ } catch (error) {
54307
+ cause = reuseRefusalCause(error);
54308
+ if (attempt >= 2 || typeof onReuseRetry !== "function" || !isTransientRpcError(error)) break;
54309
+ await onReuseRetry({ cause });
54310
+ }
54236
54311
  }
54237
54312
  }
54238
54313
  priorRefused = true;
@@ -55680,7 +55755,7 @@ function base58Decode(value) {
55680
55755
  while (zeros < value.length && value[zeros] === "1") zeros += 1;
55681
55756
  return Uint8Array.from(Buffer.concat([Buffer.alloc(zeros), body]));
55682
55757
  }
55683
- var import_web396, b58Cache, b58, REPLAY_STORE_INDEXED, CLOSE_REPLAY_TREE_TAG, EXTEND_ANCHOR_RING_TAG, WIDEN_ANCHOR_RING_TAG, WIDE_ANCHOR_RING_POOL_BYTES, LINK_SUCCESSOR_TAG, IMPORT_REPLAY_LEAVES_TAG, SETTLE_MOVE_TAG, SWEEP_PREDECESSOR_VAULT_TAG, RELINK_SUCCESSOR_TAG, ROTATE_PAYMENT_SETTLER_TAG, IMPORT_A_LEAF_BYTES, IMPORT_MEMBERSHIP_BYTES, IMPORT_PRESENT_SHIFT, IMPORT_MAX_ENTRIES, MOVE_HEAD_BYTES, MOVE_INSERTED_VALUES, DEFAULT_KEY, FIELD_BYTES2, PRIMARY_PROOF_BYTES, SUBTREE_LEAVES, PAGE_SIZE, FIELD_MODULUS3, BPF_LOADER_UPGRADEABLE_PROGRAM_ID, SYSTEM_PROGRAM, TEST_EXECUTABLES, derivationMemo, memo, reviewedExecutables, isProgramDataIdentityError, ASSUMED_ORIGINAL_EXECUTABLE, AUTHENTICATED_HISTORY_REPORTS, HISTORY_ATTESTATIONS, SNAPSHOT_POOL_STATES, REPORT_POOL_STATES, hasExecutableEvidence, P03_FINALIZED_HISTORY_SOURCE_MODEL, P03_PROGRAMDATA_COVERAGE_SOURCE_MODEL, P03_RUN_RECOVER_UNAVAILABLE_FROM_CHAIN, PROFILES, P03_SETTLEMENT_TAGS, P03_INLINE_SETTLEMENT_TAGS, P03_PAYMENT_REPLAY_INDICES, NO_CONTEXTS, REFRESH_READ_BYTES, E1_TREE_HEADER_BYTES, E1_TREE_MAGIC, E1_CHANGELOG_BYTES, E1_CHANGELOGS_OFFSET, E1_RIGHTMOST_OFFSET, E1_LEAF_COUNT_OFFSET, E1_CANOPY_OFFSET, E1_CANOPY_NODES, P03_POOL_SLICES_METHOD, POOL_SLICES, SLICED_ROOTS_OFFSET, SLICED_LEAVES_OFFSET, SLICES_REFUSED_ENDPOINTS, SLICES_REFUSED_CONNECTIONS, HISTORY_FETCH_CONCURRENCY, HISTORY_BULK_TRANSACTIONS, HISTORY_BULK_ADDRESSES, TRANSIENT_RPC_ATTEMPTS, TRANSIENT_RPC_BASE_DELAY_MS, LAGGING_NODE_STEP_OF_BASE, LAGGING_NODE_MAX_RETRIES, LAGGING_NODE_FAST_RETRIES, LAGGING_NODE_SLOW_STEP_OF_BASE, LAGGING_NODE_RPC_CODES, lastVerifiedE1Tree, e1ReplayCounts, e1TreeCandidate;
55758
+ var import_web396, b58Cache, b58, REPLAY_STORE_INDEXED, CLOSE_REPLAY_TREE_TAG, EXTEND_ANCHOR_RING_TAG, WIDEN_ANCHOR_RING_TAG, WIDE_ANCHOR_RING_POOL_BYTES, LINK_SUCCESSOR_TAG, IMPORT_REPLAY_LEAVES_TAG, SETTLE_MOVE_TAG, SWEEP_PREDECESSOR_VAULT_TAG, RELINK_SUCCESSOR_TAG, ROTATE_PAYMENT_SETTLER_TAG, IMPORT_A_LEAF_BYTES, IMPORT_MEMBERSHIP_BYTES, IMPORT_PRESENT_SHIFT, IMPORT_MAX_ENTRIES, MOVE_HEAD_BYTES, MOVE_INSERTED_VALUES, DEFAULT_KEY, FIELD_BYTES2, PRIMARY_PROOF_BYTES, SUBTREE_LEAVES, PAGE_SIZE, FIELD_MODULUS3, BPF_LOADER_UPGRADEABLE_PROGRAM_ID, SYSTEM_PROGRAM, TEST_EXECUTABLES, derivationMemo, memo, reviewedExecutables, isProgramDataIdentityError, ASSUMED_ORIGINAL_EXECUTABLE, AUTHENTICATED_HISTORY_REPORTS, HISTORY_ATTESTATIONS, SNAPSHOT_POOL_STATES, REPORT_POOL_STATES, hasExecutableEvidence, P03_FINALIZED_HISTORY_SOURCE_MODEL, P03_PROGRAMDATA_COVERAGE_SOURCE_MODEL, P03_RUN_RECOVER_UNAVAILABLE_FROM_CHAIN, PROFILES, P03_SETTLEMENT_TAGS, P03_INLINE_SETTLEMENT_TAGS, P03_PAYMENT_REPLAY_INDICES, NO_CONTEXTS, REFRESH_READ_BYTES, E1_TREE_HEADER_BYTES, E1_TREE_MAGIC, E1_CHANGELOG_BYTES, E1_CHANGELOGS_OFFSET, E1_RIGHTMOST_OFFSET, E1_LEAF_COUNT_OFFSET, E1_CANOPY_OFFSET, E1_CANOPY_NODES, P03_POOL_SLICES_METHOD, POOL_SLICES, PROGRAMDATA_HEADER_BYTES, POOL_SLICES_WITH_PROGRAMDATA, SLICED_ROOTS_OFFSET, SLICED_LEAVES_OFFSET, SLICES_REFUSED_ENDPOINTS, SLICES_REFUSED_CONNECTIONS, REUSE_REFUSED_ENDPOINTS, REUSE_REFUSED_CONNECTIONS, PROGRAMDATA_ADDRESSES, HISTORY_FETCH_CONCURRENCY, HISTORY_BULK_TRANSACTIONS, HISTORY_BULK_ADDRESSES, TRANSIENT_RPC_ATTEMPTS, TRANSIENT_RPC_BASE_DELAY_MS, LAGGING_NODE_STEP_OF_BASE, LAGGING_NODE_MAX_RETRIES, LAGGING_NODE_FAST_RETRIES, LAGGING_NODE_SLOW_STEP_OF_BASE, LAGGING_NODE_RPC_CODES, lastVerifiedE1Tree, e1ReplayCounts, e1TreeCandidate;
55684
55759
  var init_walk = __esm({
55685
55760
  "wallet/src/history/walk.mjs"() {
55686
55761
  "use strict";
@@ -55955,10 +56030,15 @@ var init_walk = __esm({
55955
56030
  ...Array.from({ length: E1.bufferSize }, (_, index) => Object.freeze([1, E1_CHANGELOGS_OFFSET + E1_CHANGELOG_BYTES * index, 32])),
55956
56031
  Object.freeze([1, E1_LEAF_COUNT_OFFSET, 4])
55957
56032
  ]);
56033
+ PROGRAMDATA_HEADER_BYTES = 45;
56034
+ POOL_SLICES_WITH_PROGRAMDATA = Object.freeze([...POOL_SLICES, Object.freeze([2, 0, PROGRAMDATA_HEADER_BYTES])]);
55958
56035
  SLICED_ROOTS_OFFSET = E1_TREE_HEADER_BYTES;
55959
56036
  SLICED_LEAVES_OFFSET = SLICED_ROOTS_OFFSET + 32 * E1.bufferSize;
55960
56037
  SLICES_REFUSED_ENDPOINTS = /* @__PURE__ */ new Set();
55961
56038
  SLICES_REFUSED_CONNECTIONS = /* @__PURE__ */ new WeakSet();
56039
+ REUSE_REFUSED_ENDPOINTS = /* @__PURE__ */ new Set();
56040
+ REUSE_REFUSED_CONNECTIONS = /* @__PURE__ */ new WeakSet();
56041
+ PROGRAMDATA_ADDRESSES = /* @__PURE__ */ new Map();
55962
56042
  HISTORY_FETCH_CONCURRENCY = 4;
55963
56043
  HISTORY_BULK_TRANSACTIONS = 256;
55964
56044
  HISTORY_BULK_ADDRESSES = 256;
@@ -57839,6 +57919,8 @@ async function compactP03HistoryReportRun({
57839
57919
  getAccountInfoAndContext: (...args) => boundedOwnRead(() => own.getAccountInfoAndContext(...args)),
57840
57920
  getSignaturesForAddress: (...args) => boundedOwnRead(() => own.getSignaturesForAddress(...args))
57841
57921
  }))(connection.historyRpcOwnConnection) },
57922
+ // The same two facts from the pool account's own read, when it carried them (readFinalizedPoolSliced).
57923
+ ...snapshot2.programDataReuse === void 0 ? {} : { reuseAnswer: snapshot2.programDataReuse },
57842
57924
  program,
57843
57925
  initialization: initialization2,
57844
57926
  snapshotSlot: snapshot2.slot,
@@ -97639,7 +97721,7 @@ async function payResourceOnce({
97639
97721
  mark("challenge");
97640
97722
  }
97641
97723
  const { requirement, recipient } = validateChallenge(record.paymentRequired, store, url, maximumAtomic, method);
97642
- const chainTime2 = await (chainTimeRead ?? startFinalizedChainTime(connection))();
97724
+ const chainTime2 = await withPhaseScope(mark, "quote", () => (chainTimeRead ?? startFinalizedChainTime(connection))());
97643
97725
  chainTimeRead = void 0;
97644
97726
  if (!requoted && Number.isSafeInteger(chainTime2) && Number(requirement.extra.validBefore) - chainTime2 < QUOTE_MARGIN_SECONDS && store.readWal(`resource-proof-${requestKey}`)?.proved === void 0) {
97645
97727
  requote();