지금까지는 remix에서 solidity 코드를 작성하고 이더리움 체인에 스마트 컨트랙트를 배포했다.
하지만 remix가 없다면 어떻게 해야할까?
frontend와 스마트 컨트랙트를 연결하려면 어떻게 해야할까?
이때 사용하는 것이 바로 web3.js이다.
- web3.js는 HTTP, ICP, WebSocket 방식을 이용해서 원격 혹은 로컬에 있는 이더리움 노드와 상호작용할 수 있게 도와주는 라이브러리
- web3.js를 통해 데이터를 불러오거나 변화시킬 수 있음
- 개발자 - ethereum, frontend - ethereum을 이어주는 심부름꾼
조금 더 쉽게 설명하면 다음과 같은 상황을 예시로 들 수 있다.
frontend를 개발할 때, 유저가 특정 버튼을 누르면 컨트랙트의 함수가 실행되도록 연결을 해야한다. 어떻게 연결할 수 있을까?
이더리움의 정보가 필요하다. remix나 etherscan을 사용하지 않고, 직접 이더리움 체인에 접근할 수 있는 방법은 뭘까?
정답은 web3.js 사용!
이더리움 전체 정보에 접근하기 위해서 풀노드가 되거나, 풀노드에게 도움 요청하여야 한다. 후자일 경우, web3.js를 사용하기 위해서는 api key가 필요하다. node에게 접근할 수 있게 도와주는 key를 제공하는 곳으로는 Infura, Alchemy, Quicknode 등이 있다.
- web3.js를 통해서 노드에 접근하여 컨트랙트의 함수를 사용할 수 있음
- 노드와 소통하기 위해서 노드에게 접근하는 방법이 필요함
- Infura, Alchemy, Quicknode 등에서 그 기능을 제공함
cmd(powershell)에서 실습할 파일로 경로 이동
- 기본 npm 설치
:npm init
(계속 엔터)
:npm install web3
- node 환경으로 이동
:node
- web3사용 설정
:var {Web3} = require('web3')
:var web3 = new Web3(사용할 provider(api키))
ex )var web3 = new Web3(https://cloudflare-eth.com)
- 함수 사용 ( 2가지 방법 )
:web3.eth.getBlockNumber().then(console.log)
; 마지막 블록 번호받기
:await web3.eth.getBlockNumber()
다양한 함수
// 다양한 기능 확인해보기 web3 //특정 블록(ex 100000번째)의 정보를 가지고오기 web3.eth.getBlock(100000).then(console.log) //잔고조회 web3.eth.getBalance('지갑주소').then(console.log) //거래조회 web3.eth.getTransaction('거래 해시값').then(console.log) //계좌만들기 web3.eth.accounts.create() //개인키로 지갑주소 받아오기 web3.eth.accounts.privateKeyToAccount('0x1111111111111111111111111111111111111111111111111111111111111111') //10000번째 블록에 담긴 거래 수 web3.eth.getBlockTransactionCount(10000).then(console.log) //BLOCK NUMBER의 INDEX번째 거래 불러오기 web3.eth.getTransactionFromBlock('BLOCK NUMBER', 'INDEX').then(console.log)