EVM
EVM은 스마트 컨트랙트 배포 및 실행을 처리하는 이더리움의 일부이다. 지갑 -> 지갑으로 간단한 값을 전송하는 트랜잭션은 EVM이 필요 없지만, 그 외 모든 것은 EVM에 의한 상태 업데이트를 수반한다. 넓게 보면 이더리움 블록체인에서 실행되는 EVM은 자체 영구 데이터 저장소가 있는 수백만 개의 실행 가능 객체를 가진 전 세계의 탈중앙화 된 컴퓨터다.
EVM은 스택 기반의 구조를 가지며 유사 튜링 완전 상태 머신이다. 이것은 튜링 완전한 코드를 수행할 수 있지만 가스비라는 제한 도구를 두어 함수가 의도적으로 영원히 수행되어 이더리움 플랫폼이 전체적으로 중단되는 상황을 피할 수 있다.
솔리디티로 작성된 코드는 컴파일러를 통해 바이트 코드로 변환되며 변환된 바이트코드가 EVM에서 실행된다.
EVM에서 각 스택의 아이템의 크기는 256비트이며 스택의 최대 사이즈는 1024이다. (솔리디티에서 uint256이 최대인 이유)
EVM 동작 순서
EVM이 동작하는 순서는 다음과 같다.
- 트랜잭션이 올바른 형식인지 확인한다.
- 트랜잭션 수수료 계산(Gas limit x Gas Price)
- Gas 지불 초기화. 이 시점부터 트랜잭션에서 처리된 바이트만큼 특정 양의 가스를 차감한다.
- 트랜잭션 금액을 수신자 주소로 보낸다. (Smart Contract도 이 단계에서 실행됨)
- 송신자가 트랜잭션을 완료할 수 있을 만큼 가스비가 충분하지 않으면 트랜잭션이 Revert되지만 트랜잭션 수수료는 채굴자에게 지불되고 환불되지 않는다.
- 5번의 경우와 다른 이유로 트랜잭션이 실패한 경우, 송신자에게 가스비를 환불해주고, 사용된 가스와 관련된 비용은 채굴자에게 전달됨
'블록체인 > 이더리움' 카테고리의 다른 글
web3.js "Can't resolve ... " 에러 해결 (0) | 2022.05.26 |
---|---|
이더리움2.0과 eWasm (0) | 2022.05.23 |
ABI란? (0) | 2022.05.21 |
트랜잭션 (0) | 2022.05.19 |
[SpeedRunEthereum] Challenge 3 [Dex] (0) | 2022.05.17 |