블록체인 개발자 면접 2번 봤는데, 2번 모두 EVM이 뭔지 질문을 받았다.
2번 다 답변했고, 2번 다 반응도 낫배드였다.
그럼에도 아직까지 미스테리한 부분이 듬성듬성있어서, 아예 찢어보려 한다.
컴퓨터(시스템) 안에 가상 시스템(컴퓨터)를 올려서 독립적으로 사용할 수 있는 기법.
컴퓨터(시스템)은 CPU, Memory 등 하드웨어가 존재하지만, 얘는 없어서 가상인 것이다.
가상머신을 통해 컴퓨터가 어떤 상태이든 동작하는 시스템을 구현할 수 있다.
이더리움은 이더 송금 말고도
스마트 컨트랙트 코드를 실행해야 한다. 마치 우리가 사용하는 프로그래밍 언어 코드를 실행하듯.
그것이 EVM의 존재 이유다.
(컨트랙트 코드 실행 뿐 아니라 이더만 송금할 때도, 걍 대부분 EVM이 다 처리한다고 생각하자)
거의 대부분의 경우 EVM이 동작한다.
딱딱 떨어지는 것은 아니지만, 경우의 수를 나누면 디테일한 이해가 편할 것이다.
대부분의 경우
트랜잭션 생성 > 전파 > 검증 > EVM 실행 > 가스 지불 > 완료
순서로 진행된다.
다양한 시나리오를 상상하며 구체적인 동작을 살펴보자.
솔리디티로 당신이 컨트랙트 코드를 작성했고,
컴파일러로 바이트코드와 ABI를 얻었고, 바이트 코드를 배포한다.
(ABI는 외부에서 연동을 위한 인터페이스일 뿐, 블록체인에 안 올린다.)
트랜잭션 생성
트랜잭션 브로드 캐스트 : 모든 노드에 전파
트랜잭션 검증
트랜잭션 실행 (EVM!!!)
순서대로 진행된다.
EVM에서 구체적으로 트랜잭션 실행이 어떻게 일어나는지는 맨 마지막에 종합해서 알아보겠다.
1과 매우 유사하다.
트랜잭션 생성
트랜잭션 브로드캐스트 : 모든 노드에 전파
트랜잭션 검증
트랜잭션 실행 (EVM!!!)
트랜잭션 완료
트랜잭션 생성
트랜잭션 브로드 캐스트
트랜잭션 검증
트랜잭션 실행 (EVM!!!)
가스 소비 및 비용 지불
트랜잭션 완료
이제 당신은 EVM이 동작하는 원리를 거의 깨달았다.
마지막으로 EVM 내부 구조를 살펴보고 어떻게 동작하는지 알아보자.
내부 구조를 살펴보자.
stack, memory 등의 용도는 알 거라고 믿는다.
위에서 살펴봤듯이 대부분의 경우
트랜잭션 생성 > 브로드캐스팅 > 검증 > EVM 실행
의 순서로 진행되는 것을 확인했다.
그렇다면 EVM에서 구체적으로 어떻게 실행이 되는 건지 내부구조와 함께 살펴보자.
트랜잭션 검증까지는 했다 치고, EVM이 어떻게 돌아가는지만 자세히 보자.
0. PC(다음 실행할 명령어 위치 가르키는), 메모리, 스택 초기화
1. 트랜잭션의 목표 주소 부분 : EVM이 스마트 컨트랙트 주소 확인
2. 해당 컨트랙트의 상태를 읽어옴 (저장된 상태 변수들 불러옴)
3. 트랜잭션의 데이터 부분 : 해당 함수 호출 확인 (상태변수 +1 하는 함수)
4. 해당 함수의 바이트 코드 실행 (상태변수 변경)
2. 해당 컨트랙트의 상태를 읽어옴 (저장된 상태 변수들 불러옴)
evm은 컨트랙트를 실행하는 환경이라고 알고 있는데 단순 이더전송 트랜잭션도 처리가 되나요? 저는 안되는 걸로 공부했어서요. 이더 전송 트랜잭션은 컨트랙트 코드가 없고, 노드들에 의해서 기록되는 걸로 이해했습니다. 의견을 듣고싶네요!