TIL07 Blockchain

shnae·2023년 10월 27일
1
post-thumbnail

💡 Today I Learned

블록체인의 블록해시가 만들어지는 과정을 알아보았다.
  • 새로 배움: Big Endien, Little Endien 표기 방법
  • 오늘의 하이라이트: 블록해시를 만들 때, 블록 헤더의 정보를 16진수로 변환하고 16진수 입력값을 SHA256 함수를 2번 적용하여 최종 블록해시를 생성한다.
  • 궁금한 내용: 왜 컴퓨터는 정보를 주고 받기 위해 0,1을 사용할까?

결론

헤더에서 정보를 추출하고, 16진수 형태로 변환, Little Endian으로 변환, 모두 이어붙이기, 해시함수 넣기, Endian 바꾸기

블록체인 헤더

  • 6가지 요소가 있고, 모두 변경되어서는 안된다
  • 사전에 변환 과정이 있고 그 전처리 작업을 위한 작업을 한다

16진수

0~9, A,B,C,D,E,F

자릿수가 바뀌는 방식

  • 10진수에서 자릿수가 바뀌는 경계선 = 9
    • 최대로 표현할 수 있는 숫자가 9, 9로 넘어가야 한다면 자릿수가 바뀐다
  • 16진수에서 자릿수가 바뀌는 경계선 = F (15)
    • 최대로 표현할 수 있는 숫자가 15(F), 16으로 넘어가야한다면 자릿수가 바뀐다
  • 각 자릿수마다 16을 곱해준다
    • 한 자리수 16^0 이상
    • 두 자리수 16^1 이상
    • 세 자리수 16^2 이상

16진수 변환

각 자릿수의 제곱 x 자릿수의 값

  • 16진수 10진수로 변환하는 방법:
    • A0B4 = 16^3*10 + 16^1*11 + 16^0*4
    • AB5FE = 16^4*10 + 16^3*11 + 16^2*5 + 16^1*15 + 16^0*14
  • 10진수 16진수로 변환하는 방법:
    • 숫자를 16으로 나눠서 몫, 나머지 기준으로 변환한다
    • 3824 -> EF0

2진수, 16진수, 용량

  • 2진수 1자리는 1bit, 16진수 1자리는 4bit
    11011001 -> 217(10진수) -> D9(16진수) -> 8비트
  • SHA256 은 결과값을 256비트로 용량을 나타낸다
  • 1byte -> 8bit -> 2진수 8자리, 16진수 2자리

Big Endian vs Little Endian

데이터가 교환될 때는 2진수, 16진수로 왔다갔다하기 때문에 10진수에 적용할 필요가 없다

  • 16진수는 2자리 단위로 끊어준다 -> 16진수 2자리는 2진수 8자리
  • 2진수는 4자리 단위로 끊어준다 -> 16진수 1자리로 표현 가능

Big Endian

  • 우리가 흔히 쓰는 방식의 글: 큰 자릿수가 왼쪽에, 작은 자릿수가 오른쪽에 적는 방식

Little Endian

  • 작은 자리수가 먼저 작성되는 방식

UNIX Time

1970년 1월 1일 00:00:00 (UTC) 기준 시간


실습

요소Small Endian
version3fffe00000E0FF3F
prev block0000000000000000000626308e720d3ea3cbff0873c5fcb636ad9065b13ac6bbBBC63AB16590AD36B6FCC57308FFCBA33E0D728E302606000000000000000000
merkle rootb6017391419a6da58855d8d0561b2a76a62e2106f3af700b1fb3280c316c569898566C310C28B31F0B70AFF306212EA6762A1B56D0D85588A56D9A41917301B6
timestamp5F964DDCDC4D965F
bits170e134e4E130E17
nonce33acd2d1D1D2AC33
  • 비트가 있어서 difficulty는 생략했다. 비트가 있으면 diffculty를 찾을 수 있고, difficulty가 있으면 비트를 계산할 수 있다.
  • GMT 시간을 UTC 시간으로 바꿔주고, UTC 시간을 UNIX 로 바꿔준다
    • 1603685852
  • UNIX 시간을 16진수로 변환해준다
    • 5F964DDC
  • 헤더 값을 모두 Big Endian 에서 Little Endian으로 바꿔준 다음 하나의 스트링으로 연결해준다
    • 00E0FF3FBBC63AB16590AD36B6FCC57308FFCBA33E0D728E30260600000000000000000098566C310C28B31F0B70AFF306212EA6762A1B56D0D85588A56D9A41917301B6DC4D965F4E130E17D1D2AC33
  • SHA256(Input Type HEX)로 2번 해시 함수 돌려준 다음 Little Endian으로 변경한다
    • 000000000000000000058452BBE379AD4364FE8FDA68C45E299979B492858095 -> ✨블록해시가 완성되었다

0개의 댓글