일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- AWS
- Fast API
- 러스트
- Python
- Algorithm
- fluent python
- 알고리즘
- Ethereum
- 파이썬
- rust
- 코어 이더리움 프로그래밍
- BlockChain
- 이더리움
- Kubernetes
- function
- Network
- 전문가를 위한 파이썬
- 동시성
- BAEKJOON
- Refactoring
- Container
- IMAGE
- Thread
- RabbitMQ
- docker
- guru
- dockerfile
- 백준
- 플랫폼
- 블록체인
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
[2-3] 3) 데이터 계층 - 블록체인 본문
728x90
블록체인
- 어카운트의 상태 전이를 유발하는 트랜잭션들과 모든 관련 정보는 블록이라는 구조체에 저장됨
- 블록들은 시간순으로 체인처럼 연결되어있음
- P2P 네트워크와 동기화 프로토콜을 통해 네트워크에 연결된 모든 노드에 전파되어 공유됨
- 블록
- 블록 헤더, 엉클 블록, 트랜잭션으로 구성됨
- 블록을 체인에 추가할 때 필요한 마이닝 작업의 난이도도 포함되어 있음
- 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
'Blockchain' 카테고리의 다른 글
1년간 DApp을 개발하면서 겪은 방황기 (0) | 2022.05.15 |
---|---|
[2-3] 2) 데이터 계층 - 어카운트와 트랜잭션, 리시트 (0) | 2021.06.23 |
[2-3] 1) 데이터 계층- 어카운트 (0) | 2021.06.23 |
[2-2] 이더리움 단일 상태 모델 (0) | 2021.06.22 |
[2-1] 이더리움 플랫폼 (0) | 2021.06.22 |
Comments