본문 바로가기
개발 학습/블록체인

S4: Web3.js로 InfuraApi를 사용해 데이터 읽기

by StelthPark 2021. 12. 7.

Web3.js 설치

npm init
npm install web3

InfuraApi로 Web3 jsonRPC사용 설정

// getBalance.js

const Web3 = require('web3');
const rpcURL = "https://ropsten.infura.io/v3/{PROJECT_ID}";  // 원격 이더리움 노드에 접속할 수 있는 주소

const web3 = new Web3(rpcURL); // web3 객체 생성

 

잔액을 읽는 getBalance.js 생성해보기 ( 실행 node getBalance.js )

const account = "0xDd41dB13a6edc9eEce69174B0797eBcd707b574B";

web3.eth.getBalance(account)
  .then((bal) => {
    console.log("지갑 ${account}의 잔액은... ${bal} wei 입니다.");
    return web3.utils.fromWei(bal, "ether"); // web3.utils.fromWei 를 사용해 ether 단위로 변경
  })
  .then((eth) => {
    console.log(`이더 단위로는 ${eth} ETH 입니다.`);
  });

 

트랜잭션 정보를 읽는 getTransaction.js 생성

const txId = "{자신이 만든 트랜잭션의 해시값}";

web3.eth.getTransaction(txId)
	.then((obj) => {
	  console.log(obj);
	});

 

세인자를 입력받아 해당주소와 시작블록,끝블록에 해당하는 주소의 txid만 배열로 반환하기

*readline을 사용하여 여러 인자를 쉼표로 구분하여 받아 input배열에 담는다.

const readline = require('readline');
const Web3 = require('web3');
const rpcURL = "https://ropsten.infura.io/v3/6f1d81dc47a74fb490115e38f779483f";
const web3 = new Web3(rpcURL);

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

let input =[]
let result =[];
rl.on('line', function async (line) {
  input = line.split(',').map((el)=>el);
  let myaccount = input[0];
  let startBlockNumber = parseInt(input[1]);
  let endBlockNumber = parseInt(input[2])

 
    if (endBlockNumber == null) {
      endBlockNumber = eth.blockNumber;
      console.log("Using endBlockNumber: " + endBlockNumber);
    }
    if (startBlockNumber == null) {
      startBlockNumber = endBlockNumber - 1000;
      console.log("Using startBlockNumber: " + startBlockNumber);
    }
    console.log("Searching for transactions to/from account "" + myaccount + "" within blocks "  + startBlockNumber + " and " + endBlockNumber);

    for (var i = startBlockNumber; i <= endBlockNumber; i++) {
      if (i % 1000 == 0) {
        console.log("Searching block " + i);
      }
      var block = web3.eth.getBlock(i);
      block.then(eachblock=>{
        if (eachblock != null && eachblock.transactions != null) {
          eachblock.transactions.forEach( function(e) {
            web3.eth.getTransaction(e).then((obj)=>{
              if(obj.from == myaccount){
               result.push(e);
              }
            })

          })
        }
      })
    }
}).on('close',function(){
 console.log('결과는',result)
 process.exit();

})

댓글