nodejs-keccak256
Faz seu agente evitar erros de hashing em Ethereum ao usar JavaScript. É importante para garantir que os cálculos de segurança estejam corretos.
O que ela faz
Esta ferramenta garante que você está usando a forma correta de 'hash' (uma função que transforma dados em uma sequência única de caracteres) para o Ethereum em seus códigos JavaScript e TypeScript. Usar a função errada pode causar erros em transações e outras operações importantes.
Quando usar
- ✓Ao criar códigos para interagir com o Ethereum.
- ✓Quando você precisa gerar identificadores únicos para funções ou eventos.
- ✓Se você suspeita que seus códigos Ethereum estão apresentando erros inesperados.
Exemplo do que pedir para a IA
“Como posso garantir que estou calculando corretamente o 'hash' de uma mensagem para o Ethereum usando JavaScript?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ela funciona substituindo a função de 'hash' padrão do Node.js, que é diferente da usada pelo Ethereum, por uma que segue o padrão Keccak-256 correto. Isso evita que seu código produza resultados incorretos sem avisar.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill nodejs-keccak256Ou baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/skills/nodejs-keccak256/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Node.js Keccak-256
O Ethereum usa Keccak-256, e não a variante SHA3 padronizada pelo NIST exposta pelo Node crypto.createHash('sha3-256').
Quando Usar
- Computando seletores de função do Ethereum ou tópicos de eventos
- Construindo helpers para EIP-712, assinaturas, Merkle ou slots de armazenamento em JS/TS
- Revisando qualquer código que faça hash de dados do Ethereum diretamente com o Node crypto
Como Funciona
Os dois algoritmos produzem saídas diferentes para a mesma entrada, e o Node não irá avisá-lo.
import crypto from 'crypto';
import { keccak256, toUtf8Bytes } from 'ethers';
const data = 'hello';
const nistSha3 = crypto.createHash('sha3-256').update(data).digest('hex');
const keccak = keccak256(toUtf8Bytes(data)).slice(2);
console.log(nistSha3 === keccak); // false
Exemplos
ethers v6
import { keccak256, toUtf8Bytes, solidityPackedKeccak256, id } from 'ethers';
const hash = keccak256(new Uint8Array([0x01, 0x02]));
const hash2 = keccak256(toUtf8Bytes('hello'));
const topic = id('Transfer(address,address,uint256)');
const packed = solidityPackedKeccak256(
['address', 'uint256'],
['0x742d35Cc6634C0532925a3b8D4C9B569890FaC1c', 100n],
);
viem
import { keccak256, toBytes } from 'viem';
const hash = keccak256(toBytes('hello'));
web3.js
const hash = web3.utils.keccak256('hello');
const packed = web3.utils.soliditySha3(
{ type: 'address', value: '0x742d35Cc6634C0532925a3b8D4C9B569890FaC1c' },
{ type: 'uint256', value: '100' },
);
Padrões comuns
import { id, keccak256, AbiCoder } from 'ethers';
const selector = id('transfer(address,uint256)').slice(0, 10);
const typeHash = keccak256(toUtf8Bytes('Transfer(address from,address to,uint256 value)'));
function getMappingSlot(key: string, mappingSlot: number): string {
return keccak256(
AbiCoder.defaultAbiCoder().encode(['address', 'uint256'], [key, mappingSlot]),
);
}
Endereço a partir da chave pública
import { keccak256 } from 'ethers';
function pubkeyToAddress(pubkeyBytes: Uint8Array): string {
const hash = keccak256(pubkeyBytes.slice(1));
return '0x' + hash.slice(-40);
}
Audite sua base de código
grep -rn "createHash.*sha3" --include="*.ts" --include="*.js" --exclude-dir=node_modules .
grep -rn "keccak256" --include="*.ts" --include="*.js" . | grep -v node_modules
Regra
Para contextos do Ethereum, nunca use crypto.createHash('sha3-256'). Use helpers cientes de Keccak de ethers, viem, web3, ou outra implementação explícita de Keccak.
Perguntas frequentes
Por que o 'hash' do Node.js é diferente do Keccak-256 do Ethereum?
O Node.js usa um padrão chamado SHA3, enquanto o Ethereum usa um padrão ligeiramente diferente chamado Keccak-256. Embora pareçam semelhantes, eles produzem resultados diferentes para os mesmos dados.
O que acontece se eu usar o 'hash' errado?
Seu código pode falhar ao interagir com a rede Ethereum, como ao enviar transações, assinar mensagens ou verificar dados. Isso pode levar a erros difíceis de rastrear.
Preciso saber como o Keccak-256 funciona internamente?
Não, você não precisa entender os detalhes técnicos. Esta ferramenta cuida disso para você, permitindo que você use a função correta sem se preocupar com a complexidade.
Detalhes
Descrição original do autor
Prevent Ethereum hashing bugs in JavaScript and TypeScript. Node's sha3-256 is NIST SHA3, not Ethereum Keccak-256, and silently breaks selectors, signatures, storage slots, and address derivation. Use when hashing for Ethereum in JavaScript or TypeScript, or when a selector, signature, storage slot, or derived address is wrong.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #242
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
karpathy-guidelines
Ajuda seu agente a escrever código melhor, evitando erros comuns. É útil para garantir que o código seja simples, claro e fácil de verificar.
multica-ai/andrej-karpathy-skills
skill-creator
Permite ao agente criar, modificar e otimizar habilidades. Útil para testar o desempenho de habilidades e melhorar sua precisão.
anthropics/skills
ponytail-debt
Lista todos os atalhos de código ('shortcut:') deixados para depois. Ajuda a ver o que ainda precisa ser corrigido no projeto.
DietrichGebert/ponytail