This skill should be used when a user wants to mint, inscribe, or create an ordinal or NFT on BSV blockchain — such as 'mint this image as an ordinal', 'create an NFT on BSV', 'inscribe this file on-chain', 'how do I create an ordinal collection', 'I want to permanently store a file on blockchain', or 'how much does it cost to mint'. Uses @1sat/actions from the 1sat-sdk to construct and broadcast inscription transactions via a BRC-100 wallet.
From 1satnpx claudepluginhub b-open-io/claude-plugins --plugin 1satThis skill is limited to using the following tools:
scripts/mint.tsDispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Executes pre-written implementation plans: critically reviews, follows bite-sized steps exactly, runs verifications, tracks progress with checkpoints, uses git worktrees, stops on blockers.
Guides idea refinement into designs: explores context, asks questions one-by-one, proposes approaches, presents sections for approval, writes/review specs before coding.
Mint new ordinals/NFTs on BSV blockchain using @1sat/actions from the 1sat-sdk.
# Mint image ordinal
bun run <SKILL_DIR>/scripts/mint.ts <wif> <image-path>
# Mint with metadata
bun run <SKILL_DIR>/scripts/mint.ts <wif> <file-path> <metadata-json>
The inscribe action from @1sat/actions handles inscription creation:
import { inscribe, createContext } from '@1sat/actions'
import { OneSatWallet } from '@1sat/wallet'
// Set up context with BRC-100 wallet
const ctx = createContext(wallet, { chain: 'main' })
// Inscribe a file
const result = await inscribe.execute(ctx, {
base64Content: btoa(fileContent), // or readFileSync(path).toString('base64')
contentType: 'image/png', // MIME type
map: { // Optional MAP metadata
app: 'myapp',
type: 'image',
name: 'My NFT'
},
signWithBAP: true, // Optional: sign with BAP identity (Sigma protocol)
})
if (result.txid) {
console.log('Inscribed:', result.txid)
} else {
console.error('Error:', result.error)
}
Set signWithBAP: true to sign the inscription with the wallet's BAP identity using the Sigma protocol.
This uses a two-transaction flow: an anchor transaction is created first (not broadcast), then the inscription transaction spends the anchor output, embedding a Sigma signature in the locking script. Both transactions are broadcast together atomically.
The signature proves authorship and is verifiable on-chain using the sigma-protocol library.
const result = await inscribe.execute(ctx, {
base64Content: fileB64,
contentType: 'image/png',
map: { app: 'myapp', name: 'Signed NFT' },
signWithBAP: true,
})
Minting creates:
To create (deploy) a new fungible token, use deployBsv21Token from @1sat/core:
import { deployBsv21Token, type DeployBsv21TokenConfig } from '@1sat/core'
// DeployBsv21TokenConfig requires: symbol, icon, utxos, initialDistribution
const result = await deployBsv21Token({
symbol: 'MYTOKEN',
decimals: 8,
icon: iconOutpoint, // outpoint of icon inscription, or IconInscription object
utxos: paymentUtxos,
initialDistribution: {
address: ownerAddress,
tokens: 21_000_000,
},
destinationAddress: ownerAddress,
paymentPk: paymentPrivateKey,
changeAddress: changeAddress,
})
@1sat/wallet, @1sat/wallet-node, or @1sat/wallet-remote)@1sat/actions for inscription creation; @1sat/core for token deploymentInscription cost depends on file size:
satsPerKb (default varies)Ordinals can include AIP (Author Identity Protocol) signatures to prove authorship via BAP identity. The AIP signature links the ordinal to the creator's BAP identity key — verifiable by anyone on-chain.
OP_RETURN | <inscription data> | "|" | AIP_PREFIX | "BITCOIN_ECDSA" | <signing_address> | <signature>
The signing address resolves to a BAP identity via the overlay, establishing provenance.
Ordinals with specific origin txids can serve as subscription NFTs for Sigma Identity:
When minting subscription NFTs, ensure the collection's origin txid is registered in the Sigma subscription config.
Returns:
txid)rawtx, optional)error, if failed)