오늘은 비트코인 네트워크와 노드, 머클루트에 대해 배우고 솔리디티의 기초적인 문법과 구조에 대해 배웠다.
비트코인 네트워크에서 노드란
라우팅, 블록체인 데이터베이스, 채굴, 지갑 서비스 등 여러 기능의 집합체. 하지만 모든 기능을 수행 할 필요는 없고, 일부만 수행하는 노드들도 있다.
모든 노드는 기본적으로 라우팅, 거래와 블록을 검증하고 전파하는 기능, 노드간의 연결 유지 기능을 갖고 있다.노드의 종류
Full Blockchain Node: 블록체인 전체 복사본, 네트워크 노드만 존재하고 엣지 라우터의 역할을 함. 또한, 환전, 지갑, 블록 검사, 상거래 등을 가능케 해준다.
SPV Node: 라이트 노드 혹은 라이트 웨이트 노드라고 불리운다. 블록체인의 부분집합으로만 유지되는 노드로, 단순지불검증(SPV) 방법을 이용해서 거래를 검증한다.
SPV 특징:
- 블록 헤더만을 다운로드 받는 노드이다.
- 거래에 대한 정보가 없다는 것은 utxo 기반 거래의 결과를 직접 검증하지 못한다는 의미이기 때문에 풀 노드의 도움을 받아야 된다.
- 풀 노드의 경우에는 직접 본인이 보유한 데이터를 기반으로 검증할 수 있는 반면에 SPV 노드는 경로를 기반으로 거래를 검증한다.
기존 네트워크에서 정보 전달 및 동기화에 지연시간을 최소화 하기위해 고안된 방법이다. (즉, 트랜잭션을 빠르게 전파하기 위하여)
udp 기반 릴레이 네트워크로, 기본적으로 보내는 게 우선이고 받는 사람이 조각하여 쓴다.
비트코인 네트워크에서 트랜잭션 전파와 SPV 노드의 유효성 검ㅈ으에 큰 역할을 한다.
머클루트는 머클트리의 최상위 노드로, 머클트리의 모든 블록 헤더에 대한 머클트리 루트 해시이다.
블록 헤더는 머클트리에서 하나의 노드로 표현되고, 머클루트는 이들 블록 헤더의 머클트리 루트 노드의 해시 값이다.
머클트리는 데이터의 무결성을 검증하는 데 사용되는 트리 구조로, 이진 트리로 구성되어 있다.
또한, 각 노드는 해당 데이터의 해시값을 가지고 있고 상위 노드는 하위 노드의 해시값을 포함하여 다시 해시값을 생성하며, 이 과정은 최종적으로 루트 노드인 머클루트를 생성한다.
기본적인 계산기 기능을 솔리디티 코드로 작성하였는데, 별다른 건 없고
pure
와view
의 차이에 대해 헷갈려서 정리해 보려 한다.
먼저,view
는 블록체인의 상태를 읽기만 하고, 변경할 수 없음을 나타내는 키워드로 함수 내부에서 상태 변수의 값을 변경하는 것을 허용되지 않는다.
pure
는 블록체인의 상태를 변경하지 않고, 함수 내부에서 상태 변수를 읽지도 않는다는 것을 나타내는 키워드이다. 함수 내부에서 계산만 수행하고, 블록체인 상태를 변경하지 않기 때문에 블록체인에서 상태를 읽거나 변경할 필요없이 로컬에서 계산 수행 가능.