Ethers.js
개인적으로 ethers.js에 대하여 정리하는 목적으로 작성한 포스트입니다.
혹시 흥미가 있으실 경우 공식문서 혹은 참조 목록에 있는 아티클을 읽어보시면 좋을거 같습니다. :)
ethers.js는 ethereum 블록체인과 상호작용 할 수 있도록 해주는 라이브러리 입니다. web3.js와 비슷하지만 동일한 기능을 수행하지만 아래와 같은 장점을 가지고 있습니다
- Tiny (~88kb compressed; 284kb uncompressed)
- Complete functionality for all your Ethereum needs
- Extensive documentation
- Fully TypeScript ready, with definition files and full TypeScript source
- MIT License (including ALL dependencies); completely open source to do with as you please
etherjs는
yarn
혹은 npm
을 통해 설치하여 사용 할 수 있습니다.ethers 라이브러리를 구성하는 주요 모듈들은 다음과 같습니다:
- provider
- contract
- wallet
- utils
ethers.provider
ethers.provider를 통해 ethereum 블록체인에 대한 연결을 추상화 할 수 있으며, 블록체인 상태를 변경하는 서명된 트랜잭션을 전송하는데 사용 할 수 있습니다. 다음은 3가지 예시 입니다.
- ethers.provider.infuraProvider 를 통해 infura 호스팅 서비스 ethereum 네트워크 노드에 연결 할 수 있습니다.
- ethers.provider.getBalance를 활용하면 account가 현재 소유하고 있는 ETH 밸런스를 불러올 수 있습니다.
- ethers.provider.getNetwork를 통해 현재 연결되어 있는 네트워크에 대한 정보를 불러올 수 있습니다.
ethers.contract
ethers.contract 활용 통해 smart contract를 배포 및 상호작용 작업을 진행 할 수 있습니다.
특히, smart contract에서 발생하는 이벤트들을 수신하고, smart contract에서 제공하는 함수들을 호출 할 수 있으며 smart contract 대한 정보를 얻을 수 있습니다.
- contract 주소, contract abi 정보 (json 형식), signer 정보 제공을 통해 contract 객체를 생성 할 수 있습니다. (ABI 란 Application Binary Interface의 약자로 contract와 상호작용하는 방법을 지정하는 모음)
ethers.utils
데이터 포맷팅, 입력값 처리를 위한 유틸 함수를 제공하며, 이를 통해 탈중앙화 앱을 더 쉽게 만들수 있게 도와줍니다.
- ethers.utils.getAddress를 통해 checkSum Address를 리턴 받을 수 있습니다. - checkSum Address는 주어진 address에 특정 패턴의 대문자와 소문자를 사용하는 형식의 address 입니다. (address를 리턴하는 모든 함수의 address는 모두 checkSum address)
- ethers.utils.isAddress는 입력한 address가 유효한 형식인지 확인 해줍니다.
- ethers.utils.formatEther는 wei를 10진수 문자열인 ether로 변환해줍니다. (ethers.utils.formatUnit(value,”ether”) 와 동일)
ethers.signer
ethers 에서 signer(서명자)는 메시지, 트랜잭션, 서명된 트랜잭션을 ethereum 네트워크에 전달을 통해 상태에 변경을 줄 수 있습니다. 여기서 상태 변경이란 이더리움에 정보를 추가하는 행위 입니다.
가장 일반적인 signer는 다음과 같습니다
- Wallet: private key를 알고있으며, 이를 통해 작업을 실행하는 class
- JsonRpcSigner: JsonRpcProvider에 연결되어 있는 signer
ethers.wallet (signer 클래스를 상속 받음)
ethers.wallet을 통해 wallet 연동, 새로운 wallet 생성 그리고 transaction 서명 작업을 진행 할 수 있습니다.
- ethers.wallet.createRandom을 통해 무작위 새로운 wallet을 생성 할 수 있습니다.
- ethers.wallet.getBalance를 통해 현재 wallet 소유 eth 잔고를 불러올 수 있습니다.
- ethers.wallet.signTransaction을 통해 transaction에 서명을 진행 하게 되며 서명된 transaction을 16진법 문자열로 리턴받습니다.