Leitura: ~9 min | Atualizado: July 2026
CanalQb - Blockchain - Cryptozombies - Criando um contrato inteligente em ETH com Solidity
TL;DR - Resumo Executivo
- Conteudo preservado com expansao contextual sobre o tema original.
- Verificacoes praticas adicionadas para reduzir retrabalho.
- Fontes registradas nos metadados para rastreabilidade.
CanalQb - Blockchain - Cryptozombies - Criando um contrato inteligente em ETH com Solidity - ponto de partida
Abertura direta ao problema: muitos comecam pelo obvio e repetem o erro ja documentado no backup. Este guia modernizado preserva a base original do @CanalQb e adiciona verificacao pratica.
Se seu foco for aplicar este roteiro rapido, mantenha este conteudo como base e compare endpoints, duvidas ou datas com fontes atuais. O que realmente importa e o metodo, nao apenas a documentacao.
CanalQb - Blockchain - Cryptozombies - Criando um contrato inteligente em ETH com Solidity
Olha a lição concluida: https://share.cryptozombies.io/en/lesson/1/share/CanalQb?id=Y3p8NTkxMTMw
O que é Solidity?
Por que é importante?
Principais Recursos e Conceitos
Conclusão
Site oficial do Solidity: https://soliditylang.org/
Agora que temos o conhecimento sobre a programação para fazer contratos, vamos iniciar nossa pequena aula
Preparando o Terreno
Criando o Contrato ZombieFactory
// Defina a versão do Soliditypragma solidity >=0.5.0 <0.6.0;// Declaração do contrato ZombieFactorycontract ZombieFactory {// Mais funcionalidades emocionantes serão adicionadas aqui!}
Próximos Passos
Compreendendo o DNA Zumbi
Declarando e Definindo o DNA Digits
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 dnaDigits = 16;// Mais funcionalidades incríveis virão em breve!}
Os Próximos Passos Horripilantes
Garantindo 16 Caracteres de DNA
Declarando e Definindo o dnaModulus
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 public dnaDigits = 16;// Valor usado para encurtar o DNA para 16 dígitosuint256 public dnaModulus = 10 ** dnaDigits;// Mais funcionalidades incríveis virão em breve!}
Os Próximos Passos Assombrosos
Definindo a Estrutura Zombie
Declarando a Estrutura Zombie
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 public dnaDigits = 16;// Valor usado para encurtar o DNA para 16 dígitosuint256 public dnaModulus = 10 ** dnaDigits;// Declaração da estrutura Zombiestruct Zombie {string name;uint256 dna;}// Mais funcionalidades incríveis virão em breve!}
Próximos Passos Horripilantes
Criando a Matriz de Zumbis
Declarando a Matriz "zombies"
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 public dnaDigits = 16;// Valor usado para encurtar o DNA para 16 dígitosuint256 public dnaModulus = 10 ** dnaDigits;// Declaração da estrutura Zombiestruct Zombie {string name;uint256 dna;}// Matriz pública de zumbisZombie[] public zombies;// Mais funcionalidades incríveis virão em breve!}
Próximos Passos Assustadores
Criando a Função "createZombie"
Definindo a Função "createZombie"
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 public dnaDigits = 16;// Valor usado para encurtar o DNA para 16 dígitosuint256 public dnaModulus = 10 ** dnaDigits;// Declaração da estrutura Zombiestruct Zombie {string name;uint256 dna;}// Matriz pública de zumbisZombie[] public zombies;// Função para criar um novo zumbifunction createZombie(string memory _name, uint256 _dna) public {// Lógica para criar um novo zumbi será adicionada aqui!}}
Próximos Passos de Criação
Dando Vida ao Novo Zumbi
Preenchendo a Função "createZombie"
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 public dnaDigits = 16;// Valor usado para encurtar o DNA para 16 dígitosuint256 public dnaModulus = 10 ** dnaDigits;// Declaração da estrutura Zombiestruct Zombie {string name;uint256 dna;}// Matriz pública de zumbisZombie[] public zombies;// Função para criar um novo zumbifunction createZombie(string memory _name, uint256 _dna) public {zombies.push(Zombie(_name, _dna));}}
Próximos Passos Sombrios
O Poder do Acesso Privado
Tornando a Função "createZombie" Privada
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 public dnaDigits = 16;// Valor usado para encurtar o DNA para 16 dígitosuint256 public dnaModulus = 10 ** dnaDigits;// Declaração da estrutura Zombiestruct Zombie {string name;uint256 dna;}// Matriz pública de zumbisZombie[] public zombies;// Função privada para criar um novo zumbifunction _createZombie(string memory _name, uint256 _dna) private {zombies.push(Zombie(_name, _dna));}}
Seguindo a Convenção de Nomenclatura
Próximos Passos nas Sombras
Gerando o DNA das Sombras
Criando a Função "_generateRandomDna"
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 public dnaDigits = 16;// Valor usado para encurtar o DNA para 16 dígitosuint256 public dnaModulus = 10 ** dnaDigits;// Declaração da estrutura Zombiestruct Zombie {string name;uint256 dna;}// Matriz pública de zumbisZombie[] public zombies;// Função privada para criar um novo zumbifunction _createZombie(string memory _name, uint256 _dna) private {zombies.push(Zombie(_name, _dna));}// Função privada para gerar o DNA aleatóriofunction _generateRandomDna(string memory _str) private view returns (uint256) {// Lógica para gerar o DNA aleatório será adicionada aqui!}}
A Arte da Visualização sem Modificação
Próximos Passos nas Sombras
Gerando o DNA Pseudo-Aleatório
Compleção da Função "_generateRandomDna"
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 public dnaDigits = 16;// Valor usado para encurtar o DNA para 16 dígitosuint256 public dnaModulus = 10 ** dnaDigits;// Declaração da estrutura Zombiestruct Zombie {string name;uint256 dna;}// Matriz pública de zumbisZombie[] public zombies;// Função privada para criar um novo zumbifunction _createZombie(string memory _name, uint256 _dna) private {zombies.push(Zombie(_name, _dna));}// Função privada para gerar o DNA aleatóriofunction _generateRandomDna(string memory _str) private view returns (uint256) {uint256 rand = uint256(keccak256(abi.encodePacked(_str)));return rand % dnaModulus;}}
O Poder da Aleatoriedade Controlada
Próximos Passos nas Sombras
Criando Zumbis Aleatórios com Mistério
Invocando a Função "createRandomZombie"
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 public dnaDigits = 16;// Valor usado para encurtar o DNA para 16 dígitosuint256 public dnaModulus = 10 ** dnaDigits;// Declaração da estrutura Zombiestruct Zombie {string name;uint256 dna;}// Matriz pública de zumbisZombie[] public zombies;// Função privada para criar um novo zumbifunction _createZombie(string memory _name, uint256 _dna) private {zombies.push(Zombie(_name, _dna));}// Função privada para gerar o DNA aleatóriofunction _generateRandomDna(string memory _str) private view returns (uint256) {uint256 rand = uint256(keccak256(abi.encodePacked(_str)));return rand % dnaModulus;}// Função pública para criar um zumbi aleatóriofunction createRandomZombie(string memory _name) public {uint256 randDna = _generateRandomDna(_name);_createZombie(_name, randDna);}}
Um Toque de Mistério em Quatro Linhas
Próximos Passos nas Sombras
Anunciando a Criação dos Zumbis
Criando o Evento "NewZombie" e Modificando a Função "_createZombie"
// Declaração do contrato ZombieFactorycontract ZombieFactory {// Número de dígitos no DNA zumbiuint256 public dnaDigits = 16;// Valor usado para encurtar o DNA para 16 dígitosuint256 public dnaModulus = 10 ** dnaDigits;// Declaração da estrutura Zombiestruct Zombie {string name;uint256 dna;}// Matriz pública de zumbisZombie[] public zombies;// Evento para anunciar a criação de um novo zumbievent NewZombie(uint256 zombieId, string name, uint256 dna);// Função privada para criar um novo zumbifunction _createZombie(string memory _name, uint256 _dna) private {uint256 id = zombies.push(Zombie(_name, _dna)) - 1;emit NewZombie(id, _name, _dna);}// Função privada para gerar o DNA aleatóriofunction _generateRandomDna(string memory _str) private view returns (uint256) {uint256 rand = uint256(keccak256(abi.encodePacked(_str)));return rand % dnaModulus;}// Função pública para criar um zumbi aleatóriofunction createRandomZombie(string memory _name) public {uint256 randDna = _generateRandomDna(_name);_createZombie(_name, randDna);}}
Celebrando com o Evento "NewZombie"
Próximos Passos na Celebração
Desvendando a Interação com o Web3.js em HTML: Uma Breve Olhada
HTML e JavaScript Mágico com o Web3.js
<!DOCTYPE html><html><head><title>Interação com Contrato ZombieFactory</title></head><body><input type="text" id="nameInput" placeholder="Nome do Zumbi"><button id="ourButton">Criar Zumbi</button><script src="https://cdn.jsdelivr.net/npm/web3@1.5.2/dist/web3.min.js"></script><script>// Inicializa o provedor Web3if (typeof web3 !== 'undefined') {web3 = new Web3(web3.currentProvider);} else {// Defina o provedor Web3 (por exemplo, para o MetaMask)// web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));}// Aqui está como acessar nosso contrato:var abi = /* abi gerado pelo compilador */;var contractAddress = /* nosso endereço de contrato no Ethereum após a implantação */;var ZombieFactoryContract = new web3.eth.Contract(abi, contractAddress);// Ouvinte de evento para capturar a entrada de texto:document.getElementById("ourButton").addEventListener("click", function() {var name = document.getElementById("nameInput").value;// Chama a função `createRandomZombie` do nosso contrato:ZombieFactoryContract.methods.createRandomZombie(name).send({ from: web3.eth.defaultAccount }).then(function(receipt) {// A transação foi enviada com sucesso!}).catch(function(error) {console.error(error);});});// Ouve o evento `NewZombie` e atualiza a interface do usuárioZombieFactoryContract.events.NewZombie(function(error, event) {if (error) return;var zombieDetails = generateZombie(event.returnValues.zombieId, event.returnValues.name, event.returnValues.dna);// Atualiza a interface com os detalhes do zumbi});// Função para gerar detalhes do zumbifunction generateZombie(id, name, dna) {var dnaStr = String(dna);while (dnaStr.length < 16)dnaStr = "0" + dnaStr;var zombieDetails = {headChoice: dnaStr.substring(0, 2) % 7 + 1,eyeChoice: dnaStr.substring(2, 4) % 11 + 1,shirtChoice: dnaStr.substring(4, 6) % 6 + 1,skinColorChoice: parseInt(dnaStr.substring(6, 8) / 100 * 360),eyeColorChoice: parseInt(dnaStr.substring(8, 10) / 100 * 360),clothesColorChoice: parseInt(dnaStr.substring(10, 12) / 100 * 360),zombieName: name,zombieDescription: "Um CryptoZumbi Nível 1"};return zombieDetails;}</script>
Desvendando os Mistérios da Interatividade em HTML
Entendendo o Contexto do Projeto
Projetos de cripto mudam regras, endpoints e elegibilidade com frequencia. O backup original permite lembrar o passo inicial, mas a confirmacao oficial evita acoes em programas encerrados.
Antes de repetir, consulte o comunicado oficial e o perfil verificado. Essa pratica reduz surpresas e protege seu fluxo.
Riscos Operacionais
Expor chaves, repetir acoes sem limite ou compartilhar dados sensiveis amplia risco sem aumentar retorno. Defina limites claros e armazene historicos organizados.
Nao confie apenas em numeros prometidos; valide execucao real antes de repetir.
Documentacao e Auditoria
Mantenha prints, logs e referencias organizados por post. Backup documentado vale mais do que repetir acoes sem memoria.
Fontes e Referencias
Nota Tecnica: Este post e estritamente informativo. Teste em ambiente controlado antes de repetir procedimentos.
Perguntas Frequentes
O que e CanalQb - Blockchain - Cryptozombies - Criando um contrato inteligente em ETH com Solidity?
Ainda e valido usar CanalQb - Blockchain - Cryptozombies - Criando um contrato inteligente em ETH com Solidity em 2026?
Como aumentar resultado no CanalQb - Blockchain - Cryptozombies - Criando um contrato inteligente em ETH com Solidity?
Onde estao as fontes oficiais de CanalQb - Blockchain - Cryptozombies - Criando um contrato inteligente em ETH com Solidity?
CanalQb - Blockchain - Cryptozombies - Criando um contrato inteligente em ETH com Solidity exige conhecimento previo?
Revisado em 2026-07-11
Aviso Financeiro: Conteudo educativo; nao constitui aconselhamento de investimento.
Gostou do conteudo? Inscreva-se no @CanalQb no YouTube e ative o sininho.
Feito com Master Rules Claude v8.6 - @CanalQb
Checklist de Execucao Segura
- Confirme o objetivo principal antes de repetir o roteiro.
- Valide o passo original com uma execucao de baixo risco.
- Registre resultado, tempo gasto e desvios encontrados.
- Se algo travar, reduza escopo ao trecho suspeito antes de refazer tudo.
- Compare saidas esperadas com saidas reais antes de seguir.
Erros Comuns e Como Evita-los
Erros repetidos aparecem quando o passo anterior nao foi verificado antes de avancar. Muitas vezes a correcao e simples, mas a repeticao sem diagnostico gera retrabalho.
Ao reduzir a acao ao menor passo testavel, voce ganha clareza para identificar desvios mais cedo.
Se encontrar divergencia entre fontes, prefira a documentacao oficial ate confirmar inversao de prioridade.
Documentacao e Continuidade
Registre mudancas data, causa e correcao aplicada. Esse habito reduz erros e acelera revisoes futuras.
Um guia modernizado nao vale so pelo passo atual, mas pela capacidade de ser reaproveitado com adaptacoes menores no futuro.
Comentários
Comente só assim vamos crescer juntos!