말 그대로 가상머신은 물리적인 시스템 위에 가상 시스템을 올려서 독립적으로 사용할 수 있도록 해주는 기법입니다.
즉 어떤 OS든 그 위에 가상의 컴퓨터환경을 만들어서 독립적으로 프로그램을 실행할 수 있는 환경을 VM이라고 부릅니다.
A. 리눅스에서 윈도우 프로그램을 실행시킬 때 Virtual Box 프로그램을 이용하거나
B. 윈도우에서 VMWare를 통해 리눅스OS를 올릴 때 사용하는 등
이런 식으로 환경이 다른 OS에서 동일하게 프로그램을 실행시킬 수 있게 해주는 환경을 VM이라고 부릅니다.
EVM 말 그대로 Ethereum Virtual Machine입니다. 뜻은 어떨까요? 어떤 OS든지 독립된 이더리움 가상 기계환경을 만들어서 이더리움 플랫폼 위에 프로그램을 실행시킬 수 있는 환경을 의미합니다. 즉 이더리움 가상 기계 or 이더리움 가상 환경입니다.
우리가 VMWARE로 윈도우에서 리눅스를 실행시키듯 EVM을 리눅스나 윈도우에서 실행시키면 이더리움 플랫폼을 실행시키는 것이죠.
1. 개발자가 솔리디티 언어로 Dapp(분산 어플리케이션)을 만든다.
2. solc 등을 이용해 솔리디티 코드를 컴파일 하여 바이트코드 형태로 만든다.
3. 이 바이트코드를 이더리움 클라이언트를 이용해 이더리움 네트워크에 올린다.
4. 이 바이트코드를 EVM이 Opcode 단위로 해석하여 실행시킨다. (비트코인 스크립트에서도 봤던 Opcode가 나옵니다.)
5. 솔리디티로 작성된 스마트 컨트랙트는 EVM에서 동작하기 때문에 윈도우든, 맥이든, 리눅스든 유닉스든 어떤 OS나 하드웨어에도 종속되지 않습니다.
Opcode 동작 방식
1. EVM은 명령어 집합(Opcode)를 사용해서 특정한 작업을 실행함
2. 모든 Opcode에는 1 바이트가 할당됨
3. 100개가 넘는 고유한 Opcode가 있고 충분한 리소스가 있으면 무엇이든 계산 가능
Opcode를 크게 7가지로 나누면 다음과 같음
스택(Stack) 조작 : POP, PUSH, DUP, SWAP
산술/비교/비트 연산 : ADD, SUB, GT, LT, AND, OR
환경: CALLER, CALLVALUE, NUMBER
메모리 조작 : MLOAD, MSTORE, MSTORE8, MSIZE
스토리지 조작: SLOAD, SSTORE
프로그램 카운터: JUMP, JUMPI, PC, JUMPDEST
중지 : STOP, RETURN, REVERT ..etc
EVM의 더 자세한 내부 동작구조는 다음링크에서 볼 수 있습니다.
Ethereum 노드 아키텍처 (실행 클라이언트와 컨센서스 클라이언트) (0) | 2023.02.25 |
---|---|
EVM(Ethereum Virtual Machine)의 내부 동작 구조 (0) | 2023.02.08 |
Ethereum(이더리움) (0) | 2023.02.06 |
로컬에서 두개의 노드 연결 (PoW 버전 geth) (0) | 2023.02.04 |
Geth 트랜잭션 생성과 채굴 (PoW 버전 geth) (0) | 2023.02.04 |