솔리디티 및 블록체인

블록체인 만들기 part.02 _ 블록체인 설계

채채_._. 2024. 8. 2. 15:43
part.01에 이어서 ✈️

2024.07.21 - [솔리디티 및 블록체인] - 블록체인 만들기 part.01 _ 블록체인 설계

 

블록체인 만들기 part.01 _ 블록체인 설계

1. 아키텍처만 설계  datetime 라이브러리 : 블록이 생성되고 채굴된 정확한 날짜의 타임스탬프를 각 블록이 가짐hashlib 라이브러리 : 블록을 해시할 때 사용json 라이브러리 : 블록을 해시하기 전

chaechae-lee.tistory.com

 

5. 마지막 확인

 

블록체인이 알맞게 구축되었는지 확인하여 유효한 블록체인을 갖고 있는지 알 수 있음

  1. 블록체인의 각 블록이 선행 제로 4개로 시작하는 암호 해시를 반환하여 문제를 해결하는 작업 증명을 갖는지 확인
  2. 각 블록의 이전 해시가 이전 블록의 해시와 같은 지의 여부

2번 확인 방법

1. 해시 함수 만들기

 

 

인수

  • self 인수
  • block 인수

 

정의

  • json.dumps : Json 라이브러리를 통해 dumps 함수 불러오고 이 블록을 문자열로 만듦
    • 인수
    • sort_keys=true : 블록과 블록 딕셔너리를 키별로 정렬

 

2. chain valid 체인 유효성 함수로 확인

chain valid 함수는 각 블록의 이전 해시가 이전 블록의 해시와 동일한지 여부 확인 및 작업 증명 함수로 정의한 작업 증명 문제에 따라 각 블록의 증명이 유효한지를 확인

 

 

정의

  • 현재 블록을 불러와 루프에 대한 블록의 인덱스를 찾음
  • chain[0]으로 지정하여 첫번째 블록을 봄
  • 이후 블록 인덱스 변수 초기화
  • while 문 : 체인 길이에 대한 최종 인덱스에 블록 인덱스가 도달할 때까지 1씩 증가 
    • 첫번째 확인 : 현재 다루고 있는 블록의 이전 해시와 이전 블록의 해시가 동일한지 여부
      • block = chain[block_index] : 블록 인덱스가 1인 블록이 첫번째 블록
      • if block['previous hash'] = self.hash(previous_block) : 현재 블록의 이전 해시를 확인하여 이전 해시랑 비교
        • *self인 이유는 다른 해시 함수가 아닌 이미 다루고 있는 블록체인의 해시 메서드를 사용했기 때문
      • return false : 현재 블록의 해시와 이전 블록의 해시가 다르면 false 값 반환하여 체인이 유효하지 않음을 나타냄
  •  
    • 두번째 확인 : 선행 제로가 4개로 시작하는지 여부
      • previous_proof = previous_block['proof'] : 이전 증명과 이전 블록의 증명을 불러옴
      •  hash operation = ~ : 채굴자들이 풀어야 하는 문제를 정의했던 해시 연산을 불러와 새 증명이 아닌 현재 블록의 증명을 가르키도록  new proof를 proof로 수정
      • if문 : 선행 제로가 4개 아닌 경우 거짓을 반환하도록 지정
  •  
    • 마지막 확인 : 업데이트
      1. 루프 변수 블록 인덱스와 이전 블록 변수 업데이트
      2. 블록 인덱스를 증가시켜 루프 변수 업데이트

 

 

 

 

📍코드 출처 : 유데미 강의