FA2 Fellowship | Session 3: FA2 Contracts
The Tezos Foundation and the Museum of the Moving Image launched the FA2 Fellowship as part of their 2025-2026 Partnership, with the aim of empowering artists and builders to learn from industry experts about the Tezos blockchain smart contract applications and develop their own projects.
The third FA2 Fellowship session, led by Adebola Adeniran, Developer Relations Engineer at Trilitech, revisited the FA2 standard through a focused case study. The session demonstrated how creators can layer custom rules, interactivity, and evolving on‑chain states to build dynamic and interactive on-chain projects and artworks.
What is the FA2 standard?
FA2 is the unified token standard for Tezos. It is designed for interoperability. It provides a uniform way for wallets, marketplaces, and indexers to know which account owns which token IDs, how to transfer them, and who is authorized to manage them. It also defines how to attach basic immutable metadata, such as a token’s name, symbol, and a link to its visual representation (usually on IPFS).
Crucially, FA2 does not define how a token behaves within a specific application. It does not mandate royalty structures, minting prices, supply caps, or breeding mechanics. One could describe FA2 as a standardized shipping container with an independent behavioral logic inside the container. Behavioral logic is the soul of the smart contract that exists independently of the FA2 standard.
Adebola highlights three pillars of this logic:
Generativity: Defining the initial state and rules at the moment of minting.
Interactivity: Allowing users (usually owners) to trigger actions that update the token's state.
Distribution: Defining the economic and scarcity rules, such as pricing and supply limits.
Case Study: The Interactive Passport NFT
To demonstrate these concepts, Adebola examines a Passport NFT smart contract built using SmartPy and fully compliant with FA2 standard. The smart contract defines an on-chain Passport that the owner can stamp with digital visas and customize visually.
To follow the concepts closely, open the Passport smart contract.
1. Creating a Custom State
A typical FA2 contract gives us two things:
a ledger (who owns which token)
token_metadata (usually static, off chain IPFS links)
However interactive NFTs need more than static metadata. They need a memory.
To achieve this, we need to implement a custom record, t_passport, which stores the evolving attributes of each token. These records live in a dedicated BigMap directly in contract storage–fully mutable, fully on-chain.
This separation is powerful:
Standard metadata stays immutable and off-chain
Custom state becomes dynamic, flexible, and entirely programmable
This is where experimentation begins.
2. Distribution & Generativity
The mint_passport entrypoint defines how tokens come into the world and what they look like at birth.
We apply a light layer of constraints on top of the FA2 mint:
Scarcity: Only 20 passports can ever exist
Monetization: Each mint requires exactly 0.1 tez
Generativity: Initialize the passports BigMap for the new token ID with a default state: a black spine color and an empty list of stamps
This is the generative seed. From here, every token can grow in its own direction.
Try it out yourself:
Get some ghostnet tez from this faucet: https://faucet.ghostnet.teztnets.com/
Go to fa2-passport.vercel.app, connect your wallet and issue a passport.
Add a stamp with your country’s flag emoji
Change the spine color on your minted passport
3. Interactivity & Token Evolution
The magic of dynamic smart contracts is that the NFT doesn’t end at mint, that’s where it begins.
Two entrypoints, stamp and set_spine_color, allow the owner to modify their passport over time. These interactions update the token’s custom state in the passports BigMap.
To keep things fair and secure, each entrypoint checks ownership against the FA2 ledger. Only the current holder can change the token’s evolving attributes.
This is where Passport NFTs shift from static collectibles to dynamic artifacts.
Conclusion
The FA2 standard gives developers the foundation they need to issue tokens on Tezos—but it’s the behavioral logic layered on top that brings those tokens to life. By combining custom storage maps with interactive entrypoints, builders can craft rich, evolving on‑chain experiences that extend far beyond the initial mint ceremony.
The Passport case study makes this clear: an NFT isn’t merely a pointer to a file. It’s a programmable software object. Its value can emerge not only from how it looks at mint, but from its accumulated history, the choices of its owner, and the rules encoded directly into its contract.
As the Tezos ecosystem continues to grow, we’re likely to see creators push this even further—experimenting with increasingly sophisticated behavioral logic to create NFTs that are dynamic, participatory, and alive in ways we’re only beginning to explore.
Learning and Documentation:
OpenTezos.com → FA2 Smart Contract Section
SmartPy.io → Interactive environment for writing and testing contracts. IDE has templates you can build on.
Tezos Docs → Developer documentation
Explorer: https://tzkt.io/
Explorer for Developers: https://better-call.dev/
TypeScript library: https://taquito.io/docs/