Ikhtisar
Manajemen koleksi adalah inti dari CreateKit. Panduan ini mencakup segala hal yang perlu Anda ketahui tentang pembuatan, konfigurasi, dan pengelolaan koleksi NFT menggunakan protokol BaseMint.
Setiap koleksi memerlukan metadata spesifik yang mendefinisikan karakteristiknya:
Parameter Wajib
Nama koleksi NFT Anda (mis., “Bored Ape Yacht Club”)
Simbol/ticker untuk koleksi Anda (mis., “BAYC”)
Alamat Ethereum dari pembuat koleksi
Alamat Ethereum dari pemilik game (dapat sama dengan pembuat)
Parameter Opsional
Jumlah maksimum token yang dapat dicetak
Harga per token dalam wei (gunakan parseEther() untuk nilai ETH)
Maksimum token yang dapat dicetak per dompet
Apakah pencetakan hanya untuk whitelist diaktifkan
Cap waktu Unix ketika pencetakan dimulai (0 = segera)
endTime
bigint
default: "BigInt(Date.now() / 1000 + 86400 * 365 * 100)"
Cap waktu Unix ketika pencetakan berakhir
tokenStandard
'ERC721' | 'ERC1155'
default: "'ERC721'"
Standar token yang digunakan
ID Rantai (1993 = B3 Testnet, 8333 = B3 Mainnet)
Membuat Koleksi
Koleksi Dasar
import { CollectionManager , b3Testnet } from '@b3dotfun/basemint'
import { createPublicClient , createWalletClient , http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
const account = privateKeyToAccount ( process . env . PRIVATE_KEY as `0x ${ string } ` )
const publicClient = createPublicClient ({
chain: b3Testnet ,
transport: http ()
})
const walletClient = createWalletClient ({
chain: b3Testnet ,
transport: http (),
account
})
const collectionManager = new CollectionManager ( publicClient )
// Definisikan koleksi dasar
const basicCollection = {
name: "Koleksi Seni Saya" ,
symbol: "MAC" ,
creator: account . address ,
gameOwner: account . address ,
description: "Koleksi dari karya seni digital" ,
image: "https://example.com/collection-image.png"
}
// Hasilkan tanda tangan pembuat
const creatorSignature = await collectionManager . generateCreatorSignature (
walletClient ,
basicCollection
)
Konfigurasi Koleksi Lanjutan
Pengaturan Koleksi Lanjutan
import { parseEther } from 'viem'
const advancedCollection = {
// Wajib
name: "Barang Gaming Premium" ,
symbol: "PGI" ,
creator: account . address ,
gameOwner: "0x1234567890123456789012345678901234567890" , // Pemilik game berbeda
// Pasokan dan harga
maxSupply: 5000 n ,
mintPrice: parseEther ( "0.01" ), // 0.01 ETH
maxPerWallet: 5 n ,
// Kontrol waktu
startTime: BigInt ( Math . floor ( Date . now () / 1000 ) + 3600 ), // Mulai dalam 1 jam
endTime: BigInt ( Math . floor ( Date . now () / 1000 ) + 86400 * 7 ), // Berakhir dalam 7 hari
// Konfigurasi whitelist
isWhitelistEnabled: true ,
whitelistMerkleRoot: "0x..." as `0x ${ string } ` ,
// Metadata
description: "Barang eksklusif untuk pemain premium" ,
image: "https://example.com/premium-collection.png" ,
external_url: "https://mygame.com/premium-items" ,
animation_url: "https://example.com/collection-animation.mp4" ,
// Atribut koleksi
attributes: [
{ trait_type: "Kategori" , value: "Gaming" },
{ trait_type: "Kelangkaan" , value: "Premium" },
{ trait_type: "Edisi" , value: "Pertama" }
],
// Teknis
tokenStandard: "ERC1155" as const ,
chainId: 1993
}
Standar Token
CreateKit mendukung standar ERC721 dan ERC1155:
Koleksi ERC721 Koleksi ERC1155 const erc721Collection = {
name: "Karya Seni Unik" ,
symbol: "UAP" ,
creator: account . address ,
gameOwner: account . address ,
tokenStandard: "ERC721" as const ,
maxSupply: 1000 n , // Setiap token unik
description: "Karya seni digital yang unik"
}
// Pencetakan ERC721 (kuantitas selalu 1)
const collection721 = collectionManager . createCollection (
predictedAddress ,
"ERC721"
)
await collection721 . mint (
walletClient ,
1 n , // Selalu 1 untuk ERC721
undefined , // URI metadata
mintPrice ,
proof
)
const collectionMetadata = {
name: "Koleksi Saya" ,
description: "Koleksi aset digital yang fantastis" ,
image: "https://example.com/collection-image.png" ,
external_url: "https://mywebsite.com/collection" ,
// Latar belakang dan banner untuk marketplace
background_color: "ffffff" ,
banner_image_url: "https://example.com/banner.png" ,
// Atribut koleksi
attributes: [
{ trait_type: "Tema" , value: "Fantasi" },
{ trait_type: "Artis" , value: "Pencipta Digital" }
]
}
CreateKit secara otomatis menghasilkan metadata token berdasarkan pengaturan koleksi Anda:
Validasi Koleksi
CreateKit menyediakan validasi bawaan untuk parameter koleksi:
import { validateCollectionMetadata } from '@b3dotfun/basemint'
try {
// Validasi metadata koleksi
const validation = validateCollectionMetadata ( collectionMetadata )
if ( ! validation . isValid ) {
console . error ( "Kesalahan validasi:" , validation . errors )
return
}
console . log ( "✅ Metadata koleksi valid" )
// Lanjutkan dengan generasi tanda tangan
const signature = await collectionManager . generateCreatorSignature (
walletClient ,
collectionMetadata
)
} catch ( error ) {
console . error ( "Validasi gagal:" , error )
}
Prediksi Alamat
Salah satu fitur kunci CreateKit adalah prediksi alamat deterministik:
// Hasilkan tanda tangan pembuat terlebih dahulu
const creatorSignature = await collectionManager . generateCreatorSignature (
walletClient ,
collectionMetadata
)
// Prediksi alamat koleksi
const predictedAddress = collectionManager . predictCollectionAddress (
collectionMetadata ,
creatorSignature
)
console . log ( `Koleksi akan ditempatkan di: ${ predictedAddress } ` )
// Anda sekarang dapat menggunakan alamat ini sebelum penyebaran
// untuk integrasi marketplace, tampilan frontend, dll.
Operasi Manajemen Koleksi
Memeriksa Status Koleksi
const collection = collectionManager . createCollection (
predictedAddress ,
"ERC721"
)
// Periksa apakah koleksi telah ditempatkan
const isDeployed = await collection . isDeployed ()
console . log ( `Ditempatkan: ${ isDeployed } ` )
// Dapatkan informasi koleksi (hanya berfungsi setelah penyebaran)
if ( isDeployed ) {
const info = await collection . getCollectionInfo ()
console . log ( "Info Koleksi:" , {
name: info . name ,
symbol: info . symbol ,
totalSupply: info . totalSupply . toString (),
maxSupply: info . maxSupply . toString (),
mintPrice: info . mintPrice . toString (),
maxPerWallet: info . maxPerWallet . toString ()
})
}
Memperbarui Pengaturan Koleksi
Sebagian besar parameter koleksi tidak dapat diubah setelah penyebaran. Rencanakan konfigurasi koleksi Anda dengan hati-hati.
Manajemen Pasca-Penyebaran
// Hanya operasi tertentu yang mungkin setelah penyebaran
// Periksa harga mint saat ini (jika harga dinamis diterapkan)
const currentPrice = await collection . getCurrentMintPrice ()
// Periksa apakah pencetakan saat ini aktif
const isMintingActive = await collection . isMintingActive ()
// Dapatkan sisa pasokan
const remainingSupply = await collection . getRemainingSupply ()
console . log ({
currentPrice: currentPrice . toString (),
isMintingActive ,
remainingSupply: remainingSupply . toString ()
})
Praktik Terbaik
1. Perencanaan Koleksi
Strategi Pasokan
Tetapkan pasokan maksimum berdasarkan kasus penggunaan
Pertimbangkan permintaan masa depan dan kelangkaan
Sisakan ruang untuk pertumbuhan atau edisi khusus
Strategi Harga
Teliti koleksi serupa untuk referensi harga
Pertimbangkan biaya gas dan biaya transaksi
Rencanakan untuk kondisi pasar yang berbeda
Metadata Berkualitas Tinggi
const qualityCollection = {
name: "Koleksi Seni Profesional" ,
symbol: "PAC" ,
creator: account . address ,
gameOwner: account . address ,
// Deskripsi berkualitas tinggi
description: "Koleksi karya seni digital terkurasi yang menampilkan tema kontemporer dan teknik inovatif." ,
// Imagery profesional (minimal 640x640px)
image: "https://example.com/high-res-collection-image.png" ,
// Atribut lengkap untuk penemuan yang lebih baik
attributes: [
{ trait_type: "Gaya Seni" , value: "Kontemporer" },
{ trait_type: "Medium" , value: "Digital" },
{ trait_type: "Verifikasi Artis" , value: "Terverifikasi" },
{ trait_type: "Tipe Edisi" , value: "Terbatas" }
],
// Tautan eksternal untuk kredibilitas
external_url: "https://professionalartist.com/collection"
}
3. Pertimbangan Keamanan
Jangan pernah menyematkan kunci privat dalam kode sumber
Gunakan variabel lingkungan atau manajemen kunci yang aman
Pertimbangkan menggunakan dompet multi-tanda tangan untuk koleksi berharga
Selalu validasi tanda tangan sebelum penyebaran
Verifikasi parameter koleksi sesuai dengan nilai yang dimaksudkan
Uji di testnet sebelum penyebaran di mainnet
Pilih dengan hati-hati alamat pembuat dan pemilik game
Pahami implikasi distribusi hadiah
Rencanakan untuk manajemen koleksi jangka panjang
Pemecahan Masalah
Ketidakcocokan prediksi alamat
Pastikan semua parameter koleksi identik antara generasi tanda tangan dan penyebaran. Perubahan kecil pun akan menghasilkan alamat yang berbeda.
Parameter koleksi tidak valid
Periksa bahwa semua bidang yang diperlukan disediakan dan bahwa nilai-nilai berada dalam rentang yang dapat diterima (mis., maxSupply > 0, alamat valid).
Pembuatan tanda tangan gagal
Verifikasi bahwa klien dompet Anda dikonfigurasi dengan benar dan bahwa Anda memiliki dana yang cukup untuk transaksi penandatanganan.
Langkah Selanjutnya
Sekarang Anda memahami manajemen koleksi, jelajahi topik terkait ini: