Opensea NFT Token Id
TokenId
Minting 과 Lazy minting의 차이
Minting : smart contract을 통해 on-chain상에서 nft 생성 시 지정되는 nft의 고유 id
Lazy Minting : off-chain상에서 metadata 생성 후 voucher 생성 시 지정되는 nft의 고유 id
Lazy minting token id 바이트 할당
- nft id와 token id는 다른 개념임
- token id는 32 Byte로 이루어져 있음
- nft id는 7 Byte로 이루어져 있음
- 창작자(아티스트)의 wallet address, nft id, 해당 nft의 공급된 개수를 포함하고 있음
- nft의 공급된 개수
- ERC-721 : 1개
- ERC-1155 : minting한 nft 개수
앞자리 20 byte : 창작자(아티스트)의 wallet address
중간 7 byte : nft의 고유 id(index)
마지막 5 byte : 해당 nft의 공급된 개수
Opensea token id
- opensea의 일반적인 minting은 ERC-1155의 LazyMinting으로 진행됨
- 구매자가 nft를 구매하는 시점 전까지 off-chain 사용(db 이용)
- 구매자가 nft를 구매하는 시점 이후로 on-chain 사용(smart contract 이용)
Example) Opensea Lazy Minting Description .PNG
TokenId(10진수) : 71577999342193181516787717611109606829694518788112888032663196598076478324737
TokenId(16진수) : 9E3FB64223BEE3FB2DEFDEC5C1190768F448EB4B000000000000010000000001
- 앞자리 20 byte : 0x9E3FB64223BEE3FB2DEFDEC5C1190768F448EB4B
- 중간 7 byte : 00000000000001
- 마지막 5 byte : 0000000001
- 창작자(아티스트) Address : 0x9E3FB64223BEE3FB2DEFDEC5C1190768F448EB4B
- nft id : 1
- nft totalSupply : 1
Token id 생성 구현
async creatorNftId(address){
var nftAmount = await this.selectNftCountWithAddress(address);
//address로 backend에 요청을 보내서 db에서 해당 address의 nft 개수 확인
var creatorNftAmount = (nftAmount + 1).toString();
return creatorNftAmount.padStart(14,'0');
},
creatorNftQuantity(amount){
//5 Byte nft supply
var creatorNftQuantity = (amount).toString();
return creatorNftQuantity.padStart(10,'0');
},
async generateVoucherTokenId(amount){
//20 Byte wallet address
var creatorAddress = (await this.getEthWallet())[0].toString();
var creatorNftId = await this.creatorNftId(creatorAddress);
var creatorNftQuantity = this.creatorNftQuantity(amount);
var tokenId = creatorAddress + creatorNftId + creatorNftQuantity;
return (BigInt(tokenId)).toString(10);
}
var voucherTokenId = await this.generateVoucherTokenId(amount);