part.01에 이어서 ✈️
5. 마지막 확인
블록체인이 알맞게 구축되었는지 확인하여 유효한 블록체인을 갖고 있는지 알 수 있음
- 블록체인의 각 블록이 선행 제로 4개로 시작하는 암호 해시를 반환하여 문제를 해결하는 작업 증명을 갖는지 확인
- 각 블록의 이전 해시가 이전 블록의 해시와 같은 지의 여부
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개 아닌 경우 거짓을 반환하도록 지정
- 두번째 확인 : 선행 제로가 4개로 시작하는지 여부
-
- 마지막 확인 : 업데이트
- 루프 변수 블록 인덱스와 이전 블록 변수 업데이트
- 블록 인덱스를 증가시켜 루프 변수 업데이트
- 마지막 확인 : 업데이트
📍코드 출처 : 유데미 강의
'솔리디티 및 블록체인' 카테고리의 다른 글
블록체인 만들기 part.03 _ 암호화폐 직관적 이해.zip (0) | 2024.08.04 |
---|---|
블록체인 part.03 _ 채굴 (0) | 2024.08.03 |
블록체인 만들기 part.01 _ 블록체인 설계 (0) | 2024.07.21 |
블록체인 만들기 part.01 _ 환경설정 (0) | 2024.07.21 |
블록체인 직관적 이해.zip (0) | 2024.07.13 |