@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.
- package/bin/account_compression.so +0 -0
- package/bin/light_compressed_token.so +0 -0
- package/bin/light_registry.so +0 -0
- package/bin/light_system_program_pinocchio.so +0 -0
- package/dist/commands/test-validator/index.d.ts +5 -0
- package/dist/commands/test-validator/index.js +35 -9
- package/dist/utils/downloadProverBinary.js +3 -4
- package/dist/utils/initTestEnv.d.ts +18 -3
- package/dist/utils/initTestEnv.js +26 -19
- package/dist/utils/process.d.ts +1 -1
- package/dist/utils/process.js +2 -2
- package/dist/utils/processProverServer.js +1 -0
- package/dist/utils/proverVersion.generated.d.ts +1 -0
- package/dist/utils/proverVersion.generated.js +5 -0
- package/oclif.manifest.json +33 -23
- package/package.json +6 -43
|
Binary file
|
|
Binary file
|
package/bin/light_registry.so
CHANGED
|
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
|
-
|
|
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
|
-
|
|
164
|
-
|
|
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 <
|
|
180
|
+
for (let i = 0; i < rawSbfValues.length; i += 2) {
|
|
169
181
|
programs.push({
|
|
170
|
-
address:
|
|
171
|
-
path:
|
|
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
|
|
12
|
-
const
|
|
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
|
|
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
|
-
`--
|
|
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
|
-
|
|
292
|
-
|
|
293
|
-
|
|
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");
|
package/dist/utils/process.d.ts
CHANGED
|
@@ -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;
|
package/dist/utils/process.js
CHANGED
|
@@ -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";
|
package/oclif.manifest.json
CHANGED
|
@@ -90,23 +90,15 @@
|
|
|
90
90
|
"index.js"
|
|
91
91
|
]
|
|
92
92
|
},
|
|
93
|
-
"compress-
|
|
93
|
+
"compress-sol": {
|
|
94
94
|
"aliases": [],
|
|
95
95
|
"args": {},
|
|
96
96
|
"examples": [
|
|
97
|
-
"$ light compress-
|
|
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
|
|
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
|
|
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-
|
|
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
|
|
124
|
+
"summary": "Compress SOL.",
|
|
133
125
|
"enableJsonFlag": false,
|
|
134
126
|
"isESM": false,
|
|
135
127
|
"relativePath": [
|
|
136
128
|
"dist",
|
|
137
129
|
"commands",
|
|
138
|
-
"compress-
|
|
130
|
+
"compress-sol",
|
|
139
131
|
"index.js"
|
|
140
132
|
]
|
|
141
133
|
},
|
|
142
|
-
"compress-
|
|
134
|
+
"compress-spl": {
|
|
143
135
|
"aliases": [],
|
|
144
136
|
"args": {},
|
|
145
137
|
"examples": [
|
|
146
|
-
"$ light compress-
|
|
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
|
|
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-
|
|
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
|
|
173
|
+
"summary": "Compress SPL tokens.",
|
|
174
174
|
"enableJsonFlag": false,
|
|
175
175
|
"isESM": false,
|
|
176
176
|
"relativePath": [
|
|
177
177
|
"dist",
|
|
178
178
|
"commands",
|
|
179
|
-
"compress-
|
|
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.
|
|
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.
|
|
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.
|
|
53
|
-
"@lightprotocol/stateless.js": "0.
|
|
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
|
-
"
|
|
141
|
-
"build
|
|
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 .",
|