블록체인 채용 과제

Jungsoo Nam
3 min readSep 5, 2021

--

(본 채용 과제는 종료되었으며, 관련 조직도 더이상 존재하지 않습니다. 참고로 기록을 남깁니다. )

목적

  • 블록체인의 기본적인 합의 알고리즘인 PoW (Proof of Work)를 이해하고, 이를 바탕으로 간단한 블록체인 시뮬레이션 프로그램을 구현해 본다.

필수 요구 사항

  • 개발 언어는 무관하나 개발한 프로그램의 빌드 및 실행 환경 구성 방법을 반드시 명시
  • 하기의 체인 구현의 PoW 채굴 합의 구현 필수
  • 하기의 검증 구현 필수

참고 사항

  • User address는 고려하지 않아도 무관함
  • P2P network는 고려하지 않아도 무관함
  • Transaction은 실제로 이루어지지 않아도 무관함
  • 채굴은 자동으로 이루어지지 않아도 무관함
  • 블록은 파일에 저장하지 않아도 무관함
  • 암호화 관련 라이브러리(sha256 등)는 새로 작성하지 않아도 무관함

체인 구현

  • 블록은 이전 블록의 hash, prevHash, nonce, transactions, timestamp를 content로 가진다.
import java.util.List;

class Block {
public String hash;
public String prevHash;
public long nonce;
public List transactions;
public String timestamp;
}
  • hashsha256으로 블록의 content를 string화 하여 계산한다. (Hash를 계산할 때 content의 자신의 hash는 제외한다.)
public String getContent() {
return prevHash + Long.toString(nonce) + transactions.toString() + timestamp;
}
  • PoW 채굴 합의 구현 (필수)
  1. 체인은 난이도(difficulty_bits)를 가지며 난이도를 기준으로 nonce를 계산한다.
  2. 채굴 대상 블록의 hash를 계산하여 나온 값이 목표 난이도 보다 작아야 한다.
  3. 목표 난이도의 경우 다음과 같은 공식을 따른다.
double target = Math.pow(2, 256 - difficulty_bits);

검증 구현

  • 아래의 두가지 원칙에 의해 블록체인 제네시스 블록 (최초 블록)부터 마지막 블록까지 검증한다. (필수)
  1. 현재 블록에서 저장된 hash와 실시간으로 직접 계산한 hash가 같은지
  2. 현재 블록에 저장된 이전 블록의 hash와 실시간으로 직접 계산한 이전 블록의 hash가 같은지

주요 평가 기준

  • 기능 적합성 : 요건을 정확하게 이해하고 요건에 맞게 구현하였는가?
  • 설계 적합성 : 필요한 기능 구현을 위해 최대한 간결한 구조를 유지하면서도 적절한 유연성을 갖는가?
  • 코드 가독성 : 소스 코드의 부분 부분이 의도하는 바가 명확하게 읽히고, 코드 상호간에 불필요한 결합이 없는가?

--

--