ethereumweb3jsether

TypeError: Cannot read property 'eth' of undefined


So I have this problem with this code and cant seem to figure out why i am getting this error when I run the script with the terminal:

(node:30800) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'eth' of undefined

const Web3 = require('web3');

class TransactionChecker{
    web3;
    account;

    constuctor(projectId, account){
        this.web3 = new Web3(new Web3.providers.HttpProvider('wss://mainnet.infura.io/ws/v3/' + projectId));
        this.account = account.toLowerCase();
    }

    async checkBlock(){
      let block = await this.web3.eth.getBlock('latest');
      let number = block.number;
      console.log('Searching block ' + number);

      if (block != null && block.transactions != null){
        for (let txHash of block.transactions){
          let tx = await this.web3.eth.getTransaction(txHash);
          if (this.account == tx.to.toLowerCase()) {
            console.log('Transaction found on block: ' + number);
            console.log({address: tx.from, value: this.web3.utils.fromWei(tx.value, 'ether'), timestamp})
          }
        }
      }
    }
}

let txChecker = new TransactionChecker('6bad75506d6649428e0e34ba41d51805', '0x9cad169749bBF8a3Fd735B26C21F2C7F4D8c5383');
txChecker.checkBlock();

Can anyone with a better understanding of this assist?


Solution

  • You have an misspellings in constuctor, thus this.web3... line never run. Correct one is constructor.

    In your code there is another problem, when you use websocket, you dont need to use HttpProvider just pass websocket url to web3:

    this.web3 = new Web3('wss://mainnet.infura.io/ws/v3/' + projectId);