shinjuku-shielded 0.3.22 → 0.3.24

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": "00da3f6dfb766d83cd9f1fdb8c3a335c2de51a5dbab0d13b0e6ce3d50106cf02",
5
- "bytes": 11131156,
6
- "sourceCommit": "de187f4fedfed133b529b7763adc27c639613f2f",
4
+ "sha256": "5e07378e3416f54223cbb56fc04d28bed3106dfbdef58b62570ad0469f27aade",
5
+ "bytes": 11135322,
6
+ "sourceCommit": "6427ce901fd81417ad60ea6364079db32785626c",
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",
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "shinjuku-shielded",
3
- "version": "0.3.22",
3
+ "version": "0.3.24",
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": "00da3f6d",
7
- "shinjukuSha256": "00da3f6dfb766d83cd9f1fdb8c3a335c2de51a5dbab0d13b0e6ce3d50106cf02",
6
+ "shinjukuRelease": "5e07378e",
7
+ "shinjukuSha256": "5e07378e3416f54223cbb56fc04d28bed3106dfbdef58b62570ad0469f27aade",
8
8
  "license": "SEE LICENSE IN LICENSE.txt",
9
9
  "author": "Shinjuku Shielded",
10
10
  "homepage": "https://github.com/ShinjukuStaition/shinjuku-mcp#readme",
@@ -50603,12 +50603,15 @@ var init_chain2 = __esm({
50603
50603
  "45mhosfA2MuygZWeqYRVcEZX2Q3gA8KR8FwP6AZkK1zR": "http://d6xg3phhurxhzqcsgh2mh52yf744labhrnd7mducwynlertfsjzyslqd.onion/",
50604
50604
  // Production E1 pool F7MW (since 2026-10-12): the same proxy serves it beside 45mh, which
50605
50605
  // stays while its wallets move out (the move walks 45mh).
50606
- F7MWGF8vG8Bv3Y4pRRFqky5YzZndGtQaUXbMMvpmtoRV: "http://d6xg3phhurxhzqcsgh2mh52yf744labhrnd7mducwynlertfsjzyslqd.onion/"
50606
+ F7MWGF8vG8Bv3Y4pRRFqky5YzZndGtQaUXbMMvpmtoRV: "http://d6xg3phhurxhzqcsgh2mh52yf744labhrnd7mducwynlertfsjzyslqd.onion/",
50607
+ // Production E1 pool CDtx (succession of F7MW, 2026-10-14): the same proxy; F7MW stays while its wallets move out.
50608
+ CDtxyRjCUs2pu7t3U9TwtpnZwyxBFZ4dKXvb4RCmXHXv: "http://d6xg3phhurxhzqcsgh2mh52yf744labhrnd7mducwynlertfsjzyslqd.onion/"
50607
50609
  });
50608
50610
  PINNED_HISTORY_HTTPS = Object.freeze({
50609
50611
  AAG16mNWTtC1sBeu2tTVTwWjqWXCefLTCByVPj5X3kV8: "https://pay.shinjukustaition.com/history-proxy/",
50610
50612
  "45mhosfA2MuygZWeqYRVcEZX2Q3gA8KR8FwP6AZkK1zR": "https://pay.shinjukustaition.com/history-proxy/",
50611
- F7MWGF8vG8Bv3Y4pRRFqky5YzZndGtQaUXbMMvpmtoRV: "https://pay.shinjukustaition.com/history-proxy/"
50613
+ F7MWGF8vG8Bv3Y4pRRFqky5YzZndGtQaUXbMMvpmtoRV: "https://pay.shinjukustaition.com/history-proxy/",
50614
+ CDtxyRjCUs2pu7t3U9TwtpnZwyxBFZ4dKXvb4RCmXHXv: "https://pay.shinjukustaition.com/history-proxy/"
50612
50615
  });
50613
50616
  HISTORY_RPC_OWN = "own";
50614
50617
  historyRpcErrors = /* @__PURE__ */ new WeakSet();
@@ -117774,7 +117777,9 @@ var NPX_PACKAGE = "shinjuku-shielded";
117774
117777
  var MCP_SERVER_NAME = "shinjuku-shielded";
117775
117778
  var P03_BINDING2 = "carbon-shielded-exact/svm-v3";
117776
117779
  var PRODUCTION = Object.freeze({
117777
- pool: "F7MWGF8vG8Bv3Y4pRRFqky5YzZndGtQaUXbMMvpmtoRV",
117780
+ // CDtx since the succession F7MW -> CDtx (2026-10-14, link slot 456,964,330); a build pinned to F7MW still sets up
117781
+ // through the signed successions file (setup.mjs successorChain).
117782
+ pool: "CDtxyRjCUs2pu7t3U9TwtpnZwyxBFZ4dKXvb4RCmXHXv",
117778
117783
  program: "8PYPw3FSFTMbvSneXdcoH6jNoN4VD23nHwPY2A2riUy1",
117779
117784
  network: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
117780
117785
  asset: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
@@ -118890,7 +118895,27 @@ function snapshotFile(store) {
118890
118895
  return file;
118891
118896
  }
118892
118897
  function captureWalStates(store) {
118893
- return Object.fromEntries(store.listWal().sort().map((name) => [name, String(store.readWal(name)?.state)]));
118898
+ return Object.fromEntries(store.listWal().sort().map((name) => [name, walStateOf(name, store.readWal(name))]));
118899
+ }
118900
+ var SUCCESSION_JOB_SCHEMA = "carbon-shielded-wallet/pool-succession/v1";
118901
+ function walStateOf(name, record) {
118902
+ if (name.startsWith("succ-") && record?.schema === SUCCESSION_JOB_SCHEMA && canonicalAtomic(String(record.movedAtomic))) {
118903
+ return `${record.state}|${record.movedAtomic}`;
118904
+ }
118905
+ return String(record?.state);
118906
+ }
118907
+ function movedInAfterSnapshot(store, state, snapshot) {
118908
+ let total = 0n;
118909
+ for (const name of store.listWal()) {
118910
+ if (!name.startsWith("succ-")) continue;
118911
+ const record = store.readWal(name);
118912
+ if (record?.schema !== SUCCESSION_JOB_SCHEMA || record.to !== state.pool || !canonicalAtomic(String(record.movedAtomic))) continue;
118913
+ const before = Object.hasOwn(snapshot.walStates, name) ? String(snapshot.walStates[name]) : void 0;
118914
+ const kept = before?.includes("|") ? before.split("|")[1] : before === "moved" ? String(record.movedAtomic) : "0";
118915
+ const moved = BigInt(record.movedAtomic) - (canonicalAtomic(kept) ? BigInt(kept) : 0n);
118916
+ if (moved > 0n) total += moved;
118917
+ }
118918
+ return total;
118894
118919
  }
118895
118920
  function snapshotFromRecovery({ state, programId, recovery, history, walStates, fresh, now = Date.now() }) {
118896
118921
  if (!Array.isArray(recovery?.recovered)) throw new Error("balance_snapshot_recovery_invalid");
@@ -119105,7 +119130,8 @@ function computeBalance({ store, snapshotRead, source = "local", now = Date.now(
119105
119130
  detail.unspentAtomic = unspentAtomic.toString();
119106
119131
  const settling = [];
119107
119132
  const movable = snapshot.outputs.filter((output2) => output2.spendStatus === "succession-movable");
119108
- const successionMovableAtomic = sum2(movable.map((output2) => output2.valueAtomic));
119133
+ const movedInAtomic = movedInAfterSnapshot(store, state, snapshot);
119134
+ const successionMovableAtomic = sum2(movable.map((output2) => output2.valueAtomic)) + movedInAtomic;
119109
119135
  detail.successionMovableAtomic = successionMovableAtomic.toString();
119110
119136
  detail.unspentAccounts = [...unspent.values()].filter((output2) => output2.kind === "account").length;
119111
119137
  detail.unspentNotes = [...unspent.values()].filter((output2) => output2.kind === "note").length;
@@ -119235,7 +119261,10 @@ function computeBalance({ store, snapshotRead, source = "local", now = Date.now(
119235
119261
  const anchorIndex = canonicalAtomic(snapshot.anchorIndex) ? BigInt(snapshot.anchorIndex) : void 0;
119236
119262
  detail.fundedAccounts = unknownInputs ? 0 : [...unspent.values()].filter((output2) => output2.kind === "account" && BigInt(output2.valueAtomic) > 0n && !reserved.has(output2.commitment) && !settlingInputs.has(output2.commitment) && (anchorIndex === void 0 || BigInt(output2.leafIndex) < anchorIndex)).length;
119237
119263
  const next = detail.inFlight.length ? "finish or cancel the work in detail.inFlight; the wallet runs one payment at a time" : pendingDeposits.length ? `deposit ${pendingDeposits[0].depositId} is not finished: rerun the same deposit command with --submit --service <facilitator URL>` : pocketsUnscanned ? scanPockets2 : unspentAtomic === 0n && successionMovableAtomic > 0n ? "this pool was succeeded by a new pool: its value moves there (a move per account, the facilitator pays the fee) and counts in this balance until then" : unspentAtomic === 0n ? "nothing to spend: deposit (shinjuku-wallet help deposit), or run balance --refresh if a payment to this wallet settled" : void 0;
119238
- if (settling.length) {
119264
+ if (movedInAtomic > 0n) {
119265
+ settlingReasons.push(`${formatAtomic(movedInAtomic, decimals)} moved into this pool from the old pool after the last refresh: the balance counts it; refresh again in a minute`);
119266
+ }
119267
+ if (settling.length || movedInAtomic > 0n) {
119239
119268
  reasons.push(...settlingReasons);
119240
119269
  return report("stale", spendable + successionMovableAtomic, next ?? refreshCommand(state, snapshot.programId));
119241
119270
  }
@@ -122043,6 +122072,7 @@ init_store();
122043
122072
  var import_web3127 = __toESM(require_index_cjs(), 1);
122044
122073
  init_chain2();
122045
122074
  init_walk();
122075
+ init_receiptTransaction();
122046
122076
  init_serviceUrl();
122047
122077
  import { randomInt as randomInt4 } from "node:crypto";
122048
122078
 
@@ -122412,6 +122442,18 @@ async function chainNowSeconds(connection) {
122412
122442
  return info.data.readBigInt64LE(32);
122413
122443
  }
122414
122444
  var sameInputs = (context, inputs) => Array.isArray(context.publicInputs) && context.publicInputs.length === inputs.length && context.publicInputs.every((value, index) => fieldHex4(value) === inputs[index]);
122445
+ var landedIsLeg = (context, body) => {
122446
+ if (Array.isArray(context.publicInputs)) return sameInputs(context, body.publicInputBytesHex);
122447
+ try {
122448
+ const payload2 = Buffer.concat([
122449
+ Buffer.from(String(body.proofBytesHex).replace(/^0x/, ""), "hex"),
122450
+ ...body.publicInputBytesHex.map((value) => Buffer.from(String(value).replace(/^0x/, ""), "hex"))
122451
+ ]);
122452
+ return contextPayloadMatches(context, payload2);
122453
+ } catch {
122454
+ return false;
122455
+ }
122456
+ };
122415
122457
  async function destinationMoves(deps, sourceDomain) {
122416
122458
  if (typeof deps.loadDestinationReport !== "function") {
122417
122459
  throw refuse7("wallet_succession_history_unavailable", "no successor-pool history to confirm the move against");
@@ -122483,6 +122525,9 @@ async function runSuccessionMove({ store, verified, source, facilitator, connect
122483
122525
  let rebuilds = 0;
122484
122526
  for (; ; ) {
122485
122527
  if (leg.state === "confirmed" || leg.state === "dropped") return void 0;
122528
+ if (leg.state === "failed" && leg.lastCode === "wallet_succession_leg_receipt_invalid" && typeof leg.transaction === "string" && leg.body) {
122529
+ leg = save2(leg, { state: "relayed" });
122530
+ }
122486
122531
  if (leg.state === "failed") leg = save2(leg, { state: "planned" });
122487
122532
  if (leg.state === "planned") {
122488
122533
  const inputs = [...leg.inputs.account ? [leg.inputs.account] : [], ...leg.inputs.notes];
@@ -122580,7 +122625,7 @@ async function runSuccessionMove({ store, verified, source, facilitator, connect
122580
122625
  const moves = await destinationMoves(deps, sourceDomain);
122581
122626
  const landed = moves.find((context) => context.provenance?.signature === leg.transaction);
122582
122627
  if (landed) {
122583
- if (!sameInputs(landed, leg.body.publicInputBytesHex)) {
122628
+ if (!landedIsLeg(landed, leg.body)) {
122584
122629
  save2(leg, { state: "failed", lastCode: "wallet_succession_leg_receipt_invalid" });
122585
122630
  throw refuse7("wallet_succession_leg_receipt_invalid", "the relay's transaction is not this leg's move; tell the operator");
122586
122631
  }
@@ -122619,7 +122664,7 @@ async function runSuccessionMove({ store, verified, source, facilitator, connect
122619
122664
 
122620
122665
  // wallet/src/succession/scheduler.mjs
122621
122666
  init_successorHistories();
122622
- var SUCCESSION_JOB_SCHEMA = "carbon-shielded-wallet/pool-succession/v1";
122667
+ var SUCCESSION_JOB_SCHEMA2 = "carbon-shielded-wallet/pool-succession/v1";
122623
122668
  var SUCCESSION_DELAY_MIN_MS = 5 * 6e4;
122624
122669
  var SUCCESSION_DELAY_MAX_MS = 30 * 6e4;
122625
122670
  var SUCCESSION_LATE_START_MAX_MS = 6e4;
@@ -122719,10 +122764,10 @@ function successionMessage(job) {
122719
122764
  var SUCCESSION_WHY = "Your facilitator upgraded to a new pool. Your balance moves to the new pool so you can keep paying; the money stays yours.";
122720
122765
  function readSuccessionJob(store, fromPool) {
122721
122766
  const record = store.readWal(successionJobName(fromPool));
122722
- return record?.schema === SUCCESSION_JOB_SCHEMA && record.from === fromPool ? record : void 0;
122767
+ return record?.schema === SUCCESSION_JOB_SCHEMA2 && record.from === fromPool ? record : void 0;
122723
122768
  }
122724
122769
  function successionJobs(store) {
122725
- return store.listWal().filter((name) => /^succ-[0-9A-Za-z]{1,8}$/.test(name)).map((name) => store.readWal(name)).filter((record) => record?.schema === SUCCESSION_JOB_SCHEMA);
122770
+ return store.listWal().filter((name) => /^succ-[0-9A-Za-z]{1,8}$/.test(name)).map((name) => store.readWal(name)).filter((record) => record?.schema === SUCCESSION_JOB_SCHEMA2);
122726
122771
  }
122727
122772
  var noticeKey = (job) => job.state === "failed-retry" ? `failed:${job.lastCode ?? ""}` : PUBLIC_STATE[job.state];
122728
122773
  var SUCCESSION_NOTICE_SCHEMA = "carbon-shielded-wallet/pool-succession-notice/v1";
@@ -122872,6 +122917,7 @@ function createSuccessionScheduler(options) {
122872
122917
  const startedAtMs = now();
122873
122918
  const lateStart = /* @__PURE__ */ new Map();
122874
122919
  const recordCheckedAt = /* @__PURE__ */ new Map();
122920
+ const receiptRecheck = /* @__PURE__ */ new Set();
122875
122921
  let active;
122876
122922
  let closed = false;
122877
122923
  const listEntries = () => {
@@ -122955,7 +123001,7 @@ function createSuccessionScheduler(options) {
122955
123001
  return job;
122956
123002
  }
122957
123003
  const base = (entry, value, verified) => ({
122958
- schema: SUCCESSION_JOB_SCHEMA,
123004
+ schema: SUCCESSION_JOB_SCHEMA2,
122959
123005
  from: entry.from,
122960
123006
  to: verified?.successor ?? entry.to,
122961
123007
  record: entry.record,
@@ -123073,8 +123119,13 @@ function createSuccessionScheduler(options) {
123073
123119
  }
123074
123120
  case "move-scheduled":
123075
123121
  return now() >= startAt(job) ? startRun(entry) : job;
123076
- case "moving":
123077
123122
  case "failed-retry":
123123
+ if (job.lastCode === "wallet_succession_leg_receipt_invalid" && job.updatedAtMs < startedAtMs && !receiptRecheck.has(entry.from)) {
123124
+ receiptRecheck.add(entry.from);
123125
+ job = save2(store, job, { permanent: false, nextTryAtMs: now() });
123126
+ }
123127
+ return now() >= (job.nextTryAtMs ?? 0) ? startRun(entry) : job;
123128
+ case "moving":
123078
123129
  return now() >= (job.nextTryAtMs ?? 0) ? startRun(entry) : job;
123079
123130
  default:
123080
123131
  return job;
@@ -127472,15 +127523,25 @@ function proverPlatform({ platform = process.platform, hasWsl = wslAvailable } =
127472
127523
  detail: `the provers are Linux x86-64 programs, and ${platform === "darwin" ? "macOS" : "this system"} cannot run them. Run the wallet on a Linux machine, in a Linux container, or on Windows with WSL. Nothing was created`
127473
127524
  };
127474
127525
  }
127475
- function identityOf(facilitator, release) {
127526
+ function successorChain(body, pool) {
127527
+ const chain = [pool];
127528
+ for (let at = pool; ; ) {
127529
+ const next = (body?.successions ?? []).find((entry) => entry.from === at)?.to;
127530
+ if (!next || chain.includes(next)) return chain;
127531
+ chain.push(next);
127532
+ at = next;
127533
+ }
127534
+ }
127535
+ function identityOf(facilitator, release, successors = []) {
127476
127536
  const served = { pool: release.pool, program: release.programId, network: release.network, asset: release.asset };
127477
127537
  if (new URL(facilitator).origin === new URL(PRODUCTION.memoService).origin) {
127538
+ const pool = successors.includes(served.pool) ? served.pool : PRODUCTION.pool;
127478
127539
  for (const [name, value] of Object.entries(served)) {
127479
- if (value !== null && value !== void 0 && value !== PRODUCTION[name]) {
127480
- throw fail34("setup_identity_mismatch", `the production facilitator's release names another ${name} than this wallet build; nothing was created. Update the wallet (npx -y shinjuku-shielded@latest setup)`);
127540
+ if (value !== null && value !== void 0 && value !== (name === "pool" ? pool : PRODUCTION[name])) {
127541
+ throw fail34("setup_identity_mismatch", `the production facilitator's release names another ${name} than this wallet build, and no signed succession links it; nothing was created. Run npx -y shinjuku-shielded@latest setup; if the latest build says the same, the facilitator is not serving the production pool`);
127481
127542
  }
127482
127543
  }
127483
- return { pool: PRODUCTION.pool, program: PRODUCTION.program, network: PRODUCTION.network, asset: PRODUCTION.asset };
127544
+ return { pool, program: PRODUCTION.program, network: PRODUCTION.network, asset: PRODUCTION.asset };
127484
127545
  }
127485
127546
  if (Object.values(served).some((value) => typeof value !== "string" || !value)) {
127486
127547
  throw fail34("setup_identity_mismatch", "this facilitator's release names no pool identity (it runs no public facilitator); nothing was created");
@@ -127566,7 +127627,16 @@ async function runSetup(options, deps = {}) {
127566
127627
  let identity;
127567
127628
  if (release) {
127568
127629
  expected = await trustServedSet({ home, facilitator, release, expected, fetchImpl: deps.fetchImpl ?? fetch });
127569
- identity = identityOf(facilitator, release);
127630
+ let successions;
127631
+ const needsChain = release.pool !== PRODUCTION.pool || old && old.pool !== release.pool;
127632
+ if (needsChain) {
127633
+ try {
127634
+ successions = await (deps.loadSuccessions ?? loadSuccessions)({ home, facilitator, release, fetchImpl: deps.fetchImpl ?? fetch });
127635
+ } catch {
127636
+ successions = void 0;
127637
+ }
127638
+ }
127639
+ identity = identityOf(facilitator, release, successorChain(successions, PRODUCTION.pool));
127570
127640
  try {
127571
127641
  releasePools = parseReleasePools(release, facilitator);
127572
127642
  } catch {
@@ -127574,7 +127644,8 @@ async function runSetup(options, deps = {}) {
127574
127644
  }
127575
127645
  if (old && old.pool !== identity.pool && !(retired && RETIRED_POOLS[retired] === identity.pool)) {
127576
127646
  const pools = releasePools;
127577
- if (!(pools?.migration?.to.pool === identity.pool && pools.migration.from.some((entry) => entry.pool === old.pool))) {
127647
+ const succeeded = successorChain(successions, old.pool).includes(identity.pool);
127648
+ if (!succeeded && !(pools?.migration?.to.pool === identity.pool && pools.migration.from.some((entry) => entry.pool === old.pool))) {
127578
127649
  throw fail34("setup_identity_mismatch", "config.json names another pool than the facilitator serves now; setup changes no existing wallet. Move config.json aside to set up the new pool");
127579
127650
  }
127580
127651
  movedFrom = old.pool;
@@ -131836,7 +131907,7 @@ var CLI2 = "shinjuku-wallet";
131836
131907
  var P03_BINDING3 = "carbon-shielded-exact/svm-v3";
131837
131908
  var GUIDE = Object.freeze({
131838
131909
  program: "8PYPw3FSFTMbvSneXdcoH6jNoN4VD23nHwPY2A2riUy1",
131839
- pool: "F7MWGF8vG8Bv3Y4pRRFqky5YzZndGtQaUXbMMvpmtoRV",
131910
+ pool: "CDtxyRjCUs2pu7t3U9TwtpnZwyxBFZ4dKXvb4RCmXHXv",
131840
131911
  mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
131841
131912
  network: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
131842
131913
  facilitator: DEFAULT_FACILITATOR_ORIGIN
@@ -132454,7 +132525,8 @@ function setupDependencies(deps) {
132454
132525
  fetchImpl: deps.fetch,
132455
132526
  init: (options) => deps.setupInit(options, deps),
132456
132527
  openWalletStore: deps.openWalletStore,
132457
- now: () => new Date(deps.now())
132528
+ now: () => new Date(deps.now()),
132529
+ ...deps.loadSuccessions ? { loadSuccessions: deps.loadSuccessions } : {}
132458
132530
  };
132459
132531
  }
132460
132532
  async function setupInit({ home, passphrase: passphrase2, args }, deps) {
@@ -134241,7 +134313,9 @@ var RELAYED_DEPOSIT_UNIT = Object.freeze({
134241
134313
  // The production E1 pool since the tag-28 window (its pool plan: poolDenominationAtomic 1000000).
134242
134314
  "45mhosfA2MuygZWeqYRVcEZX2Q3gA8KR8FwP6AZkK1zR": "1000000",
134243
134315
  // The production E1 pool since 2026-10-12 (GET /api/x402/deposit: depositUnitAtomic 1000000).
134244
- F7MWGF8vG8Bv3Y4pRRFqky5YzZndGtQaUXbMMvpmtoRV: "1000000"
134316
+ F7MWGF8vG8Bv3Y4pRRFqky5YzZndGtQaUXbMMvpmtoRV: "1000000",
134317
+ // The production E1 pool since the succession of 2026-10-14 (same deposit unit as F7MW).
134318
+ CDtxyRjCUs2pu7t3U9TwtpnZwyxBFZ4dKXvb4RCmXHXv: "1000000"
134245
134319
  });
134246
134320
  async function runDeposit(args, values, deps) {
134247
134321
  const unit = values.has("--relay") && !values.has("--pool-denomination") ? RELAYED_DEPOSIT_UNIT[values.get("--pool")] : void 0;