ABI(Application Binary Interface)란 무엇일까요?
- Published on
블록체인 생태계에 입문하면서 ABI에 대해 처음 접하게 되었습니다. 오늘은 ABI가 무엇이며, ABI와 API는 어떻게 다른것인지 알아보겠습니다.
먼저, 익숙한 API에 대해 다시한번 정의해본 뒤 ABI를 알아봅시다.
API
는 Application Programming Interface의 줄임말로, Application과 서로 상호작용할 수 있도록 방식(Interface)을 뜻합니다.
여기서 Application
은 고유한 기능을 가진 모든 소프트웨어를 나타내며, Interface
는 두 Application간의 요청과 응답을 사용하여 서로 통신할 수 있는 방법을 정의한 것입니다. 즉, 두 Application
이 서로 통신할 수 있도록 돕는 방식(Interface
) 정도로 이해하면 될 것 같습니다.
그럼 API의 정의를 기반으로 ABI를 이해해 봅시다.
ABI
는 Application Binary Interface의 줄임말로, 바이너리 방식(0과 1로 이루어짐)의 두 프로그램 모듈 사이의 인터페이스를 뜻합니다. 컨트랙트의 관점에서 보면, 컨트랙트 함수와 매개변수들을 JSON 형식으로 나타낸 리스트입니다. 이를 통해 컨트랙트 내의 함수를 호출하거나 데이터를 얻을 수 있습니다.
컨트랙트는 solidity 같은 고수준 언어로 작성된 후 바이트코드로 컴파일되어 블록체인 저장되는데, ABI는 이 컨트랙트와 통신할 수 있는 역할을 합니다.
ABI의 요소를 살펴봅시다.
constant
: true이면 읽기전용으로 함수를 호출하며 가스비가 발생하지 않습니다. false이면 트렌젝션을 발생시키며 가스비가 발생합니다.inputs
: 매개변수를 정의하는 객체의 배열입니다.name
: 매개변수의 이름을 정의합니다.type
: 매개변수의 타입을 정의합니다.name
: 함수의 이름을 정의합니다.outputs
: 출력 객체의 배열입니다.name
:type
:stateMutability
: 함수의 가변성을 정의합니다. pure
는 블록체인 상태를 읽지 않거나 쓰지 않을 수 있는 상태이고, view
는 블록체인 상태를 읽고 쓸 수 있는 상태입니다.type
: 함수의 유형을 정의합니다. 'function', 'constructor', 'receive', 'fallback' 등이 있습니다.[
// balanceOf 함수
{
"constant": true,
"inputs": [{ "name": "_owner", "type": "address" }],
"name": "balanceOf",
"outputs": [{ "name": "balance", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
// symbol 함수
{
"constant": true,
"inputs": [],
"name": "symbol",
"outputs": [{ "name": "symbol", "type": "string" }],
"stateMutability": "view",
"type": "function"
}
]
ethers.js에서는 human-readable ABI
형태로 ABI를 작성할 수 있습니다. (RicMoo가 작성한 관련 글)
[
"function balanceOf(address owner) view returns (uint256)",
"function symbol() view returns (string)"
]
정리해보자면, API
는 사람이 읽을 수 있는 코드 수준에서 통신할 수 있는 인터페이스이며, ABI
는 바이너리 수준에서 통신할 수 있는 인터페이스로 이해하면 될 것 같습니다. ABI를 아직 개념적으로만 이해한 상태라 피드백이 있다면 얼마든지 주시면 감사하겠습니다!
https://www.quicknode.com/guides/smart-contract-development/what-is-an-abi https://ko.docs.klaytn.foundation/content/smart-contract/sample-contracts/erc-20 https://aws.amazon.com/ko/what-is/api/