이더리움 특징
State 기반 Account
- Bitcoin 블록체인의 경우 UTXO 기반으로 상태값이 관리된다. 블록이 새로 생길 때마다 UTXO 사용여부를 업데이트 하는 식으로 사용자의 잔액이 관리된다.
- Ethereum 블록체인의 경우 State 기반으로 Account(계정)에 잔액, 데이터
상태값이 저장되어 블록이 생길 때 마다 잔액을 업데이트 하는 방식이다.
Account 종류
Etheruem의 경우 사용자가 직접 관리하는 EOA(External Owned Account)와 Smart Contract 코드를 네트워크에 배포시에 생기는 CA(Contract Account) 두 가지 종류가 존재한다.
주소 값만으로는 둘을 구분할 수 없지만 익스플로러에 들어가서 구별할 수 있습니다.
(EOA의 경우 Account구조에 컨트랙트 코드가 포함되어 있지 않고, CA의 경우 컨트랙트 코드가 포함되어 있습니다.)
EOA(External Owned Account)
- EOA는 Private Key를 소유한 사람이 관리하는 방식으로 Bitcoin의 PKI와 동일한 방식으로 관리된다.
- Eth 전송, Contract 호출 등 다양한 활동을 할 수 있다.
- 계정 생성에 비용이 발생하지 않는다.
CA(Contract Account)
- CA는 생성한 사용자의 정보에 의해서 네트워크에서 Account를 생성한다.
- 사용자의 호출에 따라 State 변경, 함수 호출, ETH 전송 등 다양한 활동을 할 수 있다.
- 계정 생성에 코드의 크기에 따른 비용이 발생한다. 이 비용은 생성자가 지불한다.
Account의 state는 어떻게 저장이 될까?
nonce
- 계정에서 전송한 Transaction의 수를 기록한다. 0부터 시작하여 1회 전송 시 마다 +1 씩 증가한다.
- 이중지불을 막기 위해 사용.
balance
- 계정의 잔고(잔액)을 표시한다. Wei단위로 표기하며, 1e+18 wei 가 1ETH 이다.
(1e+9 = 1 gwei
1e+12 = 1Twei(Szabo)
1e+15 = 1Pwei(finney))
codeHash
- CA만 가진 데이터이며, EOA는 빈 공간으로 가지고 있다. Contract Code의 Hash 정보가 들어가게 된다. EVM code와 같이 사용된다.
- codeHash가 빈 값인 경우 EOA, 있는 경우 CA
storageRoot
- 계정 Merkle Patricia Trie의 root node의 Hash 값이다. 기본값은 비어있는 상태이다. Account Storage와 같이 사용된다.
Patrcia Merkle Tree

- 해시 값을 기록하는 것이 아니라 실제 잔액정보를 기록하는 형태
- Ethereum은 Key-Value 기반의 DB(go-ethereum은 leveldb)를 사용하고 있다.
- Address를 Hash한 값을 Key로 하여 그림과 같이 Address 주소를
Path로 하여 Account의 State 값을 알 수 있다.
Ethereum의 tries
- Ethereum에서 사용하고 있는 Trie는
Storage Trie
, State Trie
, Transaction Trie
, Receipts Trie
총 4개의 Trie가 존재한다.
- 이 중 Block Header에 Root Hash값이 저장되는 것은
State Trie
, Transaction Trie
, Receipts Trie
총 3 가지이다.
ENS
- Ethereum Naming Service(ENS)는 DNS와 같이 사용자가 이해하기 쉬운
언어로 등록하여 사용하는 것이다.
- Smart Contract로 해당 명칭을 사서 구매하면 지원을 하는 서비스(Wallet)등에서는 해당 명칭을 수신인에 입력하게 되면 자동으로 변환되어 해당 주소로 전달되는 기능이다.