@lightprotocol/zk-compression-cli 0.27.1-alpha.9 → 0.28.0-beta.2

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.
Binary file
Binary file
Binary file
@@ -18,6 +18,7 @@ declare class SetupCommand extends Command {
18
18
  "geyser-config": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
19
  "validator-args": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
20
20
  "sbf-program": import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
21
+ "upgradeable-program": import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
21
22
  devnet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
22
23
  mainnet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
23
24
  verbose: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
@@ -26,6 +27,10 @@ declare class SetupCommand extends Command {
26
27
  validatePrograms(programs: {
27
28
  address: string;
28
29
  path: string;
30
+ }[], upgradeablePrograms: {
31
+ address: string;
32
+ path: string;
33
+ upgradeAuthority: string;
29
34
  }[]): void;
30
35
  run(): Promise<void>;
31
36
  }
@@ -15,6 +15,7 @@ class SetupCommand extends core_1.Command {
15
15
  "$ light test-validator --geyser-config ./config.json",
16
16
  '$ light test-validator --validator-args "--limit-ledger-size 50000000"',
17
17
  "$ light test-validator --sbf-program <address> <path/program>",
18
+ "$ light test-validator --upgradeable-program <address> <path/program> <upgrade_authority>",
18
19
  "$ light test-validator --devnet",
19
20
  "$ light test-validator --mainnet",
20
21
  ];
@@ -94,6 +95,12 @@ class SetupCommand extends core_1.Command {
94
95
  multiple: true,
95
96
  summary: "Usage: --sbf-program <address> <path/program_name.so>",
96
97
  }),
98
+ "upgradeable-program": core_1.Flags.string({
99
+ description: "Add an upgradeable SBF program to the genesis configuration. Required for programs that need compressible config initialization. If the ledger already exists then this parameter is silently ignored.",
100
+ required: false,
101
+ multiple: true,
102
+ summary: "Usage: --upgradeable-program <address> <path/program_name.so> <upgrade_authority>",
103
+ }),
97
104
  devnet: core_1.Flags.boolean({
98
105
  description: "Clone Light Protocol programs and accounts from devnet instead of loading local binaries.",
99
106
  default: false,
@@ -114,10 +121,14 @@ class SetupCommand extends core_1.Command {
114
121
  default: false,
115
122
  }),
116
123
  };
117
- validatePrograms(programs) {
118
- // Check for duplicate addresses among provided programs
124
+ validatePrograms(programs, upgradeablePrograms) {
125
+ // Check for duplicate addresses among all provided programs
119
126
  const addresses = new Set();
120
- for (const program of programs) {
127
+ const allPrograms = [
128
+ ...programs.map((p) => ({ ...p, type: "sbf" })),
129
+ ...upgradeablePrograms.map((p) => ({ ...p, type: "upgradeable" })),
130
+ ];
131
+ for (const program of allPrograms) {
121
132
  if (addresses.has(program.address)) {
122
133
  this.error(`Duplicate program address detected: ${program.address}`);
123
134
  }
@@ -160,20 +171,35 @@ class SetupCommand extends core_1.Command {
160
171
  this.log("\nTest validator stopped successfully \x1b[32m✔\x1b[0m");
161
172
  }
162
173
  else {
163
- const rawValues = flags["sbf-program"] || [];
164
- if (rawValues.length % 2 !== 0) {
174
+ // Parse --sbf-program flags (2 arguments each: address, path)
175
+ const rawSbfValues = flags["sbf-program"] || [];
176
+ if (rawSbfValues.length % 2 !== 0) {
165
177
  this.error("Each --sbf-program flag must have exactly two arguments");
166
178
  }
167
179
  const programs = [];
168
- for (let i = 0; i < rawValues.length; i += 2) {
180
+ for (let i = 0; i < rawSbfValues.length; i += 2) {
169
181
  programs.push({
170
- address: rawValues[i],
171
- path: rawValues[i + 1],
182
+ address: rawSbfValues[i],
183
+ path: rawSbfValues[i + 1],
184
+ });
185
+ }
186
+ // Parse --upgradeable-program flags (3 arguments each: address, path, upgrade_authority)
187
+ const rawUpgradeableValues = flags["upgradeable-program"] || [];
188
+ if (rawUpgradeableValues.length % 3 !== 0) {
189
+ this.error("Each --upgradeable-program flag must have exactly three arguments: <address> <path> <upgrade_authority>");
190
+ }
191
+ const upgradeablePrograms = [];
192
+ for (let i = 0; i < rawUpgradeableValues.length; i += 3) {
193
+ upgradeablePrograms.push({
194
+ address: rawUpgradeableValues[i],
195
+ path: rawUpgradeableValues[i + 1],
196
+ upgradeAuthority: rawUpgradeableValues[i + 2],
172
197
  });
173
198
  }
174
- this.validatePrograms(programs);
199
+ this.validatePrograms(programs, upgradeablePrograms);
175
200
  await (0, initTestEnv_1.initTestEnv)({
176
201
  additionalPrograms: programs,
202
+ upgradeablePrograms: upgradeablePrograms,
177
203
  checkPhotonVersion: !flags["relax-indexer-version-constraint"],
178
204
  indexer: !flags["skip-indexer"],
179
205
  limitLedgerSize: flags["limit-ledger-size"],
@@ -8,9 +8,8 @@ const path_1 = tslib_1.__importDefault(require("path"));
8
8
  const https_1 = tslib_1.__importDefault(require("https"));
9
9
  const http_1 = tslib_1.__importDefault(require("http"));
10
10
  const promises_1 = require("stream/promises");
11
- const PROVER_RELEASE_TAG = "2.0.6";
12
- const PROVER_BINARY_VERSION = "2.0.0"; // Version string the binary actually reports
13
- const GITHUB_RELEASES_BASE_URL = `https://github.com/Lightprotocol/light-protocol/releases/download/light-prover-v${PROVER_RELEASE_TAG}`;
11
+ const proverVersion_generated_1 = require("./proverVersion.generated");
12
+ const GITHUB_RELEASES_BASE_URL = `https://github.com/Lightprotocol/light-protocol/releases/download/light-prover-v${proverVersion_generated_1.PROVER_VERSION}`;
14
13
  const MAX_REDIRECTS = 10;
15
14
  async function downloadProverBinary(binaryPath, binaryName, options = {}) {
16
15
  const { maxRetries = 3, retryDelay = 2000 } = options;
@@ -104,5 +103,5 @@ async function downloadFile(url, outputPath, redirectDepth = 0) {
104
103
  });
105
104
  }
106
105
  function getProverVersion() {
107
- return PROVER_BINARY_VERSION;
106
+ return proverVersion_generated_1.PROVER_VERSION;
108
107
  }
@@ -9,11 +9,16 @@ export declare function stopTestEnv(options: {
9
9
  indexer: boolean;
10
10
  prover: boolean;
11
11
  }): Promise<void>;
12
- export declare function initTestEnv({ additionalPrograms, skipSystemAccounts, indexer, prover, rpcPort, indexerPort, proverPort, gossipHost, checkPhotonVersion, photonDatabaseUrl, limitLedgerSize, geyserConfig, validatorArgs, cloneNetwork, verbose, skipReset, }: {
12
+ export declare function initTestEnv({ additionalPrograms, upgradeablePrograms, skipSystemAccounts, indexer, prover, rpcPort, indexerPort, proverPort, gossipHost, checkPhotonVersion, photonDatabaseUrl, limitLedgerSize, geyserConfig, validatorArgs, cloneNetwork, verbose, skipReset, }: {
13
13
  additionalPrograms?: {
14
14
  address: string;
15
15
  path: string;
16
16
  }[];
17
+ upgradeablePrograms?: {
18
+ address: string;
19
+ path: string;
20
+ upgradeAuthority: string;
21
+ }[];
17
22
  skipSystemAccounts?: boolean;
18
23
  indexer: boolean;
19
24
  prover: boolean;
@@ -43,11 +48,16 @@ export declare function initTestEnvIfNeeded({ additionalPrograms, skipSystemAcco
43
48
  }): Promise<void>;
44
49
  export declare function programsDirPath(): string;
45
50
  export declare function programFilePath(programName: string): string;
46
- export declare function getSolanaArgs({ additionalPrograms, skipSystemAccounts, limitLedgerSize, rpcPort, gossipHost, downloadBinaries, cloneNetwork, verbose, skipReset, }: {
51
+ export declare function getSolanaArgs({ additionalPrograms, upgradeablePrograms, skipSystemAccounts, limitLedgerSize, rpcPort, gossipHost, downloadBinaries, cloneNetwork, verbose, skipReset, }: {
47
52
  additionalPrograms?: {
48
53
  address: string;
49
54
  path: string;
50
55
  }[];
56
+ upgradeablePrograms?: {
57
+ address: string;
58
+ path: string;
59
+ upgradeAuthority: string;
60
+ }[];
51
61
  skipSystemAccounts?: boolean;
52
62
  limitLedgerSize?: number;
53
63
  rpcPort?: number;
@@ -57,11 +67,16 @@ export declare function getSolanaArgs({ additionalPrograms, skipSystemAccounts,
57
67
  verbose?: boolean;
58
68
  skipReset?: boolean;
59
69
  }): Promise<Array<string>>;
60
- export declare function startTestValidator({ additionalPrograms, skipSystemAccounts, limitLedgerSize, rpcPort, gossipHost, validatorArgs, geyserConfig, cloneNetwork, verbose, skipReset, }: {
70
+ export declare function startTestValidator({ additionalPrograms, upgradeablePrograms, skipSystemAccounts, limitLedgerSize, rpcPort, gossipHost, validatorArgs, geyserConfig, cloneNetwork, verbose, skipReset, }: {
61
71
  additionalPrograms?: {
62
72
  address: string;
63
73
  path: string;
64
74
  }[];
75
+ upgradeablePrograms?: {
76
+ address: string;
77
+ path: string;
78
+ upgradeAuthority: string;
79
+ }[];
65
80
  skipSystemAccounts?: boolean;
66
81
  limitLedgerSize?: number;
67
82
  rpcPort?: number;
@@ -103,10 +103,11 @@ async function stopTestEnv(options) {
103
103
  await Promise.all(killPromises);
104
104
  console.log("All specified processes and validator stopped.");
105
105
  }
106
- async function initTestEnv({ additionalPrograms, skipSystemAccounts, indexer = true, prover = true, rpcPort = 8899, indexerPort = 8784, proverPort = 3001, gossipHost = "127.0.0.1", checkPhotonVersion = true, photonDatabaseUrl, limitLedgerSize, geyserConfig, validatorArgs, cloneNetwork, verbose, skipReset, }) {
106
+ async function initTestEnv({ additionalPrograms, upgradeablePrograms, skipSystemAccounts, indexer = true, prover = true, rpcPort = 8899, indexerPort = 8784, proverPort = 3001, gossipHost = "127.0.0.1", checkPhotonVersion = true, photonDatabaseUrl, limitLedgerSize, geyserConfig, validatorArgs, cloneNetwork, verbose, skipReset, }) {
107
107
  // We cannot await this promise directly because it will hang the process
108
108
  startTestValidator({
109
109
  additionalPrograms,
110
+ upgradeablePrograms,
110
111
  skipSystemAccounts,
111
112
  limitLedgerSize,
112
113
  rpcPort,
@@ -120,29 +121,27 @@ async function initTestEnv({ additionalPrograms, skipSystemAccounts, indexer = t
120
121
  await (0, process_1.waitForServers)([{ port: rpcPort, path: "/health" }]);
121
122
  await (0, process_1.confirmServerStability)(`http://127.0.0.1:${rpcPort}/health`);
122
123
  await (0, process_1.confirmRpcReadiness)(`http://127.0.0.1:${rpcPort}`);
123
- if (indexer) {
124
- const config = (0, utils_1.getConfig)();
125
- config.indexerUrl = `http://127.0.0.1:${indexerPort}`;
126
- (0, utils_1.setConfig)(config);
127
- const proverUrlForIndexer = prover
128
- ? `http://127.0.0.1:${proverPort}`
129
- : undefined;
130
- await (0, processPhotonIndexer_1.startIndexer)(`http://127.0.0.1:${rpcPort}`, indexerPort, checkPhotonVersion, photonDatabaseUrl, proverUrlForIndexer);
131
- }
132
124
  if (prover) {
133
125
  const config = (0, utils_1.getConfig)();
134
126
  config.proverUrl = `http://127.0.0.1:${proverPort}`;
135
127
  (0, utils_1.setConfig)(config);
136
128
  try {
137
- // TODO: check if using redisUrl is better here.
138
129
  await (0, processProverServer_1.startProver)(proverPort);
139
130
  }
140
131
  catch (error) {
141
132
  console.error("Failed to start prover:", error);
142
- // Prover logs will be automatically displayed by spawnBinary in process.ts
143
133
  throw error;
144
134
  }
145
135
  }
136
+ if (indexer) {
137
+ const config = (0, utils_1.getConfig)();
138
+ config.indexerUrl = `http://127.0.0.1:${indexerPort}`;
139
+ (0, utils_1.setConfig)(config);
140
+ const proverUrlForIndexer = prover
141
+ ? `http://127.0.0.1:${proverPort}`
142
+ : undefined;
143
+ await (0, processPhotonIndexer_1.startIndexer)(`http://127.0.0.1:${rpcPort}`, indexerPort, checkPhotonVersion, photonDatabaseUrl, proverUrlForIndexer);
144
+ }
146
145
  }
147
146
  async function initTestEnvIfNeeded({ additionalPrograms, skipSystemAccounts, indexer = false, prover = false, geyserConfig, validatorArgs, } = {}) {
148
147
  try {
@@ -194,12 +193,12 @@ function programFilePath(programName) {
194
193
  }
195
194
  return path_1.default.resolve(__dirname, path_1.default.join(constants_1.BASE_PATH, programName));
196
195
  }
197
- async function getSolanaArgs({ additionalPrograms, skipSystemAccounts, limitLedgerSize, rpcPort, gossipHost, downloadBinaries = true, cloneNetwork, verbose = false, skipReset = false, }) {
196
+ async function getSolanaArgs({ additionalPrograms, upgradeablePrograms, skipSystemAccounts, limitLedgerSize, rpcPort, gossipHost, downloadBinaries = true, cloneNetwork, verbose = false, skipReset = false, }) {
198
197
  const dirPath = programsDirPath();
199
198
  const solanaArgs = [
200
199
  `--limit-ledger-size=${limitLedgerSize}`,
201
200
  `--rpc-port=${rpcPort}`,
202
- `--gossip-host=${gossipHost}`,
201
+ `--bind-address=${gossipHost}`,
203
202
  "--quiet",
204
203
  ];
205
204
  if (!skipReset) {
@@ -257,6 +256,12 @@ async function getSolanaArgs({ additionalPrograms, skipSystemAccounts, limitLedg
257
256
  solanaArgs.push("--bpf-program", program.address, program.path);
258
257
  }
259
258
  }
259
+ // Add upgradeable programs (with upgrade authority)
260
+ if (upgradeablePrograms) {
261
+ for (const program of upgradeablePrograms) {
262
+ solanaArgs.push("--upgradeable-program", program.address, program.path, program.upgradeAuthority);
263
+ }
264
+ }
260
265
  // Load local system accounts only if not cloning from network
261
266
  if (!skipSystemAccounts && !cloneNetwork) {
262
267
  const accountsRelPath = "../../accounts";
@@ -265,10 +270,11 @@ async function getSolanaArgs({ additionalPrograms, skipSystemAccounts, limitLedg
265
270
  }
266
271
  return solanaArgs;
267
272
  }
268
- async function startTestValidator({ additionalPrograms, skipSystemAccounts, limitLedgerSize, rpcPort, gossipHost, validatorArgs, geyserConfig, cloneNetwork, verbose, skipReset, }) {
273
+ async function startTestValidator({ additionalPrograms, upgradeablePrograms, skipSystemAccounts, limitLedgerSize, rpcPort, gossipHost, validatorArgs, geyserConfig, cloneNetwork, verbose, skipReset, }) {
269
274
  const command = "solana-test-validator";
270
275
  const solanaArgs = await getSolanaArgs({
271
276
  additionalPrograms,
277
+ upgradeablePrograms,
272
278
  skipSystemAccounts,
273
279
  limitLedgerSize,
274
280
  rpcPort,
@@ -288,10 +294,11 @@ async function startTestValidator({ additionalPrograms, skipSystemAccounts, limi
288
294
  solanaArgs.push(...validatorArgs.split(" "));
289
295
  }
290
296
  console.log("Starting test validator...");
291
- await (0, process_1.executeCommand)({
292
- command,
293
- args: [...solanaArgs],
294
- });
297
+ // Use spawnBinary instead of executeCommand to properly detach the process.
298
+ // This ensures the validator survives when the CLI exits (executeCommand uses
299
+ // piped stdio which causes SIGPIPE when parent exits).
300
+ // Pass process.env directly to maintain same env behavior as before.
301
+ (0, process_1.spawnBinary)(command, solanaArgs, process.env);
295
302
  }
296
303
  async function killTestValidator() {
297
304
  await (0, process_1.killProcess)("solana-test-validator");
@@ -27,7 +27,7 @@ export declare function executeCommand({ command, args, additionalPath, logFile,
27
27
  * @example const output = await execute("ls -alh");
28
28
  */
29
29
  export declare function execute(command: string): Promise<string>;
30
- export declare function spawnBinary(command: string, args?: string[]): import("child_process").ChildProcess;
30
+ export declare function spawnBinary(command: string, args?: string[], env?: NodeJS.ProcessEnv): import("child_process").ChildProcess;
31
31
  export declare function waitForServers(servers: {
32
32
  port: number;
33
33
  path: string;
@@ -165,7 +165,7 @@ async function execute(command) {
165
165
  throw err;
166
166
  }
167
167
  }
168
- function spawnBinary(command, args = []) {
168
+ function spawnBinary(command, args = [], env) {
169
169
  const logDir = "test-ledger";
170
170
  const binaryName = path_1.default.basename(command);
171
171
  const dir = path_1.default.join(process.cwd(), logDir);
@@ -180,7 +180,7 @@ function spawnBinary(command, args = []) {
180
180
  stdio: ["ignore", out, err],
181
181
  shell: false,
182
182
  detached: true,
183
- env: {
183
+ env: env ?? {
184
184
  ...process.env,
185
185
  RUST_LOG: process.env.RUST_LOG || "debug",
186
186
  },
@@ -84,6 +84,7 @@ async function startProver(proverPort, redisUrl) {
84
84
  }
85
85
  (0, process_1.spawnBinary)(getProverPathByArch(), args);
86
86
  await (0, process_1.waitForServers)([{ port: proverPort, path: "/" }]);
87
+ await new Promise((r) => setTimeout(r, 5000));
87
88
  console.log(`Prover started successfully!`);
88
89
  }
89
90
  function getProverNameByArch() {
@@ -0,0 +1 @@
1
+ export declare const PROVER_VERSION = "2.0.7";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROVER_VERSION = void 0;
4
+ // Auto-generated from prover/server/VERSION - do not edit manually
5
+ exports.PROVER_VERSION = "2.0.7";
@@ -90,23 +90,15 @@
90
90
  "index.js"
91
91
  ]
92
92
  },
93
- "compress-spl": {
93
+ "compress-sol": {
94
94
  "aliases": [],
95
95
  "args": {},
96
96
  "examples": [
97
- "$ light compress-spl --mint PublicKey --to PublicKey --amount 10"
97
+ "$ light compress-sol --to PublicKey --amount 10"
98
98
  ],
99
99
  "flags": {
100
- "mint": {
101
- "description": "Specify the mint address.",
102
- "name": "mint",
103
- "required": true,
104
- "hasDynamicHelp": false,
105
- "multiple": false,
106
- "type": "option"
107
- },
108
100
  "to": {
109
- "description": "Specify the recipient address (owner of destination compressed token account).",
101
+ "description": "Specify the recipient address.",
110
102
  "name": "to",
111
103
  "required": true,
112
104
  "hasDynamicHelp": false,
@@ -114,7 +106,7 @@
114
106
  "type": "option"
115
107
  },
116
108
  "amount": {
117
- "description": "Amount to compress, in tokens.",
109
+ "description": "Amount to compress, in lamports.",
118
110
  "name": "amount",
119
111
  "required": true,
120
112
  "hasDynamicHelp": false,
@@ -124,30 +116,38 @@
124
116
  },
125
117
  "hasDynamicHelp": false,
126
118
  "hiddenAliases": [],
127
- "id": "compress-spl",
119
+ "id": "compress-sol",
128
120
  "pluginAlias": "@lightprotocol/zk-compression-cli",
129
121
  "pluginName": "@lightprotocol/zk-compression-cli",
130
122
  "pluginType": "core",
131
123
  "strict": true,
132
- "summary": "Compress SPL tokens.",
124
+ "summary": "Compress SOL.",
133
125
  "enableJsonFlag": false,
134
126
  "isESM": false,
135
127
  "relativePath": [
136
128
  "dist",
137
129
  "commands",
138
- "compress-spl",
130
+ "compress-sol",
139
131
  "index.js"
140
132
  ]
141
133
  },
142
- "compress-sol": {
134
+ "compress-spl": {
143
135
  "aliases": [],
144
136
  "args": {},
145
137
  "examples": [
146
- "$ light compress-sol --to PublicKey --amount 10"
138
+ "$ light compress-spl --mint PublicKey --to PublicKey --amount 10"
147
139
  ],
148
140
  "flags": {
141
+ "mint": {
142
+ "description": "Specify the mint address.",
143
+ "name": "mint",
144
+ "required": true,
145
+ "hasDynamicHelp": false,
146
+ "multiple": false,
147
+ "type": "option"
148
+ },
149
149
  "to": {
150
- "description": "Specify the recipient address.",
150
+ "description": "Specify the recipient address (owner of destination compressed token account).",
151
151
  "name": "to",
152
152
  "required": true,
153
153
  "hasDynamicHelp": false,
@@ -155,7 +155,7 @@
155
155
  "type": "option"
156
156
  },
157
157
  "amount": {
158
- "description": "Amount to compress, in lamports.",
158
+ "description": "Amount to compress, in tokens.",
159
159
  "name": "amount",
160
160
  "required": true,
161
161
  "hasDynamicHelp": false,
@@ -165,18 +165,18 @@
165
165
  },
166
166
  "hasDynamicHelp": false,
167
167
  "hiddenAliases": [],
168
- "id": "compress-sol",
168
+ "id": "compress-spl",
169
169
  "pluginAlias": "@lightprotocol/zk-compression-cli",
170
170
  "pluginName": "@lightprotocol/zk-compression-cli",
171
171
  "pluginType": "core",
172
172
  "strict": true,
173
- "summary": "Compress SOL.",
173
+ "summary": "Compress SPL tokens.",
174
174
  "enableJsonFlag": false,
175
175
  "isESM": false,
176
176
  "relativePath": [
177
177
  "dist",
178
178
  "commands",
179
- "compress-sol",
179
+ "compress-spl",
180
180
  "index.js"
181
181
  ]
182
182
  },
@@ -633,6 +633,7 @@
633
633
  "$ light test-validator --geyser-config ./config.json",
634
634
  "$ light test-validator --validator-args \"--limit-ledger-size 50000000\"",
635
635
  "$ light test-validator --sbf-program <address> <path/program>",
636
+ "$ light test-validator --upgradeable-program <address> <path/program> <upgrade_authority>",
636
637
  "$ light test-validator --devnet",
637
638
  "$ light test-validator --mainnet"
638
639
  ],
@@ -761,6 +762,15 @@
761
762
  "multiple": true,
762
763
  "type": "option"
763
764
  },
765
+ "upgradeable-program": {
766
+ "description": "Add an upgradeable SBF program to the genesis configuration. Required for programs that need compressible config initialization. If the ledger already exists then this parameter is silently ignored.",
767
+ "name": "upgradeable-program",
768
+ "required": false,
769
+ "summary": "Usage: --upgradeable-program <address> <path/program_name.so> <upgrade_authority>",
770
+ "hasDynamicHelp": false,
771
+ "multiple": true,
772
+ "type": "option"
773
+ },
764
774
  "devnet": {
765
775
  "description": "Clone Light Protocol programs and accounts from devnet instead of loading local binaries.",
766
776
  "exclusive": [
@@ -908,5 +918,5 @@
908
918
  ]
909
919
  }
910
920
  },
911
- "version": "0.27.1-alpha.9"
921
+ "version": "0.28.0-beta.2"
912
922
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightprotocol/zk-compression-cli",
3
- "version": "0.27.1-alpha.9",
3
+ "version": "0.28.0-beta.2",
4
4
  "description": "ZK Compression: Secure Scaling on Solana",
5
5
  "maintainers": [
6
6
  {
@@ -49,8 +49,8 @@
49
49
  "tweetnacl": "^1.0.3",
50
50
  "wait-on": "^7.2.0",
51
51
  "which": "^5.0.0",
52
- "@lightprotocol/compressed-token": "0.22.1-alpha.7",
53
- "@lightprotocol/stateless.js": "0.22.1-alpha.6"
52
+ "@lightprotocol/compressed-token": "0.23.0-beta.2",
53
+ "@lightprotocol/stateless.js": "0.23.0-beta.2"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@eslint/js": "9.36.0",
@@ -97,48 +97,11 @@
97
97
  "oclif"
98
98
  ],
99
99
  "types": "dist/index.d.ts",
100
- "nx": {
101
- "targets": {
102
- "build": {
103
- "inputs": [
104
- "{workspaceRoot}/js",
105
- "{workspaceRoot}/programs",
106
- "{workspaceRoot}/gnark-prover"
107
- ],
108
- "outputs": [
109
- "{workspaceRoot}/bin",
110
- "{workspaceRoot}/dist",
111
- "{workspaceRoot}/lib",
112
- "{workspaceRoot}/test_bin"
113
- ]
114
- },
115
- "build-ci": {
116
- "dependsOn": [
117
- "@lightprotocol/stateless.js:build-ci",
118
- "@lightprotocol/compressed-token:build-ci"
119
- ],
120
- "inputs": [
121
- "{workspaceRoot}/js",
122
- "{workspaceRoot}/gnark-prover",
123
- "{projectRoot}/scripts/**"
124
- ],
125
- "outputs": [
126
- "{workspaceRoot}/bin",
127
- "{workspaceRoot}/dist",
128
- "{workspaceRoot}/lib",
129
- "{workspaceRoot}/test_bin"
130
- ]
131
- },
132
- "test-ci": {
133
- "dependsOn": []
134
- }
135
- }
136
- },
137
100
  "scripts": {
138
- "add-bins": "./scripts/copyLocalProgramBinaries.sh",
139
101
  "postinstall": "[ -d ./bin ] && find ./bin -type f -exec chmod +x {} + || echo 'No bin directory found, skipping chmod'",
140
- "build": "shx rm -rf dist && pnpm tsc -p tsconfig.json && pnpm tsc -p tsconfig.test.json && pnpm add-bins",
141
- "build-release": "shx rm -rf dist && pnpm tsc -p tsconfig.json && pnpm tsc -p tsconfig.test.json && pnpm add-bins",
102
+ "sync-prover-version": "./scripts/syncProverVersion.sh",
103
+ "build": "shx rm -rf dist && pnpm sync-prover-version && pnpm tsc -p tsconfig.json && pnpm tsc -p tsconfig.test.json",
104
+ "build-release": "shx rm -rf dist && pnpm sync-prover-version && pnpm tsc -p tsconfig.json && pnpm tsc -p tsconfig.test.json",
142
105
  "format": "pnpm prettier --write \"src/**/*.{ts,js}\" \"test/**/*.{ts,js}\" -w",
143
106
  "format:check": "pnpm prettier \"src/**/*{ts,js}\" \"test/**/*.{ts,js}\" --check",
144
107
  "lint": "eslint .",