From ecc
JavaScript와 TypeScript에서 Ethereum 해싱 버그를 방지합니다. Node의 `sha3-256`은 NIST SHA3이지 Ethereum Keccak-256이 아니며, selector, signature, storage slot, address derivation을 조용히 깨뜨립니다.
npx claudepluginhub sam42-lab/everything-claude-code-krThis skill uses the workspace's default tool permissions.
Ethereum은 Node의 `crypto.createHash('sha3-256')`가 제공하는 NIST 표준 SHA3가 아니라 Keccak-256을 사용합니다.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Ethereum은 Node의 crypto.createHash('sha3-256')가 제공하는 NIST 표준 SHA3가 아니라 Keccak-256을 사용합니다.
두 알고리즘은 같은 입력에 대해 서로 다른 출력을 만들고, Node는 이를 경고하지 않습니다.
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
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],
);
import { keccak256, toBytes } from 'viem';
const hash = keccak256(toBytes('hello'));
const hash = web3.utils.keccak256('hello');
const packed = web3.utils.soliditySha3(
{ type: 'address', value: '0x742d35Cc6634C0532925a3b8D4C9B569890FaC1c' },
{ type: 'uint256', value: '100' },
);
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]),
);
}
import { keccak256 } from 'ethers';
function pubkeyToAddress(pubkeyBytes: Uint8Array): string {
const hash = keccak256(pubkeyBytes.slice(1));
return '0x' + hash.slice(-40);
}
grep -rn "createHash.*sha3" --include="*.ts" --include="*.js" --exclude-dir=node_modules .
grep -rn "keccak256" --include="*.ts" --include="*.js" . | grep -v node_modules
Ethereum 맥락에서는 crypto.createHash('sha3-256')를 절대 사용하지 않습니다. ethers, viem, web3 또는 명시적 Keccak 구현의 헬퍼를 사용합니다.