Pular para o conteúdo
Skillpedia
Código em geral280 mil · #242

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

https://github.com/affaan-m/ECC/blob/main/skills/nodejs-keccak256/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/skills/nodejs-keccak256/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-keccak256

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/skills/nodejs-keccak256/SKILL.md -o SKILL.md
Conteú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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas