This section demonstrates how to mint a License Token from an IP Asset. You can only mint a License Token from an IP Asset if the IP Asset has License Terms attached to it. A License Token is minted as an ERC-721.

There are two reasons you’d mint a License Token:

  1. To hold the license and be able to use the underlying IP Asset as the license described (for ex. “Can use commercially as long as you provide proper attribution and share 5% of your revenue)
  2. Use the license token to link another IP Asset as a derivative of it. Note though that, as you’ll see later, some SDK functions don’t require you to explicitly mint a license token first in order to register a derivative, and will actually handle it for you behind the scenes.

Prerequisites

There are a few steps you have to complete before you can start the tutorial.

  1. Complete the TypeScript SDK Setup
  2. An IP Asset that has License Terms added. Learn how to add License Terms to an IPA here.

1. Mint License

Let’s say that IP Asset (ipId = 0x01) has License Terms (licenseTermdId = 10) attached to it. We want to mint 2 License Tokens with those terms to a specific wallet address (0x02).

Be mindful that some IP Assets may have license terms attached that require the user minting the license to pay a defaultMintingFee. You can see an example of that in the TypeScript Tutorial.

Note that a license token can only be minted if the licenseTermsId are already attached to the IP Asset, making it a publicly available license. The IP owner can, however, mint a private license by minting a license token with a licenseTermsId that is not attached to the IP Asset.

Associated Docs: license.mintLicenseTokens

main.ts
// you should already have a client set up (prerequisite)
import { client } from "./client";

async function main() {
  const response = await client.license.mintLicenseTokens({
    licenseTermsId: "10",
    licensorIpId: "0x641E638e8FCA4d4844F509630B34c9D524d40BE5",
    receiver: "0x641E638e8FCA4d4844F509630B34c9D524d40BE5", // optional. if not provided, it will go to the tx sender
    amount: 2,
    maxMintingFee: BigInt(0), // disabled
    maxRevenueShare: 100, // default
    txOptions: { waitForTransaction: true },
  });

  console.log(
    `License Token minted at transaction hash ${response.txHash}, License IDs: ${response.licenseTokenIds}`
  );
}

main();

1a. Setting Restrictions on Minting License Token

This is a note for owners of an IP Asset who want to set restrictions on who or how their license tokens are minted. You can:

  • Set a max number of licenses that can be minted
  • Charge dynamic fees based on who / how many are minted
  • Whitelisted certain wallets to mint the tokens

… and more. Learn more by checking out the License Config section of our documentation.

2. Register a Derivative

Now that we have minted a License Token, we can hold it or use it to link an IP Asset as a derivative. We will go over that on the next page.

Note though that, as you’ll see later, some SDK functions don’t require you to explicitly mint a license token first in order to register a derivative, and will actually handle it for you behind the scenes.

2a. Why would I ever use a License Token if it’s not needed?

There are a few times when you would need a License Token to register a derivative:

  • The License Token contains private license terms, so you would only be able to register as a derivative if you had the License Token that was manually minted by the owner. More on that here.
  • The License Token (which is an NFT) costs a mintingFee to mint, and you were able to buy it on a marketplace for a cheaper price. Then it makes more sense to simply register with the License Token then have to pay the more expensive defaultMintingFee.