pha-deploy 0.4.0 → 0.5.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.
- package/README.md +36 -8
- package/dist/actions/createSeries.d.ts.map +1 -1
- package/dist/actions/createSeries.js +2 -1
- package/dist/actions/createSeries.js.map +1 -1
- package/dist/actions/createToken.d.ts.map +1 -1
- package/dist/actions/createToken.js +2 -1
- package/dist/actions/createToken.js.map +1 -1
- package/dist/actions/mintFungibleToken.d.ts.map +1 -1
- package/dist/actions/mintFungibleToken.js +2 -1
- package/dist/actions/mintFungibleToken.js.map +1 -1
- package/dist/actions/mintNftToken.d.ts.map +1 -1
- package/dist/actions/mintNftToken.js +2 -1
- package/dist/actions/mintNftToken.js.map +1 -1
- package/dist/cli-contract.d.ts.map +1 -1
- package/dist/cli-contract.js +51 -2
- package/dist/cli-contract.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -2
- package/dist/cli.js.map +1 -1
- package/dist/contract/compiler.d.ts +2 -2
- package/dist/contract/compiler.d.ts.map +1 -1
- package/dist/contract/compiler.js +20 -3
- package/dist/contract/compiler.js.map +1 -1
- package/dist/contract/deploy.d.ts +4 -1
- package/dist/contract/deploy.d.ts.map +1 -1
- package/dist/contract/deploy.js +102 -31
- package/dist/contract/deploy.js.map +1 -1
- package/dist/rpc/txHash.d.ts +2 -0
- package/dist/rpc/txHash.d.ts.map +1 -0
- package/dist/rpc/txHash.js +34 -0
- package/dist/rpc/txHash.js.map +1 -0
- package/package.json +1 -1
|
@@ -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 ProofOfWork,\n PhantasmaAPI,\n PhantasmaKeys,\n ScriptBuilder,\n Transaction,\n} from \"phantasma-sdk-ts\";\nimport { waitForTx } from \"../actions/waitForTx\";\nimport { requireRpcTxHash } from \"../rpc/txHash\";\n\nexport type ContractOperation = \"deploy\" | \"upgrade\" | \"attach\";\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 attachSymbol?: string;\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 attachSymbol?: string;\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\nfunction normalizeAttachSymbol(\n requestedSymbol: string | undefined,\n bundle: ContractArtifactBundle,\n): string {\n const attachSymbol = (requestedSymbol ?? bundle.contractName).trim();\n if (!attachSymbol) {\n throw new Error(\"attach symbol cannot be empty\");\n }\n\n return attachSymbol;\n}\n\nfunction normalizeLifecycleGas(\n value: number | undefined,\n fallback: number,\n label: string,\n): number {\n const numeric = value ?? fallback;\n if (!Number.isSafeInteger(numeric) || numeric <= 0) {\n throw new Error(`${label} must be a positive safe integer`);\n }\n\n return numeric;\n}\n\nfunction buildAttachScript(\n bundle: ContractArtifactBundle,\n fromAddress: string,\n attachSymbol: string,\n gasPrice?: number,\n gasLimit?: number,\n): string {\n // Attach must go through Nexus interop because it binds an already-created native token to a VM\n // bundle. Runtime.DeployContract/UpgradeContract target a different lifecycle.\n const resolvedGasPrice = normalizeLifecycleGas(\n gasPrice,\n ContractTxHelper.DefaultGasPrice,\n \"gasPrice\",\n );\n const resolvedGasLimit = normalizeLifecycleGas(\n gasLimit,\n ContractTxHelper.DefaultGasLimit,\n \"gasLimit\",\n );\n const nullAddress = new ScriptBuilder().NullAddress;\n\n return new ScriptBuilder()\n .BeginScript()\n .AllowGas(fromAddress, nullAddress, resolvedGasPrice, resolvedGasLimit)\n .CallInterop(\"Nexus.AttachTokenContract\", [\n fromAddress,\n attachSymbol,\n bundle.script,\n bundle.abi,\n ])\n .SpendGas(fromAddress)\n .EndScript();\n}\n\nfunction buildAndSignTransaction(\n options: ExecuteContractTransactionOptions,\n keys: PhantasmaKeys,\n scriptHex: string,\n): string {\n const nexus = options.nexus.trim();\n const chain = (options.chain ?? \"main\").trim();\n if (!nexus) {\n throw new Error(\"nexus cannot be empty\");\n }\n if (!chain) {\n throw new Error(\"chain cannot be empty\");\n }\n\n const payloadHex = options.payloadHex?.trim() ?? \"\";\n const tx = new Transaction(\n nexus,\n chain,\n scriptHex,\n new Date(Date.now() + 5 * 60 * 1000),\n payloadHex,\n );\n const proofOfWork = options.proofOfWork ?? ProofOfWork.Minimal;\n if (proofOfWork > 0) {\n tx.mineTransaction(proofOfWork);\n }\n tx.signWithKeys(keys);\n return tx.ToStringEncoded(true).toUpperCase();\n}\n\nexport function prepareContractTransaction(\n options: ExecuteContractTransactionOptions,\n): PreparedContractTransaction {\n const keys = PhantasmaKeys.fromWIF(options.wif);\n const fromAddress = keys.Address.Text;\n const attachSymbol =\n options.operation === \"attach\"\n ? normalizeAttachSymbol(options.attachSymbol, options.bundle)\n : undefined;\n\n const scriptHex =\n options.operation === \"attach\"\n ? buildAttachScript(\n options.bundle,\n fromAddress,\n attachSymbol as string,\n options.gasPrice,\n options.gasLimit,\n )\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 === \"attach\"\n ? buildAndSignTransaction(options, keys, scriptHex)\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 ...(attachSymbol ? { attachSymbol } : {}),\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 @@
|
|
|
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"]}
|