> For the complete documentation index, see [llms.txt](https://whs3-doge5k.gitbook.io/smartcontract-security-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://whs3-doge5k.gitbook.io/smartcontract-security-docs/basics/1./undefined-1/eoa-ca.md).

# 이더리움 계정(EOA, CA)

이더리움에서 사용하는 송금, 잔액 저장 방식은 비트코인과는 달리 우리에게 익숙한 통장 입출금과 카드 내역 저장 방식이라고 보면 된다.

이더리움에서 상태는 "계정"이라고 불리는 객체들로 이루어지며, 각 계정은 20바이트 크기의 **주소값**, 그리고 계정들 간에 이루어지는 가치 및 정보의 직접적인 거래를 뜻하는 **상태 전환**을 담고 있다. 이더리움의 계정에는 지갑을 나타내는 기본적인 계정 EOA 와, 스마트 컨트랙트로  인해 존재하는 CA 두 종류가 있다.

### **EOA**

EOA는 개인 키(private key)로 제어되는 계정으로, 메타마스크(MetaMask)와 같은 지갑 애플리케이션을 통해 생성된 계정이 이에 해당한다.

예시:사용자가 다른 사용자에게 ETH를 전송하거나, 디앱(DApp)과 상호 작용할 때 EOA를 사용한다.&#x20;

### **CA**

스마트 컨트랙트 코드에 의해 제어되는 계정으로, 개인 키가 없고 특정 로직에 따라 자동으로 실행된다.

예시: 탈중앙화 거래소(DEX)에서의 자동화된 토큰 스왑, NFT 마켓플레이스에서의 거래 처리 등이 CA를 통해 이루어진다.

| 항목    | 외부 소유 계정 (EOA)       | 컨트랙트 계정 (CA)         |
| ----- | -------------------- | -------------------- |
| 제어 방식 | 개인 키                 | 스마트 컨트랙트 코드          |
| 거래 생성 | 직접 생성 가능             | 외부 트랜잭션에 대한 응답으로만 실행 |
| 기능    | ETH/토큰 전송, 컨트랙트 호출 등 | 자동화된 로직 실행, 토큰 발행 등  |
| 보안    | 개인 키 보안에 의존          | 코드의 정확성과 보안성에 의존     |
| 생성 비용 | 없음                   | 가스 비용 발생             |

***

### **계정 구성**

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2F3gIN0TWubK02R0fou1fF%2Fimage%20(3).png?alt=media&amp;token=da3e8e9e-113e-4b38-8c0c-7d74667ce83e" alt=""><figcaption><p>[출처]<a href="https://ethereum.org/en/developers/docs/accounts/">ethereum.orgEthereum accounts</a>​</p></figcaption></figure>

#### **Nonce (논스)**

* 외부 소유 계정(EOA)의 경우, 해당 계정에서 보낸 트랜잭션 수를 뜻한다.
* 컨트랙트 계정(CA)의 경우, 생성한 컨트랙트 수를 뜻한다.

#### **Balance (잔액)**

* 해당 주소가 보유한 **wei** 단위의 잔액
* **wei**는 ETH의 가장 작은 단위이며, **1 ETH = 10¹⁸ wei**

#### **storage hash (스토리지 해시)**

* 스마트 컨트랙트 계정이 사용하는 **저장소 상태**를 표현하는 [**Merkle Patricia Trie**](/smartcontract-security-docs/basics/undefined/merkle-patricia-trie.md) 구조의 루트 해시이다.
* 트라이에는 256비트 정수 키와 값 쌍이 저장되며, 키는 [Keccak-256](/smartcontract-security-docs/basics/undefined/keccak-256.md) 해시로 변환되어, 값은 RLP 인코딩된 256비트 정수로 저장된다.
* 외부 소유 계정(EOA)의 경우, 기본적으로 빈 트라이 상태다.
* **용도**:
  * 컨트랙트 내부 상태 (예: 변수 값들)를 블록체인 상태 루트로부터 효율적으로 검증한다.

#### **codeHash (코드 해시)**

* 해당 계정이 스마트 컨트랙트 계정이라면, 여기에 EVM 상에서 실행할 코드가 저장되어 있으며, 이 코드의 해시값이  `codeHash` 이다.
* 외부 소유 계정(EOA)는 실행할 코드가 없으므로, 빈 문자열의 해시가 저장되어있다.
* 특징:
  * 이 필드는 다른 필드와 달리 변경할 수 없다.
  * 코드 자체는 상태 데이터베이스(state database)에 `codeHash` 값과 연결되어 저장되어있다.
