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

중급15분 소요2022-06-17

트랜잭션(Transactions)

이더리움에서 계정은 외부소유계정(EOA)과 컨트랙트계정(CA)이 있다고 하였습니다. 외부소유계정(EOA)은 우리가 일반적으로 사용하고 있는 이더리움 계정으로 입/출금이 가능한 계정이고, 컨트랙트계정(CA)은 스마트 컨트랙트의 주소로 프로그래밍 언어로 쓰인 코드(code)와 저장공간을 가진 계정입니다. 탈중앙화 거래소로 알려져 있는 유니스왑(Uniswap) 같은 디앱(Dapp)이 이 스마트 컨트랙트 주소인 컨트랙트계정(CA)를 가지고 있습니다.

 

외부소유계정(EOA)은 트랜잭션(transaction)을 보낼 수 있습니다. 쉽게 이해하자면 우리가 인터넷에서 물건을 구매할 시 최종 결제 버튼을 누르는 행위와 유사합니다. 내가 최종 결제 버튼을 클릭하면, 나의 계정 정보와 결제관련 정보가 해당 인터넷 쇼핑몰에 전달이 됩니다. 이처럼 외부소유계정(EOA)은 인터넷 쇼핑에서의 사용자 계정으로 이해할 수 있습니다. 컨트랙트계정(CA)은 인터넷 쇼핑몰과 유사하게 어떠한 프로그램을 실행할 수 있고 사용자로부터 받은 정보를 처리하고 이더리움 네트워크에 기록하는 것입니다. 정리하자면 외부소유계정(EOA)은 인터넷에서의 사용자 ID와 유사하고, 컨트랙트계정(CA)은 인터넷에서 서비스를 제공하는 홈페이지 주소라고 이해할 수 있습니다.

 

이더리움에서 사용되는 트랜잭션(transaction)이란 용어는 외부 소유 어카운트가 보낼 메시지를 가지고 있는 서명된 데이터 패키지를 말한다. 이 트랜잭션은 다음을 포함하고 있다.

- 메시지 수신처

- 발신처를 확인할 수 있는 서명

- 발신처가 수신처로 보내는 이더의 양

- 선택적(optional) 데이터 필드

- STARTGAS 값, 트랜잭션 실행이 수행되도록 허용된 최대 계산 단계수

- GASPRICE 값, 매 계산단계마다 발신처가 지불하는 수수료 

- 이더리움 백서 중 -

 

외부소유계정(EOA)에서 트랜잭션은 이더리움 네트워크로 전송할 때 포함되는 메세지입니다. 이중에서 처음 세 항목(메시지 수신처, 발신처를 확인할 수 있는 서명, 발신처가 수신처로 보내는 이더의 양)은 대부분의 디지털자산에서 표준으로 사용되는 값입니다. 선택적 데이터 필드에 다양한 정보들을 포함하여 컨트랙트계정(CA) 등에 어떠한 명령을 요청할 수 있습니다. 마지막에 존재하는 StartGas값과 GasPrice값은 이더리움에서 핵심적인 역할을 합니다.

 

이더리움과 같이 탈중앙화된 애플리케이션 플랫폼은 누구에게나 열려 있습니다. 개인 PC에서는 허락된 사용자만 PC를 사용하고 PC에서 여러 응용프로그램을 실행할 수 있습니다. 반면, 인터넷에 존재하는 인터넷 서비스들은 누구나 무료로 해당 서비스들을 이용할 수 있습니다. 이렇게 무료로 개방되어 있는 인터넷 서비스에서는 가끔 사용자 접속이 폭주하여 서비스를 이용하지 못하는 경우가 발생합니다. 또는 디도스(DDos)공격으로 알려진 해킹도 존재합니다.

디도스(DDos)공격은 악의적인 목적을 가지고 해당 서비스 웹사이트를 공격하여 인위적으로 사용자가 갑자기 많이 접속한 상태로 만들어서 서비스를 다운시키는 공격으로, 대부분의 웹사이트들은 디도스(DDos)공격을 막기 위한 보안조치를 취하고 있습니다.

 

탈중앙화된 애플리케이션 플랫폼은 기존 인터넷 서비스와는 조금 다릅니다. 기존 인터넷서비스는 사용자가 단순히 해당 서비스에 접속하고 이용하는 수준이지만, 탈중앙화된 애플리케이션 플랫폼인 이더리움에서는 사용자가 관리자 개념에서 인터넷서비스를 이용, 관리하고 데이터를 수정, 기록할 수 있는 권한까지 주어집니다. 즉, 기존 인터넷서비스에서는 사용자와 해당 서비스를 관리하는 관리자가 엄격히 구분되지만 이더리움에서는 사용자와 서비스를 관리하는 관리자의 구분이 없습니다. 누구나 사용자가 될 수 있고 누구나 관리자가 될 수 있습니다. 이는 곧 사용자에게 해당 서비스 자체를 변경할 수도 있고, 서비스의 내용들을 수정할 수 있는 권한이 주어진다는 것입니다.


사용자에게 권한이 많이 주어지기 때문에 디도스(DDos)의 공격도 기존 인터넷 서비스에서 단순히 해당 서비스를 다운시키는 것 그 이상의 범위를 포함합니다. 물론 해당 서비스를 다운시키는 수준도 심각한 결과를 초래합니다. 디도스(DDos)공격이 가능하다면 이더리움 네트워크는 멈출 것이고 더 이상 서비스를 지속할 수 없기 때문입니다.

 

디도스(DDos)를 포함한 다양한 악의적인 공격을 방지하기 위해서 이더리움에서는 가스(Gas)라는 개념을 도입하였습니다. 우리가 일반적으로 인터넷 서비스를 이용할 때는 비용을 지불하지 않지만, 이더리움에서는 서비스를 이용할 때마다 해당 비용을 지불하게끔 되어 있습니다. 즉, 인터넷 서비스에서 제공하는 어떠한 프로그램을 실행하는데 들어가는 비용(CPU, 메모리, 프로그램 수행비용) 등을 모두 지불하는 것입니다. 따라서 디도스와 같은 악의적인 공격자가 공격 시 비용을 지불해야하기 때문에 현재의 인터넷 서비스에서 사용되는 무차별적인 공격을 시도할 수가 없습니다. 이러한 이더리움에서 운용되는 서비스를 실행되는 비용에 대한 부분이 StartGas와 Gasprice에 설정되어 있습니다.


 

메시지(Messages)

컨트랙트는 다른 컨트랙트에게 “메시지”를 전달할 수 있다. 메시지는 따로 저장될 필요가 없는 이더리움의 실행 환경에서만 존재하는 가상의 오브젝트이다. 메시지는 다음의 것을 포함하고 있다.

- (암묵적으로) 메시지 발신처

- 메시지 수신처

- 메시지와 함께 전달되는 이더

- 선택적 데이터 필드

- STARTGAS 값

- 이더리움 백서 중 -

 

컨트랙트계정(CA)는 다양한 인터넷서비스들의 주소들과 유사하다고 했습니다. 이러한 컨트랙트계정(CA)은 서로 다른 컨트랙트계정(CA)에게 ‘메시지’를 전달할 수 있습니다. 즉 스마트 컨트랙트 프로그램은 서로 다른 스마트 컨트랙트 프로그램들과 다양한 정보들을 주고 받을 수 있고, 서로 다른 스마트 컨트랙트 프로그램들에게 다양한 명령들을 요청할 수 있습니다.

 

예를 들어 A라는 스마트 컨트랙트 프로그램은 예금관련 스마트 컨트랙트 프로그램이고, B라는 스마트 컨트랙트 프로그램은 대출관련 스마트 컨트랙트라고 합시다. A의 예금 스마트 컨트랙트 프로그램이 B의 대출 스마트 컨트랙트 프로그램에게 자신이 가지고 있는 예금을 담보로 하여 B 대출 스마트 컨트랙트 프로그램을 이용하는 고객들에게 정보들을 요청하고 자금을 대출할 수 있게 해줄 수 있습니다. 이러한 모든 과정에 해당 스마트 컨트랙트 프로그램들은 사용자들에 의해서 자동으로 실행되고, 실행에 필요한 비용(CPU, 메모리, 프로그램 실행)을 가스비로 요구하게 됩니다. 그리고 사용자들은 해당 프로그램을 수행하는 데 필요한 가스비를 지불하고 서비스를 제공받을 수 있습니다.

 

정리하자면 트랜잭션은 외부소유계정(EOA)가 어떠한 메세지(다양한 요청들)를 컨트랙트계정(CA)에게 보내는 행위입이다. 이 행위는 탈중화된 환경에서 이루어지기 때문에 보안을 위해 가스비(수수료)를 서비스를 요청하도록 이더리움은 설계되어 있습니다. 이 같은 설계 덕분에 탈중앙화된 환경에서 자유롭게 서비스 이용자와 제공자들이 서비스의 중단 없이 이용할 수 있는 것입니다.