Deno & Fetch
A Deno-based script for minting CIP-25 assets on the Cardano blockchain using the Anvil API. This guide provides a complete, example for building, signing, and submitting a transaction to mint a CIP-2
Quick-Start Example
This streamlined tutorial shows how to mint a CIP-25 NFT on Cardano using Deno + Fetch and the Anvil API. Everything lives in a single file (mint.ts) so you can copy-paste and run.
We'll:
Load wallets (Customer, Policy)
Create a native script using our Native Script utilities
Build a mint payload for one CIP-25 asset
Call
transactions/buildSign with the Policy & Customer keys (customer signature is done in the backend for simplicity)
Submit the transaction
Verify the NFT on-chain
Prerequisites
Two Wallets – You'll need two wallets with these fields:
Customer Wallet: Pays fees, receives the minted NFT
base_address_preprod: Testnet address (addr_test1...)skey: Signing key (ed25519e_sk1...)
Policy Wallet: Controls minting policy
base_address_preprod: Testnet address (addr_test1...)skey: Signing key (ed25519e_sk1...)
Anvil API Key – A valid Anvil API key. See Authentication.
Utility Helpers – Import helpers from the utilities-functions guide to keep this file short.
Project Structure
For the absolute minimum setup, you only need:
Quick-Start Script
Utility Files Reference
You'll need to create the utility files. See the Utility Functions documentation for detailed API endpoint information and examples.
The utility files provide these key functions:
timeToSlot(date: Date): Promise<number>- Converts timestamps to Cardano slotsgetKeyhash(address: string): Promise<string>- Extracts payment key hash from addressescreateNativeScript(keyHash: string, ttl: number): Promise<{policyId: string, script: string}>- Creates time-locked native scriptsAPI configuration - Anvil API endpoints and headers
💡 Tip: The anvil-api-examples repository contains the most up-to-date utility functions and is the recommended source.
Running the Script
Troubleshooting
Common Issues
Error: "Module not found"
Check that your import paths match your project structure
Ensure
utils/shared.tsandutils/constant.tsexist
Error: "Failed to get key hash for address"
Verify your wallet addresses are valid testnet addresses
Check that wallet files contain proper JSON format
Ensure addresses start with
addr_test1
Error: "API call failed: Input validation failed"
Usually means wallet address parsing failed
Double-check wallet file format and addresses
Error: "Unable to build tx"
Ensure customer wallet has sufficient ADA for fees
Check that API key is valid
Verify network connectivity
Full Example Script
For complete, fully-annotated examples see the examples repository:
Last updated
Was this helpful?

