(+프라이빗, 컨소시움, 하이브리드)
블록체인 네트워크의 참여자(들이 사용하는 기기) = 노드(node)
블록체인의 모든 데이터를 저장하고 기록 = 풀 노드 -> 많은 저장공간 필요, 현실적으로 어려움.
블록 헤더의 데이터만 저장, 검증이 필요할 때만 풀 노드와 대조 = 라이트 노드 -> 적은 저장공간으로도 네트워크 참여 가능.
개인키(private key) : like 계좌 비밀번호
공개키(public key) : like 계좌번호
해싱 알고리즘 사용: 대개 SHA-256 방식 사용 -> 데이터를 256비트 크기의 출력값으로 변환
ㄴ 결정론적(Deterministic) : 입력 데이터가 달라지면 언제나 다른 출력값
ㄴ 단방향(One-way) : 출력값으로부터 입력값을 유추할 수 없음. 오로지 입력값->출력값 방향으로만.
블록을 생성하면, 그 블록을 네트워크에 공유한다.
그러면 다른 노드들이 ①트랜잭션의 해시값을 확인하고 ②전자서명을 공개키로 열어서 해시 값이 앞 과정과 동일한지 확인한다. 동일하다면 유효하다고 판정한다.
과반수의 노드들의 이 블록이 유효하다고 인정하면 해당 블록을 원본으로 저장하고, 다른 노드들은 각자 검증한 내용을 사본으로 저장하여 보관한다.
▶︎ 이렇게 복잡하게 검증하는 이유: 아무도 믿을 수 없음.
누구의 블록을 동기화해야하는지 합의해야 한다.
악의적인 참여자가 참여해도 정상적으로 작동해야 한다.
이중지불 공격:
51% 어택 -> 잘못된 트랜잭션이 담긴 블록을 51% 이상의 노드들이 유효하다고 인정하면 해당 블록의 노드는 거래를 해도 BTC가 남아있다.
레이스 어택 -> 어떤 노드가 다른 노드에게 BTC을 보내는 동시에 자신에게도 BTC를 보내면 자신에게 보낸 것만 인정되기 때문에 다른 노드는 받아야 할 BTC를 받지 못한다.
작업(Work) : 블록헤더의 논스(nonce) 값을 구하는 행동
증명(Proof) : 논스값을 구한 노드가 채굴자(Miner)가 되는 권한을 얻는 것
채굴자가 구해야 하는 것 : 해시함수의 결과, 논스값을 찾는 것 -> 해시함수에 무작위 대입
-> 다른 채굴자들은 블록이 유효한지 확인한다.
유효하다면, 원본은 저장하고 각자 검증한 내용을 사본으로 저장하여 분산 보관한다.
-> 블록헤더의 6가지 정보의 합을 SHA-256으로 변환한 결과 값: 블록의 고유한 해시 값
한계