Victoree's Blog

[2-3] 3) 데이터 계층 - 블록체인 본문

Blockchain

[2-3] 3) 데이터 계층 - 블록체인

victoree 2021. 6. 23. 17:32
728x90

블록체인

  • 어카운트의 상태 전이를 유발하는 트랜잭션들과 모든 관련 정보는 블록이라는 구조체에 저장됨
  • 블록들은 시간순으로 체인처럼 연결되어있음
  • P2P 네트워크와 동기화 프로토콜을 통해 네트워크에 연결된 모든 노드에 전파되어 공유됨
  1. 블록
  • 블록 헤더, 엉클 블록, 트랜잭션으로 구성됨
  • 블록을 체인에 추가할 때 필요한 마이닝 작업의 난이도도 포함되어 있음
  • Etherscan.io
    • 이더리움의 모든 정보를 탐색하고 조회할 수 있는 서비스 제공
    • 실제 이더리움 네트워크에 참여해 모든 정보를 동기화해서 정보를 MongoDB로 옮긴 후 분석
type Bloom [32]byte
type Header struct {
    ParentHash common.Hash
    UncleHash common.Hash
    Coinbase common.Hash
    Root common.Hash
    TxHash common.Hash
    ReceiptHash common.Hash
    Bloom Bloom
    Difficulty *big.Int
    Number *big.Int
    GasLimit *big.Int
    GasUsed *big.Int
    Time *big.Int
    Extra []byte
    MixDigest common.Hash
    Nonce BlockNonce
}
  • ParentHash : 부모 블록 헤더의 해시값
  • UncleHash : 현재 블록의 엉클 블록들의 해시값
  • Coinbase : 현재 블록의 마이닝 작업 후 이더를 지급받을 어카운트 주소
  • Root : 어카운트 상태 정보가 모여 있는 머클 패트리시아 트리의 루트 노드 해시값
  • TxHash : 현재 블록내 모든 트랜잭션의 머클 트리 루트노드의 해시값
  • ReceiptHash : 현재 블록 내 모든 트랜잭션 리시트들의 머클 트리 노드의 해시값
  • Bloom : 로그 정보들을 검색하는 데 사용하는 32바이트 블룸 필터
  • Difficulty : 현재 블록의 난이도
  • Number : 현재 블록의 넘버
  • GasLimit : 블록당 현재 지급 가능한 최대 가스 총합
  • GasUsed : 현재 블록 내 트랝개션에 의해 사용된 가스 총합
  • Time : 현재 블록 최초 생성 시간
  • Extra : 기타 정보
  • MixDigest, Nonce

블룸 필터

블록 생성 시, 해당 블록의 모든 컨트랙트 주소와 로그들의 필드를 색인하여 추가함
→ 직접 로그를 블록내에 저장하지 않아도 되어 저장 공간을 절약할 수 있음
트랜잭션 목록이나 해당 트랜잭션들들에서 생성된 로그들이 중복 저장되는 것을 막고, 쉽게 조회하기 위해 사용

2. 제네시스 블록

  • 블록체인에서 첫번째에 위치한 최초 블록
  • 블록 넘버는 0, 이전 블록이 없으므로 참조 불가, 어떠한 트랜잭션도 포함되어 있지 않음
  • 이더리움 클라이언트들은 제네시스 블록을 가지고 있을 때만, 서로를 연결하고 싱크함
  • 제네시스 블록이 다르면, 다른 블록체인을 갖는 다른 시스템

3. 엉클 블록과 고스트 프로토콜

  • 엉클블록
    • 블록 생성에 성공하였고, 검증에 오류가 없어서 이더리움 네트워크를 통해 다른 노에 브로드 캐스팅은 되었으나, 다른 마이너가 생성한 블록에 비해 난이도가 낮아 블록체인에는 등록되지 못하는 ㅡㄹ록
    • 스테일 블록 || 고아 블록
    • 엉클블록의 문제점컴퓨팅 파워의낭비 → 길이가 긴 체인이 정상 등록, 짧은 체인은 엉클 블록을 포함 → 엉클 블록 이후의 블록들은 다 엉클 블록이 됨
    • 보안 → 엉클 블록 생성 후 블록 생성 시 평균 블록 생성 시간이 길어져 이후 난이도가 줄어들음
    • 트랜잭션 처리의 지연 → 두 마이너의 블록이 존재하는 경우, 한 블록의 트랜잭션은 즉시 처리되지 않음
    • 고스트 프로토콜
    • 블록 생성 시 정상 블록에 최대 2개의 엉클 블록까지 추가하고 보상

4. 블록체인

  • 블록들의 시간 순 연결
  • 앞 블록이 변경되면, 뒤 블록도 전부 변경해야 하기 때문에 조작이나 위변조가 불가함
  • 모든 트랜잭션에는 발생 시간이 명시되기 때문에 해당 시점에 거래를 확인할 수 있어서 거래 사실을 부인하지 못함

5. 블록체인 동기화와 라이트 체인

  • 전체 동기화 (Full Sync)
    • 전체 블록 동기화
    • 제네시스 블록으로부터 블록 헤더들과 바디 등 모든 블록체인을 동기화하고 모든 항목의 유효성을 검증
  • 빠른 동기화 (Fast Sync)
    • 최근 상태, 트랜잭션, 리시트를 포함하는 블록 헤더만 동기화
    • 이전 히스토리를 알 수 없어 트랜잭션의 유효성을 검증할 수 없음
  • 경량 동기화 (Light Sync)
    • 현재 상태 정보만 동기화함
    • 특정 세부 항목의 검증이 필요한 경우, 해당 세부항목 값을 포함하는 전체 정보를 다운로드하여 처리함

6. 머클 패트리시아 트리

  • 트리내 모든 항목은 RLP 인코딩됨
  • 모든 노드에 대한 경로는 RLP 인코딩 후 Keccak256 암호 해시하여 레벨 DB에 저장
    • 루트노드는 전체 트리에 대해 해시 암호된 상태
    • 레벨 DB에 저장되는 키는 실제 다음 노드에 대한 경로가 됨 → 이 키로 마지막 노드까지 조회 가능
  • 블록들은 내부에 머클 패트리시아 트리 형태의 상태와 머클 트리 형태의 트랜잭션과 이에 관련된 리시트 정보를 포함하고 있음

7. 이더와 가스

이더

  • 이더리움에서 사용하는 암호화폐
  • 사용자에게 전달 || 수신 가능하며, 거래소에서 거래되어 가격의 변동성이 큼

가스

  • 변동성이 거의 없는 운영 토큰 → 가스와 교환하여 사용 가능
  • 스마트 컨트랙트나 트랝개션이 구동되면 이더리움 가상 머신을 이용하고, 블록을 생성하는 등 리소스를 이용 → 대가를 지급해야 함
  • 이더리움 플랫폼을 활용한 대가를 지급하는데 사용됨
  • 트랜잭션의 남용을 억제 → 가스비를 받음으로써!
    • 하나의 트랜잭션 → 블록체인 전체에 영향을 미침
    • 단위 트랜잭션이 너무 복잡하면 많은 리소스를 소모 → 트랜잭션은 단순해야함
    • 트랜잭션 수행 비용 : 가스 총량 * 가스 가격
  • 가스 가격이 높을 수록 트랜잭션이 빨리 처리됨 → 마이너들이 먼저 처리함
  • 가스 총량 → 사용자가 임의로 추정하여 입력
  • 블록 가스 총량 → 블록에 담을 수 있는 가스의 총량
728x90
Comments