# 작동 원리

## 블록

트랜잭션(Transaction) 은 거래의 최소 단위이다. 만약 A가 B에게 1 비트코인을 지급하고 B가 그 돈을 받은 경우, 이것은 하나의 트랜잭션을 구성한다.

만약 온라인에서 거래가 발생한 경우, 각각의 트랜잭션별로 하나의 거래내역이 구성된다. 이 거래내역은 해시 함수를 사용하여 암호화되고, 블록체인에서는 다수의 거래 내역을 묶어 하나의 블록을 구성한다. 이때 블록은 총 거래 횟수에 상관 없이 일정한 시간에 한번씩 새로 만들어진다.

블록은 각각 하나의 루트해시 (Root Hash) 가 존재한다. 루트 해시는 모든 하위 해시들을 해시 함수를 사용해 변환한 최종 해시값이다. 만약 해시의 개수가 홀수이면 마지막 하나의 해시는 스스로와 해시 연산을 수행한다. 밑의 그림은 이 과정을 시각화 한 것이다.

![해시가 만들어지는 과정](https://1187097371-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lykg783ljPo-yvaxqNb%2F-LylylE3vLCtRk1nH8Jq%2F-LymAR57d6iaP9Q5UN_h%2Fblockhash.png?alt=media\&token=d8356fe6-a37b-498e-aa1c-a4ffec3e29b7)

만약 거래내용 중 하나라도 변조될 경우 해당 해시값과 그 상위의 모든 해시값이 변경되어 루트해시가 달라지기 때문에 블록의 루트해시만 비교해보면 그 하위에 있는 해시를 일일히 검사할 필요 없이 데이터가 위변조 되었는지 즉시 확인이 가능하다.

새로 구성된 블록은 타임스탬프 서버에 의해 생성된 시간이 기록되며 전체 네트워크에 전파된다.

## 블록 연결

새로운 블록이 만들어질 경우, 이전의 블록체인의 맨 끝에 연결시켜야 한다. 이를 위해서는 해당 블록의 이름에 해당하는 해시값을 찾아야 한다. 이때 해시값은 기존 블록체인의 끝에 존재하는 블록의 해시보다 작아야만 한다.

블록의 해시값은 해당 블록의 생성시간, 버전, 비츠, 루트해시, 이전 블록의 해시, 그리고 [**논스**](terminology/nonce)라고 불리는 임시값 등을 조합하여 생성된다. 논스값을 바꿔가면서 하나씩 대입하다가 새로 생성된 해시값이 일정한 목표값보다 작을 경우, 새로운 블록이 생성되고 기존 블록체인에 연결되게 된다.

이러한 행위를 작업증명 (Proof of Work) 이라고 한다.

## 분산 저장

블록체인에는 앞서 설명했다싶이 탈중앙화 플랫폼이라 거래를 처리하고 관리하는 제 3자가 없이 네트워크에 연결된 참여자들의 협업에 의해 유지된다.

블록체인에 저장된 데이터는 네트워크에 연결된 모든 노드에 복사되어 분산 저장된다. 이때 저장된 데이터는 원본과 사본의 구별이 없다. 블록체인 네트워크에 새로 참여하는 개별 노드는 다른 노드에 있는 데이터를 복사하여 저장함으로써 서로 동일한 데이터를 가지게 된다.

각 블록의 내용은 모두 암호화되어 있으며 만약 블록에 담긴 거래 내용이 변조되면 그 장부는 전체 네트워크에서 진짜로 인정해주지 않는다. 그 블록은 바로 네트워크에서 버려지고, 다른 사람의 장부와 동일하게 바뀐다.

네트워크에서 새로운 거래가 발생할 경우 그 내역은 모든 노드에게 전파되고 각 노드는 일정한 시간동안 이루어진 모든 거래내역을 모아 새로운 블록을 구성하고 목표값 이하의 해시값을 찾기 위해 경쟁한다. 새로운 블록 해시를 먼저 찾아낸 노드는 그 사실을 전체 네트워크에 알리고 네트워크에 소속된 다른 노드는 새로 생성된 블록의 유효성을 검사하고 이상이 없을경우 해당 블록의 생성을 승인한다. 과반수 이상의 노드가 블록 생성을 승인할 경우, 해당 블록은 정식으로 블록체인에 추가된다.

블록체인에는 원본 데이터와 이 데이터를 해시함수를 이용해 변환한 해시 데이터가 저장된다. 블록체인에 둘 다 올리는 것은 가능하지만 블록 용량이 커질수록 전체적인 속도가 저하되며 관리의 효율성이 떨어지기 때문에 대부분의 경우, 해시값만 기록하고 원본 데이터는 별도의 서버에 저장한다. 만약 원본 데이터가 저장된 서버가 공격받아 데이터가 변조되더라도 해당 해시값을 가지고 있는 모든 노드의 해시값을 동시에 변조하지 않는 한, 조작 사실이 드러나고 정상적인 데이터로 취급받지 못한다.
