Minting Assets
Lucid Evolution provides comprehensive tools for minting and burning tokens on the Cardano blockchain, supporting native scripts and Plutus-based minting policies.
Minting Policy
First, we need to create a minting policy for the assets we want to mint.
In this example, we'll use a native script time-locking policy with our wallet as the required signer:
const address = await lucid.wallet().address();
const mintingPolicy = scriptFromNative({
type: "all",
scripts: [
{ type: "sig", keyHash: paymentCredentialOf(address).hash },
{
type: "before",
slot: unixTimeToSlot(lucid.config().network, Date.now() + 1000000),
},
],
});
Native scripts support various constructs: sig (signature), all (and), any (or), at_least (m-of-n), before (time lock), and after (time lock).
Derive the Policy ID
Next we derive the policy id from the minting policy script:
const policyId = mintingPolicyToId(mintingPolicy);
Mint Assets
Now we can mint the intended tokens according to the policy logic:
const tx = await lucid
.newTx()
.mintAssets({
[policyId + fromText("MyToken")]: 1n,
[policyId + fromText("MyOtherToken")]: 1n,
})
.pay.ToAddress(address, { [policyId + fromText("MyToken")]: 1n })
.validTo(Date.now() + 900000)
.attach.MintingPolicy(mintingPolicy)
.complete();
const signed = await tx.sign.withWallet().complete();
const txHash = await signed.submit();
To burn tokens, use negative values with the mintAssets function:
const tx = await lucid
.newTx()
.mintAssets({
[policyId + fromText("MyToken")]: -1n,
[policyId + fromText("MyOtherToken")]: -1n,
})
.validTo(Date.now() + 900000)
.attach.MintingPolicy(mintingPolicy)
.complete();
const signed = await tx.sign.withWallet().complete();
const txHash = await signed.submit();
Minting tokens creates them, but doesn't automatically send them to an
address, use pay.ToAddress()
to send the newly minted tokens to a specific
address.
Important Considerations
- All assets minted in a single
mintAssets
call should be of the same policy id - You can chain multiple
mintAssets
calls if you need to mint assets with different policy ids - The minting policy must be attached to the transaction using
attach.MintingPolicy
- Evolution supports
Native
,PlutusV1/V2/V3
minting policies - When using Plutus scripts, make sure to provide an appropriate redeemer