2. Proof of work

PoW에 대해 공부하고 구현해보자.

Proof of work

  • block이 채굴되는 시간을 일정하게 하기 위한 방법.

  • miner가 많아지면 difficulty를 올린다. (채굴되는 시간을 일정하게 하기 위해)

처음보는 메소드 정리

  • big.NewInt()

    • 큰 수를 생성한다.

    • 최대 값이 명시되어 있지 않고 이론적으로 메모리 사이즈 또는 최대 배열 크기만큼 사용할 수 있다고 한다.

  • byte

    • uint8 과 동일.

  • bytes.Join()

    func Join(s [][]byte, sep []byte) []byte
  • math.MaxInt64

    • 1<<63 - 1 과 같은 값. 2^63 - 1

  • sha256.Sum256()

    • Sum256 returns the SHA256 checksum of the data.

proof.go

block.go

main.go

Result

Question

  1. proof.go의 InitData()에서 데이터르 생성할 때 Difficulty를 포함시키는 이유

    • Difficulty가 없더라도 문제 없을 것 같다.

    • Answer : Difficulty가 변함. 그에 따라 데이터도 변해야 함. nonce처럼 블록 내부와 validate 과정에 difficulty를 추가해야 됨. 하지만 지금 코드에서는 반영 되어 있지 않음.

Code

아래 링크에서 전체 코드를 찾아볼 수 있다.

Last updated

Was this helpful?