Visão Geral

Este guia irá orientá-lo na criação da sua primeira coleção de NFT usando o CreateKit. Você aprenderá a:
  • Criar metadados e assinaturas da coleção
  • Implementar uma coleção
  • Cunhar seu primeiro NFT
  • Rastrear recompensas
Este início rápido usa a B3 Testnet. Certifique-se de ter fundos de testnet para as taxas de gás.

Passo 1: Configuração Básica

Primeiro, vamos configurar a infraestrutura básica:
quickstart.ts
import { 
  CollectionManager, 
  RewardTracker,
  BaseMintStorage,
  b3Testnet 
} from '@b3dotfun/basemint'
import { createPublicClient, createWalletClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'

// Inicializar clientes
const publicClient = createPublicClient({
  chain: b3Testnet,
  transport: http()
})

const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
const walletClient = createWalletClient({
  chain: b3Testnet,
  transport: http(),
  account
})

// Inicializar serviços do CreateKit
const collectionManager = new CollectionManager(publicClient)
const rewardTracker = new RewardTracker(publicClient)
const storage = new BaseMintStorage({
  baseUrl: 'https://api.basemint.fun'
})

Passo 2: Criar Metadados da Coleção

Defina os parâmetros da sua coleção:
Create Collection
const collectionMetadata = {
  // Parâmetros obrigatórios
  name: "My First Collection",
  symbol: "MFC",
  creator: account.address,
  gameOwner: account.address, // Pode ser um endereço diferente
  
  // Parâmetros opcionais
  maxSupply: 1000n,
  mintPrice: 0n, // Cunhagem gratuita
  maxPerWallet: 10n,
  description: "Minha primeira coleção de NFT na B3",
  image: "https://example.com/collection-image.png",
  
  // Cronometragem
  startTime: 0n, // Começar imediatamente
  endTime: BigInt(Math.floor(Date.now() / 1000) + 86400 * 30), // 30 dias
  
  // Padrão do token
  tokenStandard: "ERC721" as const,
  chainId: 1993 // B3 Testnet
}

Passo 3: Gerar Assinaturas

Crie as assinaturas necessárias para a implementação:
Generate Signatures
// Gerar assinatura do criador
const creatorSignature = await collectionManager.generateCreatorSignature(
  walletClient,
  collectionMetadata
)

// Prever endereço da coleção
const predictedAddress = collectionManager.predictCollectionAddress(
  collectionMetadata,
  creatorSignature
)

console.log(`📍 Endereço previsto da coleção: ${predictedAddress}`)

Passo 4: Enviar para o Armazenamento

Armazene os metadados da sua coleção off-chain:
Submit to Storage
try {
  await storage.submitCollection(collectionMetadata, creatorSignature)
  console.log("✅ Metadados da coleção armazenados com sucesso")
} catch (error) {
  console.error("❌ Falha ao armazenar coleção:", error)
}

Passo 5: Implementar e Cunhar

Agora vem a parte emocionante - implementar sua coleção e cunhar o primeiro NFT:
Deploy and Mint
// Gerar assinatura do implementador
const deployerSignature = await collectionManager.generateDeployerSignature(
  walletClient,
  predictedAddress
)

// Criar instância da coleção
const collection = collectionManager.createCollection(
  predictedAddress,
  collectionMetadata.tokenStandard
)

// Implementar e cunhar o primeiro NFT em uma transação
const mintTx = await collection.mint(
  walletClient,
  1n, // quantidade
  undefined, // URI dos metadados (usará baseURI)
  0n, // preço da cunhagem
  [], // prova da lista branca (vazia para cunhagem pública)
  creatorSignature,
  deployerSignature
)

console.log(`🎉 Coleção implementada e primeiro NFT cunhado!`)
console.log(`📋 Hash da transação: ${mintTx}`)

Passo 6: Verificar Implementação

Vamos verificar se tudo funcionou corretamente:
Verify Deployment
// Verificar se a coleção foi implementada
const isDeployed = await collection.isDeployed()
console.log(`🏭 Coleção implementada: ${isDeployed}`)

// Obter informações da coleção
const info = await collection.getCollectionInfo()
console.log("📊 Informações da Coleção:", {
  name: info.name,
  symbol: info.symbol,
  totalSupply: info.totalSupply.toString(),
  maxSupply: info.maxSupply.toString()
})

// Verificar propriedade do token
const balance = await collection.balanceOf(account.address)
console.log(`💰 Seu saldo de tokens: ${balance.toString()}`)

Passo 7: Rastrear Recompensas

Verifique as recompensas geradas a partir da sua cunhagem:
Track Rewards
// Obter contrato de custódia para recompensas
const escrowAddress = collectionManager.getEscrowAddress()

// Rastrear recompensas para esta coleção
const collectionRewards = await rewardTracker.getCollectionRewards(
  escrowAddress,
  predictedAddress
)

console.log("💎 Recompensas da Coleção:", {
  totalRewards: collectionRewards.totalRewards.toString(),
  unclaimedRewards: collectionRewards.unclaimedRewards.toString(),
  totalMints: collectionRewards.totalMints.toString()
})

// Obter recompensas individuais do destinatário
const creatorRewards = await rewardTracker.getRecipientRewards(
  escrowAddress,
  predictedAddress,
  "CREATOR",
  account.address
)

console.log(`🎨 Recompensas do criador: ${creatorRewards.toString()}`)

Exemplo Completo

Aqui está o script completo do início rápido:

Executar o Exemplo

Salve o exemplo completo como quickstart.ts e execute-o:
npx tsx quickstart.ts

Saída Esperada

Quando você executar o script de início rápido, deve ver uma saída similar a:
📍 Endereço previsto da coleção: 0x1234567890abcdef...
✅ Metadados da coleção armazenados com sucesso
🎉 Coleção implementada e primeiro NFT cunhado!
📋 Hash da transação: 0xabcdef1234567890...
🏭 Coleção implementada: verdadeiro
💎 Recompensas da Coleção: {
  totalRewards: "1000000000000000000",
  unclaimedRewards: "1000000000000000000", 
  totalMints: "1"
}

Próximos Passos?

Parabéns! Você criou com sucesso sua primeira coleção de NFT com o CreateKit. Aqui estão alguns próximos passos para explorar:

Solução de Problemas