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:

  1. Load wallets (Customer, Policy)

  2. Create a native script using our Native Script utilities

  3. Build a mint payload for one CIP-25 asset

  4. Call transactions/build

  5. Sign with the Policy & Customer keys (customer signature is done in the backend for simplicity)

  6. Submit the transaction

  7. 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...)

circle-info

New to Cardano? A "signing key" (skey) is your wallet's private key that proves you own the wallet. The "base address" is like your bank account number where ADA is stored. If you don't have wallets, see the Wallet CLI documentation THIS SHOULD BE STORED SECURELY AND NEVER SHARED OR EXPOSED. See the documentation for best practices.

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 slots

  • getKeyhash(address: string): Promise<string> - Extracts payment key hash from addresses

  • createNativeScript(keyHash: string, ttl: number): Promise<{policyId: string, script: string}> - Creates time-locked native scripts

  • API configuration - Anvil API endpoints and headers

💡 Tip: The anvil-api-examples repositoryarrow-up-right 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.ts and utils/constant.ts exist

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:

Deno Examplearrow-up-right

HTMX + Hono + Weld Examplearrow-up-right

Next.js + Weld Examplearrow-up-right

Last updated

Was this helpful?