Skip to main content

Setup

Import the SDK and create a wallet:
import { MnemonicIdentity, Wallet } from '@arkade-os/sdk'

const identity = MnemonicIdentity.fromMnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon")

const wallet = await Wallet.create({
  identity,
  arkServerUrl: 'https://arkade.computer',
})
Your wallet needs an offchain balance to cover transaction fees. See Receiving Payments to fund your wallet.

Basic Issuance

Create a new asset with a fixed supply:
const { arkTxId, assetId } = await wallet.assetManager.issue({
  amount: 1000,
})
The returned assetId is the permanent identifier for this asset — see Asset ID for how it’s calculated. Since no control asset is specified, the supply is permanently capped at 1000 units.
Without a control asset, the supply cannot be increased after issuance.

Issuance with a Control Asset

To retain the ability to reissue (increase supply), reference a Control Asset during issuance. The control asset is itself an Arkade Asset that authorizes supply changes. A common pattern is to first issue a control asset, then use it to authorize the main asset:
// 1. issue a control asset (a simple 1-unit asset)
const { assetId: controlAssetId } = await wallet.assetManager.issue({
  amount: 1,
})

// 2. issue the main asset, referencing the control asset
const { assetId } = await wallet.assetManager.issue({
  amount: 500,
  controlAssetId,
})

console.log('Asset ID:', assetId)
console.log('Control Asset ID:', controlAssetId)
As long as you hold the control asset, you can reissue more units of the main asset.
The control asset is a regular Arkade Asset. Transferring or burning it transfers or revokes reissuance authority. See Control Assets for the full rules.

Issuance with Metadata

Attach metadata at issuance time. Metadata is immutable once set — see Asset Metadata for how it’s committed.
const { assetId } = await wallet.assetManager.issue({
  amount: 1000,
  metadata: {
    name: 'Test Asset',
    ticker: 'TA',
    decimals: 2,
    icon: 'https://example.com/icon.png',
  },
})

Known Metadata Fields

FieldTypeDescription
namestringHuman-readable asset name
tickerstringShort symbol (e.g., “TA”)
decimalsnumberDecimal places
iconstringURL to an image for display
You can include additional custom fields beyond these — AssetMetadata extends Record<string, unknown>. To read back the metadata after issuance, see Verify Asset Metadata.

Next Steps