이더리움은 2015 년 비탈릭 부테린(Vitalik Buterin)이 개발하였다. 최초의 블록체인인 Bitcoin 과 달리 기축통화(Native Currency) 를 거래하는 거래 기록(장부,원장, Ledger)만을 저장하는게 아닌 Smart Contract (스마트 계약, 스마트 컨트랙트) 라고 하는 Solidity (솔리디티) 로 작성된 소스코드를 컴파일하여 Block 에 저장하고 이를 실행시킬 수 있다. 이 과정에서 Ethereum 이 소비되고 이를 gas 라고 부른다.
* 이더리움 백서 (Whitepaper)
Ethereum 구조
이더리움의 헤더는 15개의 값을 가지고 있다.
Name | Description | Note (json for Go) |
ParentHash | 부모 블록의 해시값 | parentHash |
UncleHash | 현재 블록의 엉클 블록들의 해시값 | sha3Uncles |
Coinbase | 채굴 후 트랜잭션의 수수료를 받을 계정 주소 | miner |
Root | 계정의 상태정보가 모여있는 머클트리의 루트 노드 해시값 | stateRoot |
TxHash | 블록의 모든 트랜잭션에 대한 머클트리의 루트 노드 해시값 | transactionsRoot |
ReceiptHash | 블록 내 모든 트랜잭션에 대한 Receipt 들의 머클트리의 루트 노드 해시값 | reciptsRoot |
Bloom | 로그 정보를 사용하는데 사용하는 32바이트 블룸 필터 | logsBloom |
Difficulty | 블록 난이도 | difficulty |
Number | 현재 블록 번호 | number |
GasLimit | 블록당 지급가능한 최대 가스 총합 | gasLimit |
GasUsed | 블록내 트랜잭션에 사용된 가스 총합 | gasUsed |
Time | 블록의 최초 생성시간 | timestamp |
Extra | 블록의 기타정보 | extraData |
MixDigest | 작업증명에서 해시값을 계산하는데 충분한 계산횟수를 보장하기 위해 사용하는 값 | mixHash |
Nonce | nonce |
합의 알고리즘 (Ethash)
이더리움 1.0 은 PoW (Proof of Work) 방식의 합의 알고리즘으로 Ethash 를 사용한다. 이는 비트코인의 단순한 PoW 알고리즘으로 인해 단순계산이 빠른 GPU 장비를 사용하여(ASIC) 전세계에서 Mining 을 시도고 또한 전력낭비까지 일으켜 이와 다른 방식의 알고리즘을 채용했다.
GHOST 프로토콜
비트코인이나 Ethereum 과 같은 PoW 방식의 Public Network 는 각각의 노드들이 블록을 채굴하고 이 채굴된 블록은 세계 어디에서든 동시 다발적으로 이루어질 수 있다. 하지만 블록체인은 모든 노드가 같은 블록을 지니고 있어야만 네트워크의 안전성과 유효성이 보장되는 특성으로 인해 동시에 생긴 같은 Index 의 블록에 대해 어느 블록을 메인 체인으로 포함시킬 것인지에 대한 고민이 필요하다.
이때 사용하는 것이 GHOST 프로토콜이다.
GHOST (Greedy Heaviest Object SubTree) 프로토콜은 메인체인을 선택하기 위한 방법으로써 이더리움은 Leaf 블록이 많은 체인을 메인 체인으로 가져가도록 했다. (비트코인의 경우 이더리움과 달리 가장 긴 체인을 선택하는 방식이다.)
위 예시에서는
1A 는 subtree 가 6개, 1B 는 12개로 메인체인에는 1B가 선택된다.
2D 는 subtree 가 3개, 2C 는 4개, 2B는 1개이므로 메인체인에는 2C가 선택된다.
이런방식으로 결과적으로는 이더리움에서 0-1B-2C-3D-4B 가 메인체인이 된다.
스마트 컨트랙트
스마트 계약 또는 스마트 컨트랙트는 계약 당사자가 사전에 협의한 내용을 미리 프로그래밍하여 전자 계약서 문서 안에 넣어두고, 이 계약 조건이 모두 충족되면 자동으로 계약 내용이 실행되도록 하는 시스템이다.
스마트 계약을 작성하기 위해 Solidity 란 언어가 개발되었으며 해당 언어로 주로 계약을 작성한다.
사실 말이 스마트계약이지, Ethereum Blockchain Network 에서 수행하는 프로그램이라고 보면 된다.
Ethereum Network 란, 각 노드 (Ethereum 프로토콜을 수행하는 프로그램, 대표적으로 geth) 들은 내부에 EVM (Ethereum Virtual Machine) 이라는 프로그램을 돌릴 수 있는 가상머신을 가지고 있다.
개발자는 Solidity 언어로 개발을하여 Remix IDE 나 truffle framework 등을 사용해 compile 하고 compile 된 Bytecode 를 Ethereum 네트워크에 배포한다. 이러한 Bytecode 는 EVM 위에서 실행되며 각 노드 들은 프로그램을 수행해 주고 그 대가로 gas 를 받는다.
모든 Ethereum 네트워크의 노드는 블록에 포함된 Smart contract 들에 공유하고 해당 수행결과를 각각 저장하기에 위변조 불가능하고 안전한 계약을 수행할 수 있다.
따라서 Ethereum 을 거대한 Single Thread Global Processor 로 보기도 한다.
'개발 노트 > Blockchain' 카테고리의 다른 글
[블록체인] Hyperledger Projects (0) | 2022.03.29 |
---|---|
[블록체인]Blockchain 이란? (0) | 2022.03.27 |