[Blockchain] 스마트 컨트랙트 ABI (Application Binary Interface)
ABI / web3.js / JSON-RPC / bytecode
스마트 컨트랙트를 컴파일하면, 바이트코드와 ABI 등이 생성된다
👉 ‘ABI’는 호출하고 실행시킬수 있는 함수와 객체를 제공
개발자는 ‘스마트 컨트랙트 주소’와 ‘ABI’를 알면 ‘web3.js’ 를 통해
스마트 컨트랙트를 생성하고 특정 함수를 실행할 수 있다
-
컨트랙트 주소를 연결하고, 이러한 객체를 통해 콜이 가능하다
-
컨트랙트 주소는 바이트 코드의 위치를 파악하여 가져오기 위하여 사용한다
-
그래서 스마트 컨트랙트 주소와 / ABI / 논스를 같이 사용한다
web3.js는
‘JSON-RPC’ 를 통해 ‘블록체인의 데이터’와 스마트 컨트랙트의 ‘바이트 코드’를
자바스크립트로 다룰 수 있도록 다양한 ‘객체와 함수’를 제공한다이더리움 네트워크에 있는 각 노드들은 지갑을 통해 상호작용 하는데,
이 때 ‘JSON-RPC’ 형식의 데이터로 상호작용을 한다
이 상호작용을 위한 데이터가 바로 ‘ABI’ 이다RPC (Remote Procedure Call)
- 원격 프로시져 호출
👉 언어나 환경 등에 ‘종속되지 않고’ 서비스 간 프로시저를 호출하도록 해주는 개념
ABI (Application Binary Interface)
- ABI는 ‘스마트 컨트랙트 코드’에 대한 설명이 담긴 JSON 형식의 인터페이스이다
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
}
]
}
...
- 이더리움 네트워크에 있는 각 노드들은 지갑을 통해 상호작용 하는데,
👉 이 때 ‘JSON-RPC’ 형식의 데이터로 상호작용을 한다
👉 이 상호작용을 위한 데이터가 바로 ‘ABI’ 이다
어떤 노드가 이더리움 네트워크에 올라가있는 스마트 컨트랙트를 실행하고자 할 때,
‘바이트코드’ 형태라면 어떤 함수를 어떻게 실행해야 하는지 이해하기 어려울 것입니다.
ABI는 스마트 컨트랙트 코드에 있는 함수에 대해 정의하고,
컨트랙트에 있는 ‘함수’에 어떤 인자를 넣어야 하는지,
어떤 데이터가 ‘반환’되는지 등을 가지고 있으며,
노드가 컨트랙트를 실행하기 위해 어떤 작업을 ‘수행’해야 하는지 알려줍니다
-
ABI 란, ‘컨트랙트 함수’와 ‘매개변수’들을 JSON 형식으로 나타낸 리스트다
-
함수 이름과 매개변수들이 들어가 있다
-
이더리움에서 기본적으로 EVM 에 솔리디티 컨트랙트 호출을 할 때 인코딩을 하거나, 트랜잭션들로부터 데이터를 읽는 방법이다
-
ABI 는 이 컨트랙트와 low level 에서 통신 할 수 있게 하는 통신 규약( 흡사 API ) 과도 같은 역할을 한다
ABI는 ‘컨트랙트 내의 함수를 호출’하거나 ‘컨트랙트로부터 데이터를 얻는’ 방법이다
이더리움 스마트 컨트랙트는 이더리움 블록체인에 배포된 ‘바이트코드’다
컨트랙트 내에 여러 개의 함수가 있을 수 있을 것이다‘ABI’는 컨트랙트 내의 어떤 함수를 호출할지를 지정하는데 필요하며,
우리가 생각했던 대로 함수가 데이터를 리턴한다는 것을 ‘보장하기 위해’ 반드시 필요하다이더리움 생태계에는 정말 많은 트랜잭션들이 존재할 것이다
그 중에서 나에게 필요한 컨트랙트를 ‘호출하기 위한 수단’이 ABI 인 것이다