[basic] 이더리움 맛보기 <3> Ethereum Accounts

captaink.eth | 강선장
8 min readAug 1, 2022

--

비트코인의 상태 변환 시스템을 가져오되 스크립트 한계, 빈약한 스테이트 등을 보완하여 만들어진 것이 이더리움입니다.

스크립트의 경우, 튜링 완전성을 충족하는, 다시 말해 기능적으로 루프문 구조 사용이 가능한 언어를 사용함으로써 효율적인 코드 구성이 가능하도록 개선했습니다.

그럼 빈약한 스테이트는 어떻게 개선했을까요? 그 해결 방법을 자세히 들여다보도록 하겠습니다.

Ethereum Accounts

출처: Ethereum Whitepaper

In Ethereum, the state is made up of objects called “accounts”, with each account having a 20-byte address and state transitions being direct transfers of value and information between accounts. An Ethereum account contains four fields:

- The nonce, a counter used to make sure each transaction can only be processed once
- The account’s current ether balance
- The account’s contract code, if present
- The account’s storage (empty by default)

“Ether” is the main internal crypto-fuel of Ethereum, and is used to pay transaction fees. In general, there are two types of accounts: externally owned accounts, controlled by private keys, and contract accounts, controlled by their contract code. An externally owned account has no code, and one can send messages from an externally owned account by creating and signing a transaction; in a contract account, every time the contract account receives a message its code activates, allowing it to read and write to internal storage and send other messages or create contracts in turn. …

이더리움의 스테이트는 어카운트(accounts)라고 불리는 객체들로 구성되어 있고, 이 어카운트는 각각 20byte 길이의 주소(address)와 1:1로 매칭되어 있습니다. 또한, 어카운트는 다음과 같은 요소를 포함하고 있습니다:

이더리움 어카운트의 구조, 출처: Ethereum EVM illustrated
  • 논스
  • 이더리움 잔고
  • 코드(옵션)
  • 스토리지(기본값은 비어있음)

또한, 어카운트는 두 가지 유형으로 나눠지는데, 개인키를 통해 통제되는 외부 보유 어카운트(EOA: externally owned accounts)와 콘트랙트 코드에 의해 통제되는 콘트랙트 어카운트(CA: contract account)입니다.

외부 보유 어카운트(이하 ‘EOA’)는, ‘통제 권한’이 체인 외부에 있다는 의미로, 어카운트의 4가지 구성요소 중 코드를 포함하고 있지 않으며, 메세지(트랜잭션)를 생성하고 발송하는 역할을 합니다. 우리가 사용하는 지갑 계정이 바로 EOA입니다.

반면에, 콘트랙트 어카운트(이하 ‘CA’)는 코드를 포함하여, 메세지를 수신할 경우 기록된 코드에 따라 작업을 수행합니다. CA에는 스토리지도 포함되어 있어, 코드를 수행하는 과정에서 스토리지의 기록을 읽거나, 그 결과 값을 스토리지에 쓰기도 합니다.

요약하자면, 이더리움 스테이트는 수 많은 어카운트들로 구성되어 있고, 어카운트의 유형엔 EOA와 CA가 있으며, 어카운트 간 메세지를 통해 상호작용을 하며 스테이트를 변경시킨다고 할 수 있습니다.

비트코인과 이더리움의 차이

비트코인에서 트랜잭션은 스테이트를 바꾸는 작용이자 스테이트 그 자체이기도 했습니다. 이더리움의 트랜잭션도 스테이트를 바꾸는 작용을 하지만, 이더리움 스테이트의 경우 트랜잭션과는 분리된 어카운트의 집합체라고 할 수 있습니다.

Messages and Transactions

출처: Ethereum Whitepaper

The term “transaction” is used in Ethereum to refer to the signed data package that stores a message to be sent from an externally owned account. …

The STARTGAS and GASPRICE fields are crucial for Ethereum's anti-denial of service model. In order to prevent accidental or hostile infinite loops or other computational wastage in code, each transaction is required to set a limit to how many computational steps of code execution it can use. …

The intent of the fee system is to require an attacker to pay proportionately for every resource that they consume, including computation, bandwidth and storage; hence, any transaction that leads to the network consuming a greater amount of any of these resources must have a gas fee roughly proportional to the increment.

이더리움에서 어카운트 간 소통하는 방식은 두 가지로 나뉘어집니다. 트랜잭션(transactions)과 메세지(messages)인데요.

이더리움 어카운트 간 소통 유형, 출처: Ethereum EVM illustrated

트랜잭션은 EOA에서 생성되어 다른 EOA에 이더리움을 송금하거나, CA의 코드를 실행시킵니다. 반면에 메세지는 실행 환경(저장이 안 됨)에서 어카운트끼리 소통하는데 쓰입니다. 예를 들어서 설명하자면:

  • A는 apple 코인 10개를 mushroom 코인 5개로 교환하고자 함
  • A의 어카운트(EOA)는 해당 트랜잭션을 생성하여, DEX CA에 보냄
  • DEX CA는 apple-mushroom LP CA에 메세지를 발송
  • LP CA는 apple, mushroom CA에 각각 메세지를 발송하여 소유권 변경(이체) 요청…

과정 하나하나의 의미를 이해하실 필요는 없고, 트랜잭션을 통해 최초 작용(A→DEX CA)이 일어나고, 그 작용으로부터 어카운트 간 메세지를 주고 받으면서(DEX CA→LP CA→토큰 CA) 최종적으로 결과 값이 저장된다는 것을 보시면 될 것 같습니다.

여기서 중요한 것은, 트랜잭션의 값엔 STARTGASGASPRICE가 포함되어 있다는 겁니다. 이 가스는 트랜잭션 내 루프문 포함에 따른 부작용을 방지하기 위해 만든 개념입니다.

트랜잭션이 루프문을 포함한다면, 노드가 코드 수행을 완료하지 못해 과부하가 걸리게 됩니다. 이더리움에선 트랜잭션 데이터 발송, 스마트 콘트랙스 수행이 가스를 소모하게 함으로써 루프문으로 발생할 수 있는 부작용을 방지합니다.

누군가가 트랜잭션에 루프문을 써서 체인을 정지시키려고 한다면, 그 만큼의 가스비를 지불해야 합니다. 아무리 큰 비용을 지불한다고 한들 가스를 다 소진하면 체인은 정상적으로 가동될 거구요.

이처럼 이더리움은 어카운트와 가스의 개념을 새롭게 도입시켜 비트코인이 가진 한계를 극복했습니다. 다음 챕터에선 이렇게 시스템 상에서 코드를 구현하는 가상의 기계, EVM에 대해 간단히 설명하도록 하겠습니다.

👈🏻 이전 게시물: <2> Ethereum

👉🏻 다음 게시물: <4> EVM

저는 다음 두 채널에서 활동하고 있습니다. 언제든 편하게 와서 소통해주세요.

Treasure Hunt: https://t.me/look4treasure
고로치 같이투자 소통방: https://t.me/gachi2job1

--

--