on
[블록체인] EVM과 ABI
[블록체인] EVM과 ABI
블록체인을 개발하다보면 web3.js와 abi에 대한 것을 들어볼 것이다...
해당 개념을 까먹기 전에 얼른 정리하자!!
우선, 스마트 컨트랙트에 대해서 살펴보자
스마트 컨트랙트를 만드는 순서는 다음과 같다.
1. 스마트 컨트랙트 코딩
구현하고자 하는 내용을 솔리디티나 다른 언어로 코딩한다.
2. 구현한 소스 코드를 컴파일한다.
컴파일 결과 EVM 바이트 코드가 생성된다.
3. 스마트 컨트랙트 배포
컴파일 된 EVM 코드를 하나의 트랜잭션처럼 블록에 추가시켜 블록체인에 등록시킨다.
소스 컴파일 - EVM 바이트 코드 - ABI 취득 - ABI로부터 컨트랙트 객체 생성 - 트랜잭션 생성하여 블록 추가
그렇다면 EVM은 무엇이고 ABI는 무엇일까?
EVM (Ethereum Virtual Machin)
EVM은 블록체인 네트워크의 노드들이 공유하는 하나의 가상 머신이다. 거대한 하나의 분산 컴퓨터라고 이해하면 쉽다.
솔리디티로 컨트랙트를 작성하면 그 자체로 실행이 안된다. 그 이유는 사람이 이해하는 언어이기 때문이다. 그래서 실행하려면 기계어로 바꿔야하는데 바꾼 파일이 Ethereum Bytecode이다. 이 바이트 코드가 EVM에서 실행된다.
이러한 EVM을 사용하기위해서는 비용을 지불해야하는데 이것이 Gas이다.
트랜잭션이 생성하면서 가스량이 감소하는데 가스량을 모두 소비되면 트랜잭션이 중단되면서 무한루프에 빠지지 않게 한다.
EVM (출처 https://opentutorials.org/course/2869/18360)
ABI (Application Binary Interface)
ABI는 solidy를 컴파일 하면 나오는 산출물중의 하나이다.
contract의 함수와 매개변수를 JSON 형식으로 나타낸 리스트이다.
- 블록체인 외부와 contract의 상호작용을 하기 위해 사용하는 인터페이스 역할을 한다.
- 데이터를 기계 코드로 인코딩/디코딩하기 위한 방법이다.
- 스마트 컨트랙트 내의 함수를 호출하거나 컨트랙트로부터 데이터를 얻는 방법이다.
- 이더리움 가상 머신(EVM)에서 동작하기 위해 바이트 코드로 변환된 컨트랙트는 compiled Contract이다.
함수의 이름과 매개변수가 컴파일 과정에서 해시된다. 따라서 다른 함수를 호출하기 위해서는 함수 이름과 매개변수를 알고 있어야하는데, 이때 ABI가 쓰인다.
즉, ABI는 스마트 컨트랙트와 상호작용을 위해 사용하는 것!
remix를 통해 solidity파일을 컴파일하면 ABI도 얻을 수 있다. 이렇게 얻은 ABI로 스마트 컨트랙트 객체를 생성한다.
그 후 생성한 스마트 컨트랙트 객체를 배포를 해야한다. 배포한다는 것은 생성한 스마트 컨트랙트 객체를 블록에 포함하고 채굴하여 블록체인에 포함되는 과정이다. 이때 스마트 컨트랙트 주소가 생성된다.
- 참고
- EVM
- ABI
from http://silvergal.tistory.com/56 by ccl(A) rewrite - 2021-10-09 18:00:37