Carbon Workflows

Carbon tokens are native, VM-less assets. For NFTs, Carbon provides fast token creation, series creation, and minting using specialized chain calls.

Prerequisites

  • Symbol must be uppercase A-Z (for example MYNFT).

  • Token metadata is required and must include name, icon, url, description.

  • icon must be a base64 data URI (PNG/JPEG/SVG).

  • NFT tokens require schemas (series, ROM, RAM) via TokenSchemasBuilder.

If you fetch schemas from RPC (getToken), convert them using vmStructSchemaFromRpcResult before passing to builders.

1) Create a Carbon Token (NFT)

import {
  Bytes32,
  CreateTokenFeeOptions,
  CreateTokenTxHelper,
  IntX,
  PhantasmaAPI,
  PhantasmaKeys,
  TokenInfoBuilder,
  TokenMetadataBuilder,
  TokenSchemasBuilder,
} from "phantasma-sdk-ts";

async function main() {
  const keys = PhantasmaKeys.fromWIF("YOUR_WIF");
  const creatorPk = new Bytes32(keys.PublicKey);

  const tokenSchemas = TokenSchemasBuilder.prepareStandard(true);

  const metadata = TokenMetadataBuilder.buildAndSerialize({
    name: "My NFT",
    description: "Example NFT",
    icon: "data:image/png;base64,...",
    url: "https://example.com",
  });

  const tokenInfo = TokenInfoBuilder.build(
    "MYNFT",
    IntX.fromBigInt(0n),
    true,
    0,
    creatorPk,
    metadata,
    tokenSchemas,
  );

  const feeOptions = new CreateTokenFeeOptions();
  const maxData = 1_000_000_000n;

  const txHex = CreateTokenTxHelper.buildTxAndSignHex(
    tokenInfo,
    keys,
    feeOptions,
    maxData,
  );

  const rpc = new PhantasmaAPI("https://testnet.phantasma.info/rpc", undefined as any, "testnet");
  const txHash = await rpc.sendCarbonTransaction(txHex);

  const txInfo = await rpc.getTransaction(txHash);
  const carbonTokenId = BigInt(CreateTokenTxHelper.parseResult(txInfo.result));
  console.log("Carbon token id:", carbonTokenId.toString());
}

main().catch(console.error);

2) Create a Token Series

3) Mint a Carbon NFT

Wallet Signing (Frontend)

For frontend flows, build a TxMsg using the same helpers and sign with:

  • PhantasmaLink.signCarbonTxAndBroadcast(txMsg, ...)

  • EasyConnect.signCarbonTransaction(txMsg, ...)

These require a wallet that supports Phantasma Link v4.

Last updated