본문 바로가기
블록체인

Web3.js 사용해보기

by 진득한진드기 2022. 12. 22.

Web3.js는 이더리움 블록체인과 Json RPC를 사용하여 interaction한다.

 

Json-RPC에는 다양한 모듈이 있는데

 

Web3 - etc : 이더리움 블록체인과 스마트 컨트랙트 모듈

 

Web3-shh : P2P 커뮤니케이션과 브로드캐스트를 위한 위스퍼 프로토콜 모듈

 

Web3-bzz : 탈중앙화 파일 스토리지를 위한 스왐 프로토콜 모듈

 

Web3-utils : dApp 개발자를 위한 유용한 헬퍼 함수들을 모아둔 모듈

 

Window.ethereum - 공급자 객체

 

EIP-1139를 통해, 메타마스크와 같은 지갑 소프트웨어는 웹 페이지에 자바스크립트 객체형태로 자신의 API를 노출한다.

 


express 사용한 EtherScan 테스트넷 정보확인하기

 

Web3js 를 사용해서 해당 페이지에 Etherscan 관련 정보를 확인하기 였다.

 

아래 코드는 어떠한 블록에서 끝의 블록까지의 트랜잭션 정보 확인하는 코드를 짜보았다.

 

const Web3 = require('web3');
// infura를 사용
const rpcURL = "https://goerli.infura.io/v3/자신의 api번호"

const web3 = new Web3(rpcURL);

const account = "자신의 지갑주소";

// 블록확인 속도의 효율을 위해 비동기로 진행

async function getTransactionByAccount(account,startBlock,endBlock){
    const result = [];
  // start 블록부터 end블록까지
    while(startBlock < endBlock) {
        const promises = [];
      
      // getBlock()이라는 내장함수를 이용하면 block의 정보가 출력된다.
        const blockinfo =  await web3.eth.getBlock(startBlock++);
      // transaction 거래 내용들을 Hash한 값이 나온다
        const transactions = await blockinfo.transactions;
      
      // 그 값들을 순회하면서
        for(let el of transactions){
            let tx = web3.eth.getTransaction(el).then(txHash => {
              // 보내는 주소와 받는 주소가 나의 지갑주소와 같다면 해당 거래 해시값 출력
                if(txHash.from === account || txHash.to === account){
                    return (txHash);
                }
            }).catch(err => {
                return;
            })
            // promises 배열의 거래 해시값들을 담는다.
            promises.push(tx);
        }
      
      // 비동기처리
        Promise.allSettled(promises).then(subResult => {
          //promises로 담아온 값들을 순회
            subResult.forEach(el => {
              // Deploy한 값이 있다면
                if(el.value !== undefined) {
                  // 확인할 배열에 담는다.
                    result.push(el);
                }
            });
          // 배열에 담겼는지 확인
            console.log(result);
        });
    }
}

getTransactionByAccount(account,"시작 블록번호","~까지확인할 블록번호");

 

나의 생각

 

공식문서를 확인하면서 원하는 내용을 도출할라고 많은 시간을 소비했다.

 

저 코드도 return 값을 array형으로해서 따로 사용하고 싶은데 async를 사용하여 pending 상태로 확인되는 것 같다ㅠㅠ

 

EtherScan의 사항들을 api로 확인하면서 보는 것이 신기했다.

 

 

 

공식문서 링크

https://web3js.readthedocs.io/

 

web3.js - Ethereum JavaScript API — web3.js 1.0.0 documentation

© Copyright 2016, Ethereum Revision 65d27a54.

web3js.readthedocs.io

 

 

 

'블록체인' 카테고리의 다른 글

Project_MarketPlace 진행하면서  (0) 2022.12.30
토큰 이코노미란  (0) 2022.12.24
Etherscan시 나오는 사항들  (0) 2022.12.15
암호기술  (0) 2022.11.25
블록체인(block chain) 기초  (0) 2022.11.01