Prerequisites
There are a few steps you have to complete before you can start the tutorial.- Complete the TypeScript SDK Setup
- [OPTIONAL] Go to Pinata and create a new API key. Add the JWT to your
.env
file:
.env
- [OPTIONAL] Install the
pinata-web3
dependency:
Terminal
1. [OPTIONAL] Set up your IP Metadata
We can set metadata on our NFT & IP, but you don’t have to. To do this, view the IPA Metadata Standard and construct your metadata for both your NFT & IP.main.ts
2. [OPTIONAL] Set up your NFT Metadata
The NFT Metadata follows the ERC-721 Metadata Standard.main.ts
3. [OPTIONAL] Upload your IP and NFT Metadata to IPFS
In a separateuploadToIpfs
file, create a function to upload your IP & NFT Metadata objects to IPFS:
uploadToIpfs.ts
main.ts
4. Register an NFT as an IP Asset
Remember that in order to register a new IP, we first have to mint an NFT, which will represent the underlying ownership of the IP. This NFT then gets “registered” and becomes an IP Asset. Luckily, we can use themintAndRegisterIp
function to mint an NFT and register it as an IP Asset in the same transaction.
This function needs an SPG NFT Contract to mint from.
4a. What SPG NFT contract address should I use?
For simplicity, you can use a public collection we have created for you on Aeneid testnet:0xc32A8a0FF3beDDDa58393d022aF433e78739FAbc
. On Mainnet, or even when testing a real scenario on Aeneid, you should create your own contract as described in the “Using a custom ERC-721 contract” section below.
Using a custom ERC-721 contract
Using a custom ERC-721 contract
Using a public collection we provide for you is fine, but when you do this for real, you should make your own NFT Collection for your IPs. You can do this in 2 ways:
- Deploy a contract that implements the ISPGNFT interface, or use the SDK’s createNFTCollection function (shown below) to do it for you. This will give you your own SPG NFT Collection that only you can mint from.
createSpgNftCollection.ts
- Create a custom ERC-721 NFT collection on your own and use the register function - providing an
nftContract
andtokenId
- instead of using themintAndRegisterIp
function. See a working code example here. This is helpful if you already have a custom NFT contract that has your own custom logic, or if your IPs themselves are NFTs.
Associated Docs:
ipAsset.mintAndRegisterIp
main.ts
5. View Completed Code
Congratulations, you registered an IP!6. Add License Terms to IP
Now that your IP is registered, you can create and attach License Terms to it. This will allow others to mint a license and use your IP, restricted by the terms. We will go over this in the next section, but it’s worth mentioning that instead of using themintAndRegisterIp
function, you can register IP + create terms + attach terms all in the same step with the following functions: