티스토리 뷰

728x90

Web3.js

자바스크립트를 이용한 이더리움 네트워크 API. Web3.js는 자바스크립트에서 HTTP, IPC, WebSocket 등을 사용해 이더리움 네트워크의 노드들과 상호작용하기 위한 API이다.

이더스캔 기능 구현

지갑 주소 하나와 블록 넘버(시작, 끝 블록)를 입력받아 해당 블록 범위 내에서 지갑 주소와 관련이 있는 트랜잭션을 출력하는 스크립트를 작성해보자.

const Web3 = require("web3");
const fs = require("fs");
const readline = require("readline");
const INFURA_PROJECT_ID = fs.readFileSync("./infura_project_id.txt", {
  encoding: "utf8",
  flag: "r",
});

const rpcURL = `https://ropsten.infura.io/v3/${INFURA_PROJECT_ID}`;
const txs = [];
const web3 = new Web3(rpcURL);

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

const getTransaction = async (account, startBlock, endBlock) => {
  for (var i = parseInt(startBlock); i <= parseInt(endBlock); i++) {
    // console.log("block number: ", i);
    const block = await web3.eth.getBlock(i);
    // console.log('transactions count: ', block.transactions.length)

    for (let tx of block.transactions) {
      const txResult = await web3.eth.getTransaction(tx);

      if (account === txResult.to || account === txResult.from) {
        // console.log(">>> ", tx);
        txs.push(tx);
      }
    }
  }
  console.log(txs);
};

rl.question("탐색할 주소를 입력해주세요: ", (account) => {
  rl.question("탐색할 범위(시작 블록, 끝 블록)를 입력해주세요: ", (block) => {
    const [startBlock, endBlock] = block.split(", ");
    // console.log(`${account}`);
    // console.log(`${startBlock}, ${endBlock}`);

    getTransaction(account, startBlock, endBlock);

    rl.close();
  });
});
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함