La acuñación es el proceso de crear nuevos tokens NFT dentro de tu colección. CreateKit proporciona un sistema de acuñación en dos fases único que optimiza la eficiencia del gas y la experiencia del usuario.
La primera operación de acuñación es especial: despliega el contrato de la colección y acuña el primer token en una sola transacción:
Despliegue y Primera Acuñación
Copy
Ask AI
import { CollectionManager } from "@b3dotfun/basemint";const collectionManager = new CollectionManager(publicClient);// Supongamos que tenemos metadatos de la colección y firma del creadorconst predictedAddress = collectionManager.predictCollectionAddress(collectionMetadata, creatorSignature);// Generar firma del desplegadorconst deployerSignature = await collectionManager.generateDeployerSignature(walletClient, predictedAddress);// Crear instancia de la colecciónconst collection = collectionManager.createCollection(predictedAddress, collectionMetadata.tokenStandard);// Desplegar y acuñar el primer NFTconst mintTx = await collection.mint( walletClient, 1n, // cantidad undefined, // URI de metadatos (usa baseURI) collectionMetadata.mintPrice || 0n, [], // prueba de lista blanca (vacía para público) creatorSignature, // Requerido para la primera acuñación deployerSignature, // Requerido para la primera acuñación);console.log(`🚀 Colección desplegada y primer token acuñado: ${mintTx}`);
Después del despliegue, las acuñaciones subsiguientes son más simples y solo requieren los parámetros estándar:
Acuñación Regular
Copy
Ask AI
// Para acuñaciones subsiguientes (después del despliegue)const regularMintTx = await collection.mint( walletClient, 1n, // cantidad undefined, // URI de metadatos collectionMetadata.mintPrice || 0n, [], // prueba de lista blanca // No se necesitan firmas para acuñaciones regulares);console.log(`✨ Token acuñado: ${regularMintTx}`);
CreateKit soporta tanto los estándares ERC721 como ERC1155 con diferentes comportamientos de acuñación:
Tokens Únicos ERC721
Copy
Ask AI
// ERC721 - Cada token es únicoconst erc721Collection = collectionManager.createCollection( predictedAddress, "ERC721")// ERC721 siempre acuña cantidad de 1await erc721Collection.mint(walletClient,1n, // Siempre 1 para ERC721"https://example.com/metadata/1.json", // Metadatos únicos para este tokenparseEther("0.01"),[])// Cada acuñación crea un nuevo ID de token único// Los IDs de token incrementan: 1, 2, 3, etc.
// Obtener prueba para la dirección de acuñaciónconst userAddress = account.address;const proof = whitelist.getProof(userAddress);// Verificar que el usuario está en la lista blanca (verificación opcional)const isWhitelisted = whitelist.verify(userAddress, proof);if (!isWhitelisted) { throw new Error("Dirección no está en la lista blanca");}// Acuñar con prueba de lista blancaawait collection.mint( walletClient, 1n, undefined, parseEther("0.005"), proof, // Proporcionar prueba de lista blanca);
// Proporcionar URI de metadatos específicos para cada tokenconst customMetadataURIs = [ "https://myapi.com/metadata/special-sword.json", "https://myapi.com/metadata/rare-shield.json", "https://myapi.com/metadata/epic-helmet.json",];for (const metadataURI of customMetadataURIs) { await collection.mint( walletClient, 1n, metadataURI, // Metadatos personalizados para este token parseEther("0.01"), [], );}
// Para ERC1155: Acuñar múltiples tokens en una transacciónawait erc1155Collection.mint( walletClient, 10n, // Más eficiente en gas que 10 transacciones separadas metadataURI, totalPrice, proof,);// Para ERC721: Considerar operaciones por lotes a nivel de aplicaciónconst mintPromises = [];for (let i = 0; i < 5; i++) { mintPromises.push(collection.mint(walletClient, 1n, undefined, mintPrice, proof));}// Ejecutar acuñaciones concurrentemente (tener cuidado con la gestión de nonce)const results = await Promise.all(mintPromises);
Proporcionar retroalimentación clara durante el proceso de acuñación - Mostrar costos estimados de gas por
adelantado - Implementar estados de carga adecuados - Manejar errores de manera amigable para el usuario
Interacción con Contratos Inteligentes
Validar siempre los parámetros antes de las transacciones - Implementar manejo de errores adecuado - Usar límites
y precios de gas apropiados - Probar exhaustivamente