체인의정석

타입스크립트 백엔드와 스마트컨트렉트 연동하기 1) ABI 가져오기 (타입스크립트로 모듈 만들기) 본문

블록체인/Ethers & web3

타입스크립트 백엔드와 스마트컨트렉트 연동하기 1) ABI 가져오기 (타입스크립트로 모듈 만들기)

체인의정석 2022. 2. 22. 18:00
728x90
반응형

작성한 스마트컨트렉트의 배포 이후

지난번 메타마스크에 이어서 이번에는 관리자가 사용할 백엔드 환경에서의 API를 만들어야 하는 상황이 왔다.

 

지난번에는 자바스크립트로 모듈을 만들었었는데 이번에는 타입스크립트로 ABI를 저장한 후 불러와서 사용해야 되는 상황이 되었다.

https://radlohead.gitbook.io/typescript-deep-dive/project/modules/external-modules

 

파일을 이용한 모듈화 - TypeScript Deep Dive

그러나 특정조건에서 foo파일만 불러오기를 원할 수 있습니다. 그런 경우에는 type annotation 및 not로 import를 변수이름으로 사용해야 합니다. 이렇게하면 타입스크립트에서 주입되는 런타임 종속성

radlohead.gitbook.io

위의 사이트에 가면 타입스크립트로 모듈을 만들 수 있는 여러가지 방법들이 나오게 되는데 ABI의 경우 양이 방대하며, 구분을 하는것이 수정에 용이할 것이라고 판단되어 그 중 변수를 하나씩 정하여 가져오는 방법을 사용하기로 하였다.

 

import {  WERC721ABI, ExampleERC721ABI } from "../abi_constant"

일단 모듈을 만들고 가져오는 부분은 위와 같이 하면 된다.

 

그럼 모듈을 만들어보겠다.

 

파일 이름은 abi_constants.ts 로 타입스크립트 형태로 만든다.

export let ExampleERC721ABI = [
    {
      "constant": true,
      "inputs": [
        {
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
        
        ...
        
   ]

컨트렉트를 컴파일하면 artifacts > contracts 디렉토리에 배포 정보가 나오는데 거기서 ABI에 해당하는 부분을 복사해서 위와 같이 붙여넣기를 하면된다. 이미 배포된 컨트렉트와 상호작용을 하기위해 이후 필요한건 이미 배포된 컨트렉트 주소이다.

 

이후 과정은 다음 포스팅에 정리하겠다.

 

728x90
반응형
Comments