토요일, 3월 26, 2022

[B급 프로그래머] 이더리움 지갑 주소를 제대로 검증하려면?

어쩌다 보니 이더리움 지갑 주소를 검증할 일이 생겼다. 이더리움 주소는 보통 "0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9"처럼 0x 뒤에 40자의 16진수가 붙으면 되므로 정규 표현식으로 쉽게 표현이 가능할 듯이 보인다. 그러면 다음과 같은 파이썬 코드 한 줄이면 끝이다.

if re.match(r'^(0x)?[0-9a-f]{40}$', address, flags=re.IGNORECASE):
    return True
else:
    return False

그러면 여기서 한 가지 의문이 생길 수 있다. 주민등록번호, ISBN, 신용카드처럼 혹시 체크썸은 없을까? 위 코드는 정말 verification만 수행한 로직이지 실제 validation은 빠진 상황이므로 실수나 해킹 등으로 주소를 살짝 변경한 상황에 대응하기가 무척 어려워보인다.

정답부터 이야기하지만 초기 이더리움 지갑 주소를 만들 때는 체크썸이 없었지만 나중에 문제점을 인식하고 EIP-55로 체크썸을 추가하게 된다. 따라서 완벽하게 동작하는 이더리움 지갑 주소 검증 프로그램은 EIP-55에 따라 만들어야 한다.

EIP-55의 동작 원리는 무엇일까? 40자를 그대로 둔 상태에서 체크썸을 넣어야 하므로 일반적인 방법으로는 쉽지 않아 보인다. 그래서 해당 주소에 대해 Keccak256 해시를 구해서 16진수로 변경해 해시의 첫 20바이트(즉 40자)를 체크썸으로 사용하는 방법을 택한다.

Address: 001d3f1ef827552ae1114027bd3ecf1f086ba0f9
Hash   : 23a69c1653e4ebbb619b0b2cb8a9bad49892a8b9...

여기서 Address의 알파벳 글자를 만나면 대응하는 자리의 Hash 값을 읽어서 8보다 더 큰 경우에 대문자로 바꾸는 방법을 사용한다. 결과는 다음과 같이 될 것이다.

Address: 001d3F1ef827552Ae1114027BD3ECF1f086bA0F9
Hash   : 23a69c1653e4ebbb619b0b2cb8a9bad49892a8b9...

해시값은 원 주소에서 조금만 바뀌어도 크게 흔들리게 되므로, 이런 성질을 이용해서 특정 알파벳 글자의 대소문자가 제대로 되었는지를 확인하면 끝난다. 예를 들어, 앞에서 누군가 실수로 마지막 F를 E로 잘못 전달했다면 다음과 같이 알파벳 대소문자 규칙이 깨질 것이다.

001d3F1ef827552Ae1114027BD3ECF1f086bA0E9
5429b5d9460122fb4b11af9cb88b7bb76d892886...

흥미로운가? EIP-55가 나온 배경은 EIP55: Why It’s Important, What It Is, and Why We’re Talking About It Now를 참고하고, 더 자세한 설명은 오랄리에서 출간한 Mastering Ethereum의 4장을 참고하기 바란다.

EOB

목요일, 3월 24, 2022

[OCI 탐험일지] 8. 로드 밸런서 설정

오늘은 오라클 클라우드를 다루는 OCI(Oracle Cloud Infrastructure) 탐험일지 기획 연재 여덟 번째 시간으로, 로드 밸런서 설정 방법을 소개하겠다.

방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:29 로드 밸런서 소개
  • 02:33 로드 밸런서 생성
  • 12:10 웹브라우저로 접속 확인
EOB

수요일, 3월 23, 2022

[독서광] 이득우의 게임 수학

이번 주는 이득우의 게임 수학을 소개하겠다.

방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 도입
  • 00:43 한 페이지 요약
  • 03:28 이 책의 구성
  • 07:29 무엇이 이 책을 흥미롭게 만드는가?
  • 12:07 책 vs 책
  • 13:17 대상 독자
  • 15:23 결론과 마무리
EOB

토요일, 3월 19, 2022

[B급 프로그래머] 3월 3주 소식(개발/클라우드/고성능 서버/데이터베이스 관련 소식 정리)

(오늘의 짤방: a lot of people don't know this - C actually lets you do arithmetic with mixed types, much like JavaScript via @lunasorcery)

개발 관련 소식

  1. 팁과 유틸리티
  2. 프로그래밍
  3. DevOps
  4. 설계
  5. 하드웨어
  6. 경력 관리와 개발문화
  7. 블록체인

클라우드/고성능 서버/데이터베이스 관련 소식

  1. 보안
  2. 클라우드
  3. 데이터베이스

며칠 전에 고인이 된 크리스토퍼 알렉산더의 마지막 인터뷰.

EOB

수요일, 3월 16, 2022

[독서광] 비전공자도 이해할 수 있는 AI 지식

이번 주는 비전공자도 이해할 수 있는 AI 지식을 소개하겠다.

방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 도입
  • 00:27 한 페이지 요약
  • 01:11 이 책의 구성
  • 03:20 무엇이 이 책을 흥미롭게 만드는가?
  • 05:19 책 vs 책
  • 07:10 대상 독자
  • 08:33 결론과 마무리
EOB

토요일, 3월 12, 2022

[B급 프로그래머] 3월 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: The heart of math.♥️ via @abakcus)
  1. 빅데이터/인공지능
  2. 읽을거리

보너스: 너무 당연히 초심자는 자기가 뭘 모르는지 모른다. 뭘 모르는지 알면 구글링 하거나 적임자에게 질문하면 되는데, 뭘 모르는지 모르니까 요점이 없을 수 밖에 없다. via @LearnerBR

EOB

금요일, 3월 11, 2022

[OCI 탐험일지] 7. nginx 설치(오라클 리눅스 7)

오늘은 오라클 클라우드를 다루는 OCI(Oracle Cloud Infrastructure) 탐험일지 기획 연재 일곱 번째 시간으로, 오라클 리눅스 7에서 nginx 설치 방법을 소개하겠다.

방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 nginx 소개
  • 02:41 오라클 인스턴스에서 nginx 설치하기
  • 10:51 방화벽 설정
  • 13:20 수신 규칙 설정
  • 17:31 nginx 서비스 등록과 시작
  • 18:35 웹브라우저로 접속 확인
EOB

토요일, 3월 05, 2022

[B급 프로그래머] 3월 1주 소식(개발/클라우드/고성능 서버/데이터베이스 관련 소식 정리)

(오늘의 짤방: 인티 앨리엔싱 켜서 그런거 아닌가? via @PasteCat)

개발 관련 소식

  1. 팁과 유틸리티
  2. 프로그래밍
  3. DevOps
  4. 설계
  5. 하드웨어
  6. 경력 관리와 개발문화
  7. 블록체인

클라우드/고성능 서버/데이터베이스 관련 소식

  1. 보안
  2. 클라우드
  3. 데이터베이스

보너스

EOB

목요일, 3월 03, 2022

[독서광] 실용주의 프로그래머 20주년 기념판

이번 주는 실용주의 프로그래머를 위한 고전인 실용주의 프로그래머 20주년 기념판를 소개하겠다.

방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 도입
  • 00:56 한 페이지 요약
  • 04:08 이 책의 구성
  • 07:26 무엇이 이 책을 흥미롭게 만드는가?
  • 14:47 대상 독자
  • 16:46 결론과 마무리
EOB