ABI

Younghwan Cha·2021년 9월 28일
3

blockchain

목록 보기
2/18
post-thumbnail

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 는 보통 두 프로그램 모듈의 인터페이스 역할을 하고 그 중 하나는 종종 기계어 레벨에 있다. 인터페이스는 데이터를 기계 코드로 인코딩/디코딩 하기 위한 방법이다.
이더리움에서 기본적으로 EVM 에 솔리디티 컨트랙트 호출을 할 때 인코딩을 하거나, 트랜잭션들로부터 데이터를 읽는 방법이다.

ABI는 컨트랙트 내의 함수를 호출하거나 컨트랙트로부터 데이터를 얻는 방법이다. 이더리움 스마트 컨트랙트는 이더리움 블록체인에 배포된 바이트코드다. 컨트랙트 내에 여러 개의 함수가 있을 수 있을 것이다. ABI는 컨트랙트 내의 어떤 함수를 호출할지를 지정하는데 필요하며, 우리가 생각했던 대로 함수가 데이터를 리턴한다는 것을 보장하기 위해 반드시 필요하다.

이더리움 생태계에는 정말 많은 트랜잭션들이 존재할 것이다. 그 중에서 나에게 필요한 컨트랙트를 호출하기 위한 수단이 ABI 인 것이다.
하지만, 말한대로 너무 많은 컨트랙트가 무질서하게 올라가다보면 나에게 필요한 함수가 거기에 존재하기는 하는지 모를 수도 있을 것이다. 이것을 방지하기 위해서

몇가지의 함수 interface 규격을 정해서 이에 만족하는 함수들을 모아 놓은 것이 ERC 20 이다.

그래서 우리는 ERC 20 코인을 접했을 때 totalSupply, balaceOf, allowance, transfer, approve, transferFrom 과 같은 함수들이 존재한다는 것을 알고 ABI 를 통해 이들을 호출해 사용할 수 있는 것이다.

컨트랙트는 블록체인의 특정 주소에 바이트코드로 저장되어 있다. ABI 는 이 컨트랙트와 low level 에서 통신 할 수 있게 하는 통신 규약( 흡사 API ) 과도 같은 역할을 한다.

profile
개발 기록

1개의 댓글

comment-user-thumbnail
2023년 8월 4일

감사합니다

답글 달기