К основному содержанию
скилл Claude Code CX Codex Cursor GitHub Copilot

nodejs-keccak256 — скилл для Claude: хеши Ethereum без ошибок

Ловит подмену Keccak-256 на NIST SHA3 в JS и TS. Пригодится, когда селектор, подпись или слот хранилища считаются неверно.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add affaan-m/ECC --skill nodejs-keccak256 -a claude-code
Открыть на GitHub

Что делает nodejs-keccak256

Node отдаёт crypto.createHash('sha3-256'), а это NIST SHA3, не Ethereum Keccak-256. Для одного и того же входа алгоритмы дают разные хеши, и Node об этом молчит. Селекторы функций, темы событий, EIP-712, Merkle и слоты хранилища ломаются тихо — код работает, значения не те.

Скилл показывает, как считать хеши через ethers v6, viem и web3.js: keccak256, toUtf8Bytes, solidityPackedKeccak256, id, AbiCoder. Есть готовые шаблоны для селектора, typeHash, слота маппинга и адреса из публичного ключа. Для проверки проекта в скилле лежат две команды grep по createHash.*sha3 и по всем keccak256 вне node_modules.

Ставить стоит, если в проекте есть JS или TS рядом с Ethereum. Если хеширование живёт только в Solidity или через готовую библиотеку без самодельных хелперов, скилл ничего не изменит.

Какие задачи решает

  • найти в кодовой базе вызовы createHash('sha3-256')
  • посчитать селектор функции и тему события правильно
  • собрать слот хранилища для маппинга
  • вывести адрес из публичного ключа
  • проверить хелперы для EIP-712 и Merkle на Keccak-256

Примеры запросов агенту

  • проверь, где в проекте хешируют данные Ethereum через Node crypto
  • посчитай селектор для `transfer(address,uint256)` через ethers
  • напиши функцию для слота маппинга на `AbiCoder`

Как установить nodejs-keccak256

1Через Skills CLI (Vercel)

npx skills add affaan-m/ECC --skill nodejs-keccak256 -a claude-code

2Вручную: положить файлы

~/.claude/skills/nodejs-keccak256/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/nodejs-keccak256/

Из того же набора146

Весь набор →
video-editing affaan-m Скилл выстраивает пайплайн монтажа реального видео через ИИ. Помогает нарезать сырые записи через FFmpeg, собрать титры в Remotion и добавить озвучку в ElevenLabs. Claude Code CX Codex Cursor +1 6 500установок docker-patterns affaan-m Скилл с проверенными шаблонами Dockerfile и Docker Compose: локальная разработка, сети, тома, безопасность контейнеров. Claude Code CX Codex Cursor +1 6 300установок frontend-patterns affaan-m Скилл подсказывает паттерны для React и Next.js: компоненты, состояние, загрузка данных и производительность. Нужен при разработке и ревью интерфейса. Claude Code CX Codex Cursor +1 5 900установок backend-patterns affaan-m Скилл с паттернами бэкенда для Node.js, Express и Next.js API routes: слои, кэш, транзакции, обработка ошибок. Claude Code CX Codex Cursor +1 5 900установок coding-standards affaan-m Базовые правила кода для проектов: проверяет именование, запрещает мутации объектов и следит за простыми конструкциями. Пригодится на ревью и рефакторинге. Claude Code CX Codex Cursor +1 5 600установок api-design affaan-m Скилл задаёт правила проектирования REST API: именование эндпоинтов, выбор статус-кодов, пагинацию и формат ошибок. Помогает при создании и ревью серверных контрактов. Claude Code CX Codex Cursor +1 5 500установок rust-testing affaan-m Скилл для написания тестов на Rust: юнит-тесты, интеграционные, async, property-based, моки и покрытие. Пригодится, когда ведёшь проект по TDD. Claude Code CX Codex Cursor +1 5 500установок laravel-security affaan-m Скилл помогает проверять безопасность Laravel-приложений: аутентификацию, Eloquent, CSRF, XSS, API и настройки production. Пригодится для ревью и деплоя. Claude Code CX Codex Cursor +1 5 400установок

Похожие

dotnet-best-practices официальный github Проверяет выделенный .NET/C# код по правилам проекта: от структуры и DI до тестов, логирования и безопасности. Нужен при ревью или доработке решения. GitHub Copilot 15 752установок migrate-to-shoehorn Matt Pocock Переводит type assertions с as в тестах на функции из @total-typescript/shoehorn. Нужен для частичных объектов и намеренно неверных данных в проверках. Claude Code 475 388установок write-swift emilkowalski Скилл помогает писать, проверять и переносить код на Swift с учётом модели языка. Подойдёт, когда нужно разобраться с конкурентностью, ошибкой или циклом удержания объектов. Claude Code CX Codex Cursor +1 117 500установок megacave JuliusBrussee Переводит ответы ассистента на классический китайский язык (вэньянь) для экономии места на экране. Активируется командами /megacave или /caveman wenyan. Claude Code CX Codex Cursor +1 24 400установок find-docs upstash Тянет актуальную документацию, справочники API и примеры кода для любой библиотеки через Context7 CLI. Пригодится, когда агент отвечает по устаревшим данным обучения. Claude Code CX Codex Cursor +1 9 400установок typescript-advanced-types Seth Hobson Помогает агенту писать сложную типизацию TypeScript: generics, conditional types и преобразования типов. Нужен для библиотек, API-клиентов и строгих конфигураций. Claude Code CX Codex Cursor 92 169установок smart-explore thedotmack Структурно ищет функции и классы через tree-sitter. Пригодится, когда нужно разобраться в кодовой базе без чтения всех файлов. Claude Code CX Codex Cursor +1 7 300установок

Вопросы о nodejs-keccak256

Как установить nodejs-keccak256 в Claude?

Выполни npx skills add affaan-m/ECC --skill nodejs-keccak256 -a claude-code. Файл скилла окажется по пути ~/.claude/skills/nodejs-keccak256/SKILL.md.

Что делает nodejs-keccak256?

Объясняет разницу между NIST SHA3 и Ethereum Keccak-256 и даёт примеры хеширования через ethers, viem и web3.js. Плюс команды grep для поиска опасных мест в проекте.

Почему `crypto.createHash('sha3-256')` не подходит для Ethereum?

Node реализует стандартизированный NIST SHA3, а Ethereum использует Keccak-256. Выход для одного входа разный, и предупреждения не будет.

Исходный текст

SKILL.md · MIT
---
name: nodejs-keccak256
description: 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.
metadata:
  version: "1.0.0"
  origin: ECC direct-port adaptation
---

# Node.js Keccak-256

Ethereum uses Keccak-256, not the NIST-standardized SHA3 variant exposed by Node's `crypto.createHash('sha3-256')`.

## When to Use

- Computing Ethereum function selectors or event topics
- Building EIP-712, signature, Merkle, or storage-slot helpers in JS/TS
- Reviewing any code that hashes Ethereum data with Node crypto directly

## How It Works

The two algorithms produce different outputs for the same input, and Node will not warn you.

```javascript
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
```

## Examples

### ethers v6

```typescript
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

```typescript
import { keccak256, toBytes } from 'viem';

const hash = keccak256(toBytes('hello'));
```

### web3.js

```javascript
const hash = web3.utils.keccak256('hello');
const packed = web3.utils.soliditySha3(
  { type: 'address', value: '0x742d35Cc6634C0532925a3b8D4C9B569890FaC1c' },
  { type: 'uint256', value: '100' },
);
```

### Common patterns

```typescript
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]),
  );
}
```

### Address from public key

```typescript
import { keccak256 } from 'ethers';

function pubkeyToAddress(pubkeyBytes: Uint8Array): string {
  const hash = keccak256(pubkeyBytes.slice(1));
  return '0x' + hash.slice(-40);
}
```

### Audit your codebase

```bash
grep -rn "createHash.*sha3" --include="*.ts" --include="*.js" --exclude-dir=node_modules .
grep -rn "keccak256" --include="*.ts" --include="*.js" . | grep -v node_modules
```

## Rule

For Ethereum contexts, never use `crypto.createHash('sha3-256')`. Use Keccak-aware helpers from `ethers`, `viem`, `web3`, or another explicit Keccak implementation.

© affaan-m · MIT · affaan-m/ECC

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой