Go Ethereum - Korean

이더리움 한글 주석 프로젝트입니다.

v0.2 현재 126개 파일에 약 1000줄의 주석이 한글로 변환되었습니다.

동작 분석 결과는 https://steemit.com/@sigmoid를 통해 업데이트 중입니다.

Packages or binaries.

Accounts: 계정과 키스토어, 계약계정, 지갑관련 기능

bmt

cmd: geth 포함, go-ethereum에서 지원하는 실행 가능한 바이너리들

common: solidity 컴파일러 등 공통으로 쓰이는 패키지들

consensus: 합의구현부: POA, POW 마이닝, DAO & Fork

console

contract: 스마트 계약

core: 이더리움 코어. 상태, DB, EVM

block validator 블록헤더와 엉클을 검증하고 스테이트를 처리
blockchain 제네시스 블록을 가진 주어진 DB의 캐노니컬 체인과 체인의 수신/되돌리기/재구성 작업을 관리
blocks 하드포크에 의한 bad hash들을 관리함
chain_indexer 체인 인덱서 백엔드는 체인조각를 백그라운드로 처리하고, 조각의 결과를 DB에 쓰기위해 위한 방법들을 정의한다. 블룸필터나 CHT를 생성하는데 이용될 수 있다.
chain_maker mining을 하지 않아도 블록을 생성할 수 있어 다양한 테스트 패키지에서 블록을 생성할때 사용함
events NewTxsEvent
PendingLogsEvent
PendingStateEvent
NewMinedBlockEvent
RemovedLogsEvent
ChainEvent
ChainSideEvent
ChainHeadEvent
evm evm에서 사용할 체인컨텍스트와 합의 인자들을 블록체인으로 부터 생성하고 처리한다(잔고확인 및 전송)
gaspool 가스풀은 블록상의 트렌젝션이 실행되는동안 가용 가능한 가스의상태를 관찰한다
genesis 제네시스 블록과 하드포크 변환블록을 정의
state_processer 상태 처리자는 기본 처리자로서, 한 지점에서 다른 지점으로의 state의 변환을 관리한다
state_transition 상태 전환은 현재 월드 상태에 대해 하나의 트렌젝션이 적용되었을 경우 발생하며 상태 전한 모델은 새로운 상태 루트를 만들기 위한 다음과 같은 일을 한다
1. 논스 핸들링
2. 프리 가스 페이
3. 영수증에 대한 새로운 스테이트 오브젝트
4. 가치 전송
만약 계약의 생성이라면
4-a) 트렌젝션을 실행하고
4-b) 제대로 실행되었을 경우 새로운 스테이트에 대한 코드로서 결과를 사용한다
스크립트 섹션을 실행하고 새로운 상태 루트를 유도한다
tx_journal txJournal 구조체는 로컬에 저장하는 것을 노려 생성된 트렌젝션들중 실행되지 않은 것들이 노드의 재시작에도 살아남는 것을 허용하기 위한 순환로그 이며 로컬에서 발생한 트렌젝션이 아직 실행되지 않은 상태에서 노드를 재시작할때 정보가 손실되는것을 막는 일을 함
tx_list txList는 하나의 어카운트에 속하는 트렌젝션의 리스트이며, 어카운트 논스에 의해 정렬된다. 펜딩큐와 실행큐양쪽에서 연속된 트렌젝션을 저장하기 위해 사용된다
tx_pool 트렌젝션 풀은 현재까지 알려진 모든 트렌젝션을 포함한다. 네트워크를 통해 수신되거나, 로컬하게 생성된 트렌젝션이 풀에 들어가게 된다. 트렌젝션이 블록체인에 포함되면, 풀에서 나가게 된다. 풀은 현재 상태에 적용가능한 처리가능 트렌젝션과 퓨처트렌젝션으로 나뉜다.

crypto: 암호화 관련

Keccak512 account 생성 - 주소
ECDSA account 생성 - 공개키

dashboard: 이더리움 대시보드

eth: 이더리움 프로토콜

config 이더리움 기본설정
sync모드
txPool
가스 Oracle
Ethash
sync * 새로운 피어가 나타나면 현재까지 펜딩된 트렌젝션을 릴레이 한다, 네트워크 밴드위스 관리를 위해 각 피어에 트렌젝션을 쪼개서 보낸다
* 주기적으로 네트워크와 동기화 하고, 해시와 블록을 다운로드한다
protocol 이더리움 프로토콜의 버전과 메시지를 정의한다
handler 프로토콜 매니저 생성
* 트렌젝션을 브로드 캐스팅한다
* 마이닝된 블럭을 브로드캐스팅한다
* 새로운 피어가 나타나면 현재까지 펜딩된 트렌젝션을 릴레이 한다, 네트워크 밴드위스 관리를 위해 각 피어에 트렌젝션을 쪼개서 보낸다
* 주기적으로 네트워크와 동기화 하고, 해시와 블록을 다운로드한다
* Qos 튜너는 산발적으로 피어들의 지연속도를 모아 예측시간을 업데이트 한다
* statefetcher는 피어 일동의 active state 동기화 및 요청 수락을 관리한다
* 해쉬 어나운스먼트를 베이스로 블록을 검색하는 블록패쳐를 만든다

ethclient

ethdb

ethstats

event

internal

les

light

log

miner

metrics

mobile

node: 이더리움 노드

p2p: p2p 관련

params

rlp

rpc

signer

swarm

trie

whisper

vendor

fs autorest azure date color memsize memsizeui termui ole oleutil stack proto descriptor lru simplelru internetgateway1 goupnp httpu scpd soap models escape natpmp httprouter hid colorable isatty runewidth wordwrap stringutil ast toml termbox tablewriter uuid liner errors difflib flock notify otto dbg file parser registry token cors xhandler assert require cache comparer iterator journal memdb opt table util leveldb cast5 curve25519 ed25519 edwards25519 armor openpgp elgamal packet s2k pbkdf2 ripemd160 scrypt terminal ssh context atom charset html websocket syncmap unix windows charmap encoding htmlindex identifier internal japanese korean simplifiedchinese traditionalchinese unicode tag utf8internal language transform astutil imports clia

GETH block

GETH function flow

블록체인 내부 update loop: 5초마다 퓨쳐블록을 처리한다 퓨처 블록이란 블록을 체인에 넣으려고 했으나, 블록의 시간이 현재 노드의 시간보다 앞 설경우이다 이럴땐 퓨처블록으로 따로 모아두었다가 5초마다 다시 체인에 넣는것을 시도한다.

트렌젝션 풀의 내부 loop

p2p의 loop:

블룸비트 요청처리 루프: 블룸비트 DB로부터 반환된 결과를 수신하기 위한 루프

txBraodcast 루프: 트렌젝션을 공유하는 루프

mined block broadcast: 마이닝된 블록을 공유하는 루프

syncer: 블록체인 동기화 루프

txsyncloop: 트렌젝션 싱크루프 마이닝 루프: 논스를 찾았을때 다음 마이닝 work를 생성

트렌젝션 & 블록 & 블록체인

트랜젝션이 공유되는 형태

#geth 노드의 구성

#geth 노드의 초기동작시 함수