Lição: 112: Gerando e Gerenciando Chaves
Nesta aula, exploraremos como gerar e gerenciar chaves no contexto do Ethereum e Solidity. Discutiremos conceitos-chave relacionados às chaves públicas e privadas e como elas são utilizadas para transações na blockchain. Além disso, forneceremos alguns exemplos de código que ilustram como gerenciar essas chaves programaticamente.
Entendendo Chaves Públicas e Privadas
No Ethereum, cada usuário possui um par exclusivo de chaves: uma chave pública e uma chave privada.
- Chave Pública: Esta chave é derivada da chave privada e pode ser compartilhada publicamente. Ela é usada para gerar o seu endereço Ethereum.
- Chave Privada: Esta chave é mantida em segredo e é usada para assinar transações. Se alguém tiver acesso à sua chave privada, poderá controlar seus ativos.
Geração de Chaves
Normalmente, as chaves são geradas usando algoritmos criptográficos. No Ethereum, o Algoritmo de Assinatura Digital de Curva Elíptica (ECDSA) é utilizado para a geração do par de chaves. Veja como você pode gerar um par de chaves usando JavaScript com a biblioteca ethers.js
:
const { ethers } = require("ethers");
// Gerar uma carteira aleatória
const wallet = ethers.Wallet.createRandom();
console.log("Endereço:", wallet.address);
console.log("Chave Privada:", wallet.privateKey);
console.log("Mnemônica:", wallet.mnemonic.phrase);
Gerenciamento de Chaves
Uma vez que as chaves são geradas, gerenciá-las de forma segura é crucial. Aqui estão algumas melhores práticas:
- Armazenamento Seguro: Armazene chaves privadas de forma segura, por exemplo, usando uma carteira de hardware, armazenamento de arquivos criptografados ou um serviço de gerenciamento de chaves.
- Backup: Crie backups seguros de suas chaves. Mnemônicas ou frases-semente podem ser usadas para recuperação da carteira.
- Nunca Compartilhe Sua Chave Privada: Nunca exponha sua chave privada; ela concede acesso aos seus fundos.
Usando Chaves para Transações
Usando suas chaves, você pode assinar transações. Abaixo está um exemplo de como enviar Ether usando a biblioteca ethers.js
:
const { ethers } = require("ethers");
async function enviarTransacao() {
// Conectando a um provedor (por exemplo, Infura)
const provider = new ethers.providers.InfuraProvider("mainnet", "SEU_ID_DO_PROJETO_INFURA");
// Cria uma instância de carteira com sua chave privada
const chavePrivada = "SUA_CHAVE_PRIVADA"; // Nunca exponha esta chave publicamente
const wallet = new ethers.Wallet(chavePrivada, provider);
// Parâmetros da transação
const tx = {
to: "ENDERECO_DO_DESTINATARIO",
value: ethers.utils.parseEther("0.01"), // Enviando 0.01 Ether
gasLimit: 21000,
gasPrice: ethers.utils.parseUnits('10', 'gwei')
};
// Enviar a transação
const transacao = await wallet.sendTransaction(tx);
console.log("Hash da transação:", transacao.hash);
}
enviarTransacao().catch(console.error);
Monitorando Transações
Você também pode querer monitorar suas transações. Isso pode ser feito assinando recibos e eventos de transação. Aqui está um exemplo de como ouvir a confirmação de uma transação:
async function monitorarTransacao(txHash) {
const provider = new ethers.providers.InfuraProvider("mainnet", "SEU_ID_DO_PROJETO_INFURA");
// Aguarda a transação ser minerada
const recibo = await provider.waitForTransaction(txHash);
console.log("Transação confirmada no bloco:", recibo.blockNumber);
}
const txHash = "SEU_HASH_DA_TRANSACAO";
monitorarTransacao(txHash).catch(console.error);
Conclusão
Nesta aula, abordamos os aspectos essenciais da geração e gerenciamento de chaves no Ethereum. Discutimos a importância de lidar com chaves privadas de forma segura e fornecemos exemplos de geração de chaves, assinatura de transações e monitoramento.
Ao seguir as melhores práticas para gerenciamento de chaves e usar bibliotecas como ethers.js
, você pode interagir com a blockchain Ethereum de forma confiável e segura. Lembre-se sempre de que a segurança de suas chaves afeta diretamente a segurança dos seus ativos digitais.