pha-deploy 0.3.0 → 0.4.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"createSeries.d.ts","sourceRoot":"","sources":["../../src/actions/createSeries.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,aAAa,EAKb,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAI1B,qBAAa,eAAe;IAEjB,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,aAAa,EAAE,MAAM;IACrB,UAAU,EAAE,MAAM;IAClB,uBAAuB,EAAE,MAAM;IAC/B,gBAAgB,EAAE,MAAM;IACxB,mBAAmB,EAAE,MAAM;IAC3B,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,aAAa,EAAE;gBAT/B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,uBAAuB,EAAE,MAAM,EAC/B,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,MAAM,EAC3B,YAAY,EAAE,cAAc,EAC5B,cAAc,EAAE,aAAa,EAAE;IAcxC,WAAW;;;;CAWZ;AAID,wBAAsB,YAAY,CAChC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,OAAO,EACf,WAAW,GAAE,OAAe,iBA4D7B"}
1
+ {"version":3,"file":"createSeries.d.ts","sourceRoot":"","sources":["../../src/actions/createSeries.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,aAAa,EAKb,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAK1B,qBAAa,eAAe;IAEjB,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,aAAa,EAAE,MAAM;IACrB,UAAU,EAAE,MAAM;IAClB,uBAAuB,EAAE,MAAM;IAC/B,gBAAgB,EAAE,MAAM;IACxB,mBAAmB,EAAE,MAAM;IAC3B,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,aAAa,EAAE;gBAT/B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,uBAAuB,EAAE,MAAM,EAC/B,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,MAAM,EAC3B,YAAY,EAAE,cAAc,EAC5B,cAAc,EAAE,aAAa,EAAE;IAcxC,WAAW;;;;CAWZ;AAID,wBAAsB,YAAY,CAChC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,OAAO,EACf,WAAW,GAAE,OAAe,iBA+D7B"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSeriesCfg = void 0;
4
4
  exports.createSeries = createSeries;
5
5
  const phantasma_sdk_ts_1 = require("phantasma-sdk-ts");
6
+ const txHash_1 = require("../rpc/txHash");
6
7
  const waitForTx_1 = require("./waitForTx");
7
8
  const helpers_1 = require("./helpers");
8
9
  class createSeriesCfg {
@@ -67,7 +68,7 @@ async function createSeries(cfg, dryRun, logSettings = false) {
67
68
  }
68
69
  console.log("Broadcasting transaction...");
69
70
  const rpc = new phantasma_sdk_ts_1.PhantasmaAPI(cfg.rpc, null, cfg.nexus);
70
- let txHash = await rpc.sendCarbonTransaction(tx);
71
+ const txHash = (0, txHash_1.requireRpcTxHash)(await rpc.sendCarbonTransaction(tx), "create-series transaction");
71
72
  console.log("txHash: ", txHash);
72
73
  const { success, result } = await (0, waitForTx_1.waitForTx)(rpc, txHash);
73
74
  if (success) {
@@ -1 +1 @@
1
- {"version":3,"file":"createSeries.js","sourceRoot":"","sources":["../../src/actions/createSeries.ts"],"names":[],"mappings":";;;AAyDA,oCA+DC;AAxHD,uDAa0B;AAC1B,2CAAwC;AACxC,uCAAmE;AAEnE,MAAa,eAAe;IAEjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAVT,YACS,GAAW,EACX,KAAa,EACb,GAAW,EACX,aAAqB,EACrB,UAAkB,EAClB,uBAA+B,EAC/B,gBAAwB,EACxB,mBAA2B,EAC3B,YAA4B,EAC5B,cAA+B;QAT/B,QAAG,GAAH,GAAG,CAAQ;QACX,UAAK,GAAL,KAAK,CAAQ;QACb,QAAG,GAAH,GAAG,CAAQ;QACX,kBAAa,GAAb,aAAa,CAAQ;QACrB,eAAU,GAAV,UAAU,CAAQ;QAClB,4BAAuB,GAAvB,uBAAuB,CAAQ;QAC/B,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,wBAAmB,GAAnB,mBAAmB,CAAQ;QAC3B,iBAAY,GAAZ,YAAY,CAAgB;QAC5B,mBAAc,GAAd,cAAc,CAAiB;QAEtC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,WAAW;QACT,gCAAgC;QAChC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,kDAAkD;QACxH,MAAM,KAAK,GAAG,gCAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEjE,OAAO;YACL,GAAG,IAAI;YACP,KAAK;YACL,cAAc;SACf,CAAC;IACJ,CAAC;CACF;AApCD,0CAoCC;AAIM,KAAK,UAAU,YAAY,CAChC,GAAoB,EACpB,MAAe,EACf,cAAuB,KAAK;IAE5B,MAAM,QAAQ,GAAG,gCAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,0BAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAErD,MAAM,oBAAoB,GAAG,MAAM,IAAA,uCAAoB,GAAE,CAAC;IAE1D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,wBAAwB,oBAAoB,yBAAyB,EACrE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,wBAAc,EAAE,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,oCAAiB,CAAC,KAAK,CAClC,GAAG,CAAC,YAAY,EAChB,oBAAoB,EACpB,CAAC,EACD,CAAC,EACD,YAAY,EACZ,GAAG,CAAC,cAAc,CACnB,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,yCAAsB,CAC3C,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,uBAAuB,EAC3B,GAAG,CAAC,gBAAgB,CACrB,CAAC;IAEF,MAAM,EAAE,GAAG,4CAAyB,CAAC,iBAAiB,CACpD,GAAG,CAAC,aAAa,EACjB,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,GAAG,CAAC,mBAAmB,CACxB,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,IAAA,sBAAY,EAAC,6BAAU,CAAC,YAAY,CAAC,8BAAW,EAAE,IAAA,6BAAU,EAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,MAAM,GAAG,GAAG,IAAI,+BAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAEvD,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEhC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,qBAAS,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEzD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,QAAQ,GAAG,4CAAyB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CACT,qCAAqC,oBAAoB,CAAC,QAAQ,EAAE,yBAAyB,QAAQ,EAAE,CACxG,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;AACH,CAAC","sourcesContent":["import {\n Bytes32,\n CarbonBlob,\n CreateSeriesFeeOptions,\n CreateTokenSeriesTxHelper,\n MetadataField,\n PhantasmaAPI,\n PhantasmaKeys,\n SeriesInfoBuilder,\n SignedTxMsg,\n VmStructSchema,\n getRandomPhantasmaId,\n hexToBytes,\n} from \"phantasma-sdk-ts\";\nimport { waitForTx } from \"./waitForTx\";\nimport { bigintReplacer, Metadata, formatForLog } from \"./helpers\";\n\nexport class createSeriesCfg {\n constructor(\n public rpc: string,\n public nexus: string,\n public wif: string,\n public carbonTokenId: bigint,\n public gasFeeBase: bigint,\n public gasFeeCreateTokenSeries: bigint,\n public gasFeeMultiplier: bigint,\n public createSeriesMaxData: bigint,\n public seriesSchema: VmStructSchema,\n public seriesMetadata: MetadataField[]\n ) {\n this.rpc = rpc;\n this.nexus = nexus;\n this.wif = wif;\n this.carbonTokenId = carbonTokenId;\n this.gasFeeBase = gasFeeBase;\n this.gasFeeCreateTokenSeries = gasFeeCreateTokenSeries;\n this.gasFeeMultiplier = gasFeeMultiplier;\n this.createSeriesMaxData = createSeriesMaxData;\n this.seriesSchema = seriesSchema;\n this.seriesMetadata = seriesMetadata;\n }\n\n toPrintable() {\n // Do not leak WIF; derive owner\n const { wif: _omit, seriesMetadata: seriesMetadata, ...rest } = this; // rest has all public fields except wif/sharedRom\n const owner = PhantasmaKeys.fromWIF(this.wif).Address.toString();\n\n return {\n ...rest,\n owner,\n seriesMetadata\n };\n }\n}\n\n\n\nexport async function createSeries(\n cfg: createSeriesCfg,\n dryRun: boolean,\n logSettings: boolean = false,\n) {\n const txSender = PhantasmaKeys.fromWIF(cfg.wif);\n const senderPubKey = new Bytes32(txSender.PublicKey);\n\n const newPhantasmaSeriesId = await getRandomPhantasmaId();\n\n if (logSettings) {\n console.log(\n `Creating new series '${newPhantasmaSeriesId}' using these settings:`,\n JSON.stringify(cfg.toPrintable(), bigintReplacer, 2),\n );\n }\n\n const info = SeriesInfoBuilder.build(\n cfg.seriesSchema,\n newPhantasmaSeriesId,\n 0,\n 0,\n senderPubKey,\n cfg.seriesMetadata\n );\n\n const feeOptions = new CreateSeriesFeeOptions(\n cfg.gasFeeBase,\n cfg.gasFeeCreateTokenSeries,\n cfg.gasFeeMultiplier,\n );\n\n const tx = CreateTokenSeriesTxHelper.buildTxAndSignHex(\n cfg.carbonTokenId,\n info,\n txSender,\n feeOptions,\n cfg.createSeriesMaxData,\n );\n\n if (dryRun) {\n console.log(`[dry-run] Prepared tx (not sent): ${tx}`);\n console.log(formatForLog(CarbonBlob.NewFromBytes(SignedTxMsg, hexToBytes(tx), 0)));\n return;\n }\n\n console.log(\"Broadcasting transaction...\");\n\n const rpc = new PhantasmaAPI(cfg.rpc, null, cfg.nexus);\n\n let txHash = await rpc.sendCarbonTransaction(tx);\n console.log(\"txHash: \", txHash);\n\n const { success, result } = await waitForTx(rpc, txHash);\n\n if (success) {\n var seriesId = CreateTokenSeriesTxHelper.parseResult(result);\n console.log(\n `Deployed series with phantasma ID ${newPhantasmaSeriesId.toString()} and carbon series ID ${seriesId}`,\n );\n } else {\n console.log(\"Could not deploy series\");\n }\n}\n"]}
1
+ {"version":3,"file":"createSeries.js","sourceRoot":"","sources":["../../src/actions/createSeries.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Bytes32,\n CarbonBlob,\n CreateSeriesFeeOptions,\n CreateTokenSeriesTxHelper,\n MetadataField,\n PhantasmaAPI,\n PhantasmaKeys,\n SeriesInfoBuilder,\n SignedTxMsg,\n VmStructSchema,\n getRandomPhantasmaId,\n hexToBytes,\n} from \"phantasma-sdk-ts\";\nimport { requireRpcTxHash } from \"../rpc/txHash\";\nimport { waitForTx } from \"./waitForTx\";\nimport { bigintReplacer, Metadata, formatForLog } from \"./helpers\";\n\nexport class createSeriesCfg {\n constructor(\n public rpc: string,\n public nexus: string,\n public wif: string,\n public carbonTokenId: bigint,\n public gasFeeBase: bigint,\n public gasFeeCreateTokenSeries: bigint,\n public gasFeeMultiplier: bigint,\n public createSeriesMaxData: bigint,\n public seriesSchema: VmStructSchema,\n public seriesMetadata: MetadataField[]\n ) {\n this.rpc = rpc;\n this.nexus = nexus;\n this.wif = wif;\n this.carbonTokenId = carbonTokenId;\n this.gasFeeBase = gasFeeBase;\n this.gasFeeCreateTokenSeries = gasFeeCreateTokenSeries;\n this.gasFeeMultiplier = gasFeeMultiplier;\n this.createSeriesMaxData = createSeriesMaxData;\n this.seriesSchema = seriesSchema;\n this.seriesMetadata = seriesMetadata;\n }\n\n toPrintable() {\n // Do not leak WIF; derive owner\n const { wif: _omit, seriesMetadata: seriesMetadata, ...rest } = this; // rest has all public fields except wif/sharedRom\n const owner = PhantasmaKeys.fromWIF(this.wif).Address.toString();\n\n return {\n ...rest,\n owner,\n seriesMetadata\n };\n }\n}\n\n\n\nexport async function createSeries(\n cfg: createSeriesCfg,\n dryRun: boolean,\n logSettings: boolean = false,\n) {\n const txSender = PhantasmaKeys.fromWIF(cfg.wif);\n const senderPubKey = new Bytes32(txSender.PublicKey);\n\n const newPhantasmaSeriesId = await getRandomPhantasmaId();\n\n if (logSettings) {\n console.log(\n `Creating new series '${newPhantasmaSeriesId}' using these settings:`,\n JSON.stringify(cfg.toPrintable(), bigintReplacer, 2),\n );\n }\n\n const info = SeriesInfoBuilder.build(\n cfg.seriesSchema,\n newPhantasmaSeriesId,\n 0,\n 0,\n senderPubKey,\n cfg.seriesMetadata\n );\n\n const feeOptions = new CreateSeriesFeeOptions(\n cfg.gasFeeBase,\n cfg.gasFeeCreateTokenSeries,\n cfg.gasFeeMultiplier,\n );\n\n const tx = CreateTokenSeriesTxHelper.buildTxAndSignHex(\n cfg.carbonTokenId,\n info,\n txSender,\n feeOptions,\n cfg.createSeriesMaxData,\n );\n\n if (dryRun) {\n console.log(`[dry-run] Prepared tx (not sent): ${tx}`);\n console.log(formatForLog(CarbonBlob.NewFromBytes(SignedTxMsg, hexToBytes(tx), 0)));\n return;\n }\n\n console.log(\"Broadcasting transaction...\");\n\n const rpc = new PhantasmaAPI(cfg.rpc, null, cfg.nexus);\n\n const txHash = requireRpcTxHash(\n await rpc.sendCarbonTransaction(tx),\n \"create-series transaction\",\n );\n console.log(\"txHash: \", txHash);\n\n const { success, result } = await waitForTx(rpc, txHash);\n\n if (success) {\n var seriesId = CreateTokenSeriesTxHelper.parseResult(result);\n console.log(\n `Deployed series with phantasma ID ${newPhantasmaSeriesId.toString()} and carbon series ID ${seriesId}`,\n );\n } else {\n console.log(\"Could not deploy series\");\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"createToken.d.ts","sourceRoot":"","sources":["../../src/actions/createToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAkB,QAAQ,EAAgB,MAAM,WAAW,CAAC;AAEnE,qBAAa,cAAc;IAEhB,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,qBAAqB,EAAE,MAAM;IAC7B,uBAAuB,EAAE,MAAM;IAC/B,gBAAgB,EAAE,MAAM;IACxB,kBAAkB,EAAE,MAAM;IAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS;IAC7C,mBAAmB,EAAE,QAAQ;IAC7B,SAAS,EAAE,SAAS;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IACzC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;gBAb3C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,MAAM,EAC7B,uBAAuB,EAAE,MAAM,EAC/B,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM,EAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EAC7C,mBAAmB,EAAE,QAAQ,EAC7B,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAkBpD,WAAW;;;CAUZ;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,OAAO,EACf,WAAW,GAAE,OAAe,iBAiG7B"}
1
+ {"version":3,"file":"createToken.d.ts","sourceRoot":"","sources":["../../src/actions/createToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAkB,QAAQ,EAAgB,MAAM,WAAW,CAAC;AAEnE,qBAAa,cAAc;IAEhB,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,qBAAqB,EAAE,MAAM;IAC7B,uBAAuB,EAAE,MAAM;IAC/B,gBAAgB,EAAE,MAAM;IACxB,kBAAkB,EAAE,MAAM;IAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS;IAC7C,mBAAmB,EAAE,QAAQ;IAC7B,SAAS,EAAE,SAAS;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IACzC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;gBAb3C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,MAAM,EAC7B,uBAAuB,EAAE,MAAM,EAC/B,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM,EAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EAC7C,mBAAmB,EAAE,QAAQ,EAC7B,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAkBpD,WAAW;;;CAUZ;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,OAAO,EACf,WAAW,GAAE,OAAe,iBAoG7B"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createTokenCfg = void 0;
4
4
  exports.createToken = createToken;
5
5
  const phantasma_sdk_ts_1 = require("phantasma-sdk-ts");
6
+ const txHash_1 = require("../rpc/txHash");
6
7
  const waitForTx_1 = require("./waitForTx");
7
8
  const helpers_1 = require("./helpers");
8
9
  class createTokenCfg {
@@ -112,7 +113,7 @@ async function createToken(cfg, dryRun, logSettings = false) {
112
113
  }
113
114
  console.log("Broadcasting transaction...");
114
115
  const rpc = new phantasma_sdk_ts_1.PhantasmaAPI(cfg.rpc, null, cfg.nexus);
115
- let txHash = await rpc.sendCarbonTransaction(tx);
116
+ const txHash = (0, txHash_1.requireRpcTxHash)(await rpc.sendCarbonTransaction(tx), "create-token transaction");
116
117
  console.log("txHash: ", txHash);
117
118
  const { success, result } = await (0, waitForTx_1.waitForTx)(rpc, txHash);
118
119
  if (success) {
@@ -1 +1 @@
1
- {"version":3,"file":"createToken.js","sourceRoot":"","sources":["../../src/actions/createToken.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Bytes32,\n CarbonBlob,\n CreateTokenFeeOptions,\n CreateTokenTxHelper,\n hexToBytes,\n IntX,\n SignedTxMsg,\n PhantasmaAPI,\n PhantasmaKeys,\n TokenInfoBuilder,\n TokenMetadataBuilder,\n TokenSchemas,\n} from \"phantasma-sdk-ts\";\nimport { TokenType } from \"../config\";\nimport { waitForTx } from \"./waitForTx\";\nimport { bigintReplacer, Metadata, formatForLog } from \"./helpers\";\n\nexport class createTokenCfg {\n constructor(\n public rpc: string,\n public nexus: string,\n public wif: string,\n public symbol: string,\n public gasFeeBase: bigint,\n public gasFeeCreateTokenBase: bigint,\n public gasFeeCreateTokenSymbol: bigint,\n public gasFeeMultiplier: bigint,\n public createTokenMaxData: bigint,\n public tokenSchemas: TokenSchemas | null | undefined,\n public tokenMetadataFields: Metadata,\n public tokenType: TokenType,\n public tokenMaxSupply: bigint | null | undefined,\n public fungibleDecimals: number | null | undefined,\n ) {\n this.rpc = rpc;\n this.nexus = nexus;\n this.wif = wif;\n this.symbol = symbol;\n this.gasFeeBase = gasFeeBase;\n this.gasFeeCreateTokenBase = gasFeeCreateTokenBase;\n this.gasFeeCreateTokenSymbol = gasFeeCreateTokenSymbol;\n this.gasFeeMultiplier = gasFeeMultiplier;\n this.createTokenMaxData = createTokenMaxData;\n this.tokenSchemas = tokenSchemas;\n this.tokenMetadataFields = tokenMetadataFields;\n this.tokenType = tokenType;\n this.tokenMaxSupply = tokenMaxSupply;\n this.fungibleDecimals = fungibleDecimals;\n }\n\n toPrintable() {\n // Do not leak WIF; derive owner\n const { wif: _omit, ...rest } = this; // rest has all public fields except wif\n const owner = PhantasmaKeys.fromWIF(this.wif).Address.toString();\n\n return {\n ...rest,\n owner,\n };\n }\n}\n\nexport async function createToken(\n cfg: createTokenCfg,\n dryRun: boolean,\n logSettings: boolean = false,\n) {\n const txSender = PhantasmaKeys.fromWIF(cfg.wif);\n const senderPubKey = new Bytes32(txSender.PublicKey);\n\n if (logSettings) {\n console.log(\n \"Deploying new token using these settings:\",\n JSON.stringify(cfg.toPrintable(), bigintReplacer, 2),\n );\n }\n\n if (cfg.tokenMetadataFields == null) {\n throw Error('Token metadata is mandatory');\n }\n\n const tokenType = cfg.tokenType === \"fungible\" ? \"fungible\" : \"nft\";\n const isFungible = tokenType === \"fungible\";\n\n let maxSupply: IntX;\n let decimals = 0;\n\n if (isFungible) {\n if (cfg.tokenMaxSupply == null) {\n throw Error(\"token_max_supply is required for fungible tokens\");\n }\n if (cfg.fungibleDecimals == null) {\n throw Error(\"fungible_decimals is required for fungible tokens\");\n }\n if (!Number.isInteger(cfg.fungibleDecimals) || cfg.fungibleDecimals < 0) {\n throw Error(\"fungible_decimals must be a non-negative integer\");\n }\n if (cfg.fungibleDecimals > 255) {\n throw Error(\"fungible_decimals must be <= 255\");\n }\n }\n\n const maxSupplyValue =\n cfg.tokenMaxSupply != null ? cfg.tokenMaxSupply : 0n;\n if (maxSupplyValue < 0n) {\n throw Error(\"token_max_supply must be non-negative\");\n }\n if (isFungible) {\n decimals = cfg.fungibleDecimals!;\n maxSupply = IntX.fromBigInt(maxSupplyValue);\n } else {\n maxSupply =\n maxSupplyValue === 0n\n ? IntX.fromI64(0n)\n : IntX.fromBigInt(maxSupplyValue);\n }\n\n const info = TokenInfoBuilder.build(\n cfg.symbol,\n maxSupply,\n !isFungible,\n decimals,\n senderPubKey,\n TokenMetadataBuilder.buildAndSerialize(cfg.tokenMetadataFields.fields),\n cfg.tokenSchemas\n );\n\n const feeOptions = new CreateTokenFeeOptions(\n cfg.gasFeeBase,\n cfg.gasFeeCreateTokenBase,\n cfg.gasFeeCreateTokenSymbol,\n cfg.gasFeeMultiplier,\n );\n\n const tx = CreateTokenTxHelper.buildTxAndSignHex(\n info,\n txSender,\n feeOptions,\n cfg.createTokenMaxData,\n );\n\n if (dryRun) {\n console.log(`[dry-run] Prepared tx (not sent): ${tx}`);\n console.log(formatForLog(CarbonBlob.NewFromBytes(SignedTxMsg, hexToBytes(tx), 0)));\n return;\n }\n\n console.log(\"Broadcasting transaction...\");\n\n const rpc = new PhantasmaAPI(cfg.rpc, null, cfg.nexus);\n\n let txHash = await rpc.sendCarbonTransaction(tx);\n console.log(\"txHash: \", txHash);\n\n const { success, result } = await waitForTx(rpc, txHash);\n\n if (success) {\n var tokenId = CreateTokenTxHelper.parseResult(result);\n console.log(\"Deployed carbon token ID:\", tokenId);\n } else {\n console.log(\"Could not deploy token\");\n }\n}\n"]}
1
+ {"version":3,"file":"createToken.js","sourceRoot":"","sources":["../../src/actions/createToken.ts"],"names":[],"mappings":";;;AAgEA,kCAuGC;AAvKD,uDAa0B;AAE1B,0CAAiD;AACjD,2CAAwC;AACxC,uCAAmE;AAEnE,MAAa,cAAc;IAEhB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAdT,YACS,GAAW,EACX,KAAa,EACb,GAAW,EACX,MAAc,EACd,UAAkB,EAClB,qBAA6B,EAC7B,uBAA+B,EAC/B,gBAAwB,EACxB,kBAA0B,EAC1B,YAA6C,EAC7C,mBAA6B,EAC7B,SAAoB,EACpB,cAAyC,EACzC,gBAA2C;QAb3C,QAAG,GAAH,GAAG,CAAQ;QACX,UAAK,GAAL,KAAK,CAAQ;QACb,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAQ;QAClB,0BAAqB,GAArB,qBAAqB,CAAQ;QAC7B,4BAAuB,GAAvB,uBAAuB,CAAQ;QAC/B,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,uBAAkB,GAAlB,kBAAkB,CAAQ;QAC1B,iBAAY,GAAZ,YAAY,CAAiC;QAC7C,wBAAmB,GAAnB,mBAAmB,CAAU;QAC7B,cAAS,GAAT,SAAS,CAAW;QACpB,mBAAc,GAAd,cAAc,CAA2B;QACzC,qBAAgB,GAAhB,gBAAgB,CAA2B;QAElD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;IAED,WAAW;QACT,gCAAgC;QAChC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,wCAAwC;QAC9E,MAAM,KAAK,GAAG,gCAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEjE,OAAO;YACL,GAAG,IAAI;YACP,KAAK;SACN,CAAC;IACJ,CAAC;CACF;AA3CD,wCA2CC;AAEM,KAAK,UAAU,WAAW,CAC/B,GAAmB,EACnB,MAAe,EACf,cAAuB,KAAK;IAE5B,MAAM,QAAQ,GAAG,gCAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,0BAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,2CAA2C,EAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,wBAAc,EAAE,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,mBAAmB,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IACpE,MAAM,UAAU,GAAG,SAAS,KAAK,UAAU,CAAC;IAE5C,IAAI,SAAe,CAAC;IACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,GAAG,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;YACjC,MAAM,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACxE,MAAM,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,GAAG,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC;YAC/B,MAAM,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAClB,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,IAAI,cAAc,GAAG,EAAE,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,QAAQ,GAAG,GAAG,CAAC,gBAAiB,CAAC;QACjC,SAAS,GAAG,uBAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,SAAS;YACP,cAAc,KAAK,EAAE;gBACnB,CAAC,CAAC,uBAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClB,CAAC,CAAC,uBAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,GAAG,mCAAgB,CAAC,KAAK,CACjC,GAAG,CAAC,MAAM,EACV,SAAS,EACT,CAAC,UAAU,EACX,QAAQ,EACR,YAAY,EACZ,uCAAoB,CAAC,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,EACtE,GAAG,CAAC,YAAY,CACjB,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,wCAAqB,CAC1C,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,qBAAqB,EACzB,GAAG,CAAC,uBAAuB,EAC3B,GAAG,CAAC,gBAAgB,CACrB,CAAC;IAEF,MAAM,EAAE,GAAG,sCAAmB,CAAC,iBAAiB,CAC9C,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,GAAG,CAAC,kBAAkB,CACvB,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,IAAA,sBAAY,EAAC,6BAAU,CAAC,YAAY,CAAC,8BAAW,EAAE,IAAA,6BAAU,EAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,MAAM,GAAG,GAAG,IAAI,+BAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,IAAA,yBAAgB,EAC7B,MAAM,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,EACnC,0BAA0B,CAC3B,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEhC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,qBAAS,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEzD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO,GAAG,sCAAmB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC","sourcesContent":["import {\n Bytes32,\n CarbonBlob,\n CreateTokenFeeOptions,\n CreateTokenTxHelper,\n hexToBytes,\n IntX,\n SignedTxMsg,\n PhantasmaAPI,\n PhantasmaKeys,\n TokenInfoBuilder,\n TokenMetadataBuilder,\n TokenSchemas,\n} from \"phantasma-sdk-ts\";\nimport { TokenType } from \"../config\";\nimport { requireRpcTxHash } from \"../rpc/txHash\";\nimport { waitForTx } from \"./waitForTx\";\nimport { bigintReplacer, Metadata, formatForLog } from \"./helpers\";\n\nexport class createTokenCfg {\n constructor(\n public rpc: string,\n public nexus: string,\n public wif: string,\n public symbol: string,\n public gasFeeBase: bigint,\n public gasFeeCreateTokenBase: bigint,\n public gasFeeCreateTokenSymbol: bigint,\n public gasFeeMultiplier: bigint,\n public createTokenMaxData: bigint,\n public tokenSchemas: TokenSchemas | null | undefined,\n public tokenMetadataFields: Metadata,\n public tokenType: TokenType,\n public tokenMaxSupply: bigint | null | undefined,\n public fungibleDecimals: number | null | undefined,\n ) {\n this.rpc = rpc;\n this.nexus = nexus;\n this.wif = wif;\n this.symbol = symbol;\n this.gasFeeBase = gasFeeBase;\n this.gasFeeCreateTokenBase = gasFeeCreateTokenBase;\n this.gasFeeCreateTokenSymbol = gasFeeCreateTokenSymbol;\n this.gasFeeMultiplier = gasFeeMultiplier;\n this.createTokenMaxData = createTokenMaxData;\n this.tokenSchemas = tokenSchemas;\n this.tokenMetadataFields = tokenMetadataFields;\n this.tokenType = tokenType;\n this.tokenMaxSupply = tokenMaxSupply;\n this.fungibleDecimals = fungibleDecimals;\n }\n\n toPrintable() {\n // Do not leak WIF; derive owner\n const { wif: _omit, ...rest } = this; // rest has all public fields except wif\n const owner = PhantasmaKeys.fromWIF(this.wif).Address.toString();\n\n return {\n ...rest,\n owner,\n };\n }\n}\n\nexport async function createToken(\n cfg: createTokenCfg,\n dryRun: boolean,\n logSettings: boolean = false,\n) {\n const txSender = PhantasmaKeys.fromWIF(cfg.wif);\n const senderPubKey = new Bytes32(txSender.PublicKey);\n\n if (logSettings) {\n console.log(\n \"Deploying new token using these settings:\",\n JSON.stringify(cfg.toPrintable(), bigintReplacer, 2),\n );\n }\n\n if (cfg.tokenMetadataFields == null) {\n throw Error('Token metadata is mandatory');\n }\n\n const tokenType = cfg.tokenType === \"fungible\" ? \"fungible\" : \"nft\";\n const isFungible = tokenType === \"fungible\";\n\n let maxSupply: IntX;\n let decimals = 0;\n\n if (isFungible) {\n if (cfg.tokenMaxSupply == null) {\n throw Error(\"token_max_supply is required for fungible tokens\");\n }\n if (cfg.fungibleDecimals == null) {\n throw Error(\"fungible_decimals is required for fungible tokens\");\n }\n if (!Number.isInteger(cfg.fungibleDecimals) || cfg.fungibleDecimals < 0) {\n throw Error(\"fungible_decimals must be a non-negative integer\");\n }\n if (cfg.fungibleDecimals > 255) {\n throw Error(\"fungible_decimals must be <= 255\");\n }\n }\n\n const maxSupplyValue =\n cfg.tokenMaxSupply != null ? cfg.tokenMaxSupply : 0n;\n if (maxSupplyValue < 0n) {\n throw Error(\"token_max_supply must be non-negative\");\n }\n if (isFungible) {\n decimals = cfg.fungibleDecimals!;\n maxSupply = IntX.fromBigInt(maxSupplyValue);\n } else {\n maxSupply =\n maxSupplyValue === 0n\n ? IntX.fromI64(0n)\n : IntX.fromBigInt(maxSupplyValue);\n }\n\n const info = TokenInfoBuilder.build(\n cfg.symbol,\n maxSupply,\n !isFungible,\n decimals,\n senderPubKey,\n TokenMetadataBuilder.buildAndSerialize(cfg.tokenMetadataFields.fields),\n cfg.tokenSchemas\n );\n\n const feeOptions = new CreateTokenFeeOptions(\n cfg.gasFeeBase,\n cfg.gasFeeCreateTokenBase,\n cfg.gasFeeCreateTokenSymbol,\n cfg.gasFeeMultiplier,\n );\n\n const tx = CreateTokenTxHelper.buildTxAndSignHex(\n info,\n txSender,\n feeOptions,\n cfg.createTokenMaxData,\n );\n\n if (dryRun) {\n console.log(`[dry-run] Prepared tx (not sent): ${tx}`);\n console.log(formatForLog(CarbonBlob.NewFromBytes(SignedTxMsg, hexToBytes(tx), 0)));\n return;\n }\n\n console.log(\"Broadcasting transaction...\");\n\n const rpc = new PhantasmaAPI(cfg.rpc, null, cfg.nexus);\n\n const txHash = requireRpcTxHash(\n await rpc.sendCarbonTransaction(tx),\n \"create-token transaction\",\n );\n console.log(\"txHash: \", txHash);\n\n const { success, result } = await waitForTx(rpc, txHash);\n\n if (success) {\n var tokenId = CreateTokenTxHelper.parseResult(result);\n console.log(\"Deployed carbon token ID:\", tokenId);\n } else {\n console.log(\"Could not deploy token\");\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mintFungibleToken.d.ts","sourceRoot":"","sources":["../../src/actions/mintFungibleToken.ts"],"names":[],"mappings":"AAqBA,qBAAa,oBAAoB;IAEtB,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,aAAa,EAAE,MAAM;IACrB,EAAE,EAAE,MAAM;IACV,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,gBAAgB,EAAE,MAAM;IACxB,gBAAgB,EAAE,MAAM;gBARxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM;IAajC,WAAW;;;CAUZ;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,oBAAoB,EACzB,MAAM,EAAE,OAAO,EACf,WAAW,GAAE,OAAe,iBA2E7B"}
1
+ {"version":3,"file":"mintFungibleToken.d.ts","sourceRoot":"","sources":["../../src/actions/mintFungibleToken.ts"],"names":[],"mappings":"AAsBA,qBAAa,oBAAoB;IAEtB,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,aAAa,EAAE,MAAM;IACrB,EAAE,EAAE,MAAM;IACV,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,gBAAgB,EAAE,MAAM;IACxB,gBAAgB,EAAE,MAAM;gBARxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM;IAajC,WAAW;;;CAUZ;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,oBAAoB,EACzB,MAAM,EAAE,OAAO,EACf,WAAW,GAAE,OAAe,iBA8E7B"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mintFungibleTokenCfg = void 0;
4
4
  exports.mintFungibleToken = mintFungibleToken;
5
5
  const phantasma_sdk_ts_1 = require("phantasma-sdk-ts");
6
+ const txHash_1 = require("../rpc/txHash");
6
7
  const waitForTx_1 = require("./waitForTx");
7
8
  const helpers_1 = require("./helpers");
8
9
  class mintFungibleTokenCfg {
@@ -83,7 +84,7 @@ async function mintFungibleToken(cfg, dryRun, logSettings = false) {
83
84
  }
84
85
  console.log("Broadcasting transaction...");
85
86
  const rpc = new phantasma_sdk_ts_1.PhantasmaAPI(cfg.rpc, null, cfg.nexus);
86
- const txHash = await rpc.sendCarbonTransaction(txHex);
87
+ const txHash = (0, txHash_1.requireRpcTxHash)(await rpc.sendCarbonTransaction(txHex), "mint-fungible transaction");
87
88
  console.log("txHash: ", txHash);
88
89
  const { success, result } = await (0, waitForTx_1.waitForTx)(rpc, txHash);
89
90
  if (!success) {
@@ -1 +1 @@
1
- {"version":3,"file":"mintFungibleToken.js","sourceRoot":"","sources":["../../src/actions/mintFungibleToken.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Address,\n Bytes32,\n CarbonBinaryReader,\n CarbonBlob,\n FeeOptions,\n hexToBytes,\n IntX,\n PhantasmaAPI,\n PhantasmaKeys,\n SignedTxMsg,\n SmallString,\n TxMsg,\n TxMsgMintFungible,\n TxMsgSigner,\n TxTypes,\n bytesToHex,\n} from \"phantasma-sdk-ts\";\nimport { waitForTx } from \"./waitForTx\";\nimport { bigintReplacer, formatForLog } from \"./helpers\";\n\nexport class mintFungibleTokenCfg {\n constructor(\n public rpc: string,\n public nexus: string,\n public wif: string,\n public carbonTokenId: bigint,\n public to: string,\n public amount: bigint,\n public gasFeeBase: bigint,\n public gasFeeMultiplier: bigint,\n public mintTokenMaxData: bigint,\n ) {\n this.rpc = rpc;\n this.nexus = nexus;\n this.wif = wif;\n this.carbonTokenId = carbonTokenId;\n this.to = to;\n this.amount = amount;\n this.gasFeeBase = gasFeeBase;\n this.gasFeeMultiplier = gasFeeMultiplier;\n this.mintTokenMaxData = mintTokenMaxData;\n }\n\n toPrintable() {\n // Do not leak WIF; derive owner address.\n const { wif: _omit, ...rest } = this;\n const owner = PhantasmaKeys.fromWIF(this.wif).Address.toString();\n\n return {\n ...rest,\n owner,\n };\n }\n}\n\nexport async function mintFungibleToken(\n cfg: mintFungibleTokenCfg,\n dryRun: boolean,\n logSettings: boolean = false,\n) {\n if (cfg.amount <= 0n) {\n throw new Error(\"mint_fungible_amount must be a positive integer\");\n }\n\n const txSender = PhantasmaKeys.fromWIF(cfg.wif);\n const senderPubKey = new Bytes32(txSender.PublicKey);\n\n const toAddr = Address.Parse(cfg.to);\n const receiverPubKey = new Bytes32(toAddr.GetPublicKey());\n\n if (logSettings) {\n console.log(\n \"Minting fungible tokens using these settings:\",\n JSON.stringify(cfg.toPrintable(), bigintReplacer, 2),\n );\n }\n\n // There is no dedicated MintFungible TxHelper in `phantasma-sdk-ts` yet, so we build the\n // Carbon TxMsg manually using the SDK core types. TokenContract::MintFungible returns the\n // receiver's new balance after minting, encoded as IntX in the tx result.\n const feeOptions = new FeeOptions(cfg.gasFeeBase, cfg.gasFeeMultiplier);\n const maxGas = feeOptions.calculateMaxGas();\n\n const msg = new TxMsg();\n msg.type = TxTypes.MintFungible;\n msg.expiry = BigInt(Date.now() + 60_000); // 60s from now (same pattern as other tx helpers)\n msg.maxGas = maxGas;\n msg.maxData = cfg.mintTokenMaxData;\n msg.gasFrom = senderPubKey;\n msg.payload = SmallString.empty;\n\n const mint = new TxMsgMintFungible();\n mint.tokenId = cfg.carbonTokenId;\n mint.to = receiverPubKey;\n mint.amount = IntX.fromBigInt(cfg.amount);\n msg.msg = mint;\n\n const txBytes = TxMsgSigner.signAndSerialize(msg, txSender);\n const txHex = bytesToHex(txBytes);\n\n if (dryRun) {\n console.log(`[dry-run] Prepared tx (not sent): ${txHex}`);\n console.log(\n formatForLog(CarbonBlob.NewFromBytes(SignedTxMsg, hexToBytes(txHex), 0)),\n );\n return;\n }\n\n console.log(\"Broadcasting transaction...\");\n\n const rpc = new PhantasmaAPI(cfg.rpc, null, cfg.nexus);\n\n const txHash = await rpc.sendCarbonTransaction(txHex);\n console.log(\"txHash: \", txHash);\n\n const { success, result } = await waitForTx(rpc, txHash);\n\n if (!success) {\n console.log(\"Could not mint fungible tokens\");\n return;\n }\n\n try {\n const r = new CarbonBinaryReader(hexToBytes(result));\n const newBalance = IntX.read(r).toBigInt();\n console.log(\"New balance after mint:\", newBalance.toString());\n } catch (err) {\n console.log(\n \"Mint succeeded but could not decode result as IntX; raw result:\",\n result,\n );\n console.log(\"Decode error:\", err instanceof Error ? err.message : String(err));\n }\n}\n\n"]}
1
+ {"version":3,"file":"mintFungibleToken.js","sourceRoot":"","sources":["../../src/actions/mintFungibleToken.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Address,\n Bytes32,\n CarbonBinaryReader,\n CarbonBlob,\n FeeOptions,\n hexToBytes,\n IntX,\n PhantasmaAPI,\n PhantasmaKeys,\n SignedTxMsg,\n SmallString,\n TxMsg,\n TxMsgMintFungible,\n TxMsgSigner,\n TxTypes,\n bytesToHex,\n} from \"phantasma-sdk-ts\";\nimport { requireRpcTxHash } from \"../rpc/txHash\";\nimport { waitForTx } from \"./waitForTx\";\nimport { bigintReplacer, formatForLog } from \"./helpers\";\n\nexport class mintFungibleTokenCfg {\n constructor(\n public rpc: string,\n public nexus: string,\n public wif: string,\n public carbonTokenId: bigint,\n public to: string,\n public amount: bigint,\n public gasFeeBase: bigint,\n public gasFeeMultiplier: bigint,\n public mintTokenMaxData: bigint,\n ) {\n this.rpc = rpc;\n this.nexus = nexus;\n this.wif = wif;\n this.carbonTokenId = carbonTokenId;\n this.to = to;\n this.amount = amount;\n this.gasFeeBase = gasFeeBase;\n this.gasFeeMultiplier = gasFeeMultiplier;\n this.mintTokenMaxData = mintTokenMaxData;\n }\n\n toPrintable() {\n // Do not leak WIF; derive owner address.\n const { wif: _omit, ...rest } = this;\n const owner = PhantasmaKeys.fromWIF(this.wif).Address.toString();\n\n return {\n ...rest,\n owner,\n };\n }\n}\n\nexport async function mintFungibleToken(\n cfg: mintFungibleTokenCfg,\n dryRun: boolean,\n logSettings: boolean = false,\n) {\n if (cfg.amount <= 0n) {\n throw new Error(\"mint_fungible_amount must be a positive integer\");\n }\n\n const txSender = PhantasmaKeys.fromWIF(cfg.wif);\n const senderPubKey = new Bytes32(txSender.PublicKey);\n\n const toAddr = Address.Parse(cfg.to);\n const receiverPubKey = new Bytes32(toAddr.GetPublicKey());\n\n if (logSettings) {\n console.log(\n \"Minting fungible tokens using these settings:\",\n JSON.stringify(cfg.toPrintable(), bigintReplacer, 2),\n );\n }\n\n // There is no dedicated MintFungible TxHelper in `phantasma-sdk-ts` yet, so we build the\n // Carbon TxMsg manually using the SDK core types. TokenContract::MintFungible returns the\n // receiver's new balance after minting, encoded as IntX in the tx result.\n const feeOptions = new FeeOptions(cfg.gasFeeBase, cfg.gasFeeMultiplier);\n const maxGas = feeOptions.calculateMaxGas();\n\n const msg = new TxMsg();\n msg.type = TxTypes.MintFungible;\n msg.expiry = BigInt(Date.now() + 60_000); // 60s from now (same pattern as other tx helpers)\n msg.maxGas = maxGas;\n msg.maxData = cfg.mintTokenMaxData;\n msg.gasFrom = senderPubKey;\n msg.payload = SmallString.empty;\n\n const mint = new TxMsgMintFungible();\n mint.tokenId = cfg.carbonTokenId;\n mint.to = receiverPubKey;\n mint.amount = IntX.fromBigInt(cfg.amount);\n msg.msg = mint;\n\n const txBytes = TxMsgSigner.signAndSerialize(msg, txSender);\n const txHex = bytesToHex(txBytes);\n\n if (dryRun) {\n console.log(`[dry-run] Prepared tx (not sent): ${txHex}`);\n console.log(\n formatForLog(CarbonBlob.NewFromBytes(SignedTxMsg, hexToBytes(txHex), 0)),\n );\n return;\n }\n\n console.log(\"Broadcasting transaction...\");\n\n const rpc = new PhantasmaAPI(cfg.rpc, null, cfg.nexus);\n\n const txHash = requireRpcTxHash(\n await rpc.sendCarbonTransaction(txHex),\n \"mint-fungible transaction\",\n );\n console.log(\"txHash: \", txHash);\n\n const { success, result } = await waitForTx(rpc, txHash);\n\n if (!success) {\n console.log(\"Could not mint fungible tokens\");\n return;\n }\n\n try {\n const r = new CarbonBinaryReader(hexToBytes(result));\n const newBalance = IntX.read(r).toBigInt();\n console.log(\"New balance after mint:\", newBalance.toString());\n } catch (err) {\n console.log(\n \"Mint succeeded but could not decode result as IntX; raw result:\",\n result,\n );\n console.log(\"Decode error:\", err instanceof Error ? err.message : String(err));\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mintNftToken.d.ts","sourceRoot":"","sources":["../../src/actions/mintNftToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,cAAc,EACd,aAAa,EACd,MAAM,kBAAkB,CAAC;AAkB1B,qBAAa,eAAe;IAEjB,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,aAAa,EAAE,MAAM;IACrB,iBAAiB,EAAE,MAAM;IACzB,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa,EAAE;IAC5B,UAAU,EAAE,MAAM;IAClB,gBAAgB,EAAE,MAAM;IACxB,gBAAgB,EAAE,MAAM;gBATxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,cAAc,EAC5B,WAAW,EAAE,aAAa,EAAE,EAC5B,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM;IAcjC,WAAW;;;;CAYZ;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,OAAO,EACf,WAAW,GAAE,OAAe,iBAkE7B"}
1
+ {"version":3,"file":"mintNftToken.d.ts","sourceRoot":"","sources":["../../src/actions/mintNftToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,cAAc,EACd,aAAa,EACd,MAAM,kBAAkB,CAAC;AAmB1B,qBAAa,eAAe;IAEjB,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,aAAa,EAAE,MAAM;IACrB,iBAAiB,EAAE,MAAM;IACzB,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa,EAAE;IAC5B,UAAU,EAAE,MAAM;IAClB,gBAAgB,EAAE,MAAM;IACxB,gBAAgB,EAAE,MAAM;gBATxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,cAAc,EAC5B,WAAW,EAAE,aAAa,EAAE,EAC5B,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM;IAcjC,WAAW;;;;CAYZ;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,OAAO,EACf,WAAW,GAAE,OAAe,iBAqE7B"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mintNftTokenCfg = void 0;
4
4
  exports.mintNftToken = mintNftToken;
5
5
  const phantasma_sdk_ts_1 = require("phantasma-sdk-ts");
6
+ const txHash_1 = require("../rpc/txHash");
6
7
  const waitForTx_1 = require("./waitForTx");
7
8
  const helpers_1 = require("./helpers");
8
9
  function bytes32HexToRpcDecimal(hex) {
@@ -77,7 +78,7 @@ async function mintNftToken(cfg, dryRun, logSettings = false) {
77
78
  }
78
79
  console.log("Broadcasting transaction...");
79
80
  const rpc = new phantasma_sdk_ts_1.PhantasmaAPI(cfg.rpc, null, cfg.nexus);
80
- let txHash = await rpc.sendCarbonTransaction(tx);
81
+ const txHash = (0, txHash_1.requireRpcTxHash)(await rpc.sendCarbonTransaction(tx), "mint-nft transaction");
81
82
  console.log("txHash: ", txHash);
82
83
  const { success, result } = await (0, waitForTx_1.waitForTx)(rpc, txHash);
83
84
  if (success) {
@@ -1 +1 @@
1
- {"version":3,"file":"mintNftToken.js","sourceRoot":"","sources":["../../src/actions/mintNftToken.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Bytes32,\n CarbonBlob,\n hexToBytes,\n MintNftFeeOptions,\n MintPhantasmaNonFungibleTxHelper,\n PhantasmaAPI,\n PhantasmaNftRomBuilder,\n PhantasmaKeys,\n SignedTxMsg,\n TokenHelper,\n VmStructSchema,\n MetadataField,\n} from \"phantasma-sdk-ts\";\nimport { waitForTx } from \"./waitForTx\";\nimport { bigintReplacer, formatForLog } from \"./helpers\";\n\nfunction bytes32HexToRpcDecimal(hex: string): string {\n if (hex.length === 0) {\n return \"0\";\n }\n\n // RPC/public read paths interpret the raw Bytes32 `_i` word as an unsigned little-endian integer.\n const littleEndianHex = Array.from(hexToBytes(hex))\n .reverse()\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n return BigInt(`0x${littleEndianHex}`).toString();\n}\n\nexport class mintNftTokenCfg {\n constructor(\n public rpc: string,\n public nexus: string,\n public wif: string,\n public carbonTokenId: bigint,\n public phantasmaSeriesId: bigint,\n public nftRomSchema: VmStructSchema,\n public nftMetadata: MetadataField[],\n public gasFeeBase: bigint,\n public gasFeeMultiplier: bigint,\n public mintTokenMaxData: bigint,\n ) {\n this.rpc = rpc;\n this.nexus = nexus;\n this.wif = wif;\n this.carbonTokenId = carbonTokenId;\n this.phantasmaSeriesId = phantasmaSeriesId;\n this.nftRomSchema = nftRomSchema;\n this.nftMetadata = nftMetadata;\n this.gasFeeBase = gasFeeBase;\n this.gasFeeMultiplier = gasFeeMultiplier;\n this.mintTokenMaxData = mintTokenMaxData;\n }\n\n toPrintable() {\n // Do not leak WIF; derive owner\n const { wif: _omit, nftMetadata, ...rest } =\n this; // rest has all public fields except wif/metadata strings\n const owner = PhantasmaKeys.fromWIF(this.wif).Address.toString();\n\n return {\n ...rest,\n owner,\n nftMetadata\n };\n }\n}\n\nexport async function mintNftToken(\n cfg: mintNftTokenCfg,\n dryRun: boolean,\n logSettings: boolean = false,\n) {\n const txSender = PhantasmaKeys.fromWIF(cfg.wif);\n const senderPubKey = new Bytes32(txSender.PublicKey);\n\n if (logSettings) {\n console.log(\n \"Minting NFT through deterministic chain-generated id flow using these settings:\",\n JSON.stringify(cfg.toPrintable(), bigintReplacer, 2),\n );\n }\n\n const rom = PhantasmaNftRomBuilder.buildAndSerialize(\n cfg.nftRomSchema,\n cfg.nftMetadata\n );\n\n const feeOptions = new MintNftFeeOptions(\n cfg.gasFeeBase,\n cfg.gasFeeMultiplier,\n );\n\n const tx = MintPhantasmaNonFungibleTxHelper.buildTxAndSignHex(\n cfg.carbonTokenId,\n cfg.phantasmaSeriesId,\n txSender,\n senderPubKey,\n rom,\n new Uint8Array(),\n feeOptions,\n cfg.mintTokenMaxData,\n );\n\n if (dryRun) {\n console.log(`[dry-run] Prepared tx (not sent): ${tx}`);\n console.log(formatForLog(CarbonBlob.NewFromBytes(SignedTxMsg, hexToBytes(tx), 0)));\n return;\n }\n\n console.log(\"Broadcasting transaction...\");\n\n const rpc = new PhantasmaAPI(cfg.rpc, null, cfg.nexus);\n\n let txHash = await rpc.sendCarbonTransaction(tx);\n console.log(\"txHash: \", txHash);\n\n const { success, result } = await waitForTx(rpc, txHash);\n\n if (success) {\n const mintResults = MintPhantasmaNonFungibleTxHelper.parseResult(result);\n if (mintResults.length === 0) {\n throw new Error(\"Deterministic mint result is empty\");\n }\n\n const carbonNftAddress = TokenHelper.getNftAddress(\n cfg.carbonTokenId,\n mintResults[0].carbonInstanceId,\n );\n const mintedPhantasmaNftIdHex = mintResults[0].phantasmaNftId.ToHex();\n const mintedPhantasmaNftId = bytes32HexToRpcDecimal(mintedPhantasmaNftIdHex);\n console.log(\n `Minted NFT with phantasma ID ${mintedPhantasmaNftId} (0x${mintedPhantasmaNftIdHex}) and carbon NFT address ${carbonNftAddress.ToHex()}`,\n );\n } else {\n console.log(\"Could not mint NFT\");\n }\n}\n"]}
1
+ {"version":3,"file":"mintNftToken.js","sourceRoot":"","sources":["../../src/actions/mintNftToken.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Bytes32,\n CarbonBlob,\n hexToBytes,\n MintNftFeeOptions,\n MintPhantasmaNonFungibleTxHelper,\n PhantasmaAPI,\n PhantasmaNftRomBuilder,\n PhantasmaKeys,\n SignedTxMsg,\n TokenHelper,\n VmStructSchema,\n MetadataField,\n} from \"phantasma-sdk-ts\";\nimport { requireRpcTxHash } from \"../rpc/txHash\";\nimport { waitForTx } from \"./waitForTx\";\nimport { bigintReplacer, formatForLog } from \"./helpers\";\n\nfunction bytes32HexToRpcDecimal(hex: string): string {\n if (hex.length === 0) {\n return \"0\";\n }\n\n // RPC/public read paths interpret the raw Bytes32 `_i` word as an unsigned little-endian integer.\n const littleEndianHex = Array.from(hexToBytes(hex))\n .reverse()\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n return BigInt(`0x${littleEndianHex}`).toString();\n}\n\nexport class mintNftTokenCfg {\n constructor(\n public rpc: string,\n public nexus: string,\n public wif: string,\n public carbonTokenId: bigint,\n public phantasmaSeriesId: bigint,\n public nftRomSchema: VmStructSchema,\n public nftMetadata: MetadataField[],\n public gasFeeBase: bigint,\n public gasFeeMultiplier: bigint,\n public mintTokenMaxData: bigint,\n ) {\n this.rpc = rpc;\n this.nexus = nexus;\n this.wif = wif;\n this.carbonTokenId = carbonTokenId;\n this.phantasmaSeriesId = phantasmaSeriesId;\n this.nftRomSchema = nftRomSchema;\n this.nftMetadata = nftMetadata;\n this.gasFeeBase = gasFeeBase;\n this.gasFeeMultiplier = gasFeeMultiplier;\n this.mintTokenMaxData = mintTokenMaxData;\n }\n\n toPrintable() {\n // Do not leak WIF; derive owner\n const { wif: _omit, nftMetadata, ...rest } =\n this; // rest has all public fields except wif/metadata strings\n const owner = PhantasmaKeys.fromWIF(this.wif).Address.toString();\n\n return {\n ...rest,\n owner,\n nftMetadata\n };\n }\n}\n\nexport async function mintNftToken(\n cfg: mintNftTokenCfg,\n dryRun: boolean,\n logSettings: boolean = false,\n) {\n const txSender = PhantasmaKeys.fromWIF(cfg.wif);\n const senderPubKey = new Bytes32(txSender.PublicKey);\n\n if (logSettings) {\n console.log(\n \"Minting NFT through deterministic chain-generated id flow using these settings:\",\n JSON.stringify(cfg.toPrintable(), bigintReplacer, 2),\n );\n }\n\n const rom = PhantasmaNftRomBuilder.buildAndSerialize(\n cfg.nftRomSchema,\n cfg.nftMetadata\n );\n\n const feeOptions = new MintNftFeeOptions(\n cfg.gasFeeBase,\n cfg.gasFeeMultiplier,\n );\n\n const tx = MintPhantasmaNonFungibleTxHelper.buildTxAndSignHex(\n cfg.carbonTokenId,\n cfg.phantasmaSeriesId,\n txSender,\n senderPubKey,\n rom,\n new Uint8Array(),\n feeOptions,\n cfg.mintTokenMaxData,\n );\n\n if (dryRun) {\n console.log(`[dry-run] Prepared tx (not sent): ${tx}`);\n console.log(formatForLog(CarbonBlob.NewFromBytes(SignedTxMsg, hexToBytes(tx), 0)));\n return;\n }\n\n console.log(\"Broadcasting transaction...\");\n\n const rpc = new PhantasmaAPI(cfg.rpc, null, cfg.nexus);\n\n const txHash = requireRpcTxHash(\n await rpc.sendCarbonTransaction(tx),\n \"mint-nft transaction\",\n );\n console.log(\"txHash: \", txHash);\n\n const { success, result } = await waitForTx(rpc, txHash);\n\n if (success) {\n const mintResults = MintPhantasmaNonFungibleTxHelper.parseResult(result);\n if (mintResults.length === 0) {\n throw new Error(\"Deterministic mint result is empty\");\n }\n\n const carbonNftAddress = TokenHelper.getNftAddress(\n cfg.carbonTokenId,\n mintResults[0].carbonInstanceId,\n );\n const mintedPhantasmaNftIdHex = mintResults[0].phantasmaNftId.ToHex();\n const mintedPhantasmaNftId = bytes32HexToRpcDecimal(mintedPhantasmaNftIdHex);\n console.log(\n `Minted NFT with phantasma ID ${mintedPhantasmaNftId} (0x${mintedPhantasmaNftIdHex}) and carbon NFT address ${carbonNftAddress.ToHex()}`,\n );\n } else {\n console.log(\"Could not mint NFT\");\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cli-contract.d.ts","sourceRoot":"","sources":["../src/cli-contract.ts"],"names":[],"mappings":"AA0LA,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoIrE"}
1
+ {"version":3,"file":"cli-contract.d.ts","sourceRoot":"","sources":["../src/cli-contract.ts"],"names":[],"mappings":"AA6LA,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoIrE"}
@@ -126,6 +126,9 @@ async function handleContractBroadcast(operation, argv) {
126
126
  return;
127
127
  }
128
128
  console.log(` tx hash: ${result.txHash ?? ""}`);
129
+ if (result.broadcastError) {
130
+ throw new Error(result.broadcastError);
131
+ }
129
132
  if (!result.success) {
130
133
  throw new Error(`${operation} transaction failed${result.txHash ? ` (txHash: ${result.txHash})` : ""}`);
131
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli-contract.js","sourceRoot":"","sources":["../src/cli-contract.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport yargs from \"yargs/yargs\";\nimport {\n CONTRACT_COMPILER_NAME,\n MIN_SUPPORTED_PHA_TOMB_VERSION,\n buildCompileArgs,\n resolveSupportedCompiler,\n runCompiler,\n selectCompiledContractArtifacts,\n type CompileProcessResult,\n type NativeCheckMode,\n} from \"./contract/compiler\";\nimport {\n loadContractArtifactsFromManifest,\n loadContractArtifactsFromPaths,\n materializeCompiledArtifacts,\n} from \"./contract/artifacts\";\nimport { executeContractTransaction, type ContractOperation } from \"./contract/deploy\";\n\nfunction printIndentedBlock(title: string, content: string): void {\n console.log(`${title}:`);\n const trimmed = content.trimEnd();\n if (!trimmed) {\n console.log(\" (empty)\");\n return;\n }\n\n for (const line of trimmed.split(/\\r?\\n/)) {\n console.log(` ${line}`);\n }\n}\n\nfunction printCompileTranscript(result: CompileProcessResult): void {\n console.log(\"Compiler command:\");\n console.log(` ${result.command} ${result.args.join(\" \")}`);\n console.log(`Compiler cwd:`);\n console.log(` ${result.cwd}`);\n printIndentedBlock(`${CONTRACT_COMPILER_NAME} stdout`, result.stdout);\n printIndentedBlock(`${CONTRACT_COMPILER_NAME} stderr`, result.stderr);\n}\n\nfunction parseOptionalInteger(value: unknown, flagName: string): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n if (!Number.isSafeInteger(parsed) || parsed <= 0) {\n throw new Error(`${flagName} must be a positive integer`);\n }\n return parsed;\n}\n\nasync function handleContractCompile(argv: {\n source: string;\n out?: string;\n contractName?: string;\n protocol?: number;\n debug?: boolean;\n nativeCheck?: NativeCheckMode;\n libpath?: string[];\n}): Promise<void> {\n const compiler = await resolveSupportedCompiler(MIN_SUPPORTED_PHA_TOMB_VERSION);\n const sourcePath = path.resolve(argv.source);\n const preferredContractName = argv.contractName?.trim() || path.basename(sourcePath, path.extname(sourcePath));\n const outputDir = path.resolve(\n argv.out ?? path.join(process.cwd(), \"dist\", \"contracts\", preferredContractName),\n );\n const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), \"pha-deploy-compile-\"));\n\n try {\n const compileArgs = buildCompileArgs({\n sourcePath,\n outputRoot: tempRoot,\n libPaths: argv.libpath,\n protocol: argv.protocol,\n debug: argv.debug,\n nativeCheck: argv.nativeCheck,\n });\n const result = await runCompiler(compiler.executablePath, compileArgs, process.cwd());\n printCompileTranscript(result);\n\n if (result.exitCode !== 0) {\n throw new Error(`${CONTRACT_COMPILER_NAME} exited with code ${result.exitCode}`);\n }\n\n const compiled = selectCompiledContractArtifacts(\n path.join(tempRoot, \"Output\"),\n preferredContractName,\n );\n const materialized = materializeCompiledArtifacts({\n compiled,\n outputDir,\n compilerName: compiler.executableName,\n compilerVersion: compiler.version,\n sourceFileName: sourcePath,\n });\n\n console.log(\"Artifacts:\");\n console.log(` contract: ${materialized.bundle.contractName}`);\n console.log(` output: ${materialized.outputDir}`);\n console.log(` manifest: ${materialized.manifestPath}`);\n console.log(` script: ${materialized.scriptPath}`);\n console.log(` abi: ${materialized.abiPath}`);\n if (materialized.debugPath) {\n console.log(` debug: ${materialized.debugPath}`);\n }\n if (materialized.asmPath) {\n console.log(` asm: ${materialized.asmPath}`);\n }\n if (materialized.scriptHexPath) {\n console.log(` script hex: ${materialized.scriptHexPath}`);\n }\n if (materialized.abiHexPath) {\n console.log(` abi hex: ${materialized.abiHexPath}`);\n }\n } finally {\n await fs.rm(tempRoot, { recursive: true, force: true });\n }\n}\n\nasync function handleContractBroadcast(\n operation: ContractOperation,\n argv: {\n rpc: string;\n nexus: string;\n chain?: string;\n wif: string;\n manifest?: string;\n contractName?: string;\n script?: string;\n abi?: string;\n debug?: string;\n gasPrice?: unknown;\n gasLimit?: unknown;\n pow?: unknown;\n payloadHex?: string;\n dryRun?: boolean;\n },\n): Promise<void> {\n const artifacts = argv.manifest\n ? loadContractArtifactsFromManifest(argv.manifest)\n : loadContractArtifactsFromPaths({\n contractName: argv.contractName ?? \"\",\n scriptPath: argv.script ?? \"\",\n abiPath: argv.abi ?? \"\",\n ...(argv.debug ? { debugPath: argv.debug } : {}),\n });\n\n const result = await executeContractTransaction({\n operation,\n rpc: argv.rpc,\n nexus: argv.nexus,\n chain: argv.chain,\n wif: argv.wif,\n bundle: artifacts.bundle,\n gasPrice: parseOptionalInteger(argv.gasPrice, \"--gas-price\"),\n gasLimit: parseOptionalInteger(argv.gasLimit, \"--gas-limit\"),\n proofOfWork: parseOptionalInteger(argv.pow, \"--pow\"),\n payloadHex: argv.payloadHex,\n dryRun: argv.dryRun,\n });\n\n console.log(\"Transaction:\");\n console.log(` operation: ${result.prepared.operation}`);\n console.log(` contract: ${result.prepared.contractName}`);\n console.log(` from: ${result.prepared.fromAddress}`);\n console.log(` script bytes: ${result.prepared.scriptBytes}`);\n console.log(` abi bytes: ${result.prepared.abiBytes}`);\n console.log(` vm script: ${result.prepared.scriptHex}`);\n console.log(` signed tx: ${result.prepared.txHex}`);\n\n if (result.dryRun) {\n console.log(\"Dry-run complete: transaction was not broadcast.\");\n return;\n }\n\n console.log(` tx hash: ${result.txHash ?? \"\"}`);\n if (!result.success) {\n throw new Error(\n `${operation} transaction failed${result.txHash ? ` (txHash: ${result.txHash})` : \"\"}`,\n );\n }\n}\n\nexport async function runContractCli(rawArgv: string[]): Promise<void> {\n const parser = yargs(rawArgv)\n .scriptName(\"pha-deploy contract\")\n .command(\n \"compile\",\n \"Compile a contract through the system-installed pha-tomb\",\n (cmd) =>\n cmd\n .option(\"source\", {\n type: \"string\",\n demandOption: true,\n describe: \"Path to the .tomb source file\",\n })\n .option(\"out\", {\n type: \"string\",\n describe: \"Output directory for the final artifact bundle\",\n })\n .option(\"contract-name\", {\n type: \"string\",\n describe: \"Expected contract artifact name when the compiler emits multiple modules\",\n })\n .option(\"protocol\", {\n type: \"number\",\n describe: \"Target protocol version passed to pha-tomb\",\n })\n .option(\"debug\", {\n type: \"boolean\",\n describe: \"Request debug artifacts from pha-tomb\",\n })\n .option(\"nativecheck\", {\n type: \"string\",\n choices: [\"off\", \"warn\", \"error\"],\n describe: \"Native/foundational interop diagnostics mode\",\n })\n .option(\"libpath\", {\n type: \"string\",\n array: true,\n describe: \"Additional library search path(s) passed to pha-tomb\",\n }),\n async (argv) => {\n await handleContractCompile({\n source: argv.source,\n out: argv.out,\n contractName: argv[\"contract-name\"],\n protocol: argv.protocol,\n debug: argv.debug,\n nativeCheck: argv.nativecheck as NativeCheckMode | undefined,\n libpath: argv.libpath,\n });\n },\n )\n .command(\n \"deploy\",\n \"Deploy a compiled contract artifact bundle\",\n (cmd) =>\n cmd\n .option(\"rpc\", { type: \"string\", demandOption: true, describe: \"RPC endpoint\" })\n .option(\"nexus\", { type: \"string\", demandOption: true, describe: \"Nexus name\" })\n .option(\"chain\", { type: \"string\", default: \"main\", describe: \"Target chain\" })\n .option(\"wif\", { type: \"string\", demandOption: true, describe: \"WIF used to sign the transaction\" })\n .option(\"manifest\", { type: \"string\", describe: \"Path to manifest.json produced by contract compile\" })\n .option(\"contract-name\", { type: \"string\", describe: \"Contract name when using direct --script/--abi inputs\" })\n .option(\"script\", { type: \"string\", describe: \"Path to compiled .pvm file when not using --manifest\" })\n .option(\"abi\", { type: \"string\", describe: \"Path to compiled .abi file when not using --manifest\" })\n .option(\"debug\", { type: \"string\", describe: \"Optional path to .debug file when not using --manifest\" })\n .option(\"gas-price\", { type: \"number\", describe: \"Gas price passed to AllowGas\" })\n .option(\"gas-limit\", { type: \"number\", describe: \"Gas limit passed to AllowGas\" })\n .option(\"pow\", { type: \"number\", describe: \"Proof-of-work difficulty for the legacy VM transaction\" })\n .option(\"payload-hex\", { type: \"string\", describe: \"Optional transaction payload as raw hex\" })\n .option(\"dry-run\", { type: \"boolean\", describe: \"Build and sign the transaction without broadcasting\" }),\n async (argv) => {\n await handleContractBroadcast(\"deploy\", {\n rpc: argv.rpc,\n nexus: argv.nexus,\n chain: argv.chain,\n wif: argv.wif,\n manifest: argv.manifest,\n contractName: argv[\"contract-name\"],\n script: argv.script,\n abi: argv.abi,\n debug: argv.debug,\n gasPrice: argv[\"gas-price\"],\n gasLimit: argv[\"gas-limit\"],\n pow: argv.pow,\n payloadHex: argv[\"payload-hex\"],\n dryRun: argv[\"dry-run\"],\n });\n },\n )\n .command(\n \"upgrade\",\n \"Upgrade an already deployed contract artifact bundle\",\n (cmd) =>\n cmd\n .option(\"rpc\", { type: \"string\", demandOption: true, describe: \"RPC endpoint\" })\n .option(\"nexus\", { type: \"string\", demandOption: true, describe: \"Nexus name\" })\n .option(\"chain\", { type: \"string\", default: \"main\", describe: \"Target chain\" })\n .option(\"wif\", { type: \"string\", demandOption: true, describe: \"WIF used to sign the transaction\" })\n .option(\"manifest\", { type: \"string\", describe: \"Path to manifest.json produced by contract compile\" })\n .option(\"contract-name\", { type: \"string\", describe: \"Contract name when using direct --script/--abi inputs\" })\n .option(\"script\", { type: \"string\", describe: \"Path to compiled .pvm file when not using --manifest\" })\n .option(\"abi\", { type: \"string\", describe: \"Path to compiled .abi file when not using --manifest\" })\n .option(\"debug\", { type: \"string\", describe: \"Optional path to .debug file when not using --manifest\" })\n .option(\"gas-price\", { type: \"number\", describe: \"Gas price passed to AllowGas\" })\n .option(\"gas-limit\", { type: \"number\", describe: \"Gas limit passed to AllowGas\" })\n .option(\"pow\", { type: \"number\", describe: \"Proof-of-work difficulty for the legacy VM transaction\" })\n .option(\"payload-hex\", { type: \"string\", describe: \"Optional transaction payload as raw hex\" })\n .option(\"dry-run\", { type: \"boolean\", describe: \"Build and sign the transaction without broadcasting\" }),\n async (argv) => {\n await handleContractBroadcast(\"upgrade\", {\n rpc: argv.rpc,\n nexus: argv.nexus,\n chain: argv.chain,\n wif: argv.wif,\n manifest: argv.manifest,\n contractName: argv[\"contract-name\"],\n script: argv.script,\n abi: argv.abi,\n debug: argv.debug,\n gasPrice: argv[\"gas-price\"],\n gasLimit: argv[\"gas-limit\"],\n pow: argv.pow,\n payloadHex: argv[\"payload-hex\"],\n dryRun: argv[\"dry-run\"],\n });\n },\n )\n .demandCommand(1)\n .strict()\n .help();\n\n await parser.parseAsync();\n}\n"]}
1
+ {"version":3,"file":"cli-contract.js","sourceRoot":"","sources":["../src/cli-contract.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport yargs from \"yargs/yargs\";\nimport {\n CONTRACT_COMPILER_NAME,\n MIN_SUPPORTED_PHA_TOMB_VERSION,\n buildCompileArgs,\n resolveSupportedCompiler,\n runCompiler,\n selectCompiledContractArtifacts,\n type CompileProcessResult,\n type NativeCheckMode,\n} from \"./contract/compiler\";\nimport {\n loadContractArtifactsFromManifest,\n loadContractArtifactsFromPaths,\n materializeCompiledArtifacts,\n} from \"./contract/artifacts\";\nimport { executeContractTransaction, type ContractOperation } from \"./contract/deploy\";\n\nfunction printIndentedBlock(title: string, content: string): void {\n console.log(`${title}:`);\n const trimmed = content.trimEnd();\n if (!trimmed) {\n console.log(\" (empty)\");\n return;\n }\n\n for (const line of trimmed.split(/\\r?\\n/)) {\n console.log(` ${line}`);\n }\n}\n\nfunction printCompileTranscript(result: CompileProcessResult): void {\n console.log(\"Compiler command:\");\n console.log(` ${result.command} ${result.args.join(\" \")}`);\n console.log(`Compiler cwd:`);\n console.log(` ${result.cwd}`);\n printIndentedBlock(`${CONTRACT_COMPILER_NAME} stdout`, result.stdout);\n printIndentedBlock(`${CONTRACT_COMPILER_NAME} stderr`, result.stderr);\n}\n\nfunction parseOptionalInteger(value: unknown, flagName: string): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n if (!Number.isSafeInteger(parsed) || parsed <= 0) {\n throw new Error(`${flagName} must be a positive integer`);\n }\n return parsed;\n}\n\nasync function handleContractCompile(argv: {\n source: string;\n out?: string;\n contractName?: string;\n protocol?: number;\n debug?: boolean;\n nativeCheck?: NativeCheckMode;\n libpath?: string[];\n}): Promise<void> {\n const compiler = await resolveSupportedCompiler(MIN_SUPPORTED_PHA_TOMB_VERSION);\n const sourcePath = path.resolve(argv.source);\n const preferredContractName = argv.contractName?.trim() || path.basename(sourcePath, path.extname(sourcePath));\n const outputDir = path.resolve(\n argv.out ?? path.join(process.cwd(), \"dist\", \"contracts\", preferredContractName),\n );\n const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), \"pha-deploy-compile-\"));\n\n try {\n const compileArgs = buildCompileArgs({\n sourcePath,\n outputRoot: tempRoot,\n libPaths: argv.libpath,\n protocol: argv.protocol,\n debug: argv.debug,\n nativeCheck: argv.nativeCheck,\n });\n const result = await runCompiler(compiler.executablePath, compileArgs, process.cwd());\n printCompileTranscript(result);\n\n if (result.exitCode !== 0) {\n throw new Error(`${CONTRACT_COMPILER_NAME} exited with code ${result.exitCode}`);\n }\n\n const compiled = selectCompiledContractArtifacts(\n path.join(tempRoot, \"Output\"),\n preferredContractName,\n );\n const materialized = materializeCompiledArtifacts({\n compiled,\n outputDir,\n compilerName: compiler.executableName,\n compilerVersion: compiler.version,\n sourceFileName: sourcePath,\n });\n\n console.log(\"Artifacts:\");\n console.log(` contract: ${materialized.bundle.contractName}`);\n console.log(` output: ${materialized.outputDir}`);\n console.log(` manifest: ${materialized.manifestPath}`);\n console.log(` script: ${materialized.scriptPath}`);\n console.log(` abi: ${materialized.abiPath}`);\n if (materialized.debugPath) {\n console.log(` debug: ${materialized.debugPath}`);\n }\n if (materialized.asmPath) {\n console.log(` asm: ${materialized.asmPath}`);\n }\n if (materialized.scriptHexPath) {\n console.log(` script hex: ${materialized.scriptHexPath}`);\n }\n if (materialized.abiHexPath) {\n console.log(` abi hex: ${materialized.abiHexPath}`);\n }\n } finally {\n await fs.rm(tempRoot, { recursive: true, force: true });\n }\n}\n\nasync function handleContractBroadcast(\n operation: ContractOperation,\n argv: {\n rpc: string;\n nexus: string;\n chain?: string;\n wif: string;\n manifest?: string;\n contractName?: string;\n script?: string;\n abi?: string;\n debug?: string;\n gasPrice?: unknown;\n gasLimit?: unknown;\n pow?: unknown;\n payloadHex?: string;\n dryRun?: boolean;\n },\n): Promise<void> {\n const artifacts = argv.manifest\n ? loadContractArtifactsFromManifest(argv.manifest)\n : loadContractArtifactsFromPaths({\n contractName: argv.contractName ?? \"\",\n scriptPath: argv.script ?? \"\",\n abiPath: argv.abi ?? \"\",\n ...(argv.debug ? { debugPath: argv.debug } : {}),\n });\n\n const result = await executeContractTransaction({\n operation,\n rpc: argv.rpc,\n nexus: argv.nexus,\n chain: argv.chain,\n wif: argv.wif,\n bundle: artifacts.bundle,\n gasPrice: parseOptionalInteger(argv.gasPrice, \"--gas-price\"),\n gasLimit: parseOptionalInteger(argv.gasLimit, \"--gas-limit\"),\n proofOfWork: parseOptionalInteger(argv.pow, \"--pow\"),\n payloadHex: argv.payloadHex,\n dryRun: argv.dryRun,\n });\n\n console.log(\"Transaction:\");\n console.log(` operation: ${result.prepared.operation}`);\n console.log(` contract: ${result.prepared.contractName}`);\n console.log(` from: ${result.prepared.fromAddress}`);\n console.log(` script bytes: ${result.prepared.scriptBytes}`);\n console.log(` abi bytes: ${result.prepared.abiBytes}`);\n console.log(` vm script: ${result.prepared.scriptHex}`);\n console.log(` signed tx: ${result.prepared.txHex}`);\n\n if (result.dryRun) {\n console.log(\"Dry-run complete: transaction was not broadcast.\");\n return;\n }\n\n console.log(` tx hash: ${result.txHash ?? \"\"}`);\n if (result.broadcastError) {\n throw new Error(result.broadcastError);\n }\n if (!result.success) {\n throw new Error(\n `${operation} transaction failed${result.txHash ? ` (txHash: ${result.txHash})` : \"\"}`,\n );\n }\n}\n\nexport async function runContractCli(rawArgv: string[]): Promise<void> {\n const parser = yargs(rawArgv)\n .scriptName(\"pha-deploy contract\")\n .command(\n \"compile\",\n \"Compile a contract through the system-installed pha-tomb\",\n (cmd) =>\n cmd\n .option(\"source\", {\n type: \"string\",\n demandOption: true,\n describe: \"Path to the .tomb source file\",\n })\n .option(\"out\", {\n type: \"string\",\n describe: \"Output directory for the final artifact bundle\",\n })\n .option(\"contract-name\", {\n type: \"string\",\n describe: \"Expected contract artifact name when the compiler emits multiple modules\",\n })\n .option(\"protocol\", {\n type: \"number\",\n describe: \"Target protocol version passed to pha-tomb\",\n })\n .option(\"debug\", {\n type: \"boolean\",\n describe: \"Request debug artifacts from pha-tomb\",\n })\n .option(\"nativecheck\", {\n type: \"string\",\n choices: [\"off\", \"warn\", \"error\"],\n describe: \"Native/foundational interop diagnostics mode\",\n })\n .option(\"libpath\", {\n type: \"string\",\n array: true,\n describe: \"Additional library search path(s) passed to pha-tomb\",\n }),\n async (argv) => {\n await handleContractCompile({\n source: argv.source,\n out: argv.out,\n contractName: argv[\"contract-name\"],\n protocol: argv.protocol,\n debug: argv.debug,\n nativeCheck: argv.nativecheck as NativeCheckMode | undefined,\n libpath: argv.libpath,\n });\n },\n )\n .command(\n \"deploy\",\n \"Deploy a compiled contract artifact bundle\",\n (cmd) =>\n cmd\n .option(\"rpc\", { type: \"string\", demandOption: true, describe: \"RPC endpoint\" })\n .option(\"nexus\", { type: \"string\", demandOption: true, describe: \"Nexus name\" })\n .option(\"chain\", { type: \"string\", default: \"main\", describe: \"Target chain\" })\n .option(\"wif\", { type: \"string\", demandOption: true, describe: \"WIF used to sign the transaction\" })\n .option(\"manifest\", { type: \"string\", describe: \"Path to manifest.json produced by contract compile\" })\n .option(\"contract-name\", { type: \"string\", describe: \"Contract name when using direct --script/--abi inputs\" })\n .option(\"script\", { type: \"string\", describe: \"Path to compiled .pvm file when not using --manifest\" })\n .option(\"abi\", { type: \"string\", describe: \"Path to compiled .abi file when not using --manifest\" })\n .option(\"debug\", { type: \"string\", describe: \"Optional path to .debug file when not using --manifest\" })\n .option(\"gas-price\", { type: \"number\", describe: \"Gas price passed to AllowGas\" })\n .option(\"gas-limit\", { type: \"number\", describe: \"Gas limit passed to AllowGas\" })\n .option(\"pow\", { type: \"number\", describe: \"Proof-of-work difficulty for the legacy VM transaction\" })\n .option(\"payload-hex\", { type: \"string\", describe: \"Optional transaction payload as raw hex\" })\n .option(\"dry-run\", { type: \"boolean\", describe: \"Build and sign the transaction without broadcasting\" }),\n async (argv) => {\n await handleContractBroadcast(\"deploy\", {\n rpc: argv.rpc,\n nexus: argv.nexus,\n chain: argv.chain,\n wif: argv.wif,\n manifest: argv.manifest,\n contractName: argv[\"contract-name\"],\n script: argv.script,\n abi: argv.abi,\n debug: argv.debug,\n gasPrice: argv[\"gas-price\"],\n gasLimit: argv[\"gas-limit\"],\n pow: argv.pow,\n payloadHex: argv[\"payload-hex\"],\n dryRun: argv[\"dry-run\"],\n });\n },\n )\n .command(\n \"upgrade\",\n \"Upgrade an already deployed contract artifact bundle\",\n (cmd) =>\n cmd\n .option(\"rpc\", { type: \"string\", demandOption: true, describe: \"RPC endpoint\" })\n .option(\"nexus\", { type: \"string\", demandOption: true, describe: \"Nexus name\" })\n .option(\"chain\", { type: \"string\", default: \"main\", describe: \"Target chain\" })\n .option(\"wif\", { type: \"string\", demandOption: true, describe: \"WIF used to sign the transaction\" })\n .option(\"manifest\", { type: \"string\", describe: \"Path to manifest.json produced by contract compile\" })\n .option(\"contract-name\", { type: \"string\", describe: \"Contract name when using direct --script/--abi inputs\" })\n .option(\"script\", { type: \"string\", describe: \"Path to compiled .pvm file when not using --manifest\" })\n .option(\"abi\", { type: \"string\", describe: \"Path to compiled .abi file when not using --manifest\" })\n .option(\"debug\", { type: \"string\", describe: \"Optional path to .debug file when not using --manifest\" })\n .option(\"gas-price\", { type: \"number\", describe: \"Gas price passed to AllowGas\" })\n .option(\"gas-limit\", { type: \"number\", describe: \"Gas limit passed to AllowGas\" })\n .option(\"pow\", { type: \"number\", describe: \"Proof-of-work difficulty for the legacy VM transaction\" })\n .option(\"payload-hex\", { type: \"string\", describe: \"Optional transaction payload as raw hex\" })\n .option(\"dry-run\", { type: \"boolean\", describe: \"Build and sign the transaction without broadcasting\" }),\n async (argv) => {\n await handleContractBroadcast(\"upgrade\", {\n rpc: argv.rpc,\n nexus: argv.nexus,\n chain: argv.chain,\n wif: argv.wif,\n manifest: argv.manifest,\n contractName: argv[\"contract-name\"],\n script: argv.script,\n abi: argv.abi,\n debug: argv.debug,\n gasPrice: argv[\"gas-price\"],\n gasLimit: argv[\"gas-limit\"],\n pow: argv.pow,\n payloadHex: argv[\"payload-hex\"],\n dryRun: argv[\"dry-run\"],\n });\n },\n )\n .demandCommand(1)\n .strict()\n .help();\n\n await parser.parseAsync();\n}\n"]}
@@ -28,6 +28,7 @@ export interface ExecuteContractTransactionResult {
28
28
  txHash?: string;
29
29
  success?: boolean;
30
30
  result?: string;
31
+ broadcastError?: string;
31
32
  }
32
33
  export declare function prepareContractTransaction(options: ExecuteContractTransactionOptions): PreparedContractTransaction;
33
34
  export declare function executeContractTransaction(options: ExecuteContractTransactionOptions): Promise<ExecuteContractTransactionResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/contract/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAIvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iCAAiC;IAChD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,2BAA2B,CAAC;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,iCAAiC,GACzC,2BAA2B,CAyD7B;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,gCAAgC,CAAC,CAoB3C"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/contract/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAIvB,MAAM,kBAAkB,CAAC;AAI1B,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iCAAiC;IAChD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,2BAA2B,CAAC;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,iCAAiC,GACzC,2BAA2B,CAyD7B;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,gCAAgC,CAAC,CAkC3C"}
@@ -4,6 +4,7 @@ exports.prepareContractTransaction = prepareContractTransaction;
4
4
  exports.executeContractTransaction = executeContractTransaction;
5
5
  const phantasma_sdk_ts_1 = require("phantasma-sdk-ts");
6
6
  const waitForTx_1 = require("../actions/waitForTx");
7
+ const txHash_1 = require("../rpc/txHash");
7
8
  function prepareContractTransaction(options) {
8
9
  const keys = phantasma_sdk_ts_1.PhantasmaKeys.fromWIF(options.wif);
9
10
  const fromAddress = keys.Address.Text;
@@ -56,7 +57,19 @@ async function executeContractTransaction(options) {
56
57
  };
57
58
  }
58
59
  const rpc = new phantasma_sdk_ts_1.PhantasmaAPI(options.rpc, null, options.nexus);
59
- const txHash = await rpc.sendRawTransaction(prepared.txHex);
60
+ let txHash;
61
+ try {
62
+ txHash = (0, txHash_1.requireRpcTxHash)(await rpc.sendRawTransaction(prepared.txHex), `${options.operation} transaction`);
63
+ }
64
+ catch (err) {
65
+ return {
66
+ prepared,
67
+ dryRun: false,
68
+ success: false,
69
+ result: "",
70
+ broadcastError: err instanceof Error ? err.message : String(err),
71
+ };
72
+ }
60
73
  const waitResult = await (0, waitForTx_1.waitForTx)(rpc, txHash);
61
74
  return {
62
75
  prepared,
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/contract/deploy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ContractArtifactBundle,\n ContractTxHelper,\n PhantasmaAPI,\n PhantasmaKeys,\n} from \"phantasma-sdk-ts\";\nimport { waitForTx } from \"../actions/waitForTx\";\n\nexport type ContractOperation = \"deploy\" | \"upgrade\";\n\nexport interface PreparedContractTransaction {\n operation: ContractOperation;\n contractName: string;\n fromAddress: string;\n scriptHex: string;\n txHex: string;\n scriptBytes: number;\n abiBytes: number;\n}\n\nexport interface ExecuteContractTransactionOptions {\n operation: ContractOperation;\n rpc: string;\n nexus: string;\n chain?: string;\n wif: string;\n bundle: ContractArtifactBundle;\n gasPrice?: number;\n gasLimit?: number;\n proofOfWork?: number;\n payloadHex?: string;\n dryRun?: boolean;\n}\n\nexport interface ExecuteContractTransactionResult {\n prepared: PreparedContractTransaction;\n dryRun: boolean;\n txHash?: string;\n success?: boolean;\n result?: string;\n}\n\nexport function prepareContractTransaction(\n options: ExecuteContractTransactionOptions,\n): PreparedContractTransaction {\n const keys = PhantasmaKeys.fromWIF(options.wif);\n const fromAddress = keys.Address.Text;\n\n const scriptHex =\n options.operation === \"deploy\"\n ? ContractTxHelper.buildDeployScriptFromBundle(\n options.bundle,\n fromAddress,\n options.gasPrice,\n options.gasLimit,\n )\n : ContractTxHelper.buildUpgradeScriptFromBundle(\n options.bundle,\n fromAddress,\n options.gasPrice,\n options.gasLimit,\n );\n\n const txHex =\n options.operation === \"deploy\"\n ? ContractTxHelper.buildDeployTransactionAndEncode({\n nexus: options.nexus,\n chain: options.chain,\n signer: keys,\n from: fromAddress,\n contractName: options.bundle.contractName,\n script: options.bundle.script,\n abi: options.bundle.abi,\n gasPrice: options.gasPrice,\n gasLimit: options.gasLimit,\n proofOfWork: options.proofOfWork,\n payloadHex: options.payloadHex,\n })\n : ContractTxHelper.buildUpgradeTransactionAndEncode({\n nexus: options.nexus,\n chain: options.chain,\n signer: keys,\n from: fromAddress,\n contractName: options.bundle.contractName,\n script: options.bundle.script,\n abi: options.bundle.abi,\n gasPrice: options.gasPrice,\n gasLimit: options.gasLimit,\n proofOfWork: options.proofOfWork,\n payloadHex: options.payloadHex,\n });\n\n return {\n operation: options.operation,\n contractName: options.bundle.contractName,\n fromAddress,\n scriptHex,\n txHex,\n scriptBytes: options.bundle.script.length,\n abiBytes: options.bundle.abi.length,\n };\n}\n\nexport async function executeContractTransaction(\n options: ExecuteContractTransactionOptions,\n): Promise<ExecuteContractTransactionResult> {\n const prepared = prepareContractTransaction(options);\n if (options.dryRun) {\n return {\n prepared,\n dryRun: true,\n };\n }\n\n const rpc = new PhantasmaAPI(options.rpc, null, options.nexus);\n const txHash = await rpc.sendRawTransaction(prepared.txHex);\n const waitResult = await waitForTx(rpc, txHash);\n\n return {\n prepared,\n dryRun: false,\n txHash,\n success: waitResult.success,\n result: waitResult.result,\n };\n}\n"]}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/contract/deploy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ContractArtifactBundle,\n ContractTxHelper,\n PhantasmaAPI,\n PhantasmaKeys,\n} from \"phantasma-sdk-ts\";\nimport { waitForTx } from \"../actions/waitForTx\";\nimport { requireRpcTxHash } from \"../rpc/txHash\";\n\nexport type ContractOperation = \"deploy\" | \"upgrade\";\n\nexport interface PreparedContractTransaction {\n operation: ContractOperation;\n contractName: string;\n fromAddress: string;\n scriptHex: string;\n txHex: string;\n scriptBytes: number;\n abiBytes: number;\n}\n\nexport interface ExecuteContractTransactionOptions {\n operation: ContractOperation;\n rpc: string;\n nexus: string;\n chain?: string;\n wif: string;\n bundle: ContractArtifactBundle;\n gasPrice?: number;\n gasLimit?: number;\n proofOfWork?: number;\n payloadHex?: string;\n dryRun?: boolean;\n}\n\nexport interface ExecuteContractTransactionResult {\n prepared: PreparedContractTransaction;\n dryRun: boolean;\n txHash?: string;\n success?: boolean;\n result?: string;\n broadcastError?: string;\n}\n\nexport function prepareContractTransaction(\n options: ExecuteContractTransactionOptions,\n): PreparedContractTransaction {\n const keys = PhantasmaKeys.fromWIF(options.wif);\n const fromAddress = keys.Address.Text;\n\n const scriptHex =\n options.operation === \"deploy\"\n ? ContractTxHelper.buildDeployScriptFromBundle(\n options.bundle,\n fromAddress,\n options.gasPrice,\n options.gasLimit,\n )\n : ContractTxHelper.buildUpgradeScriptFromBundle(\n options.bundle,\n fromAddress,\n options.gasPrice,\n options.gasLimit,\n );\n\n const txHex =\n options.operation === \"deploy\"\n ? ContractTxHelper.buildDeployTransactionAndEncode({\n nexus: options.nexus,\n chain: options.chain,\n signer: keys,\n from: fromAddress,\n contractName: options.bundle.contractName,\n script: options.bundle.script,\n abi: options.bundle.abi,\n gasPrice: options.gasPrice,\n gasLimit: options.gasLimit,\n proofOfWork: options.proofOfWork,\n payloadHex: options.payloadHex,\n })\n : ContractTxHelper.buildUpgradeTransactionAndEncode({\n nexus: options.nexus,\n chain: options.chain,\n signer: keys,\n from: fromAddress,\n contractName: options.bundle.contractName,\n script: options.bundle.script,\n abi: options.bundle.abi,\n gasPrice: options.gasPrice,\n gasLimit: options.gasLimit,\n proofOfWork: options.proofOfWork,\n payloadHex: options.payloadHex,\n });\n\n return {\n operation: options.operation,\n contractName: options.bundle.contractName,\n fromAddress,\n scriptHex,\n txHex,\n scriptBytes: options.bundle.script.length,\n abiBytes: options.bundle.abi.length,\n };\n}\n\nexport async function executeContractTransaction(\n options: ExecuteContractTransactionOptions,\n): Promise<ExecuteContractTransactionResult> {\n const prepared = prepareContractTransaction(options);\n if (options.dryRun) {\n return {\n prepared,\n dryRun: true,\n };\n }\n\n const rpc = new PhantasmaAPI(options.rpc, null, options.nexus);\n let txHash: string;\n try {\n txHash = requireRpcTxHash(\n await rpc.sendRawTransaction(prepared.txHex),\n `${options.operation} transaction`,\n );\n } catch (err) {\n return {\n prepared,\n dryRun: false,\n success: false,\n result: \"\",\n broadcastError: err instanceof Error ? err.message : String(err),\n };\n }\n const waitResult = await waitForTx(rpc, txHash);\n\n return {\n prepared,\n dryRun: false,\n txHash,\n success: waitResult.success,\n result: waitResult.result,\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare function requireRpcTxHash(rpcResult: unknown, context: string): string;
2
+ //# sourceMappingURL=txHash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"txHash.d.ts","sourceRoot":"","sources":["../../src/rpc/txHash.ts"],"names":[],"mappings":"AAYA,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,MAAM,GACd,MAAM,CAuBR"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requireRpcTxHash = requireRpcTxHash;
4
+ function formatUnknown(value) {
5
+ if (typeof value === "string") {
6
+ return value;
7
+ }
8
+ try {
9
+ return JSON.stringify(value);
10
+ }
11
+ catch {
12
+ return String(value);
13
+ }
14
+ }
15
+ function requireRpcTxHash(rpcResult, context) {
16
+ if (typeof rpcResult === "string" && rpcResult.trim().length > 0) {
17
+ return rpcResult;
18
+ }
19
+ if (rpcResult && typeof rpcResult === "object") {
20
+ const record = rpcResult;
21
+ if (typeof record.hash === "string" && record.hash.trim().length > 0) {
22
+ return record.hash;
23
+ }
24
+ if ("error" in record) {
25
+ const errorValue = record.error;
26
+ const errorText = typeof errorValue === "string" && errorValue.trim().length > 0
27
+ ? errorValue
28
+ : formatUnknown(errorValue);
29
+ throw new Error(`${context} RPC error: ${errorText}`);
30
+ }
31
+ }
32
+ throw new Error(`${context} RPC returned a non-hash result: ${formatUnknown(rpcResult)}`);
33
+ }
34
+ //# sourceMappingURL=txHash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"txHash.js","sourceRoot":"","sources":["../../src/rpc/txHash.ts"],"names":[],"mappings":";;AAYA,4CA0BC;AAtCD,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAC9B,SAAkB,EAClB,OAAe;IAEf,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,SAAoC,CAAC;QAEpD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;YAChC,MAAM,SAAS,GACb,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;gBAC5D,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,eAAe,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,oCAAoC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC5F,CAAC","sourcesContent":["function formatUnknown(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function requireRpcTxHash(\n rpcResult: unknown,\n context: string,\n): string {\n if (typeof rpcResult === \"string\" && rpcResult.trim().length > 0) {\n return rpcResult;\n }\n\n if (rpcResult && typeof rpcResult === \"object\") {\n const record = rpcResult as Record<string, unknown>;\n\n if (typeof record.hash === \"string\" && record.hash.trim().length > 0) {\n return record.hash;\n }\n\n if (\"error\" in record) {\n const errorValue = record.error;\n const errorText =\n typeof errorValue === \"string\" && errorValue.trim().length > 0\n ? errorValue\n : formatUnknown(errorValue);\n throw new Error(`${context} RPC error: ${errorText}`);\n }\n }\n\n throw new Error(`${context} RPC returned a non-hash result: ${formatUnknown(rpcResult)}`);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pha-deploy",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "CLI for Phantasma token and contract lifecycle workflows",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",