ABI(Application Binary Interface)
ABI는 컨트랙트 함수와 매개변수들을 JSON 형식으로 나타낸 리스트이다.
다음은 ERC20 Interface의 BalanceOf 함수 ABI이다.
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
함수 이름과 매개 변수들이 들어가 있는 것을 확인할 수 있다.
ABI를 사용하는 이유??
ABI는 보통 두 프로그램 모듈의 인터페이스 역할을 하고 그 중 하나는 기계어 레벨에 있는 경우가 많다. 인터페이스는 데이터를 기계 코드로 인코딩/디코딩하기 위한 방법이다.
이더리움에서 기본적으로 EVM에 솔리디티 컨트랙트 호출을 할 때 인코딩을 하거나, 트랜잭션들로부터 데이터를 읽는 방법이다.
* EVM - 이더리움 블록체인 네트워크의 노드를이 공유하는 하나의 가상 머신이라고 볼 수 있다.
* 솔리디티 컨트랙트(스마트 컨트랙트) - 특정 계약의 내용을 구현한 컴퓨터 코드(code)로서 계약의 조건을 만족시키게 되면 모든 이더리움 노드에서 무조건적으로 실행되는 코드. 솔리디티의 관점에서 컨트랙트는 무수한 코드들(함수)과 데이터가 이더리움 블록체인의 특정 주소에 존재하는 것
* 트랜잭션 - 블록체인 참여자간의 전송, 수신을 통해 저장되는 거래기록. 디지털 자산을 내 지갑에서 다른 지갑으로 이동 시키는 것.
ABI는 컨트랙트 내 함수를 호출하거나 컨트랙트로부터 데이터를 얻는 방법이다.
이더리움 스마트 컨트랙트는 이더리움 블록체인에 배포된 바이트 코드이다. 컨트랙트 내에 여러 개의 함수가 있을 수 있을 것이다. ABI는 컨트랙트 내 어떤 함수를 호출할 지 지정하는 데 필요하며, 우리가 생각했던 대로 함수가 데이터를 리턴한다는 것을 보장하기 위해 반드시 필요하다.
이더리움 생태계의 수많은 트랜잭션 중 나에게 필요한 컨트랙트를 호출하기 위해 필요한 수단이 ABI라고 할 수 있다. 하지만 말그대로 너무 많은 컨트랙터가 무질서하게 올라가다 보면 나에게 필요한 함수가 있는지 없는지도 모를 수 있을 것이다.
이런 상황을 방지하기 위해 몇가지 함수 Interface 규격을 정해서 이에 만족하는 함수를 모아 놓은 것이 ERC20이다.
그래서 우리는 ERC 20 코인을 접했을 때 totalSupply, balanceOf, allowence, transfer, approve, transferFrom 과 같은 함수들이 존재한다는 것을 알고 ABI를 통해 이들을 호출해 사용할 수 있다.
컨트랙트는 블록체인의 특정 주소에 바이트 코드로 저장되어 있다. ABI는 이 컨트랙트와 low-level에서 통신할 수 있게 하는 통신 규약(흡사 API)과도 같은 역할을 한다.
'Block chain' 카테고리의 다른 글
스마트 컨트랙트(Smart Contract)의 작동 원리 (2) | 2022.08.23 |
---|---|
[이더리움] Account, Transaction, Message, Smart Contract (2) | 2022.08.23 |
Defi 용어 정리 (0) | 2022.07.08 |