[블록체인 부트캠프] 11주차 1일 정리노트

Donghun Seol·2022년 11월 21일
0

코드스테이츠 BEB 07

목록 보기
38/39

노트정리 규칙

학습목표

  1. 블록체인에서의 노드에 대해 이해할 수 있다.✅
  2. 노드의 종류와 구성에 따른 기능을 이해할 수 있다.✅❓
  3. (실습) 이더리움 블록체인에서 계정과 트랜잭션을 생성하고 채굴을 할 수 있다.

학습내용

Chapter Node의 의미

자료구조에서의 노드와 연결리스트

일반적으로 연결리스트의 구성요소를 의미한다. 노드는 값과 다른 노드의 주소에 대한 포인터로 구성된다. 물리적으로 인접해 저장되는 배열과 달리 물리적으로 분산되어 있어도 정상적으로 작동한다.

단순 연결리스트에서 head와 tail 노드는 다른 노드와 구분되는 특징을 갖는다. head는 값이 없는 노드, tail은 포인터가 null인 노드이다.

시간복잡도

삽입과 삭제연산의 시간복잡도는 O(1), 탐색시 시간복잡도는 O(n)이다. 삽입과 삭제의 경우 포인터만 변경해주면 되지만, 탐색시에는 처음 노드부터 순차적으로 접근해야 되기 때문이다.

배열과의 비교🍒

배열은 랜덤액세스가 가능하므로 탐색, 공간복잡도 측면에서 효율적이다. 연결리스트는 탐색시 순차접근하므로 배열보다 비효율적이다. 하지만 힙을 활용해 동적으로 메모리를 활용가능하며 삽입, 삭제연산을 상수시간에 처리할 수 있어 빅데이터 등의 자료를 다루는데 유용하다.

단순연결리스트 구현

아래의 구현은 [이곳]을 참고하였다.(https://www.geeksforgeeks.org/implementation-linkedlist-javascript/)을 참고하였다.

class Node {
	constructor(elem) {
      this.elem = elem;
      this.next = null
    }
}

class LinkedList {
  constructor() {
    this.head = null;
    this.size = 0;
  }
  
  add(elem) {
    const node = new Node(elem);
    let current;
    
    if (this.head === null) {
      this.head = node;
    } else {
      current = this.head;
      
      while (current.next !== null) {
        current = current.next;
      }
      
      current.next = node;
    }
    
    this.size++;
  }
  
  insertAt(elem, idx) {
    if (index < 0 || index > this.size) {
      return false;
    }
    
    const node = new Node(elem);
    let curr, prev;
    cur = this.head;
    let pointer = 0;
    
    while (pointer < index) {
      pointer++;
      prev = curr;
      curr = curr.next;
    }
    
    node.next = curr;
    prev.next = node;
    this.size++;
  }
  
  removeFrom(index) {
    if (index < 0 || index >= this.size)
      return false;
    let curr, prev, pointer = 0;
    curr = this.head;
    prev = curr;
    
    if (index === 0) {
      this.head = curr.next;
    } else {
      while (pointer < index) {
        pointer++;
        prev = curr;
        curr = curr.next;
      }
      
      prev.next = curr.next;
    }
    this.size--;
    
    return curr.element;
  }
  
  removeElement(elem) {
    let current = this.head;
    let prev = null;
    
    while (current !== null) {
      if (current.elem === elem) {
        if (prev === null) {
          this.head = current.next;
        } else {
          prev.next = current.next;
        }
        this.size--;
        return current.element;
      }
      prev = current;
      current = current.next;
    }
    return -1;
  }
  
  indexOf(elem) {
    let count = 0;
    let current = this.head;
    
    while (current !== null) {
      if (current.elem === elem) return count;
      count++;
      current = current.next;
    }
    return -1;
  }
}     

블록체인에서의 노드

블록체인 네트워크에 참여하는 각 컴퓨터들을 노드라고 한다.
노드는 기능과 필요에 따라 종류와 형태가 구별되는데, 노드는 트랜잭션을 제안하고 검증, 블록을 생성, 합의 알고리즘을 수행하는 등의 역할을 수행한다.

하이퍼레저 패브릭과 같은 Private Blockchain에서는 CA, MSP, Identity Mixer등의 기능을 수행하기도 한다.

노드의 종류

퍼블릭 블록체인에서 노드는 지갑, 풀 노드, 라이트 노드들이 있다.

지갑

지갑주소는 공개키, 서명은 개인키를 활용한다. 트랜잭션을 생성하고, 서명을 하는 역할을 수행한다.

풀 노드

블록체인의 모든 블록정보를 저장하고 있는 노드다. 풀 노드는 디스크 공간을 많이 차지하고, 초기 동기화에 오랜 시간이 걸린다는 단점이 있다. 하지만 모든 거래내역을 가지고 있으므로 독립적으로 거래 검증이 가능하다.

라이트 노드🍒

풀 노드의 단점을 해결하기 위해 모든 정보가 아닌 블록헤더의 데이터만 보유하고 있는 노드다. 독립적인 거래 검증이 불가능하여 검증을 수행하기 위해 풀 노드에게 자료를 요청해야 한다.

SPV(Simple Payment Verification)

라이트노드와 동일한 개념으로 단순지불검증 노드를 의미한다. SPV 노드는 거래를 확인할 수 있지만 검증할수는 없다. SPV 노드는 거래가 안전하게 보관되었다는 검증은 할 수 있지만 UTXO의 소비여부를 검증할 수 없으므로 거래가 적합한지는 검증할 수 없다.😢

기타 노드의 종류

마스터 노드

풀 노드 중에서도 권한과 보상을 받는 노드. 블록생성에 대한 보상을 받고 트랜잭션의 추가기능을 수행한다.

채굴 노드

PoW 체인에서 채굴을 수행하는 노드

랜덤 노드

전체 블록체인의 무결성을 유지하기 위해 임의로 선택된 노드로서 마스터 노드와 함께 블록을 생성한다.

엔드포인트 노드

클레이튼의 블록체인에 적용된 노드. 정기적으로 다른 엔드포인트 노드들과 통신하여 합의노드에서 생성되는 블록을 다운로드하여 사본을 저장한다. 클레이튼에서는 누구나 엔드포인트 노드로 네트워크에 참여 가능하며 대가로 클레이보상을 받을 수 있다.

합의 노드😢

트랜잭션을 새로운 블록으로 배치하고, BFT 알고리즘을 활용하여 블록들을 확인하는 작업😢을 담당하는 합의 네트워크를 형성하는 노드.

🤔 엔드포인트 노드와 합의노드는 클레이튼에서만 쓰는 특수한 노드인거야?

슈퍼 노드

DPoS에서 노드들을 대표해 블록을 생성하고 그에 대한 보상을 받는 노드. 대표 노드라고도 한다.

노드 - Network Routing

네트워크 라우팅은 경로 정보를 기반으로 현재의 네트워크에서 다른 네트워크로 최적의 경로를 통해 데이터를 전송하는 방법으로 모든 노드가 기본적으로 가지고 있는 기능이다. 노드의 종류에 따라 아래의 구성요소를 선택적으로 조합한 형태로 노드가 구성된다. (4번은 당연히 모든 노드에 포함된다.)

  1. Wallet
  2. Miner
  3. Full Blockchain
  4. Network Routing

Reference Client

1 - 4 번을 모두 포함한 네트워크, Bitcoin Core가 여기에 해당된다.

Full Blockchain Node

3, 4번을 가지고 있다.

Solo Miner

채굴에 필요없는 지갑기능을 제외한 모든 기능을 가지고 있다.

Lightweight Wallet(SPV)

지갑기능과 라우팅만 가지고 있어 단순히 거래와 유효성 검증만 가능한 노드다. (Full Blockchain 데이터는 수백GB의 저장공간이 필요하다.)

profile
I'm going from failure to failure without losing enthusiasm

0개의 댓글