pha-deploy 0.2.1 → 0.2.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/README.md CHANGED
@@ -180,6 +180,64 @@ pha-deploy --create-token --dry-run
180
180
 
181
181
  ---
182
182
 
183
+
184
+ ## Usage without config.toml
185
+
186
+ These examples do not use `config.toml`. Every required value is passed via CLI flags. All JSON values **must** be single-line strings; line breaks will break JSON parsing.
187
+
188
+ ```bash
189
+ TOKEN_SCHEMAS_JSON='{"seriesMetadata":[{"name":"extraSharedSampleField","type":"String"}],"rom":[{"name":"name","type":"String"},{"name":"description","type":"String"},{"name":"imageURL","type":"String"},{"name":"infoURL","type":"String"},{"name":"royalties","type":"Int32"},{"name":"extraSampleField","type":"String"}],"ram":[]}'
190
+ TOKEN_METADATA_JSON='{"name":"My test token!","icon":"data:image/png;base64,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","url":"http://example.com","description":"My test token description"}'
191
+
192
+ pha-deploy --create-token \
193
+ --rpc https://testnet.phantasma.info/rpc \
194
+ --nexus testnet \
195
+ --wif <WIF> \
196
+ --symbol NFTMY \
197
+ --token-type nft \
198
+ --token-schemas "$TOKEN_SCHEMAS_JSON" \
199
+ --token-metadata "$TOKEN_METADATA_JSON" \
200
+ --create-token-max-data 1000000000 \
201
+ --gas-fee-base 10000 \
202
+ --gas-fee-create-token-base 10000000000 \
203
+ --gas-fee-create-token-symbol 10000000000 \
204
+ --gas-fee-multiplier 10000
205
+ ```
206
+
207
+ ```bash
208
+ TOKEN_SCHEMAS_JSON='{"seriesMetadata":[{"name":"extraSharedSampleField","type":"String"}],"rom":[{"name":"name","type":"String"},{"name":"description","type":"String"},{"name":"imageURL","type":"String"},{"name":"infoURL","type":"String"},{"name":"royalties","type":"Int32"},{"name":"extraSampleField","type":"String"}],"ram":[]}'
209
+ SERIES_METADATA_JSON='{"rom":"0xAABBCC","extraSharedSampleField":"aabbsadsd"}'
210
+
211
+ pha-deploy --create-series \
212
+ --rpc https://testnet.phantasma.info/rpc \
213
+ --nexus testnet \
214
+ --wif <WIF> \
215
+ --carbon-token-id <TOKEN_ID> \
216
+ --token-schemas "$TOKEN_SCHEMAS_JSON" \
217
+ --series-metadata "$SERIES_METADATA_JSON" \
218
+ --create-token-series-max-data 100000000 \
219
+ --gas-fee-base 10000 \
220
+ --gas-fee-create-token-series 2500000000 \
221
+ --gas-fee-multiplier 10000
222
+ ```
223
+
224
+ ```bash
225
+ TOKEN_SCHEMAS_JSON='{"seriesMetadata":[{"name":"extraSharedSampleField","type":"String"}],"rom":[{"name":"name","type":"String"},{"name":"description","type":"String"},{"name":"imageURL","type":"String"},{"name":"infoURL","type":"String"},{"name":"royalties","type":"Int32"},{"name":"extraSampleField","type":"String"}],"ram":[]}'
226
+ NFT_METADATA_JSON='{"name":"Test NFT Name","description":"Test NFT Description","imageURL":"images-assets.nasa.gov/image/PIA13227/PIA13227~orig.jpg","infoURL":"https://images.nasa.gov/details/PIA13227","royalties":10000000,"extraSampleField":"abc"}'
227
+
228
+ pha-deploy --mint-nft \
229
+ --rpc https://testnet.phantasma.info/rpc \
230
+ --nexus testnet \
231
+ --wif <WIF> \
232
+ --carbon-token-id <TOKEN_ID> \
233
+ --carbon-token-series-id <SERIES_ID> \
234
+ --token-schemas "$TOKEN_SCHEMAS_JSON" \
235
+ --nft-metadata "$NFT_METADATA_JSON" \
236
+ --mint-token-max-data 100000000 \
237
+ --gas-fee-base 10000 \
238
+ --gas-fee-multiplier 10000
239
+ ```
240
+
183
241
  ## CLI Flags and Overrides
184
242
 
185
243
  Action selectors (first match wins):
@@ -197,28 +255,28 @@ Common utility flags:
197
255
 
198
256
  Configuration overrides (values override `config.toml` when provided):
199
257
 
200
- - `--rpc <url>` – RPC endpoint.
201
- - `--nexus <nexus>` – nexus name.
258
+ - `--rpc <url>` – RPC endpoint (fallback: `https://testnet.phantasma.info/rpc`).
259
+ - `--nexus <name>` – chain nexus (example: `mainnet` or `testnet`).
202
260
  - `--wif <wif>` – signer WIF.
203
261
  - `--symbol <symbol>` – token symbol.
204
- - `--token-type <nft|fungible>` – token kind.
205
- - `--token-max-supply <number>` / `--fungible-max-supply <number>` – maximum supply.
206
- - `--fungible-decimals <number>` – decimals for fungible token.
207
- - `--carbon-token-id <id>` – existing Carbon token id.
208
- - `--carbon-token-series-id <id>` – existing Carbon series id.
262
+ - `--token-type <nft|fungible>` – token kind (default: `nft`).
263
+ - `--token-max-supply <int>` / `--fungible-max-supply <int>` – max supply (required when token-type is `fungible`).
264
+ - `--fungible-decimals <0..255>` – decimals for fungible token (required when token-type is `fungible`).
265
+ - `--carbon-token-id <int>` – existing carbon token id (for series or mint).
266
+ - `--carbon-token-series-id <int>` – existing series id (for mint).
209
267
  - `--rom <hex>` – token ROM as hex string.
210
- - `--token-schemas '<json>'` – inline JSON for schemas.
211
- - `--token-metadata '<json>'` – inline JSON for token metadata.
212
- - `--series-metadata '<json>'` – inline JSON for series metadata.
213
- - `--nft-metadata '<json>'` – inline JSON for NFT metadata.
214
- - `--create-token-max-data <number>` – payload limit for token creation.
215
- - `--create-token-series-max-data <number>` – payload limit for series creation.
216
- - `--mint-token-max-data <number>` – payload limit for minting.
217
- - `--gas-fee-base <number>` – base gas fee.
218
- - `--gas-fee-create-token-base <number>` – gas fee for token creation.
219
- - `--gas-fee-create-token-symbol <number>` – symbol registration fee.
220
- - `--gas-fee-create-token-series <number>` – fee for series creation.
221
- - `--gas-fee-multiplier <number>` – multiplier applied to gas fee.
268
+ - `--token-schemas '<json>'` – inline JSON for token schemas (`seriesMetadata`, `rom`, `ram`).
269
+ - `--token-metadata '<json>'` – inline JSON for token metadata fields.
270
+ - `--series-metadata '<json>'` – inline JSON object or array of `{ name, value }` pairs.
271
+ - `--nft-metadata '<json>'` – inline JSON object or array of `{ name, value }` pairs.
272
+ - `--create-token-max-data <int>` – payload limit for token creation.
273
+ - `--create-token-series-max-data <int>` – payload limit for series creation.
274
+ - `--mint-token-max-data <int>` – payload limit for minting.
275
+ - `--gas-fee-base <int>` – base gas fee.
276
+ - `--gas-fee-create-token-base <int>` – gas fee for token creation.
277
+ - `--gas-fee-create-token-symbol <int>` – symbol registration fee.
278
+ - `--gas-fee-create-token-series <int>` – fee for series creation.
279
+ - `--gas-fee-multiplier <int>` – multiplier applied to gas fee.
222
280
 
223
281
  Notes:
224
282
  - JSON arguments must be passed as single-line quoted strings; for substantial edits, updating `config.toml` is usually more convenient.
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAsJA,iBAAe,IAAI,kBAkHlB;AAcD,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAuMA,iBAAe,IAAI,kBAwIlB;AAcD,eAAe,IAAI,CAAC"}
package/dist/cli.js CHANGED
@@ -24,6 +24,54 @@ const phantasma_sdk_ts_1 = require("phantasma-sdk-ts");
24
24
  * - create-series
25
25
  * - mint-nft
26
26
  */
27
+ function printHelp() {
28
+ const text = `Usage:
29
+ pha-deploy --create-token [options]
30
+ pha-deploy --create-series [options]
31
+ pha-deploy --mint-nft [options]
32
+
33
+ Actions:
34
+ --create-token Create a token
35
+ --create-series Create a token series
36
+ --mint-nft Mint tokens
37
+
38
+ Common flags:
39
+ --config <path> Path to TOML config file (default: config.toml)
40
+ --dry-run Do not broadcast transactions; just show payloads
41
+ --rpc-log Enable SDK JSON-RPC logging (full response payloads)
42
+ --settings-log Print resolved configuration before executing an action
43
+ --help Show this help
44
+ --version Show version number
45
+
46
+ Overrides (replace values from config.toml when provided):
47
+ --rpc <url> RPC endpoint (fallback: https://testnet.phantasma.info/rpc)
48
+ --nexus <name> Chain nexus (example: mainnet or testnet)
49
+ --wif <wif> WIF for signing
50
+ --symbol <symbol> Token symbol
51
+ --token-type <nft|fungible> Token type to create (default: nft)
52
+ --token-max-supply <int> Non-negative integer; required when token-type=fungible
53
+ --fungible-max-supply <int> Alias for --token-max-supply
54
+ --fungible-decimals <0..255> Decimal places; required when token-type=fungible
55
+ --carbon-token-id <int> Existing carbon token ID (for series or mint)
56
+ --carbon-token-series-id <int> Existing series ID (for mint)
57
+ --rom <hex> Token ROM hex (optional; for token creation)
58
+ --token-schemas <json> JSON string with schemas (seriesMetadata, rom, ram)
59
+ --token-metadata <json> JSON string of token metadata fields
60
+ --series-metadata <json> JSON object or array of series metadata fields
61
+ --nft-metadata <json> JSON object or array of NFT metadata fields
62
+ --create-token-max-data <int> Max data for create-token tx
63
+ --create-token-series-max-data <int> Max data for create-series tx
64
+ --mint-token-max-data <int> Max data for mint-nft tx
65
+ --gas-fee-base <int> Gas fee base
66
+ --gas-fee-create-token-base <int> Gas fee base for create-token
67
+ --gas-fee-create-token-symbol <int> Gas fee per symbol
68
+ --gas-fee-create-token-series <int> Gas fee for create-series
69
+ --gas-fee-multiplier <int> Gas fee multiplier
70
+
71
+ pha-deploy - Phantasma token deployment and minting CLI
72
+ `;
73
+ console.log(text);
74
+ }
27
75
  function requireArg(value, name) {
28
76
  if (value === undefined || value === null) {
29
77
  throw new Error(`${name} is required`);
@@ -78,19 +126,27 @@ async function actionMintNft(cfg, dryRun, logSettings) {
78
126
  }
79
127
  /* ------------------------------- Main ------------------------------- */
80
128
  async function main() {
81
- // Pre-parse --config early so the TOML file can be loaded before the main yargs parsing.
82
- const pre = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
129
+ const rawArgv = (0, helpers_1.hideBin)(process.argv);
130
+ // Pre-parse --config and --help early so the TOML file can be loaded before the main yargs parsing.
131
+ const pre = (0, yargs_1.default)(rawArgv)
83
132
  .option("config", {
84
133
  type: "string",
85
134
  alias: "c",
86
135
  description: "Path to TOML config file (default: config.toml)",
87
136
  })
137
+ .option("help", {
138
+ type: "boolean",
139
+ })
140
+ .alias("h", "help")
88
141
  .help(false)
142
+ .version(false)
89
143
  .parseSync();
90
- // Load TOML configuration (if present) before doing full parsing
91
- const cfg = (0, config_1.default)({ configPath: pre.config ?? null });
144
+ if (pre.help) {
145
+ printHelp();
146
+ return;
147
+ }
92
148
  // Minimal yargs parsing for the top-level CLI behavior
93
- const argv = await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
149
+ const parser = (0, yargs_1.default)(rawArgv)
94
150
  .scriptName("pha-deploy")
95
151
  .usage("Usage: $0 [options] [--create-token|--mint-nft|--transfer]")
96
152
  .option("rpc", { type: "string", describe: "RPC endpoint" })
@@ -122,6 +178,11 @@ async function main() {
122
178
  type: "boolean",
123
179
  describe: "Print resolved configuration before executing an action",
124
180
  })
181
+ .option("help", {
182
+ type: "boolean",
183
+ describe: "Show help",
184
+ })
185
+ .alias("h", "help")
125
186
  .option("config", {
126
187
  type: "string",
127
188
  describe: "Path to TOML config file (default: config.toml). Takes precedence as the file used for defaults.",
@@ -132,10 +193,15 @@ async function main() {
132
193
  describe: "Create a token series",
133
194
  })
134
195
  .option("mint-nft", { type: "boolean", describe: "Mint tokens" })
135
- .help()
136
- .alias("h", "help")
137
- .epilog("pha-deploy - Phantasma token deployment and minting CLI")
138
- .parseAsync();
196
+ .version()
197
+ .epilog("pha-deploy - Phantasma token deployment and minting CLI");
198
+ const argv = await parser.parseAsync();
199
+ if (argv.help) {
200
+ printHelp();
201
+ return;
202
+ }
203
+ // Load TOML configuration (if present) before doing full parsing
204
+ const cfg = (0, config_1.default)({ configPath: pre.config ?? null });
139
205
  const rpcLogEnabled = Boolean(argv["rpc-log"]);
140
206
  const settingsLogEnabled = Boolean(argv["settings-log"]);
141
207
  if (rpcLogEnabled) {
@@ -157,8 +223,10 @@ async function main() {
157
223
  const dryRun = Boolean(argv["dry-run"]) || cfg.dryRun || false;
158
224
  // One-shot actions: pick the first matching action
159
225
  const actions = ["create-token", "create-series", "mint-nft"];
226
+ let foundAction = false;
160
227
  for (const action of actions) {
161
228
  if (argv[action]) {
229
+ foundAction = true;
162
230
  switch (action) {
163
231
  case "create-token": {
164
232
  await actionCreateToken(cfg, dryRun, settingsLogEnabled);
@@ -176,8 +244,9 @@ async function main() {
176
244
  }
177
245
  }
178
246
  // No action requested -> show help
179
- console.log("No action specified. Pass an action flag (e.g. --create-token or --mint-nft).");
180
- console.log("Use --help to see available flags.");
247
+ if (!foundAction) {
248
+ printHelp();
249
+ }
181
250
  }
182
251
  /* ----------------------------- Run Script ---------------------------- */
183
252
  if (require.main === module) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { hideBin } from \"yargs/helpers\";\nimport yargs from \"yargs\";\nimport loadConfig, { Config, TokenType } from \"./config\";\nimport { inspect } from \"node:util\";\nimport { createToken, createTokenCfg } from \"./actions/createToken\";\nimport { createSeries, createSeriesCfg } from \"./actions/createSeries\";\nimport { mintNftToken, mintNftTokenCfg } from \"./actions/mintNftToken\";\nimport { setLogger } from \"phantasma-sdk-ts\";\n\n/**\n * CLI for pha-deploy.\n *\n * Modes:\n * - CLI one-shot: use flags to perform actions immediately\n * - TOML-driven: use `--config` or default `config.toml` for config values\n *\n * Actions:\n * - create-token\n * - create-series\n * - mint-nft\n */\n\nfunction requireArg<T>(\n value: T,\n name: string,\n): asserts value is NonNullable<T> {\n if (value === undefined || value === null) {\n throw new Error(`${name} is required`);\n }\n}\n\n/* ----------------------------- Actions ----------------------------- */\nasync function actionCreateToken(\n cfg: Config,\n dryRun: boolean,\n logSettings: boolean,\n) {\n requireArg(cfg.rpc, \"rpc\");\n requireArg(cfg.nexus, \"nexus\");\n requireArg(cfg.wif, \"wif\");\n requireArg(cfg.symbol, \"symbol\");\n requireArg(cfg.gasFeeBase, \"gas_fee_base\");\n requireArg(cfg.gasFeeCreateTokenBase, \"gas_fee_create_token_base\");\n requireArg(cfg.gasFeeCreateTokenSymbol, \"gas_fee_create_token_symbol\");\n requireArg(cfg.gasFeeMultiplier, \"gas_fee_multiplier\");\n requireArg(cfg.createTokenMaxData, \"create_token_max_data\");\n\n const tokenType: TokenType =\n (cfg.tokenType ?? \"nft\") === \"fungible\" ? \"fungible\" : \"nft\";\n\n if (tokenType === \"fungible\") {\n requireArg(cfg.tokenMaxSupply, \"token_max_supply\");\n requireArg(cfg.fungibleDecimals, \"fungible_decimals\");\n } else {\n requireArg(cfg.tokenSchemas, \"token_schemas\");\n }\n\n await createToken(\n new createTokenCfg(\n cfg.rpc,\n cfg.nexus,\n cfg.wif,\n cfg.symbol,\n cfg.gasFeeBase,\n cfg.gasFeeCreateTokenBase,\n cfg.gasFeeCreateTokenSymbol,\n cfg.gasFeeMultiplier,\n cfg.createTokenMaxData,\n cfg.tokenSchemas,\n cfg.tokenMetadata,\n tokenType,\n cfg.tokenMaxSupply,\n cfg.fungibleDecimals,\n ),\n dryRun,\n logSettings,\n );\n}\n\nasync function actionCreateSeries(\n cfg: Config,\n dryRun: boolean,\n logSettings: boolean,\n) {\n requireArg(cfg.rpc, \"rpc\");\n requireArg(cfg.nexus, \"nexus\");\n requireArg(cfg.wif, \"wif\");\n requireArg(cfg.carbonTokenId, \"carbon_token_id\");\n requireArg(cfg.tokenSchemas, \"token_schemas\");\n requireArg(cfg.seriesMetadata, \"series_metadata\");\n requireArg(cfg.gasFeeBase, \"gas_fee_base\");\n requireArg(cfg.gasFeeCreateTokenSeries, \"gas_fee_create_token_series\");\n requireArg(cfg.gasFeeMultiplier, \"gas_fee_multiplier\");\n requireArg(cfg.createTokenSeriesMaxData, \"create_token_series_max_data\");\n\n await createSeries(\n new createSeriesCfg(\n cfg.rpc,\n cfg.nexus,\n cfg.wif,\n cfg.carbonTokenId,\n cfg.gasFeeBase,\n cfg.gasFeeCreateTokenSeries,\n cfg.gasFeeMultiplier,\n cfg.createTokenSeriesMaxData,\n cfg.tokenSchemas?.seriesMetadata,\n cfg.seriesMetadata\n ),\n dryRun,\n logSettings,\n );\n}\n\nasync function actionMintNft(\n cfg: Config,\n dryRun: boolean,\n logSettings: boolean,\n) {\n requireArg(cfg.rpc, \"rpc\");\n requireArg(cfg.nexus, \"nexus\");\n requireArg(cfg.wif, \"wif\");\n requireArg(cfg.carbonTokenId, \"carbon_token_id\");\n requireArg(cfg.carbonTokenSeriesId, \"carbon_token_series_id\");\n requireArg(cfg.tokenSchemas, \"token_schemas\");\n requireArg(cfg.nftMetadata, \"nft_metadata\");\n requireArg(cfg.gasFeeBase, \"gas_fee_base\");\n requireArg(cfg.gasFeeMultiplier, \"gas_fee_multiplier\");\n requireArg(cfg.mintTokenMaxData, \"mint_token_max_data\");\n\n await mintNftToken(\n new mintNftTokenCfg(\n cfg.rpc,\n cfg.nexus,\n cfg.wif,\n cfg.carbonTokenId,\n cfg.carbonTokenSeriesId,\n cfg.tokenSchemas.rom,\n cfg.nftMetadata,\n cfg.gasFeeBase,\n cfg.gasFeeMultiplier,\n cfg.mintTokenMaxData,\n ),\n dryRun,\n logSettings,\n );\n}\n\n/* ------------------------------- Main ------------------------------- */\n\nasync function main() {\n // Pre-parse --config early so the TOML file can be loaded before the main yargs parsing.\n const pre = yargs(hideBin(process.argv))\n .option(\"config\", {\n type: \"string\",\n alias: \"c\",\n description: \"Path to TOML config file (default: config.toml)\",\n })\n .help(false)\n .parseSync();\n\n // Load TOML configuration (if present) before doing full parsing\n const cfg = loadConfig({ configPath: pre.config ?? null });\n\n // Minimal yargs parsing for the top-level CLI behavior\n const argv = await yargs(hideBin(process.argv))\n .scriptName(\"pha-deploy\")\n .usage(\"Usage: $0 [options] [--create-token|--mint-nft|--transfer]\")\n .option(\"rpc\", { type: \"string\", describe: \"RPC endpoint\" })\n .option(\"nexus\", { type: \"string\", describe: \"Chain nexus\" })\n .option(\"wif\", { type: \"string\", describe: \"WIF for signing\" })\n .option(\"symbol\", { type: \"string\", describe: \"Token symbol\" })\n .option(\"token-type\", {\n type: \"string\",\n choices: [\"nft\", \"fungible\"],\n describe: \"Token type to create (default: nft)\",\n })\n .option(\"token-max-supply\", {\n type: \"string\",\n describe:\n \"Token max supply (optional for NFT; required when --token-type fungible)\",\n })\n .option(\"fungible-decimals\", {\n type: \"number\",\n describe:\n \"Decimal places for fungible token (required when --token-type fungible)\",\n })\n .option(\"dry-run\", {\n type: \"boolean\",\n describe: \"Do not broadcast transactions; just show payloads\",\n })\n .option(\"rpc-log\", {\n type: \"boolean\",\n describe:\n \"Enable SDK RPC logging (prints full JSON-RPC responses for debugging)\",\n })\n .option(\"settings-log\", {\n type: \"boolean\",\n describe: \"Print resolved configuration before executing an action\",\n })\n .option(\"config\", {\n type: \"string\",\n describe:\n \"Path to TOML config file (default: config.toml). Takes precedence as the file used for defaults.\",\n })\n .option(\"create-token\", { type: \"boolean\", describe: \"Create a token\" })\n .option(\"create-series\", {\n type: \"boolean\",\n describe: \"Create a token series\",\n })\n .option(\"mint-nft\", { type: \"boolean\", describe: \"Mint tokens\" })\n .help()\n .alias(\"h\", \"help\")\n .epilog(\"pha-deploy - Phantasma token deployment and minting CLI\")\n .parseAsync();\n\n const rpcLogEnabled = Boolean((argv as any)[\"rpc-log\"]);\n const settingsLogEnabled = Boolean((argv as any)[\"settings-log\"]);\n if (rpcLogEnabled) {\n // SDK logs JSON-RPC responses as raw objects; inspect avoids [Object] output.\n setLogger({\n log: (...args: unknown[]) => {\n const formatted = args.map((arg) =>\n typeof arg === \"string\"\n ? arg\n : inspect(arg, { depth: null, colors: false }),\n );\n console.log(...formatted);\n },\n });\n } else {\n // Enforce silent SDK logs unless explicitly enabled.\n setLogger();\n }\n\n // Determine dry-run (CLI flag overrides config)\n const dryRun = Boolean((argv as any)[\"dry-run\"]) || cfg.dryRun || false;\n\n // One-shot actions: pick the first matching action\n const actions = [\"create-token\", \"create-series\", \"mint-nft\"];\n for (const action of actions) {\n if ((argv as any)[action]) {\n switch (action) {\n case \"create-token\": {\n await actionCreateToken(cfg, dryRun, settingsLogEnabled);\n return;\n }\n case \"create-series\": {\n await actionCreateSeries(cfg, dryRun, settingsLogEnabled);\n return;\n }\n case \"mint-nft\": {\n await actionMintNft(cfg, dryRun, settingsLogEnabled);\n return;\n }\n }\n }\n }\n\n // No action requested -> show help\n console.log(\n \"No action specified. Pass an action flag (e.g. --create-token or --mint-nft).\",\n );\n console.log(\"Use --help to see available flags.\");\n}\n\n/* ----------------------------- Run Script ---------------------------- */\n\nif (require.main === module) {\n main().catch((err) => {\n console.error(\n \"Unhandled error in CLI:\",\n err && err.stack ? err.stack : err,\n );\n process.exit(2);\n });\n}\n\nexport default main;\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { hideBin } from \"yargs/helpers\";\nimport yargs from \"yargs\";\nimport loadConfig, { Config, TokenType } from \"./config\";\nimport { inspect } from \"node:util\";\nimport { createToken, createTokenCfg } from \"./actions/createToken\";\nimport { createSeries, createSeriesCfg } from \"./actions/createSeries\";\nimport { mintNftToken, mintNftTokenCfg } from \"./actions/mintNftToken\";\nimport { setLogger } from \"phantasma-sdk-ts\";\n\n/**\n * CLI for pha-deploy.\n *\n * Modes:\n * - CLI one-shot: use flags to perform actions immediately\n * - TOML-driven: use `--config` or default `config.toml` for config values\n *\n * Actions:\n * - create-token\n * - create-series\n * - mint-nft\n */\n\nfunction printHelp(): void {\n const text = `Usage:\n pha-deploy --create-token [options]\n pha-deploy --create-series [options]\n pha-deploy --mint-nft [options]\n\nActions:\n --create-token Create a token\n --create-series Create a token series\n --mint-nft Mint tokens\n\nCommon flags:\n --config <path> Path to TOML config file (default: config.toml)\n --dry-run Do not broadcast transactions; just show payloads\n --rpc-log Enable SDK JSON-RPC logging (full response payloads)\n --settings-log Print resolved configuration before executing an action\n --help Show this help\n --version Show version number\n\nOverrides (replace values from config.toml when provided):\n --rpc <url> RPC endpoint (fallback: https://testnet.phantasma.info/rpc)\n --nexus <name> Chain nexus (example: mainnet or testnet)\n --wif <wif> WIF for signing\n --symbol <symbol> Token symbol\n --token-type <nft|fungible> Token type to create (default: nft)\n --token-max-supply <int> Non-negative integer; required when token-type=fungible\n --fungible-max-supply <int> Alias for --token-max-supply\n --fungible-decimals <0..255> Decimal places; required when token-type=fungible\n --carbon-token-id <int> Existing carbon token ID (for series or mint)\n --carbon-token-series-id <int> Existing series ID (for mint)\n --rom <hex> Token ROM hex (optional; for token creation)\n --token-schemas <json> JSON string with schemas (seriesMetadata, rom, ram)\n --token-metadata <json> JSON string of token metadata fields\n --series-metadata <json> JSON object or array of series metadata fields\n --nft-metadata <json> JSON object or array of NFT metadata fields\n --create-token-max-data <int> Max data for create-token tx\n --create-token-series-max-data <int> Max data for create-series tx\n --mint-token-max-data <int> Max data for mint-nft tx\n --gas-fee-base <int> Gas fee base\n --gas-fee-create-token-base <int> Gas fee base for create-token\n --gas-fee-create-token-symbol <int> Gas fee per symbol\n --gas-fee-create-token-series <int> Gas fee for create-series\n --gas-fee-multiplier <int> Gas fee multiplier\n\npha-deploy - Phantasma token deployment and minting CLI\n`;\n console.log(text);\n}\n\nfunction requireArg<T>(\n value: T,\n name: string,\n): asserts value is NonNullable<T> {\n if (value === undefined || value === null) {\n throw new Error(`${name} is required`);\n }\n}\n\n/* ----------------------------- Actions ----------------------------- */\nasync function actionCreateToken(\n cfg: Config,\n dryRun: boolean,\n logSettings: boolean,\n) {\n requireArg(cfg.rpc, \"rpc\");\n requireArg(cfg.nexus, \"nexus\");\n requireArg(cfg.wif, \"wif\");\n requireArg(cfg.symbol, \"symbol\");\n requireArg(cfg.gasFeeBase, \"gas_fee_base\");\n requireArg(cfg.gasFeeCreateTokenBase, \"gas_fee_create_token_base\");\n requireArg(cfg.gasFeeCreateTokenSymbol, \"gas_fee_create_token_symbol\");\n requireArg(cfg.gasFeeMultiplier, \"gas_fee_multiplier\");\n requireArg(cfg.createTokenMaxData, \"create_token_max_data\");\n\n const tokenType: TokenType =\n (cfg.tokenType ?? \"nft\") === \"fungible\" ? \"fungible\" : \"nft\";\n\n if (tokenType === \"fungible\") {\n requireArg(cfg.tokenMaxSupply, \"token_max_supply\");\n requireArg(cfg.fungibleDecimals, \"fungible_decimals\");\n } else {\n requireArg(cfg.tokenSchemas, \"token_schemas\");\n }\n\n await createToken(\n new createTokenCfg(\n cfg.rpc,\n cfg.nexus,\n cfg.wif,\n cfg.symbol,\n cfg.gasFeeBase,\n cfg.gasFeeCreateTokenBase,\n cfg.gasFeeCreateTokenSymbol,\n cfg.gasFeeMultiplier,\n cfg.createTokenMaxData,\n cfg.tokenSchemas,\n cfg.tokenMetadata,\n tokenType,\n cfg.tokenMaxSupply,\n cfg.fungibleDecimals,\n ),\n dryRun,\n logSettings,\n );\n}\n\nasync function actionCreateSeries(\n cfg: Config,\n dryRun: boolean,\n logSettings: boolean,\n) {\n requireArg(cfg.rpc, \"rpc\");\n requireArg(cfg.nexus, \"nexus\");\n requireArg(cfg.wif, \"wif\");\n requireArg(cfg.carbonTokenId, \"carbon_token_id\");\n requireArg(cfg.tokenSchemas, \"token_schemas\");\n requireArg(cfg.seriesMetadata, \"series_metadata\");\n requireArg(cfg.gasFeeBase, \"gas_fee_base\");\n requireArg(cfg.gasFeeCreateTokenSeries, \"gas_fee_create_token_series\");\n requireArg(cfg.gasFeeMultiplier, \"gas_fee_multiplier\");\n requireArg(cfg.createTokenSeriesMaxData, \"create_token_series_max_data\");\n\n await createSeries(\n new createSeriesCfg(\n cfg.rpc,\n cfg.nexus,\n cfg.wif,\n cfg.carbonTokenId,\n cfg.gasFeeBase,\n cfg.gasFeeCreateTokenSeries,\n cfg.gasFeeMultiplier,\n cfg.createTokenSeriesMaxData,\n cfg.tokenSchemas?.seriesMetadata,\n cfg.seriesMetadata\n ),\n dryRun,\n logSettings,\n );\n}\n\nasync function actionMintNft(\n cfg: Config,\n dryRun: boolean,\n logSettings: boolean,\n) {\n requireArg(cfg.rpc, \"rpc\");\n requireArg(cfg.nexus, \"nexus\");\n requireArg(cfg.wif, \"wif\");\n requireArg(cfg.carbonTokenId, \"carbon_token_id\");\n requireArg(cfg.carbonTokenSeriesId, \"carbon_token_series_id\");\n requireArg(cfg.tokenSchemas, \"token_schemas\");\n requireArg(cfg.nftMetadata, \"nft_metadata\");\n requireArg(cfg.gasFeeBase, \"gas_fee_base\");\n requireArg(cfg.gasFeeMultiplier, \"gas_fee_multiplier\");\n requireArg(cfg.mintTokenMaxData, \"mint_token_max_data\");\n\n await mintNftToken(\n new mintNftTokenCfg(\n cfg.rpc,\n cfg.nexus,\n cfg.wif,\n cfg.carbonTokenId,\n cfg.carbonTokenSeriesId,\n cfg.tokenSchemas.rom,\n cfg.nftMetadata,\n cfg.gasFeeBase,\n cfg.gasFeeMultiplier,\n cfg.mintTokenMaxData,\n ),\n dryRun,\n logSettings,\n );\n}\n\n/* ------------------------------- Main ------------------------------- */\n\nasync function main() {\n const rawArgv = hideBin(process.argv);\n\n // Pre-parse --config and --help early so the TOML file can be loaded before the main yargs parsing.\n const pre = yargs(rawArgv)\n .option(\"config\", {\n type: \"string\",\n alias: \"c\",\n description: \"Path to TOML config file (default: config.toml)\",\n })\n .option(\"help\", {\n type: \"boolean\",\n })\n .alias(\"h\", \"help\")\n .help(false)\n .version(false)\n .parseSync();\n\n if ((pre as any).help) {\n printHelp();\n return;\n }\n\n // Minimal yargs parsing for the top-level CLI behavior\n const parser = yargs(rawArgv)\n .scriptName(\"pha-deploy\")\n .usage(\"Usage: $0 [options] [--create-token|--mint-nft|--transfer]\")\n .option(\"rpc\", { type: \"string\", describe: \"RPC endpoint\" })\n .option(\"nexus\", { type: \"string\", describe: \"Chain nexus\" })\n .option(\"wif\", { type: \"string\", describe: \"WIF for signing\" })\n .option(\"symbol\", { type: \"string\", describe: \"Token symbol\" })\n .option(\"token-type\", {\n type: \"string\",\n choices: [\"nft\", \"fungible\"],\n describe: \"Token type to create (default: nft)\",\n })\n .option(\"token-max-supply\", {\n type: \"string\",\n describe:\n \"Token max supply (optional for NFT; required when --token-type fungible)\",\n })\n .option(\"fungible-decimals\", {\n type: \"number\",\n describe:\n \"Decimal places for fungible token (required when --token-type fungible)\",\n })\n .option(\"dry-run\", {\n type: \"boolean\",\n describe: \"Do not broadcast transactions; just show payloads\",\n })\n .option(\"rpc-log\", {\n type: \"boolean\",\n describe:\n \"Enable SDK RPC logging (prints full JSON-RPC responses for debugging)\",\n })\n .option(\"settings-log\", {\n type: \"boolean\",\n describe: \"Print resolved configuration before executing an action\",\n })\n .option(\"help\", {\n type: \"boolean\",\n describe: \"Show help\",\n })\n .alias(\"h\", \"help\")\n .option(\"config\", {\n type: \"string\",\n describe:\n \"Path to TOML config file (default: config.toml). Takes precedence as the file used for defaults.\",\n })\n .option(\"create-token\", { type: \"boolean\", describe: \"Create a token\" })\n .option(\"create-series\", {\n type: \"boolean\",\n describe: \"Create a token series\",\n })\n .option(\"mint-nft\", { type: \"boolean\", describe: \"Mint tokens\" })\n .version()\n .epilog(\"pha-deploy - Phantasma token deployment and minting CLI\");\n\n const argv = await parser.parseAsync();\n if ((argv as any).help) {\n printHelp();\n return;\n }\n\n // Load TOML configuration (if present) before doing full parsing\n const cfg = loadConfig({ configPath: pre.config ?? null });\n\n const rpcLogEnabled = Boolean((argv as any)[\"rpc-log\"]);\n const settingsLogEnabled = Boolean((argv as any)[\"settings-log\"]);\n if (rpcLogEnabled) {\n // SDK logs JSON-RPC responses as raw objects; inspect avoids [Object] output.\n setLogger({\n log: (...args: unknown[]) => {\n const formatted = args.map((arg) =>\n typeof arg === \"string\"\n ? arg\n : inspect(arg, { depth: null, colors: false }),\n );\n console.log(...formatted);\n },\n });\n } else {\n // Enforce silent SDK logs unless explicitly enabled.\n setLogger();\n }\n\n // Determine dry-run (CLI flag overrides config)\n const dryRun = Boolean((argv as any)[\"dry-run\"]) || cfg.dryRun || false;\n\n // One-shot actions: pick the first matching action\n const actions = [\"create-token\", \"create-series\", \"mint-nft\"];\n let foundAction = false;\n for (const action of actions) {\n if ((argv as any)[action]) {\n foundAction = true;\n switch (action) {\n case \"create-token\": {\n await actionCreateToken(cfg, dryRun, settingsLogEnabled);\n return;\n }\n case \"create-series\": {\n await actionCreateSeries(cfg, dryRun, settingsLogEnabled);\n return;\n }\n case \"mint-nft\": {\n await actionMintNft(cfg, dryRun, settingsLogEnabled);\n return;\n }\n }\n }\n }\n\n // No action requested -> show help\n if (!foundAction) {\n printHelp();\n }\n}\n\n/* ----------------------------- Run Script ---------------------------- */\n\nif (require.main === module) {\n main().catch((err) => {\n console.error(\n \"Unhandled error in CLI:\",\n err && err.stack ? err.stack : err,\n );\n process.exit(2);\n });\n}\n\nexport default main;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pha-deploy",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "CLI token deployment and minting tool for Phantasma blockchain",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",