이더리움은 State 기반 Account
- 비트코인의 경우, UTXO(Unspent Transaction Output) 기반으로 상태값이 관리된다.
UTXO(Unspent Transaction Output)
: 아직 쓰지 않은 잔액- 비트코인 네트워크에는 잔액이란 개념은 애초 존재하지 않고, 트랜잭션 결과물들의 합을 잔액이라는 개념으로 사용하는데, 이를 UTXO 데이터로 대체한다.
- 블록이 새로 생길때마다 UTXO 사용여부를 업데이트 하는 방식으로 사용자의 잔액이 관리된다.
- 개인이 가지고 있는 비트코인 잔고를 하나가 아니라, 아직 사용하지 않은 잔고를 여러 개로 기록한다.
- 만원짜리를 찢어서 2천원, 4천원과 같이 사용할 수 없는 것 처럼 UTXO 또한 찢어 사용할 수 없고 비트코인 지갑이 사용할 수 있는 UTXO를 찾아 데이터를 전송하는 역할을 해준다.

- 이더리움의 경우, State 기반으로 Account에 잔액, 데이터 상태값이 저장되어 블록이 생길 때마다 잔액을 업데이트 하는 방식을 사용한다.
- 사실, 비트코인에서도 스마트 컨트랙트 실행이 가능하다. 다만 UTXO 기반이기 때문에, 매우 비효율적일 뿐이다(비트코인은 튜링 불완전하다. → 반복문을 사용할 수 없다).
- 이더리움은, 튜링 완전 언어를 제공하여, 효율적으로 스마트컨트렉트를 실행할 수 있다.
- 비트코인이 제3자의 신뢰기관 없이 통용 가능한 디지털자산을 만들었다면, 이더리움은 제3자의 신뢰기관 없이 통용 가능한 애플리케이션 플랫폼을 만들었다.
이더리움 Account 종류
Etheruem의 경우 사용자가 직접 관리하는 EOA(External Owned Account)와 Smart Contract 코드를 네트워크에 배포시에 생기는 CA(Contract Account) 두 가지 종류가 존재한다.
주소 값만으로는 둘을 구분할 수 없지만 익스플로러에 들어가서 구별할 수 있다.
(EOA의 경우 Account구조에 컨트랙트 코드가 포함되어 있지 않고, CA의 경우 컨트랙트 코드가 포함되어 있다.)
- EOA(External Owned Account)
- EOA는 Private Key를 소유한 사람이 관리하는 방식으로 Bitcoin의 PKI와 동일한 방식으로 관리된다.
- Key 생성에 타원 곡선 암호 알고리즘(ECDSA)이 사용된다.
- Eth 전송, Contract 호출 등 다양한 활동을 할 수 있다.
- 계정 생성에 비용이 발생하지 않는다.
- EOA간의 거래는 ETH/token의 전송만 가능하다.
- CA(Contract Account)
- 스마트 컨트랙트를 블록체인에 배포할 때 생성됨
- 컨트랙트 계정으로 개인키가 없으며, 코드를 담고 있음
- 사용자의 호출에 따라 State 변경, 함수 호출, ETH 전송 등 다양한 활동을 할 수 있다.
- 계정 생성에 코드의 크기에 따른 비용이 발생한다. 이 비용은 생성자가 지불한다.
- EOA에서 CA로 트랜잭션을 보내 토큰 전송/컨트랙트 생성 등과 같은 다양한 작업들을 할 수 있다.
- CA에는 Private key가 없고, 대신 스마트 컨트랙트의 논리에 의해 제어된다.
⇒ 모든 트랜잭션은 EOA가 날린 트랜잭션으로부터 시작된다.
→ CA는 어떤 트랜잭션을 직접 날리는 계정이 아니다.
Account field

nonce(논스)
- 계정에서 전송한 Transaction의 수를 기록한다. 0부터 시작하여 1회 전송 시 마다 +1 씩 증가한다.
- 이중지불을 막기 위해 사용.
balance
- 계정의 잔고(잔액)을 표시한다. Wei단위로 표기하며, 1e+18 wei 가 1ETH 이다.
(1e+9 =
1 gwei
1e+12 =1Twei
(Szabo) 1e+15 =1Pwei
(finney))
codeHash
- EVM의 account의 코드를 나타낸다.
- CA만 가진 데이터이며, EOA는 빈 공간으로 가지고 있다. Contract Code의 Hash 정보가 들어가게 된다.
- codeHash가 빈 값인 경우 EOA, 있는 경우 CA
storageRoot
- 계정 머클 페트리샤 트리 루트 노드의 해시값이다. 기본값은 비어있는 상태이다.
- Account에 저장된 요소들의 해시값을 암호화한다.
Account의 state는 어떻게 저장이 될까?
- 이더리움은 account state가 모두 모여 거대한
Global state
를 형성한다. - 약 2억개의 account가 존재하기 때문에, 경로의 복잡함을 줄이기 위한 로직들이 존재한다.
- 각 노드를 Extension node, Branch node, Leaf node로 구분한다.
- 각 account state를 leaf node로 두고, 루트까지의 경로만을 다시 해싱하여 일정한 실행 시간이 보장되도록 만든다.

- 해시 값을 기록하는 것이 아니라 실제 잔액정보를 기록하는 형태
- Ethereum은 Key-Value 기반의 DB(go-ethereum은 leveldb)를 사용하고 있다.
- Address를 Hash한 값을 Key로 하여 그림과 같이 Address 주소를 Path로 하여 Account의 State 값을 알 수 있다.
-ref
Share article