[이더리움] Account structure

youngseo·2022년 12월 14일
0

블록체인

목록 보기
3/4

이더리움 특징

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)등에서는 해당 명칭을 수신인에 입력하게 되면 자동으로 변환되어 해당 주소로 전달되는 기능이다.

0개의 댓글