어카운트(Account)

김진경·2022년 4월 28일
1

원리, 환경

목록 보기
4/5

이더리움 플랫폼에서 어카운트는 모든 트랜잭션의 실행 주체로 가장 기본적인 단위이다. 이더리움에서는 다음과 같이 2개의 어카운트 타입을 가지고 있다.

어카운트 타입

외부소유 어카운트 (EOA : Externally Owned Account)

  • 일반적으로 거래에 사용되는 사용자의 지갑주소를 말한다. 주소는 이전에 블록체인의 이론에서 설명한것처럼 개인키로부터 파생된 공개키로부터 생성된다. 일반적인 EOA 간의 거래는 이더의 전송을 의미하며, EOA에서 컨트랙트 주소로 메세지를 보내 해당 코드를 실행하여 어떠한 결과를 만들어낼수도 있다. EOA에서 컨트랙트 주소로의 메세지전송은 일반적으로 이더의 전송을 의미한다.

컨트랙트 어카운트 (CA : Contract Account)

  • 스마트 컨트랙트의 주소에 해당되며, 스마트 컨트랙트가 블록에 포함되어 배포될때 해당 스마트 컨트랙트에 대한 주소가 생성이 된다. 이 주소를 통해서 메세지 전송이나 특정한 함수를 실행할 수 있다.


다음 그림과 같이 외부소유 어카운트간(EOA ↔︎ EOA)에는 이더의 전송에 해당하는 트랜잭션만 수행이 될수 있다.

외부소요 어카운트에서 컨트랙트 어카운트 간(EOA ↔︎ CA)에도 이더의 전송인 트랜잭션이 수행될수 있지만, 컨트랙트 어카운트간(CA ↔︎ CA)에는 메세지를 통한 스마트 컨트랙트 수행만이 동작될수 있다. 이러한 컨트랙트 어카운트간의 트랜잭션은 단독으로는 이루어질수 없고, 외부소유 어카운트나 컨트랙트 어카운트의 응답에 의해서만 실행될수 있다.


어카운트 구성요소

// Account is the Ethereum consensus representation of accounts.
// These objects are stored in the main account trie.
type Account struct {
	Nonce    uint64
	Balance  *big.Int
	Root     common.Hash // merkle root of the storage trie
	CodeHash []byte
}

Nonce : 0부터 시작되는 값으로 EOA인 경우에는 해당 어카운트에서 수행된 트랜잭션의 수, CA인 경우에는 해당 어카운트에서 만들어진 컨트랙트의 수

Balance : 해당 어카운트의 이더 잔액(Wei 단위 기준)

Root : 해당 어카운트가 저장될 머클 패트리시아 트리의 루트

_*머클 패트리시아 트리 : 머클 패트리샤트리는 이더리움에서 사용하는 수정된 머클트리이며 효율적으로 정보를 관리하기 위한 자료구조.

CodeHash : 해당 어카운트의 스마트 컨트랙트 바이트 코드의 해시로 이 코드값이 nil 로 비어있으면 해당 어카운트는 CA가 아닌 EOA라는 의미.

profile
Maktub.

0개의 댓글