💡 Web3.js
✓ Web3.js 설치 및 공급자 연결하기
먼저 web3js_practice 라는 폴더를 생성하고, 해당 디렉토리에서 npm을 초기화하자.
npm init
Web.js를 사용하기 위해서는 npm에서 web3.js 라이브러리를 설치해야 한다.
npm install web3
간단하게 현재 내 지갑 주소에 있는 이더 잔액을 조회하는 코드를 작성해보자. web3js_pracitce 폴더 아래 getBalance.js파일을 생성한다. 그리고 web3 객체를 사용하기 위해 다음과 같이 파일을 작성해본다.
const Web3 = require("web3");
const rpcURL = "https://ropsten.infura.io/v3/{Project_ID}";
const web3 = new Web3(rpcURL);
Web3를 사용해 이더리움 노드와 연결하기 위해서는 new Web3()로 이더리움 노드의 공급자를 인자로 주어야 한다. rpcURL변수는 Infura에서 받은 ropsten 네트워크 엔드포인트로 초기화한다. 그리고 Web3 라이브러리에 공급자를 인자로 넣어 web3 객체를 만든다. 이렇게 하여 web3 객체를 사용할 수 있게 된다.
web3.eth.getBalance()는 특정 주소의 잔액을 조회한다. getBalance()의 인자로는 트랜잭션의 주소가 들어가며, Promise 객체를 반환한다. Promise 객체는 주소의 잔액을 반환한다. getBalance()를 사용하기 위해 다음과 같이 작성한다.
const Web3 = require("web3");
const rpcURL = "{Infura Ropsten 네트워크 엔드포인트}";
const web3 = new Web3(rpcURL);
const account = "자신의 지갑주소";
web3.eth.getBalance(account).then((bal) => {
console.log(`지갑 ${account}의 잔액은 ... ${bal} 입니다.`);
});
위의 코드는 getBalance()에 자신의 지갑 주소를 넣고, 리턴값으로 받을 Promise 값을 .then()으로 받는다. 그리고 반환된 잔액을 출력한다. 그리고 터미널에 파일을 실행시키면 아래와 같은 화면을 확인할 수 있다.
지갑 주소의 잔액이 다르게 나온다고 생각할 수 있는데, 이는 화폐의 단위가 이더가 아닌 wei이기 때문이다.
web3.utils.fromWei()는 wei 단위를 다른 화폐 단위로 변환해준다. 첫번째 인자로는 변환할 값이 들어가며, 두번째 인자로는 변환할 단위가 들어간다. 위의 코드 결과가 이더 단위로 나오도록 아래와 같이 수정할 수 있다.
const Web3 = require("web3");
const rpcURL = "{Infura Ropsten 네트워크 엔드포인트}";
const web3 = new Web3(rpcURL);
const account = "자신의 지갑주소";
web3.eth
.getBalance(account)
.then((bal) => {
console.log(`지갑 ${account}의 잔액은 ... ${bal} 입니다.`);
return web3.utils.fromWei(bal, "ether");
})
.then((eth) => {
console.log(`이더 단위로는 ${eth} ETH 입니다.`);
});
메타마스크에 표기되는 잔액 값과 일치하는 것을 확인할 수 있다.
✓ 트랜잭션 조회하기 - getTransaction, getTransactionReceiept
web3.eth.getTransaction은 트랜잭션 해시를 인자로 받고, 해당 트랜잭션에 대한 정보를 Promise 형태로 리턴한다. getTransaction.js 파일을 생성하고 다음의 코드를 작성해보자.
const Web3 = require("web3");
const rpcURL = "{Infura Ropsten 네트워크 엔드포인트}";
const web3 = new Web3(rpcURL);
const txId ="{자신이 만든 트랜잭션 해시값}";
web3.eth.getTransaction(txId).then((obj) => {
console.log(obj);
});
txId 변수에는 조회하고자 하는 트랜잭션의 해시값을 넣어준다. 터미널에 실행해보면 트랜잭션에 대한 정보가 객체 형태로 출력되는 것을 확인할 수 있다.
이더스캔에서 동일한 트랜잭션을 검색했을 때, 동일한 결과값이 출력되는 것을 확인할 수 있다.
* web3.eth.getTransaction()과 web3.eth.getTransactionRecipt()의 차이는?
- receipt 정보는 트랜잭션이 블록체인 상에 deploy된 후에 생성된다.
* web3.eth.getPendingTransactions(), web3.eth.getTransactionFromBlock 등은 어떤 값을 반환하는가?
- getPendingTransactions: pending 상태의 트랜잭션들을 모두 가져온다.
- getTransactionFromBlock: 특정 블록의 트랜잭션을 가져오는데 이중 index 값에 맞는 것을 가져온다.
✓ 블록 조회하기 - getBlock
web3.eth.getBlock()은 블록숫자를 인자로 받고, 블록에 대한 정보를 Promise 형태로 반환한다. getBlock.js 파일을 생성하고, 다음과 같이 코드를 작성한다.
const Web3 = require("web3");
const rpcURL = "{Infura Ropsten 네트워크엔드포인트}";
const web3 = new Web3(rpcURL);
const blockNum = "12672529";
web3.eth.getBlock(blockNum).then((obj) => {
console.log(obj);
});
blockNum 변수에는 자신이 검색하고 싶은 블록의 숫자를 입력한다. 실행 결과, 블록에 대한 정보가 객체 형태로 출력되는 것을 확인할 수 있다.
'블록체인 > WEB3 개발' 카테고리의 다른 글
노드 RPC Call을 Infura를 통해 제어해보기 (0) | 2022.08.03 |
---|---|
서버에서 Web3.js 라이브러리 사용하기 (0) | 2022.08.02 |
Infura - 블록 동기화 없이 원격 이더리움 노드에 접근하기 (0) | 2022.07.29 |
Infura - 블록 동기화 없이 원격 이더리움 노드에 접근하기 (0) | 2022.07.29 |
Web3.js란? (0) | 2022.07.29 |
댓글