無知

갈 길이 먼 공부 일기

기술 공부/블록체인

이더리움의 작동방식 (4) | 트랜잭션, 메시지 콜, 계약 생성

moozii 2022. 1. 5. 20:19

* 이 글은 How does Ethereum work, anyway? 라는 글을 읽어가며 이해한 바를 한국어로 번역하여 정리하는 글입니다. 시리즈의 형태로 끊어가며 업로드되었으니, 참고 부탁드립니다.

 

이더리움 블록체인의 구성 요소

 

이더리움 블록체인은, 

계정 / 상태 / 가스 및 수수료 / 상호작용 / 블록 / 상호작용의 집행 / 채굴 / 작업 증명 

등으로 구성된다. 

 

지난 글에 이어서 계속 설명한다.

 

4. 트랜잭션과 메시지

이더리움은 트랜잭션을 기반으로 하는 상태기계이다. 

즉, 다른 계정 사이에 일어나는 트랜잭션은 이더리움 전체의 글로벌 상태를 새로운 상태로 전이시킨다.

 

기본적으로, 트랜잭션이란, 외부 소유 계정에서 생성된 명령문/지시문으로, 

암호학적으로 서명되어, 직렬화되고 (바이트 형태로 변환하는 serialization을 의미함), 블록체인에 전송된다.

 

트랜잭션에는 계약 생성과 메시지 콜, 2가지가 존재한다.

(계약 생성 = 신규 이더리움 계약을 생성하는 트랜잭션)

 

트랜잭션 구성요소

https://preethikasireddy.medium.com/how-does-ethereum-work-anyway-22d1df506369

1. Nonce, 논스 

전송자가 전송한 트랜잭션의 수

 

2. gasPrice, 가스비

전송자가 트랜잭션의 수행을 위해 가스 단위당 지불 용의가 있는 wei

 

3. gasLimit, 가스 한계

전송자가 트랜잭션의 수행을 위해 지불 용의가 있는 가스 최대량

(미리 선결제된 뒤 컴퓨팅이 진행된다)

 

4. to, 수령자 주소

수령자의 주소로, 계약 생성 트랜잭션의 경우 비어 있는 값이다.

 

5. value, 값

전송자로부터 수령자에게 전송되는 wei의 값이다.

계약 생성 트랜잭션의 경우 신규 생성 계약 계정의 초기 잔고 값을 의미한다.

 

6. v, r, s

전송자의 트랜잭션을 구별하는 고유 서명을 생성하는 데에 사용된다.

 

7. init (계약 생성 트랜잭션에만 존재)

이더리움 가상 머신 코드의 일부로 신규 계약 계정 생성에 사용된다.

단 1회만 돌아가는 프로그램으로 이후 버려진다. 

최초 실행 시 계정 코드의 body를 리턴하며, 이는 계약 계정에 영구적으로 종속되는 코드이다.

 

8. data (메시지 콜 트랜잭션에만 존재하는 선택 정보)

메시지 콜의 입력 값으로 파라미터 등을 넣을 수 있다.

스마트 계약을 통해 도메인을 등록한다 하면, 

도메인과 IP 주소 등의 입력 값을 data에 추가한다.

 

트랜잭션은 외부 소유 계정으로부터 시작되어 블록체인에 전송된다.

하지만, 계약과 계약 간의 상호작용도 가능하다.

이더리움 상태의 글로벌 범위에서 존재하는 계약은 같은 글로벌 범위의 계약과 상호작용할 수 있다.

<메시지>나 <내부 트랜잭션>을 통해 계약 간 상호작용이 이루어진다.

<메시지>나 <내부 트랜잭션>은 외부 소유 계정으로부터 생성되지 않으며, 

트랜잭션과 달리 가상의 오브젝트로, 직렬화되지도 않고, 이더리움 실행 환경 내에서만 존재하는 것이다.

 

https://preethikasireddy.medium.com/how-does-ethereum-work-anyway-22d1df506369

이때 특징은, 

메시지 및 내부 트랜잭션은 gasLimit 값, 즉 가스 한계량이 없다는 것이다.

그 이유는, 메시지 및 내부 트랜잭션을 촉발시킨, 외부 소유 계정으로부터 시작된 최초의 트랜잭션에 이미 명시되어 있기 때문이다.

즉, 가스 한계량 설정 시에는 이러한 내부 가스 소비까지 염두에 두고 설정을 해야 한다. 

만약, 트랜잭션 및 메시지의 체인에서, 특정 메시지 실행이 가스가 부족할 경우, 메시지의 경우에는 모두 복원되겠으나, 

그 메시지 콜을 실행시킨 본래의 트랜잭션은 복원될 필요가 없다.