@alexeidilos

Ошибка web3.eth.filter в web3.js в Next-JS. Как отслеживать входящие транзакции на кошелек ethereum через web3.js?

Я хочу создать веб-сайт, который будет переводить деньги в режиме реального времени с моего кошелька ethereum на другой кошелек ethereum. Для этого нужен скрипт (.js) для контроля баланса моего кошелька в режиме реального времени, и когда на мой кошелек придет транзакция, скрипт будет автоматически переводить деньги с моего кошелька на нужный мне адрес.

Но я не знаю, как реализовать отслеживание баланса кошелька в режиме реального времени. Я использую web3.js.

Мне посоветовали использовать web3.eth.filter('latest'), но он почему-то не работает и выдает ошибку (TypeError: web3.eth.filter не является функцией). Я использую Next-JS и запускаю его в браузере командой «npm run dev». И также выдает ошибку (TypeError: web3.fromWei не является функцией)

Директория Pages состоит только из _app.js и .env

Написание «npm list web3» в командной строке дает:
+-- @alch/alchemy-web3@1.3.0
| +-- @types/web3@1.2.2
| | `-- web3@1.7.3 deduped
| `--web3@1.7.1
`--web3@1.7.3

_app.js:
import '../styles/globals.css';
import './.env';

function MyApp({ Component, pageProps }) {


  const Web3 = require("web3");

  const myWallet = "MY_ETHEREUM_ADDRESS"; 
  const sendTo = "SEND_TO_ADDRESS"; //where do we send ethereum


  const web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/MY_KEY_IN_INFURA")) //my key in infura
  let balance = web3.eth.getBalance(myWallet);

  function scanBalance(walletAddress) {


    //const web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/MY_PROJECT_ID")

    web3.eth.getBalance(walletAddress, function (err, bal) {
      if (err) {
        console.log(err)
      } else {
        balance = bal;
        console.log(`Balance [${myWallet}]: ${web3.fromWei(balance, "ether")}`);
      }
    })
  }
  
  scanBalance(myWallet);

 
//TypeError: web3.eth.filter is not a function
  const filter = web3.eth.filter('latest');
  
  filter.watch((err, res) => {
    scanBalance(myWallet)
  });


  async function transfer() {
    require('dotenv').config();
    const { API_URL, PRIVATE_KEY } = process.env;
    const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
    const alchemyWeb3 = createAlchemyWeb3(API_URL);

    const nonce = await alchemyWeb3.eth.getTransactionCount(myWallet, 'latest'); // nonce starts counting from 0

    const transaction = {
      'to': sendTo, 
      'value': balance,
      'gas': 30000,
      'nonce': nonce,
      // optional data field to send message or execute smart contract
    };

    const signedTx = await alchemyWeb3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);

    alchemyWeb3.eth.sendSignedTransaction(signedTx.rawTransaction, function (error, hash) {
      if (!error) {
        console.log(" The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!");
      } else {
        console.log("❗Something went wrong while submitting your transaction:", error)
      }
    });
  }
  

  function checkBalanceVal() {
    if (balance > 0) {
      console.log("balance > 0");
      transfer();
    } else {
      console.log("balance < 0");
    }
  }

  return <Component {...pageProps} />
}

export default MyApp
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы