Knowledge Base
  • 👨‍🎨For creators
    • 👋Intro to creating with Highlight
    • 📜Project quick start guides
      • Launch an open edition
      • Launch a delayed reveal collection
      • Launch a 1-of-1 auction
      • Launch a generative artwork
      • Launch an open edition generative artwork
      • Launch a PFP project
      • Launch a generative, image-based PFP project
      • Launch a ranked auction
      • Launch an onchain project
      • Launch a collector's choice project
      • Ongoing drops with the same contract
    • 🎇Learn the creation flows
      • ERC-721 vs. ERC-1155 Token Standards
      • Edition flow
      • Generative flow
      • Series flow
      • The importance of testing your collections
    • 👩‍💻Use embeds to build custom mint sites
      • Case Study: How Superchain Chiblings launched a fully custom website on Highlight x Base
      • Running a collector's choice mint via embeds
    • 💸Selling your NFTs
      • Available sale methods
        • Ranked auction
        • Dutch auction
        • English auction
      • Setting up gates (allowlists)
      • Combining sale methods
      • Configuring payment currencies
        • Accepting ERC20 payments
        • Accepting credit card payments
      • Payouts, royalties & splits
      • Livestream on the mint page
    • 🛠️Managing your collections
      • Hiding a collection
      • Mint creator reserves
      • Airdropping tokens
      • Updating collection metadata
      • Getting verified
      • Sponsored mints
      • Reducing collection size
    • 🔮Generative & onchain art tools
      • Highlight Studio
      • Onchain file system
      • Storing SVGs onchain
      • Downloading token metadata
      • How onchain is Highlight?
    • 🌐Integrations & ecosystem
      • Farcaster
      • Paragraph.xyz
      • Foundation Worlds
        • Importing a collection to Worlds
        • Foundation × Highlight FAQs
      • Export generative art from Cables.gl
      • Highlight on mobile
    • 🤓Advanced
      • Reusing contracts
      • Randomization algorithm
      • Upload asset specifications
      • Fulfilling auctions for non-transferable tokens
    • ✨About Highlight
      • Artwork policies
      • Highlight fees
  • For Collectors
    • 💳Buying
      • Buying on secondary
      • Exchange currency across chains
  • 💲Selling
    • Selling on secondary
    • Instantly sell & relist NFTs
  • 🔔Notifications
  • For developers
    • Intro to the Highlight Protocol
    • NFT contracts
      • Official addresses
      • ERC721GeneralSequence
      • ERC721General
      • ERC721EditionsDFS
      • ERC721SingleEditionDFS
      • ERC721GenerativeOnchain
      • Deprecated contracts
    • Custom metadata renderers
      • Example custom renderers
    • Minting protocol
      • Mint Managers
      • Mint Mechanics
        • Dutch auction mechanic
        • Ranked auction mechanic
        • Verisart mechanic
        • Seed-based mechanic
        • Auction Manager *
      • Referral Manager
    • Management modules
      • TokenManager
      • RoyaltyManager
    • Observability
    • Onchain File Storage
    • Mint fee oracle
    • Protocol rewards
      • Creator rewards
      • Mint referral rewards
    • Crosschain burn / redeem
  • Official links
    • ✨Highlight website
    • 🟣Highlight Farcaster
    • 🐦Highlight Twitter
    • 👋About us
Powered by GitBook
On this page
  1. For developers
  2. Management modules

TokenManager

PreviousManagement modulesNextRoyaltyManager

Last updated 11 months ago

TokenManagers can be applied to your contracts in order to govern how your tokens can be transferred or have their metadata updated. You can write your own custom logic, set the TokenManager to your contract, and your hooks will be invoked before the metadata update function or the transfer function can be successfully invoked.

A simple example of how you might use this is to freeze the metadata for your whole collection, or specific tokens, to demonstrate to holders that it can never change. Another simple example is creating soulbound tokens. More complex or novel examples might involve letting owners update the metadata for their own tokens, or letting anybody update token metadata based on specific criteria, or even letting groups of users vote on decisions to transfer tokens not owned by them.

See the interface at .sol for all the relevant functions, notably canSwap and canRemoveItself which allow the modules themselves to dictate whether they can be swapped out for another module. This allows developers to write modules which contain logic about whether or not they can be replaced, allowing you to do things like provably freezing metadata for a token set.

See the TokenManager in Github for example implementations and more ideas about how this can be used.

ITokenManager
directory