Skip to main content

Command Palette

Search for a command to run...

EIP - 55

Updated
1 min read

EIP-55: 이더리움 주소 체크섬

왜 필요한가?

이더리움 주소는 40자리 hex 문자열이다. 복사하다 한 글자 틀리면 다른 주소로 전송되고, 되돌릴 수 없다. EIP-55는 대소문자 패턴을 이용해 오타를 감지한다. 주소 형식 자체는 바꾸지 않는다.

0xab5801a7d398351b8be11c439e05c5b3259aec9b   ← 체크섬 없음
0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B   ← 체크섬 적용

Keccak-256 vs SHA-3

EIP-55는 Keccak-256 해시를 사용한다. SHA-3와 핵심 알고리즘은 같고, 차이는 패딩 한 바이트뿐이다.

  • Keccak: 패딩에 0x01

  • SHA-3: 패딩에 0x06

이더리움이 Keccak을 쓰는 이유는 단순히 타이밍이다. 이더리움 설계(2013~2014) 당시에는 Keccak만 존재했고, NIST가 패딩을 바꿔 SHA-3를 표준화한 건 2015년 8월(이더리움 출시 이후)이다. 이미 돌아가는 시스템을 굳이 바꿀 이유가 없었다.

동작 방식

  1. 주소에서 0x를 떼고 전부 소문자로 만든다

  2. 그 문자열의 Keccak-256 해시를 구한다

  3. 해시의 각 자리(니블)가 8 이상이면 대문자, 미만이면 소문자로 변환한다

const { keccak256 } = require("js-sha3");

function toChecksumAddress(address) {
  const addr = address.replace("0x", "").toLowerCase();
  const hash = keccak256(addr);

  let result = "0x";
  for (let i = 0; i < 40; i++) {
    result += parseInt(hash[i], 16) >= 8
      ? addr[i].toUpperCase()
      : addr[i];
  }
  return result;
}

검증은 같은 로직을 돌려서 결과가 일치하는지 비교하면 끝이다.

4 views

Blockchain

Part 1 of 1

Solidity, 블록체인 관련 학습 기록

More from this blog

C언어 (13)

1. STL의 개념 1-1. 배경 C++로 프로그래밍을 하다 보면 동적 배열, 연결 리스트, 정렬, 검색 같은 자료구조와 알고리즘을 반복적으로 구현하게 된다. 프로젝트마다 매번 새로 만들면 시간도 낭비되고, 버그가 생길 가능성도 높아진다. 이런 문제를 해결하기 위해 자주 사용되는 자료구조와 알고리즘을 미리 만들어서 표준 라이브러리에 포함 시킨 것이 STL이

Apr 1, 202610 min read3

chamdom's tech

16 posts