이더리움 백서 톺아보기 - 4편

초급9분 소요2022-06-03

이더리움 계정(Ethereum Accounts)

 

이더리움에서 상태(state)는 계정(account)이라고 하는 오브젝트(object)들로 구성되어 있다. 각각의 계정은 20 바이트의 주소와 계정 간 값과 정보를 직접적으로 전달해 주는 상태변환(state transition)을 가지고 있다. 이더리움 계정은 다음 네 개의 필드를 가지고 있다.


1) 논스(nonce): 각 트랜잭션이 오직 한번만 처리되게 하는 일종의 카운터

2) 계정의 현재 이더(ether) 잔고

3) 계정의 계약 코드 (존재한다면)

4) 계정의 저장 공간 (초기설정(default) 상에서는 비어있음) 

- 이더리움 백서 중 -


계정이라고 하는 것은 우리가 일반적으로 인터넷에 접속할 때 사용하는 ID계정이라고 생각하면 됩니다. 이더리움 계정은 이더리움의 주소정보를 기준으로 다양한 정보들을 가지고 있는데요. 그 대표적인 정보들의 개념이 논스(nonce), 이더잔고, 계약코드, 저장공간입니다.

 

논스(nonce)는 탈중앙화된 이더리움 환경에서 프로그램이 실행되거나 어떠한 요청이 왔을 때 처리해주기 위한 중요한 장치로 이해할 수 있습니다. 중앙화된 방식에서는 모든 요청들에 대해서 중앙에서 순차적으로 처리하면 문제가 발생하지 않지만, 탈중앙화된 방식에서는 순차적인 처리가 쉽지 않습니다. 탈중앙화된 방식에서 순차적인 처리를 위해서 만들어진 것이 논스(nonce)인 것입니다. 즉, 채굴자들이 사용자들의 요청을 처리할 때 이 논스(nonce)값을 확인하여 일종의 프로그램 처리에 대한 순차적인 규칙을 정하는 것입니다.

 

다음으로 이더 잔고입니다. 비트코인의 UTXO방식과는 달리 이더리움에서는 이더의 잔고를 직접적으로 확인할 수 있습니다.


세 번째 필드는 계약코드입니다. 여기에 스마트 컨트랙트의 실행코드가 저장되고, 여기에 기록된 코드를 통해서 스마트 컨트랙트 프로그램이 실행이 됩니다.


이더는 이더리움의 기본 내부 암호-연료(crypto-fuel)이고 트랜잭션 수수료를 지불하는데 사용된다. 보통 두가지 종류의 계정이 존재하는데, 비밀키(private key)에 의해 통제되는 외부 소유 계정(Externally Owned Accounts, EOA)와 컨트랙트 코드에 의해 통제되는 컨트랙트 계정(Contract Accounts, CA)가 있다.


외부 소유 계정은 아무런 코드도 가지고 있지 않으며, 이 계정에서 메시지를 보내기 위해서는 새로운 트랜잭션을 하나 만들고, 서명(signing)을 해야 한다. 컨트랙트 계정은 메시지를 받을 때마다 자신의 코드를 활성화시키고, 이에 따라 메시지를 읽거나 내부 저장공간에 기록하고, 다른 메시지들을 보내거나 컨트랙트들을 차례로 생성하게 된다.

- 이더리움 백서 중 -


이더리움 계정(account)에는 외부소유계정(EOA)과 컨트랙트 계정(CA)이 있습니다. 우리가 일반적으로 이더를 전송하고 받을때 사용하는 개인 이더리움 주소가 외부 소유 계정(EOA)입니다. 그리고 이더리움의 가장 큰 특징인 스마트 컨트랙트의 주소가 컨트랙트 계정(CA)입니다. 이 둘은 비슷해보이지만 차이가 있습니다.

외부 소유 계정(EOA)에는 개인이 자신의 이더를 관리하고 전송할 수 있는 핵심적인 비밀키가 포함된 계정입니다. 반면에 스마트 컨트랙트 코드가 담겨져 있는 컨트랙트 계정(CA)에는 이 비밀키가 존재하지 않습니다.


일반적으로 사람에 의해서 통제되는 계정이 외부 소유 계정(EOA)입니다. 사람에 의해서 통제되기 때문에 사람이 다룰 수 있는 비밀키가 존재하고 이 비밀키를 통해서 이더리움 네트워크에 다양한 명령들을 요청할 수 있습니다.


컨트랙트 계정(CA)에는 비밀키가 존재하지 않습니다. 이 의미는 어떠한 요청에 의해서 자동으로 실행되는게 컨트랙트 계정으로 이해할 수 있습니다. 즉 컨트랙트 계정(CA)은 사람에 의해서 통제가능한 외부소유계정(EOA)를 통해서 어떠한 명령을 전달 받을 수 있습니다. 단계적으로 설명하면 '사람 -외부 소유 계정(EOA) - 컨트랙트 계정(CA)' 순으로 요청 및 처리가 가능한 것입니다.


정리하기

1) 외부 소유 계정(EOA) = 지갑 주소

- 주소와 비밀키로 구성되어 있음

- 비밀키를 가지고 통제할 수 있는 계정임

- 다른 계정으로 이더를 송금하고 수신할 수 있음

- 스마트 컨트랙트에 트랙잭션을 보낼 수 있음


2) 컨트랙트 계정(CA)

- 컨트랙트 계정으로 개인키가 없으며, 코드를 담고 있음

- 스마트 컨트랙트를 블록체인에 배포할 때 생성됨

- 다른 계정과 이더를 송수신할 수 있음

- EOA나 다른 컨트랙트의 호출을 받아 트랙잭션을 발생시키며 스스로 동작하지 않음