Answer the question
In order to leave comments, you need to log in
web3.eth.filter error in web3.js in Next-JS. How to track incoming transactions to ethereum wallet via 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/[email protected]
| +-- @types/[email protected]
| | `-- [email protected] deduped
| `[email protected]
`[email protected]
_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
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question