pha-deploy 0.2.2 → 0.3.0

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.
Files changed (41) hide show
  1. package/README.md +228 -235
  2. package/config/config.example.toml +18 -7
  3. package/dist/actions/createSeries.d.ts.map +1 -1
  4. package/dist/actions/createSeries.js +1 -1
  5. package/dist/actions/createSeries.js.map +1 -1
  6. package/dist/actions/mintFungibleToken.d.ts +17 -0
  7. package/dist/actions/mintFungibleToken.d.ts.map +1 -0
  8. package/dist/actions/mintFungibleToken.js +103 -0
  9. package/dist/actions/mintFungibleToken.js.map +1 -0
  10. package/dist/actions/mintNftToken.d.ts +2 -2
  11. package/dist/actions/mintNftToken.d.ts.map +1 -1
  12. package/dist/actions/mintNftToken.js +26 -10
  13. package/dist/actions/mintNftToken.js.map +1 -1
  14. package/dist/cli-contract.d.ts +2 -0
  15. package/dist/cli-contract.d.ts.map +1 -0
  16. package/dist/cli-contract.js +247 -0
  17. package/dist/cli-contract.js.map +1 -0
  18. package/dist/cli.d.ts.map +1 -1
  19. package/dist/cli.js +51 -6
  20. package/dist/cli.js.map +1 -1
  21. package/dist/config.d.ts +3 -0
  22. package/dist/config.d.ts.map +1 -1
  23. package/dist/config.js +9 -0
  24. package/dist/config.js.map +1 -1
  25. package/dist/contract/artifacts.d.ts +30 -0
  26. package/dist/contract/artifacts.d.ts.map +1 -0
  27. package/dist/contract/artifacts.js +142 -0
  28. package/dist/contract/artifacts.js.map +1 -0
  29. package/dist/contract/compiler.d.ts +43 -0
  30. package/dist/contract/compiler.d.ts.map +1 -0
  31. package/dist/contract/compiler.js +202 -0
  32. package/dist/contract/compiler.js.map +1 -0
  33. package/dist/contract/deploy.d.ts +34 -0
  34. package/dist/contract/deploy.d.ts.map +1 -0
  35. package/dist/contract/deploy.js +69 -0
  36. package/dist/contract/deploy.js.map +1 -0
  37. package/dist/version.d.ts +9 -0
  38. package/dist/version.d.ts.map +1 -0
  39. package/dist/version.js +52 -0
  40. package/dist/version.js.map +1 -0
  41. package/package.json +4 -4
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAuMA,iBAAe,IAAI,kBAwIlB;AAcD,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAqPA,iBAAe,IAAI,kBA+JlB;AAcD,eAAe,IAAI,CAAC"}
package/dist/cli.js CHANGED
@@ -10,8 +10,11 @@ const config_1 = __importDefault(require("./config"));
10
10
  const node_util_1 = require("node:util");
11
11
  const createToken_1 = require("./actions/createToken");
12
12
  const createSeries_1 = require("./actions/createSeries");
13
+ const mintFungibleToken_1 = require("./actions/mintFungibleToken");
13
14
  const mintNftToken_1 = require("./actions/mintNftToken");
14
15
  const phantasma_sdk_ts_1 = require("phantasma-sdk-ts");
16
+ const cli_contract_1 = require("./cli-contract");
17
+ const version_1 = require("./version");
15
18
  /**
16
19
  * CLI for pha-deploy.
17
20
  *
@@ -22,17 +25,24 @@ const phantasma_sdk_ts_1 = require("phantasma-sdk-ts");
22
25
  * Actions:
23
26
  * - create-token
24
27
  * - create-series
28
+ * - mint-fungible
25
29
  * - mint-nft
26
30
  */
27
31
  function printHelp() {
28
32
  const text = `Usage:
33
+ pha-deploy contract <compile|deploy|upgrade> [options]
29
34
  pha-deploy --create-token [options]
30
35
  pha-deploy --create-series [options]
36
+ pha-deploy --mint-fungible [options]
31
37
  pha-deploy --mint-nft [options]
32
38
 
33
39
  Actions:
40
+ contract compile Compile a contract through the system-installed pha-tomb
41
+ contract deploy Deploy a compiled contract bundle
42
+ contract upgrade Upgrade a compiled contract bundle
34
43
  --create-token Create a token
35
44
  --create-series Create a token series
45
+ --mint-fungible Mint fungible tokens
36
46
  --mint-nft Mint tokens
37
47
 
38
48
  Common flags:
@@ -53,7 +63,9 @@ Overrides (replace values from config.toml when provided):
53
63
  --fungible-max-supply <int> Alias for --token-max-supply
54
64
  --fungible-decimals <0..255> Decimal places; required when token-type=fungible
55
65
  --carbon-token-id <int> Existing carbon token ID (for series or mint)
56
- --carbon-token-series-id <int> Existing series ID (for mint)
66
+ --phantasma-series-id <int> Existing Phantasma series ID (required for deterministic mint)
67
+ --mint-fungible-to <address> Recipient address for fungible mint (default: WIF owner)
68
+ --mint-fungible-amount <int> Amount to mint (integer atomic units)
57
69
  --rom <hex> Token ROM hex (optional; for token creation)
58
70
  --token-schemas <json> JSON string with schemas (seriesMetadata, rom, ram)
59
71
  --token-metadata <json> JSON string of token metadata fields
@@ -116,17 +128,37 @@ async function actionMintNft(cfg, dryRun, logSettings) {
116
128
  requireArg(cfg.nexus, "nexus");
117
129
  requireArg(cfg.wif, "wif");
118
130
  requireArg(cfg.carbonTokenId, "carbon_token_id");
119
- requireArg(cfg.carbonTokenSeriesId, "carbon_token_series_id");
131
+ requireArg(cfg.phantasmaSeriesId, "phantasma_series_id");
120
132
  requireArg(cfg.tokenSchemas, "token_schemas");
121
133
  requireArg(cfg.nftMetadata, "nft_metadata");
122
134
  requireArg(cfg.gasFeeBase, "gas_fee_base");
123
135
  requireArg(cfg.gasFeeMultiplier, "gas_fee_multiplier");
124
136
  requireArg(cfg.mintTokenMaxData, "mint_token_max_data");
125
- await (0, mintNftToken_1.mintNftToken)(new mintNftToken_1.mintNftTokenCfg(cfg.rpc, cfg.nexus, cfg.wif, cfg.carbonTokenId, cfg.carbonTokenSeriesId, cfg.tokenSchemas.rom, cfg.nftMetadata, cfg.gasFeeBase, cfg.gasFeeMultiplier, cfg.mintTokenMaxData), dryRun, logSettings);
137
+ await (0, mintNftToken_1.mintNftToken)(new mintNftToken_1.mintNftTokenCfg(cfg.rpc, cfg.nexus, cfg.wif, cfg.carbonTokenId, cfg.phantasmaSeriesId, cfg.tokenSchemas.rom, cfg.nftMetadata, cfg.gasFeeBase, cfg.gasFeeMultiplier, cfg.mintTokenMaxData), dryRun, logSettings);
138
+ }
139
+ async function actionMintFungible(cfg, dryRun, logSettings) {
140
+ requireArg(cfg.rpc, "rpc");
141
+ requireArg(cfg.nexus, "nexus");
142
+ requireArg(cfg.wif, "wif");
143
+ requireArg(cfg.carbonTokenId, "carbon_token_id");
144
+ requireArg(cfg.mintFungibleAmount, "mint_fungible_amount");
145
+ requireArg(cfg.gasFeeBase, "gas_fee_base");
146
+ requireArg(cfg.gasFeeMultiplier, "gas_fee_multiplier");
147
+ requireArg(cfg.mintTokenMaxData, "mint_token_max_data");
148
+ const to = cfg.mintFungibleTo ?? phantasma_sdk_ts_1.PhantasmaKeys.fromWIF(cfg.wif).Address.toString();
149
+ await (0, mintFungibleToken_1.mintFungibleToken)(new mintFungibleToken_1.mintFungibleTokenCfg(cfg.rpc, cfg.nexus, cfg.wif, cfg.carbonTokenId, to, cfg.mintFungibleAmount, cfg.gasFeeBase, cfg.gasFeeMultiplier, cfg.mintTokenMaxData), dryRun, logSettings);
126
150
  }
127
151
  /* ------------------------------- Main ------------------------------- */
128
152
  async function main() {
129
153
  const rawArgv = (0, helpers_1.hideBin)(process.argv);
154
+ if (rawArgv.length === 1 && (rawArgv[0] === "--version" || rawArgv[0] === "-v")) {
155
+ console.log((0, version_1.renderVersionReport)(await (0, version_1.buildVersionReport)()));
156
+ return;
157
+ }
158
+ if (rawArgv[0] === "contract") {
159
+ await (0, cli_contract_1.runContractCli)(rawArgv.slice(1));
160
+ return;
161
+ }
130
162
  // Pre-parse --config and --help early so the TOML file can be loaded before the main yargs parsing.
131
163
  const pre = (0, yargs_1.default)(rawArgv)
132
164
  .option("config", {
@@ -148,7 +180,7 @@ async function main() {
148
180
  // Minimal yargs parsing for the top-level CLI behavior
149
181
  const parser = (0, yargs_1.default)(rawArgv)
150
182
  .scriptName("pha-deploy")
151
- .usage("Usage: $0 [options] [--create-token|--mint-nft|--transfer]")
183
+ .usage("Usage: $0 [options] [--create-token|--create-series|--mint-fungible|--mint-nft]")
152
184
  .option("rpc", { type: "string", describe: "RPC endpoint" })
153
185
  .option("nexus", { type: "string", describe: "Chain nexus" })
154
186
  .option("wif", { type: "string", describe: "WIF for signing" })
@@ -192,8 +224,17 @@ async function main() {
192
224
  type: "boolean",
193
225
  describe: "Create a token series",
194
226
  })
227
+ .option("mint-fungible", { type: "boolean", describe: "Mint fungible tokens" })
195
228
  .option("mint-nft", { type: "boolean", describe: "Mint tokens" })
196
- .version()
229
+ .option("mint-fungible-to", {
230
+ type: "string",
231
+ describe: "Recipient address for fungible mint (default: WIF owner)",
232
+ })
233
+ .option("mint-fungible-amount", {
234
+ type: "string",
235
+ describe: "Amount to mint (integer atomic units)",
236
+ })
237
+ .version(false)
197
238
  .epilog("pha-deploy - Phantasma token deployment and minting CLI");
198
239
  const argv = await parser.parseAsync();
199
240
  if (argv.help) {
@@ -222,7 +263,7 @@ async function main() {
222
263
  // Determine dry-run (CLI flag overrides config)
223
264
  const dryRun = Boolean(argv["dry-run"]) || cfg.dryRun || false;
224
265
  // One-shot actions: pick the first matching action
225
- const actions = ["create-token", "create-series", "mint-nft"];
266
+ const actions = ["create-token", "create-series", "mint-fungible", "mint-nft"];
226
267
  let foundAction = false;
227
268
  for (const action of actions) {
228
269
  if (argv[action]) {
@@ -236,6 +277,10 @@ async function main() {
236
277
  await actionCreateSeries(cfg, dryRun, settingsLogEnabled);
237
278
  return;
238
279
  }
280
+ case "mint-fungible": {
281
+ await actionMintFungible(cfg, dryRun, settingsLogEnabled);
282
+ return;
283
+ }
239
284
  case "mint-nft": {
240
285
  await actionMintNft(cfg, dryRun, settingsLogEnabled);
241
286
  return;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AACA,2CAAwC;AACxC,kDAA0B;AAC1B,sDAAyD;AACzD,yCAAoC;AACpC,uDAAoE;AACpE,yDAAuE;AACvE,yDAAuE;AACvE,uDAA6C;AAE7C;;;;;;;;;;;GAWG;AAEH,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Cd,CAAC;IACA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,UAAU,CACjB,KAAQ,EACR,IAAY;IAEZ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,KAAK,UAAU,iBAAiB,CAC9B,GAAW,EACX,MAAe,EACf,WAAoB;IAEpB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/B,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC3C,UAAU,CAAC,GAAG,CAAC,qBAAqB,EAAE,2BAA2B,CAAC,CAAC;IACnE,UAAU,CAAC,GAAG,CAAC,uBAAuB,EAAE,6BAA6B,CAAC,CAAC;IACvE,UAAU,CAAC,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;IACvD,UAAU,CAAC,GAAG,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;IAE5D,MAAM,SAAS,GACb,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IAE/D,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,UAAU,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACnD,UAAU,CAAC,GAAG,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,IAAA,yBAAW,EACf,IAAI,4BAAc,CAChB,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,qBAAqB,EACzB,GAAG,CAAC,uBAAuB,EAC3B,GAAG,CAAC,gBAAgB,EACpB,GAAG,CAAC,kBAAkB,EACtB,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,aAAa,EACjB,SAAS,EACT,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,gBAAgB,CACrB,EACD,MAAM,EACN,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,GAAW,EACX,MAAe,EACf,WAAoB;IAEpB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/B,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,UAAU,CAAC,GAAG,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IACjD,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAC9C,UAAU,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAClD,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC3C,UAAU,CAAC,GAAG,CAAC,uBAAuB,EAAE,6BAA6B,CAAC,CAAC;IACvE,UAAU,CAAC,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;IACvD,UAAU,CAAC,GAAG,CAAC,wBAAwB,EAAE,8BAA8B,CAAC,CAAC;IAEzE,MAAM,IAAA,2BAAY,EAChB,IAAI,8BAAe,CACjB,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,uBAAuB,EAC3B,GAAG,CAAC,gBAAgB,EACpB,GAAG,CAAC,wBAAwB,EAC5B,GAAG,CAAC,YAAY,EAAE,cAAc,EAChC,GAAG,CAAC,cAAc,CACnB,EACD,MAAM,EACN,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,GAAW,EACX,MAAe,EACf,WAAoB;IAEpB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/B,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,UAAU,CAAC,GAAG,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IACjD,UAAU,CAAC,GAAG,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;IAC9D,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAC9C,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC5C,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC3C,UAAU,CAAC,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;IACvD,UAAU,CAAC,GAAG,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;IAExD,MAAM,IAAA,2BAAY,EAChB,IAAI,8BAAe,CACjB,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,YAAY,CAAC,GAAG,EACpB,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,gBAAgB,EACpB,GAAG,CAAC,gBAAgB,CACrB,EACD,MAAM,EACN,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,0EAA0E;AAE1E,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,oGAAoG;IACpG,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,OAAO,CAAC;SACvB,MAAM,CAAC,QAAQ,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,iDAAiD;KAC/D,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,SAAS;KAChB,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;SAClB,IAAI,CAAC,KAAK,CAAC;SACX,OAAO,CAAC,KAAK,CAAC;SACd,SAAS,EAAE,CAAC;IAEf,IAAK,GAAW,CAAC,IAAI,EAAE,CAAC;QACtB,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,uDAAuD;IACvD,MAAM,MAAM,GAAG,IAAA,eAAK,EAAC,OAAO,CAAC;SAC1B,UAAU,CAAC,YAAY,CAAC;SACxB,KAAK,CAAC,4DAA4D,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;SAC3D,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;SAC9D,MAAM,CAAC,YAAY,EAAE;QACpB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC;QAC5B,QAAQ,EAAE,qCAAqC;KAChD,CAAC;SACD,MAAM,CAAC,kBAAkB,EAAE;QAC1B,IAAI,EAAE,QAAQ;QACd,QAAQ,EACN,0EAA0E;KAC7E,CAAC;SACD,MAAM,CAAC,mBAAmB,EAAE;QAC3B,IAAI,EAAE,QAAQ;QACd,QAAQ,EACN,yEAAyE;KAC5E,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,mDAAmD;KAC9D,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,SAAS;QACf,QAAQ,EACN,uEAAuE;KAC1E,CAAC;SACD,MAAM,CAAC,cAAc,EAAE;QACtB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,yDAAyD;KACpE,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,WAAW;KACtB,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;SAClB,MAAM,CAAC,QAAQ,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,QAAQ,EACN,kGAAkG;KACrG,CAAC;SACD,MAAM,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;SACvE,MAAM,CAAC,eAAe,EAAE;QACvB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,uBAAuB;KAClC,CAAC;SACD,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;SAChE,OAAO,EAAE;SACT,MAAM,CAAC,yDAAyD,CAAC,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IACvC,IAAK,IAAY,CAAC,IAAI,EAAE,CAAC;QACvB,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,iEAAiE;IACjE,MAAM,GAAG,GAAG,IAAA,gBAAU,EAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAE3D,MAAM,aAAa,GAAG,OAAO,CAAE,IAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IACxD,MAAM,kBAAkB,GAAG,OAAO,CAAE,IAAY,CAAC,cAAc,CAAC,CAAC,CAAC;IAClE,IAAI,aAAa,EAAE,CAAC;QAClB,8EAA8E;QAC9E,IAAA,4BAAS,EAAC;YACR,GAAG,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;gBAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACjC,OAAO,GAAG,KAAK,QAAQ;oBACrB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAA,mBAAO,EAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CACjD,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;YAC5B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,IAAA,4BAAS,GAAE,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,MAAM,MAAM,GAAG,OAAO,CAAE,IAAY,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;IAExE,mDAAmD;IACnD,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAK,IAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,WAAW,GAAG,IAAI,CAAC;YACnB,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,cAAc,CAAC,CAAC,CAAC;oBACpB,MAAM,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;oBACzD,OAAO;gBACT,CAAC;gBACD,KAAK,eAAe,CAAC,CAAC,CAAC;oBACrB,MAAM,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;oBAC1D,OAAO;gBACT,CAAC;gBACD,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;oBACrD,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,2EAA2E;AAE3E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CACX,yBAAyB,EACzB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CACnC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kBAAe,IAAI,CAAC","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"]}
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 { mintFungibleToken, mintFungibleTokenCfg } from \"./actions/mintFungibleToken\";\nimport { mintNftToken, mintNftTokenCfg } from \"./actions/mintNftToken\";\nimport { PhantasmaKeys, setLogger } from \"phantasma-sdk-ts\";\nimport { runContractCli } from \"./cli-contract\";\nimport { buildVersionReport, renderVersionReport } from \"./version\";\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-fungible\n * - mint-nft\n */\n\nfunction printHelp(): void {\n const text = `Usage:\n pha-deploy contract <compile|deploy|upgrade> [options]\n pha-deploy --create-token [options]\n pha-deploy --create-series [options]\n pha-deploy --mint-fungible [options]\n pha-deploy --mint-nft [options]\n\nActions:\n contract compile Compile a contract through the system-installed pha-tomb\n contract deploy Deploy a compiled contract bundle\n contract upgrade Upgrade a compiled contract bundle\n --create-token Create a token\n --create-series Create a token series\n --mint-fungible Mint fungible tokens\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 --phantasma-series-id <int> Existing Phantasma series ID (required for deterministic mint)\n --mint-fungible-to <address> Recipient address for fungible mint (default: WIF owner)\n --mint-fungible-amount <int> Amount to mint (integer atomic units)\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.phantasmaSeriesId, \"phantasma_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.phantasmaSeriesId,\n cfg.tokenSchemas.rom,\n cfg.nftMetadata,\n cfg.gasFeeBase,\n cfg.gasFeeMultiplier,\n cfg.mintTokenMaxData,\n ),\n dryRun,\n logSettings,\n );\n}\n\nasync function actionMintFungible(\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.mintFungibleAmount, \"mint_fungible_amount\");\n requireArg(cfg.gasFeeBase, \"gas_fee_base\");\n requireArg(cfg.gasFeeMultiplier, \"gas_fee_multiplier\");\n requireArg(cfg.mintTokenMaxData, \"mint_token_max_data\");\n\n const to =\n cfg.mintFungibleTo ?? PhantasmaKeys.fromWIF(cfg.wif).Address.toString();\n\n await mintFungibleToken(\n new mintFungibleTokenCfg(\n cfg.rpc,\n cfg.nexus,\n cfg.wif,\n cfg.carbonTokenId,\n to,\n cfg.mintFungibleAmount,\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 if (rawArgv.length === 1 && (rawArgv[0] === \"--version\" || rawArgv[0] === \"-v\")) {\n console.log(renderVersionReport(await buildVersionReport()));\n return;\n }\n\n if (rawArgv[0] === \"contract\") {\n await runContractCli(rawArgv.slice(1));\n return;\n }\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|--create-series|--mint-fungible|--mint-nft]\")\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-fungible\", { type: \"boolean\", describe: \"Mint fungible tokens\" })\n .option(\"mint-nft\", { type: \"boolean\", describe: \"Mint tokens\" })\n .option(\"mint-fungible-to\", {\n type: \"string\",\n describe: \"Recipient address for fungible mint (default: WIF owner)\",\n })\n .option(\"mint-fungible-amount\", {\n type: \"string\",\n describe: \"Amount to mint (integer atomic units)\",\n })\n .version(false)\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-fungible\", \"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-fungible\": {\n await actionMintFungible(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/dist/config.d.ts CHANGED
@@ -7,6 +7,7 @@ export interface Config {
7
7
  wif?: string | null;
8
8
  symbol?: string | null;
9
9
  carbonTokenId?: bigint | null;
10
+ phantasmaSeriesId?: bigint | null;
10
11
  rom?: string | null;
11
12
  tokenSchemas?: TokenSchemas | null;
12
13
  tokenMetadata: Metadata;
@@ -16,6 +17,8 @@ export interface Config {
16
17
  carbonTokenSeriesId?: number | null;
17
18
  seriesMetadata?: MetadataField[] | null;
18
19
  nftMetadata?: MetadataField[] | null;
20
+ mintFungibleTo?: string | null;
21
+ mintFungibleAmount?: bigint | null;
19
22
  createTokenMaxData?: bigint | null;
20
23
  createTokenSeriesMaxData?: bigint | null;
21
24
  mintTokenMaxData?: bigint | null;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAkB,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAuB,MAAM,kBAAkB,CAAC;AAEpF,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,UAAU,CAAC;AAE3C,MAAM,WAAW,MAAM;IAErB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,QAAQ,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAGxC,WAAW,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAGrC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAsKD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,MAAM,CA8MT;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAkB,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAuB,MAAM,kBAAkB,CAAC;AAEpF,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,UAAU,CAAC;AAE3C,MAAM,WAAW,MAAM;IAErB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,QAAQ,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAGxC,WAAW,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAGrC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGnC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAsKD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,MAAM,CAqOT;AAED,eAAe,UAAU,CAAC"}
package/dist/config.js CHANGED
@@ -175,6 +175,8 @@ function loadConfig(options) {
175
175
  tokenMaxSupply: null,
176
176
  fungibleDecimals: null,
177
177
  nftMetadata: null,
178
+ mintFungibleTo: null,
179
+ mintFungibleAmount: null,
178
180
  createTokenMaxData: null,
179
181
  createTokenSeriesMaxData: null,
180
182
  mintTokenMaxData: null,
@@ -199,6 +201,13 @@ function loadConfig(options) {
199
201
  parseBigInt(pickValue(argv, "carbon-token-id", "carbon_token_id")) ?? null;
200
202
  cfg.carbonTokenSeriesId =
201
203
  parseNumber(pickValue(argv, "carbon-token-series-id", "carbon_token_series_id")) ?? null;
204
+ cfg.phantasmaSeriesId =
205
+ parseBigInt(pickValue(argv, "phantasma-series-id", "phantasma_series_id")) ?? null;
206
+ // Mint-fungible args (optional; required only for --mint-fungible action).
207
+ cfg.mintFungibleTo =
208
+ pickValue(argv, "mint-fungible-to", "mint_fungible_to") ?? null;
209
+ cfg.mintFungibleAmount =
210
+ parseBigInt(pickValue(argv, "mint-fungible-amount", "mint_fungible_amount")) ?? null;
202
211
  cfg.rom = pickValue(argv, "rom", "rom") ?? null;
203
212
  const tokenTypeRaw = pickValue(argv, "token-type", "token_type");
204
213
  if (tokenTypeRaw) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport toml from \"@iarna/toml\";\nimport yargs from \"yargs/yargs\";\nimport { Metadata, MetadataFields } from \"./actions/helpers\";\nimport { MetadataField, TokenSchemas, TokenSchemasBuilder } from \"phantasma-sdk-ts\";\n\nexport type TokenType = \"nft\" | \"fungible\";\n\nexport interface Config {\n // Core / connection\n rpc: string;\n nexus?: string | null;\n wif?: string | null;\n\n // Token\n symbol?: string | null;\n carbonTokenId?: bigint | null;\n rom?: string | null;\n tokenSchemas?: TokenSchemas | null;\n tokenMetadata: Metadata;\n tokenType?: TokenType | null;\n tokenMaxSupply?: bigint | null;\n fungibleDecimals?: number | null;\n\n // Series\n carbonTokenSeriesId?: number | null;\n seriesMetadata?: MetadataField[] | null;\n\n // NFT-specific\n nftMetadata?: MetadataField[] | null;\n\n // Limits / sizes\n createTokenMaxData?: bigint | null;\n createTokenSeriesMaxData?: bigint | null;\n mintTokenMaxData?: bigint | null;\n\n // Gas / fees\n gasFeeBase?: bigint | null;\n gasFeeCreateTokenBase?: bigint | null;\n gasFeeCreateTokenSymbol?: bigint | null;\n gasFeeCreateTokenSeries?: bigint | null;\n gasFeeMultiplier?: bigint | null;\n\n // Runtime flags\n configPath?: string | null;\n dryRun?: boolean;\n}\n\n/**\n * Try to parse a JSON string, returning undefined if parsing fails.\n */\nfunction tryParseJSON<T = unknown>(value?: string | null): T | undefined {\n if (!value) return undefined;\n try {\n // Some users may provide single-quoted JSON; normalize quotes if necessary\n const trimmed = value.trim();\n return JSON.parse(trimmed) as T;\n } catch(e) {\n console.error(\"JSON parsing error: \", e);\n // ignore parse errors; caller will handle fallback\n return undefined;\n }\n}\n\nfunction makeMetadataField(\n name: string,\n value: unknown,\n context: string,\n): MetadataField {\n const trimmed = name.trim();\n if (!trimmed) {\n throw new Error(`${context}: metadata field name cannot be empty`);\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n value instanceof Uint8Array\n ) {\n const field = new MetadataField();\n field.name = trimmed;\n field.value = value;\n return field;\n }\n\n throw new Error(\n `${context}.${trimmed} must be a string, number, bigint or Uint8Array`,\n );\n}\n\nfunction parseMetadataFieldArray(\n raw: string | undefined,\n context: string,\n): MetadataField[] | undefined {\n if (!raw) {\n return undefined;\n }\n\n const parsed = tryParseJSON<unknown>(raw);\n if (parsed === undefined) {\n return undefined;\n }\n\n if (Array.isArray(parsed)) {\n return parsed.map((entry, idx) => {\n if (\n entry &&\n typeof entry === \"object\" &&\n !Array.isArray(entry) &&\n \"name\" in entry &&\n \"value\" in entry &&\n typeof (entry as any).name === \"string\"\n ) {\n return makeMetadataField(\n (entry as any).name,\n (entry as any).value,\n `${context}[${idx}]`,\n );\n }\n throw new Error(\n `${context}[${idx}] must be an object like { name: string; value: ... }`,\n );\n });\n }\n\n if (parsed && typeof parsed === \"object\") {\n return Object.entries(parsed as Record<string, unknown>).map(\n ([name, value]) => makeMetadataField(name, value, context),\n );\n }\n\n throw new Error(`${context} must be a JSON object or array`);\n}\n\n/**\n * Parse a numeric-ish value into a number or undefined.\n */\nfunction parseNumber(value?: string | number | null): number | undefined {\n if (value == null) return undefined;\n\n if (typeof value === \"number\")\n return Number.isFinite(value) ? value : undefined;\n const v = value.toString().trim();\n if (v === \"\") return undefined;\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\nfunction parseBigInt(value?: string | bigint | null): bigint | undefined {\n if (value == null) return undefined;\n\n if (typeof value === \"bigint\") return value;\n\n const v = value.toString().trim();\n if (v === \"\") return undefined;\n return BigInt(v);\n}\n\n/**\n * Load TOML configuration from a provided path (if exists) or from default `config.toml`.\n * The parsed result is stored in the module-scoped `tomlConfig` object and used as\n * the source of truth for configuration values unless overridden by CLI flags.\n */\nlet tomlConfig: Record<string, any> = {};\n\nfunction loadToml(configPath?: string | null) {\n const file = configPath ? configPath : \"config.toml\";\n try {\n const resolved = path.resolve(process.cwd(), file);\n if (fs.existsSync(resolved)) {\n const raw = fs.readFileSync(resolved, { encoding: \"utf8\" });\n // Parse TOML into a plain object. If parse fails, keep an empty config.\n try {\n tomlConfig = toml.parse(raw) as Record<string, any>;\n } catch {\n tomlConfig = {};\n }\n } else {\n tomlConfig = {};\n }\n } catch {\n tomlConfig = {};\n }\n}\n\n/**\n * Helper to obtain a value by preferring CLI args -> TOML config -> fallback.\n * Accepts multiple possible CLI keys (kebab-case and camelCase).\n */\nfunction pickValue<T = string | undefined>(\n argv: Record<string, unknown>,\n cliKey: string, // prefer these (kebab/camel)\n tomlKey: string,\n): T | undefined {\n // try as-is from CLI\n if (Object.prototype.hasOwnProperty.call(argv, cliKey)) {\n const v = argv[cliKey];\n // yargs may map flags to boolean when not provided with value\n if (!(v === undefined)) {\n return v as unknown as T;\n }\n }\n\n // Fall back to TOML configuration.\n if (tomlConfig) {\n return tomlConfig[tomlKey] as unknown as T;\n }\n\n return undefined;\n}\n\n/**\n * Build Config by merging:\n * - TOML config file (config.toml) values\n * - CLI flags (override TOML)\n * - defaults (where applicable)\n *\n * Usage:\n * loadConfig(); // uses process.argv and config.toml if present\n * loadConfig({ argv: ['--rpc','https://...'], configPath: 'custom-config.toml' })\n */\nexport function loadConfig(options?: {\n argv?: string[];\n configPath?: string | null;\n}): Config {\n // Load TOML config (if any)\n loadToml(options?.configPath ?? null);\n\n // Parse CLI args using yargs; pass provided argv or process.argv\n const rawArgv = options?.argv ?? process.argv.slice(2);\n const argv = yargs(rawArgv)\n .help(false)\n .version(false)\n .parseSync();\n\n const cfg: Config = {\n rpc: \"\",\n nexus: \"\",\n wif: null,\n symbol: null,\n carbonTokenId: null,\n carbonTokenSeriesId: null,\n rom: null,\n tokenSchemas: null,\n tokenMetadata: new Metadata(undefined, \"token_metadata\"),\n seriesMetadata: null,\n tokenType: null,\n tokenMaxSupply: null,\n fungibleDecimals: null,\n nftMetadata: null,\n createTokenMaxData: null,\n createTokenSeriesMaxData: null,\n mintTokenMaxData: null,\n gasFeeBase: null,\n gasFeeCreateTokenBase: null,\n gasFeeCreateTokenSymbol: null,\n gasFeeCreateTokenSeries: null,\n gasFeeMultiplier: null,\n configPath: null,\n dryRun: false,\n };\n\n // Core / connection\n cfg.rpc =\n (pickValue(argv, \"rpc\", \"rpc\") as string | undefined) ??\n \"https://testnet.phantasma.info/rpc\";\n cfg.nexus = (pickValue(argv, \"nexus\", \"nexus\") as string | undefined) ?? null;\n cfg.wif = (pickValue(argv, \"wif\", \"wif\") as string | undefined) ?? null;\n\n // Token defaults\n cfg.symbol =\n (pickValue(argv, \"symbol\", \"symbol\") as string | undefined) ?? null;\n cfg.carbonTokenId =\n parseBigInt(\n pickValue(argv, \"carbon-token-id\", \"carbon_token_id\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n cfg.carbonTokenSeriesId =\n parseNumber(\n pickValue(argv, \"carbon-token-series-id\", \"carbon_token_series_id\") as\n | string\n | number\n | undefined,\n ) ?? null;\n cfg.rom = (pickValue(argv, \"rom\", \"rom\") as string | undefined) ?? null;\n\n const tokenTypeRaw = pickValue(argv, \"token-type\", \"token_type\") as\n | string\n | undefined;\n if (tokenTypeRaw) {\n const lowered = tokenTypeRaw.trim().toLowerCase();\n if (lowered === \"fungible\" || lowered === \"nft\") {\n cfg.tokenType = lowered;\n } else {\n throw Error(`Unsupported token type ${lowered}`);\n }\n }\n\n // tokenSchemas\n const tokenSchemasRaw = pickValue<string>(\n argv,\n \"token-schemas\",\n \"token_schemas\",\n );\n if (tokenSchemasRaw) {\n cfg.tokenSchemas = TokenSchemasBuilder.fromJson(tokenSchemasRaw);\n }\n\n\n // tokenMetadata\n const tmfRaw = pickValue<string>(\n argv,\n \"token-metadata\",\n \"token_metadata\",\n );\n if (tmfRaw) {\n const tokenMetadataFields = tryParseJSON<MetadataFields>(tmfRaw);\n if (!tokenMetadataFields) {\n throw new Error(\"token_metadata must be valid JSON\");\n }\n cfg.tokenMetadata = new Metadata(tokenMetadataFields, \"token_metadata\");\n }\n\n const smfRaw = pickValue(\n argv,\n \"series-metadata\",\n \"series_metadata\",\n );\n cfg.seriesMetadata = parseMetadataFieldArray(smfRaw, \"series_metadata\") ?? null;\n\n const rawMaxSupply =\n (pickValue(argv, \"token-max-supply\", \"token_max_supply\") as\n | string\n | bigint\n | undefined) ??\n (pickValue(argv, \"fungible-max-supply\", \"fungible_max_supply\") as\n | string\n | bigint\n | undefined);\n cfg.tokenMaxSupply = parseBigInt(rawMaxSupply) ?? null;\n cfg.fungibleDecimals =\n parseNumber(\n pickValue(argv, \"fungible-decimals\", \"fungible_decimals\") as\n | string\n | number\n | undefined,\n ) ?? null;\n\n // NFT metadata\n const nmfRaw = pickValue(\n argv,\n \"nft-metadata\",\n \"nft_metadata\",\n );\n cfg.nftMetadata = parseMetadataFieldArray(nmfRaw, \"nft_metadata\") ?? null;\n\n // Limits and sizes\n cfg.createTokenMaxData =\n parseBigInt(\n pickValue(argv, \"create-token-max-data\", \"create_token_max_data\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n cfg.createTokenSeriesMaxData =\n parseBigInt(\n pickValue(\n argv,\n \"create-token-series-max-data\",\n \"create_token_series_max_data\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.mintTokenMaxData =\n parseBigInt(\n pickValue(argv, \"mint-token-max-data\", \"mint_token_max_data\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n\n // Gas / fees\n cfg.gasFeeBase =\n parseBigInt(\n pickValue(argv, \"gas-fee-base\", \"gas_fee_base\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n cfg.gasFeeCreateTokenBase =\n parseBigInt(\n pickValue(\n argv,\n \"gas-fee-create-token-base\",\n \"gas_fee_create_token_base\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.gasFeeCreateTokenSymbol =\n parseBigInt(\n pickValue(\n argv,\n \"gas-fee-create-token-symbol\",\n \"gas_fee_create_token_symbol\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.gasFeeCreateTokenSeries =\n parseBigInt(\n pickValue(\n argv,\n \"gas-fee-create-token-series\",\n \"gas_fee_create_token_series\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.gasFeeMultiplier =\n parseBigInt(\n pickValue(argv, \"gas-fee-multiplier\", \"gas_fee_multiplier\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n\n // Runtime flags\n cfg.configPath =\n (pickValue(argv, \"config\", \"CONFIG_PATH\") as string | undefined) ??\n options?.configPath ??\n null;\n cfg.dryRun = Boolean(pickValue(argv, \"dry-run\", \"dry_run\")) || false;\n\n return cfg;\n}\n\nexport default loadConfig;\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport toml from \"@iarna/toml\";\nimport yargs from \"yargs/yargs\";\nimport { Metadata, MetadataFields } from \"./actions/helpers\";\nimport { MetadataField, TokenSchemas, TokenSchemasBuilder } from \"phantasma-sdk-ts\";\n\nexport type TokenType = \"nft\" | \"fungible\";\n\nexport interface Config {\n // Core / connection\n rpc: string;\n nexus?: string | null;\n wif?: string | null;\n\n // Token\n symbol?: string | null;\n carbonTokenId?: bigint | null;\n phantasmaSeriesId?: bigint | null;\n rom?: string | null;\n tokenSchemas?: TokenSchemas | null;\n tokenMetadata: Metadata;\n tokenType?: TokenType | null;\n tokenMaxSupply?: bigint | null;\n fungibleDecimals?: number | null;\n\n // Series\n carbonTokenSeriesId?: number | null;\n seriesMetadata?: MetadataField[] | null;\n\n // NFT-specific\n nftMetadata?: MetadataField[] | null;\n\n // Mint fungible\n mintFungibleTo?: string | null;\n mintFungibleAmount?: bigint | null;\n\n // Limits / sizes\n createTokenMaxData?: bigint | null;\n createTokenSeriesMaxData?: bigint | null;\n mintTokenMaxData?: bigint | null;\n\n // Gas / fees\n gasFeeBase?: bigint | null;\n gasFeeCreateTokenBase?: bigint | null;\n gasFeeCreateTokenSymbol?: bigint | null;\n gasFeeCreateTokenSeries?: bigint | null;\n gasFeeMultiplier?: bigint | null;\n\n // Runtime flags\n configPath?: string | null;\n dryRun?: boolean;\n}\n\n/**\n * Try to parse a JSON string, returning undefined if parsing fails.\n */\nfunction tryParseJSON<T = unknown>(value?: string | null): T | undefined {\n if (!value) return undefined;\n try {\n // Some users may provide single-quoted JSON; normalize quotes if necessary\n const trimmed = value.trim();\n return JSON.parse(trimmed) as T;\n } catch(e) {\n console.error(\"JSON parsing error: \", e);\n // ignore parse errors; caller will handle fallback\n return undefined;\n }\n}\n\nfunction makeMetadataField(\n name: string,\n value: unknown,\n context: string,\n): MetadataField {\n const trimmed = name.trim();\n if (!trimmed) {\n throw new Error(`${context}: metadata field name cannot be empty`);\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n value instanceof Uint8Array\n ) {\n const field = new MetadataField();\n field.name = trimmed;\n field.value = value;\n return field;\n }\n\n throw new Error(\n `${context}.${trimmed} must be a string, number, bigint or Uint8Array`,\n );\n}\n\nfunction parseMetadataFieldArray(\n raw: string | undefined,\n context: string,\n): MetadataField[] | undefined {\n if (!raw) {\n return undefined;\n }\n\n const parsed = tryParseJSON<unknown>(raw);\n if (parsed === undefined) {\n return undefined;\n }\n\n if (Array.isArray(parsed)) {\n return parsed.map((entry, idx) => {\n if (\n entry &&\n typeof entry === \"object\" &&\n !Array.isArray(entry) &&\n \"name\" in entry &&\n \"value\" in entry &&\n typeof (entry as any).name === \"string\"\n ) {\n return makeMetadataField(\n (entry as any).name,\n (entry as any).value,\n `${context}[${idx}]`,\n );\n }\n throw new Error(\n `${context}[${idx}] must be an object like { name: string; value: ... }`,\n );\n });\n }\n\n if (parsed && typeof parsed === \"object\") {\n return Object.entries(parsed as Record<string, unknown>).map(\n ([name, value]) => makeMetadataField(name, value, context),\n );\n }\n\n throw new Error(`${context} must be a JSON object or array`);\n}\n\n/**\n * Parse a numeric-ish value into a number or undefined.\n */\nfunction parseNumber(value?: string | number | null): number | undefined {\n if (value == null) return undefined;\n\n if (typeof value === \"number\")\n return Number.isFinite(value) ? value : undefined;\n const v = value.toString().trim();\n if (v === \"\") return undefined;\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\nfunction parseBigInt(value?: string | bigint | null): bigint | undefined {\n if (value == null) return undefined;\n\n if (typeof value === \"bigint\") return value;\n\n const v = value.toString().trim();\n if (v === \"\") return undefined;\n return BigInt(v);\n}\n\n/**\n * Load TOML configuration from a provided path (if exists) or from default `config.toml`.\n * The parsed result is stored in the module-scoped `tomlConfig` object and used as\n * the source of truth for configuration values unless overridden by CLI flags.\n */\nlet tomlConfig: Record<string, any> = {};\n\nfunction loadToml(configPath?: string | null) {\n const file = configPath ? configPath : \"config.toml\";\n try {\n const resolved = path.resolve(process.cwd(), file);\n if (fs.existsSync(resolved)) {\n const raw = fs.readFileSync(resolved, { encoding: \"utf8\" });\n // Parse TOML into a plain object. If parse fails, keep an empty config.\n try {\n tomlConfig = toml.parse(raw) as Record<string, any>;\n } catch {\n tomlConfig = {};\n }\n } else {\n tomlConfig = {};\n }\n } catch {\n tomlConfig = {};\n }\n}\n\n/**\n * Helper to obtain a value by preferring CLI args -> TOML config -> fallback.\n * Accepts multiple possible CLI keys (kebab-case and camelCase).\n */\nfunction pickValue<T = string | undefined>(\n argv: Record<string, unknown>,\n cliKey: string, // prefer these (kebab/camel)\n tomlKey: string,\n): T | undefined {\n // try as-is from CLI\n if (Object.prototype.hasOwnProperty.call(argv, cliKey)) {\n const v = argv[cliKey];\n // yargs may map flags to boolean when not provided with value\n if (!(v === undefined)) {\n return v as unknown as T;\n }\n }\n\n // Fall back to TOML configuration.\n if (tomlConfig) {\n return tomlConfig[tomlKey] as unknown as T;\n }\n\n return undefined;\n}\n\n/**\n * Build Config by merging:\n * - TOML config file (config.toml) values\n * - CLI flags (override TOML)\n * - defaults (where applicable)\n *\n * Usage:\n * loadConfig(); // uses process.argv and config.toml if present\n * loadConfig({ argv: ['--rpc','https://...'], configPath: 'custom-config.toml' })\n */\nexport function loadConfig(options?: {\n argv?: string[];\n configPath?: string | null;\n}): Config {\n // Load TOML config (if any)\n loadToml(options?.configPath ?? null);\n\n // Parse CLI args using yargs; pass provided argv or process.argv\n const rawArgv = options?.argv ?? process.argv.slice(2);\n const argv = yargs(rawArgv)\n .help(false)\n .version(false)\n .parseSync();\n\n const cfg: Config = {\n rpc: \"\",\n nexus: \"\",\n wif: null,\n symbol: null,\n carbonTokenId: null,\n carbonTokenSeriesId: null,\n rom: null,\n tokenSchemas: null,\n tokenMetadata: new Metadata(undefined, \"token_metadata\"),\n seriesMetadata: null,\n tokenType: null,\n tokenMaxSupply: null,\n fungibleDecimals: null,\n nftMetadata: null,\n mintFungibleTo: null,\n mintFungibleAmount: null,\n createTokenMaxData: null,\n createTokenSeriesMaxData: null,\n mintTokenMaxData: null,\n gasFeeBase: null,\n gasFeeCreateTokenBase: null,\n gasFeeCreateTokenSymbol: null,\n gasFeeCreateTokenSeries: null,\n gasFeeMultiplier: null,\n configPath: null,\n dryRun: false,\n };\n\n // Core / connection\n cfg.rpc =\n (pickValue(argv, \"rpc\", \"rpc\") as string | undefined) ??\n \"https://testnet.phantasma.info/rpc\";\n cfg.nexus = (pickValue(argv, \"nexus\", \"nexus\") as string | undefined) ?? null;\n cfg.wif = (pickValue(argv, \"wif\", \"wif\") as string | undefined) ?? null;\n\n // Token defaults\n cfg.symbol =\n (pickValue(argv, \"symbol\", \"symbol\") as string | undefined) ?? null;\n cfg.carbonTokenId =\n parseBigInt(\n pickValue(argv, \"carbon-token-id\", \"carbon_token_id\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n cfg.carbonTokenSeriesId =\n parseNumber(\n pickValue(argv, \"carbon-token-series-id\", \"carbon_token_series_id\") as\n | string\n | number\n | undefined,\n ) ?? null;\n cfg.phantasmaSeriesId =\n parseBigInt(\n pickValue(argv, \"phantasma-series-id\", \"phantasma_series_id\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n\n // Mint-fungible args (optional; required only for --mint-fungible action).\n cfg.mintFungibleTo =\n (pickValue(argv, \"mint-fungible-to\", \"mint_fungible_to\") as\n | string\n | undefined) ?? null;\n cfg.mintFungibleAmount =\n parseBigInt(\n pickValue(argv, \"mint-fungible-amount\", \"mint_fungible_amount\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n\n cfg.rom = (pickValue(argv, \"rom\", \"rom\") as string | undefined) ?? null;\n\n const tokenTypeRaw = pickValue(argv, \"token-type\", \"token_type\") as\n | string\n | undefined;\n if (tokenTypeRaw) {\n const lowered = tokenTypeRaw.trim().toLowerCase();\n if (lowered === \"fungible\" || lowered === \"nft\") {\n cfg.tokenType = lowered;\n } else {\n throw Error(`Unsupported token type ${lowered}`);\n }\n }\n\n // tokenSchemas\n const tokenSchemasRaw = pickValue<string>(\n argv,\n \"token-schemas\",\n \"token_schemas\",\n );\n if (tokenSchemasRaw) {\n cfg.tokenSchemas = TokenSchemasBuilder.fromJson(tokenSchemasRaw);\n }\n\n\n // tokenMetadata\n const tmfRaw = pickValue<string>(\n argv,\n \"token-metadata\",\n \"token_metadata\",\n );\n if (tmfRaw) {\n const tokenMetadataFields = tryParseJSON<MetadataFields>(tmfRaw);\n if (!tokenMetadataFields) {\n throw new Error(\"token_metadata must be valid JSON\");\n }\n cfg.tokenMetadata = new Metadata(tokenMetadataFields, \"token_metadata\");\n }\n\n const smfRaw = pickValue(\n argv,\n \"series-metadata\",\n \"series_metadata\",\n );\n cfg.seriesMetadata = parseMetadataFieldArray(smfRaw, \"series_metadata\") ?? null;\n\n const rawMaxSupply =\n (pickValue(argv, \"token-max-supply\", \"token_max_supply\") as\n | string\n | bigint\n | undefined) ??\n (pickValue(argv, \"fungible-max-supply\", \"fungible_max_supply\") as\n | string\n | bigint\n | undefined);\n cfg.tokenMaxSupply = parseBigInt(rawMaxSupply) ?? null;\n cfg.fungibleDecimals =\n parseNumber(\n pickValue(argv, \"fungible-decimals\", \"fungible_decimals\") as\n | string\n | number\n | undefined,\n ) ?? null;\n\n // NFT metadata\n const nmfRaw = pickValue(\n argv,\n \"nft-metadata\",\n \"nft_metadata\",\n );\n cfg.nftMetadata = parseMetadataFieldArray(nmfRaw, \"nft_metadata\") ?? null;\n\n // Limits and sizes\n cfg.createTokenMaxData =\n parseBigInt(\n pickValue(argv, \"create-token-max-data\", \"create_token_max_data\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n cfg.createTokenSeriesMaxData =\n parseBigInt(\n pickValue(\n argv,\n \"create-token-series-max-data\",\n \"create_token_series_max_data\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.mintTokenMaxData =\n parseBigInt(\n pickValue(argv, \"mint-token-max-data\", \"mint_token_max_data\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n\n // Gas / fees\n cfg.gasFeeBase =\n parseBigInt(\n pickValue(argv, \"gas-fee-base\", \"gas_fee_base\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n cfg.gasFeeCreateTokenBase =\n parseBigInt(\n pickValue(\n argv,\n \"gas-fee-create-token-base\",\n \"gas_fee_create_token_base\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.gasFeeCreateTokenSymbol =\n parseBigInt(\n pickValue(\n argv,\n \"gas-fee-create-token-symbol\",\n \"gas_fee_create_token_symbol\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.gasFeeCreateTokenSeries =\n parseBigInt(\n pickValue(\n argv,\n \"gas-fee-create-token-series\",\n \"gas_fee_create_token_series\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.gasFeeMultiplier =\n parseBigInt(\n pickValue(argv, \"gas-fee-multiplier\", \"gas_fee_multiplier\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n\n // Runtime flags\n cfg.configPath =\n (pickValue(argv, \"config\", \"CONFIG_PATH\") as string | undefined) ??\n options?.configPath ??\n null;\n cfg.dryRun = Boolean(pickValue(argv, \"dry-run\", \"dry_run\")) || false;\n\n return cfg;\n}\n\nexport default loadConfig;\n"]}
@@ -0,0 +1,30 @@
1
+ import { ContractArtifactBundle, ContractArtifactManifest } from "phantasma-sdk-ts";
2
+ import { CompiledContractArtifacts } from "./compiler";
3
+ export interface MaterializedContractArtifacts {
4
+ outputDir: string;
5
+ manifestPath: string;
6
+ manifest: ContractArtifactManifest;
7
+ bundle: ContractArtifactBundle;
8
+ scriptPath: string;
9
+ abiPath: string;
10
+ debugPath?: string;
11
+ asmPath?: string;
12
+ scriptHexPath?: string;
13
+ abiHexPath?: string;
14
+ }
15
+ export interface LoadArtifactsFromPathsOptions {
16
+ contractName: string;
17
+ scriptPath: string;
18
+ abiPath: string;
19
+ debugPath?: string;
20
+ }
21
+ export declare function materializeCompiledArtifacts(options: {
22
+ compiled: CompiledContractArtifacts;
23
+ outputDir: string;
24
+ compilerName: string;
25
+ compilerVersion: string;
26
+ sourceFileName: string;
27
+ }): MaterializedContractArtifacts;
28
+ export declare function loadContractArtifactsFromManifest(manifestPath: string): MaterializedContractArtifacts;
29
+ export declare function loadContractArtifactsFromPaths(options: LoadArtifactsFromPathsOptions): MaterializedContractArtifacts;
30
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/contract/artifacts.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,wBAAwB,CAAC;IACnC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,QAAQ,EAAE,yBAAyB,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,6BAA6B,CAuDhC;AAED,wBAAgB,iCAAiC,CAAC,YAAY,EAAE,MAAM,GAAG,6BAA6B,CAgCrG;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,6BAA6B,GACrC,6BAA6B,CAyC/B"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.materializeCompiledArtifacts = materializeCompiledArtifacts;
7
+ exports.loadContractArtifactsFromManifest = loadContractArtifactsFromManifest;
8
+ exports.loadContractArtifactsFromPaths = loadContractArtifactsFromPaths;
9
+ const node_fs_1 = __importDefault(require("node:fs"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const phantasma_sdk_ts_1 = require("phantasma-sdk-ts");
12
+ function readFileBytes(filePath) {
13
+ return node_fs_1.default.readFileSync(filePath);
14
+ }
15
+ function copyOptionalArtifact(sourcePath, outputDir) {
16
+ if (!sourcePath) {
17
+ return undefined;
18
+ }
19
+ const destinationPath = node_path_1.default.join(outputDir, node_path_1.default.basename(sourcePath));
20
+ node_fs_1.default.copyFileSync(sourcePath, destinationPath);
21
+ return destinationPath;
22
+ }
23
+ function materializeCompiledArtifacts(options) {
24
+ const outputDir = node_path_1.default.resolve(options.outputDir);
25
+ node_fs_1.default.mkdirSync(outputDir, { recursive: true });
26
+ const scriptPath = copyOptionalArtifact(options.compiled.scriptPath, outputDir);
27
+ const abiPath = copyOptionalArtifact(options.compiled.abiPath, outputDir);
28
+ const debugPath = copyOptionalArtifact(options.compiled.debugPath, outputDir);
29
+ const asmPath = copyOptionalArtifact(options.compiled.asmPath, outputDir);
30
+ const scriptHexPath = copyOptionalArtifact(options.compiled.scriptHexPath, outputDir);
31
+ const abiHexPath = copyOptionalArtifact(options.compiled.abiHexPath, outputDir);
32
+ const scriptBytes = readFileBytes(scriptPath);
33
+ const abiBytes = readFileBytes(abiPath);
34
+ const debugBytes = debugPath ? readFileBytes(debugPath) : undefined;
35
+ const manifest = (0, phantasma_sdk_ts_1.buildContractArtifactManifest)({
36
+ contractName: options.compiled.contractName,
37
+ compilerName: options.compilerName,
38
+ compilerVersion: options.compilerVersion,
39
+ sourceFile: node_path_1.default.basename(options.sourceFileName),
40
+ scriptPath: node_path_1.default.basename(scriptPath),
41
+ script: scriptBytes,
42
+ abiPath: node_path_1.default.basename(abiPath),
43
+ abi: abiBytes,
44
+ ...(debugPath && debugBytes
45
+ ? {
46
+ debugPath: node_path_1.default.basename(debugPath),
47
+ debug: debugBytes,
48
+ }
49
+ : {}),
50
+ });
51
+ const manifestPath = node_path_1.default.join(outputDir, "manifest.json");
52
+ node_fs_1.default.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
53
+ const bundle = (0, phantasma_sdk_ts_1.buildContractArtifactBundle)({
54
+ contractName: options.compiled.contractName,
55
+ script: scriptBytes,
56
+ abi: abiBytes,
57
+ ...(debugBytes ? { debug: debugBytes } : {}),
58
+ manifest,
59
+ });
60
+ return {
61
+ outputDir,
62
+ manifestPath,
63
+ manifest,
64
+ bundle,
65
+ scriptPath,
66
+ abiPath,
67
+ ...(debugPath ? { debugPath } : {}),
68
+ ...(asmPath ? { asmPath } : {}),
69
+ ...(scriptHexPath ? { scriptHexPath } : {}),
70
+ ...(abiHexPath ? { abiHexPath } : {}),
71
+ };
72
+ }
73
+ function loadContractArtifactsFromManifest(manifestPath) {
74
+ const resolvedManifestPath = node_path_1.default.resolve(manifestPath);
75
+ const manifestDir = node_path_1.default.dirname(resolvedManifestPath);
76
+ const manifest = JSON.parse(node_fs_1.default.readFileSync(resolvedManifestPath, "utf8"));
77
+ if (manifest.format !== "pha.contract.artifacts/v1") {
78
+ throw new Error(`Unsupported manifest format: ${manifest.format}`);
79
+ }
80
+ const scriptPath = node_path_1.default.resolve(manifestDir, manifest.files.script.path);
81
+ const abiPath = node_path_1.default.resolve(manifestDir, manifest.files.abi.path);
82
+ const debugPath = manifest.files.debug
83
+ ? node_path_1.default.resolve(manifestDir, manifest.files.debug.path)
84
+ : undefined;
85
+ const bundle = (0, phantasma_sdk_ts_1.buildContractArtifactBundle)({
86
+ contractName: manifest.contractName,
87
+ script: readFileBytes(scriptPath),
88
+ abi: readFileBytes(abiPath),
89
+ ...(debugPath ? { debug: readFileBytes(debugPath) } : {}),
90
+ manifest,
91
+ });
92
+ return {
93
+ outputDir: manifestDir,
94
+ manifestPath: resolvedManifestPath,
95
+ manifest,
96
+ bundle,
97
+ scriptPath,
98
+ abiPath,
99
+ ...(debugPath ? { debugPath } : {}),
100
+ };
101
+ }
102
+ function loadContractArtifactsFromPaths(options) {
103
+ const scriptPath = node_path_1.default.resolve(options.scriptPath);
104
+ const abiPath = node_path_1.default.resolve(options.abiPath);
105
+ const debugPath = options.debugPath ? node_path_1.default.resolve(options.debugPath) : undefined;
106
+ const bundle = (0, phantasma_sdk_ts_1.buildContractArtifactBundle)({
107
+ contractName: options.contractName,
108
+ script: readFileBytes(scriptPath),
109
+ abi: readFileBytes(abiPath),
110
+ ...(debugPath ? { debug: readFileBytes(debugPath) } : {}),
111
+ });
112
+ return {
113
+ outputDir: node_path_1.default.dirname(scriptPath),
114
+ manifestPath: "",
115
+ manifest: bundle.manifest ?? {
116
+ format: "pha.contract.artifacts/v1",
117
+ contractName: options.contractName,
118
+ createdAtUtc: "",
119
+ compiler: {
120
+ name: "",
121
+ version: "",
122
+ },
123
+ files: {
124
+ script: {
125
+ path: scriptPath,
126
+ size: bundle.script.length,
127
+ sha256: "",
128
+ },
129
+ abi: {
130
+ path: abiPath,
131
+ size: bundle.abi.length,
132
+ sha256: "",
133
+ },
134
+ },
135
+ },
136
+ bundle,
137
+ scriptPath,
138
+ abiPath,
139
+ ...(debugPath ? { debugPath } : {}),
140
+ };
141
+ }
142
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/contract/artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n buildContractArtifactBundle,\n buildContractArtifactManifest,\n ContractArtifactBundle,\n ContractArtifactManifest,\n} from \"phantasma-sdk-ts\";\nimport { CompiledContractArtifacts } from \"./compiler\";\n\nexport interface MaterializedContractArtifacts {\n outputDir: string;\n manifestPath: string;\n manifest: ContractArtifactManifest;\n bundle: ContractArtifactBundle;\n scriptPath: string;\n abiPath: string;\n debugPath?: string;\n asmPath?: string;\n scriptHexPath?: string;\n abiHexPath?: string;\n}\n\nexport interface LoadArtifactsFromPathsOptions {\n contractName: string;\n scriptPath: string;\n abiPath: string;\n debugPath?: string;\n}\n\nfunction readFileBytes(filePath: string): Uint8Array {\n return fs.readFileSync(filePath);\n}\n\nfunction copyOptionalArtifact(sourcePath: string | undefined, outputDir: string): string | undefined {\n if (!sourcePath) {\n return undefined;\n }\n\n const destinationPath = path.join(outputDir, path.basename(sourcePath));\n fs.copyFileSync(sourcePath, destinationPath);\n return destinationPath;\n}\n\nexport function materializeCompiledArtifacts(options: {\n compiled: CompiledContractArtifacts;\n outputDir: string;\n compilerName: string;\n compilerVersion: string;\n sourceFileName: string;\n}): MaterializedContractArtifacts {\n const outputDir = path.resolve(options.outputDir);\n fs.mkdirSync(outputDir, { recursive: true });\n\n const scriptPath = copyOptionalArtifact(options.compiled.scriptPath, outputDir)!;\n const abiPath = copyOptionalArtifact(options.compiled.abiPath, outputDir)!;\n const debugPath = copyOptionalArtifact(options.compiled.debugPath, outputDir);\n const asmPath = copyOptionalArtifact(options.compiled.asmPath, outputDir);\n const scriptHexPath = copyOptionalArtifact(options.compiled.scriptHexPath, outputDir);\n const abiHexPath = copyOptionalArtifact(options.compiled.abiHexPath, outputDir);\n\n const scriptBytes = readFileBytes(scriptPath);\n const abiBytes = readFileBytes(abiPath);\n const debugBytes = debugPath ? readFileBytes(debugPath) : undefined;\n\n const manifest = buildContractArtifactManifest({\n contractName: options.compiled.contractName,\n compilerName: options.compilerName,\n compilerVersion: options.compilerVersion,\n sourceFile: path.basename(options.sourceFileName),\n scriptPath: path.basename(scriptPath),\n script: scriptBytes,\n abiPath: path.basename(abiPath),\n abi: abiBytes,\n ...(debugPath && debugBytes\n ? {\n debugPath: path.basename(debugPath),\n debug: debugBytes,\n }\n : {}),\n });\n\n const manifestPath = path.join(outputDir, \"manifest.json\");\n fs.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`, \"utf8\");\n\n const bundle = buildContractArtifactBundle({\n contractName: options.compiled.contractName,\n script: scriptBytes,\n abi: abiBytes,\n ...(debugBytes ? { debug: debugBytes } : {}),\n manifest,\n });\n\n return {\n outputDir,\n manifestPath,\n manifest,\n bundle,\n scriptPath,\n abiPath,\n ...(debugPath ? { debugPath } : {}),\n ...(asmPath ? { asmPath } : {}),\n ...(scriptHexPath ? { scriptHexPath } : {}),\n ...(abiHexPath ? { abiHexPath } : {}),\n };\n}\n\nexport function loadContractArtifactsFromManifest(manifestPath: string): MaterializedContractArtifacts {\n const resolvedManifestPath = path.resolve(manifestPath);\n const manifestDir = path.dirname(resolvedManifestPath);\n const manifest = JSON.parse(fs.readFileSync(resolvedManifestPath, \"utf8\")) as ContractArtifactManifest;\n\n if (manifest.format !== \"pha.contract.artifacts/v1\") {\n throw new Error(`Unsupported manifest format: ${manifest.format}`);\n }\n\n const scriptPath = path.resolve(manifestDir, manifest.files.script.path);\n const abiPath = path.resolve(manifestDir, manifest.files.abi.path);\n const debugPath = manifest.files.debug\n ? path.resolve(manifestDir, manifest.files.debug.path)\n : undefined;\n\n const bundle = buildContractArtifactBundle({\n contractName: manifest.contractName,\n script: readFileBytes(scriptPath),\n abi: readFileBytes(abiPath),\n ...(debugPath ? { debug: readFileBytes(debugPath) } : {}),\n manifest,\n });\n\n return {\n outputDir: manifestDir,\n manifestPath: resolvedManifestPath,\n manifest,\n bundle,\n scriptPath,\n abiPath,\n ...(debugPath ? { debugPath } : {}),\n };\n}\n\nexport function loadContractArtifactsFromPaths(\n options: LoadArtifactsFromPathsOptions,\n): MaterializedContractArtifacts {\n const scriptPath = path.resolve(options.scriptPath);\n const abiPath = path.resolve(options.abiPath);\n const debugPath = options.debugPath ? path.resolve(options.debugPath) : undefined;\n\n const bundle = buildContractArtifactBundle({\n contractName: options.contractName,\n script: readFileBytes(scriptPath),\n abi: readFileBytes(abiPath),\n ...(debugPath ? { debug: readFileBytes(debugPath) } : {}),\n });\n\n return {\n outputDir: path.dirname(scriptPath),\n manifestPath: \"\",\n manifest: bundle.manifest ?? {\n format: \"pha.contract.artifacts/v1\",\n contractName: options.contractName,\n createdAtUtc: \"\",\n compiler: {\n name: \"\",\n version: \"\",\n },\n files: {\n script: {\n path: scriptPath,\n size: bundle.script.length,\n sha256: \"\",\n },\n abi: {\n path: abiPath,\n size: bundle.abi.length,\n sha256: \"\",\n },\n },\n },\n bundle,\n scriptPath,\n abiPath,\n ...(debugPath ? { debugPath } : {}),\n };\n}\n"]}