проблема node js
-
подскажите пожалуйста в чем моя ошибка, вот код:
const { Web3 } = require('web3'); await(new Promise((resolve, reject) => { // Создайте экземпляр Web3, указав URL-адрес RPC-сервера Polygon const web3 = new Web3('https://polygon.llamarpc.com'); // Замените 'txHash' на хеш вашей транзакции const txHash = '0xf9c36be52a6bd83d640f5d007740a053be18775302576503b1591ec8af1a6131'; // Замените на фактический хеш вашей транзакции try { // Получите информацию о транзакции с использованием промиса const receipt = web3.eth.getTransactionReceipt(txHash); if (receipt === null) { tx_status = "pending"; console.log('Транзакция пока не подтверждена'); } else { console.log('Транзакция подтверждена'); if (receipt.status === "1n") { tx_status = "success" } else { tx_status = "fail" } [[TX_STATUS]] = tx_status; [[RECEIPT]] = receipt; console.log([[TX_STATUS]], [[RECEIPT]]); //console.log('Статус транзакции:', [[TX_STATUS]]); // '0x1' для успешной транзакции, '0x0' для неуспешной } } catch (error) { console.error('Ошибка при получении информации о транзакции:', error); } resolve() }));но нет переменной receipt, вместо нее в лог выводится {}, или же вообще ничего, то есть по идее скрипт не успевает обработать запрос полностью, я пробовал синхронизировать различными методами, вроде как решение проблемы добавить в строку
const receipt = web3.eth.getTransactionReceipt(txHash);await, но тогда получаем ошибку
const receipt =await web3.eth.getTransactionReceipt(txHash); ^^^^^ SyntaxError: await is only valid in async functions and the top level bodies of modulesпробовал синхронизировать и многими другими способами, но безуспешно, например:
const { Web3 } = require('web3'); async function getTransactionReceipt() { return new Promise(async (resolve, reject) => { try { // Создайте экземпляр Web3, указав URL-адрес RPC-сервера Polygon const web3 = new Web3('https://polygon.llamarpc.com'); // Замените 'txHash' на хеш вашей транзакции const txHash = '0xf9c36be52a6bd83d640f5d007740a053be18775302576503b1591ec8af1a6131'; // Замените на фактический хеш вашей транзакции // Получите информацию о транзакции с использованием промиса const receipt = await web3.eth.getTransactionReceipt(txHash); console.log(receipt); resolve(); } catch (error) { console.error('Ошибка при получении информации о транзакции:', error); reject(error); } }); } getTransactionReceipt().then(() => { // Ваш промис был разрешен }).catch((error) => { // Произошла ошибка в промисе }); -
@themarket попробуйте так
const { Web3 } = require('web3'); // Создайте экземпляр Web3, указав URL-адрес RPC-сервера Polygon const web3 = new Web3('https://polygon.llamarpc.com'); // Замените 'txHash' на хеш вашей транзакции const txHash = '0xf9c36be52a6bd83d640f5d007740a053be18775302576503b1591ec8af1a6131'; // Замените на фактический хеш вашей транзакции try { // Получите информацию о транзакции с использованием промиса const receipt = await web3.eth.getTransactionReceipt(txHash); if (receipt === null) { tx_status = "pending"; console.log('Транзакция пока не подтверждена'); } else { console.log('Транзакция подтверждена'); if (receipt.status === "1n") { tx_status = "success" } else { tx_status = "fail" } [[TX_STATUS]] = tx_status; [[RECEIPT]] = receipt; console.log([[TX_STATUS]], [[RECEIPT]]); //console.log('Статус транзакции:', [[TX_STATUS]]); // '0x1' для успешной транзакции, '0x0' для неуспешной } } catch (error) { console.error('Ошибка при получении информации о транзакции:', error); } -
@UserTrue Поток №1 : Транзакция подтверждена
Поток №1 : Node process stopped. - ваш код выводит в логчуть изменил его и добавил после
const receipt = await web3.eth.getTransactionReceipt(txHash); console.log(receipt)теперь в логе
Поток №1 : undefined
Поток №1 : Node process stopped. -
@themarket said in проблема node js:
@UserTrue Поток №1 : Транзакция подтверждена
Поток №1 : Node process stopped. - ваш код выводит в логЗначит в целом с кодом все нормально, проблема не с асинхронностью. И я не тестировад код, исправил только визуально ваши проблемы с асинхронным кодом
-
@themarket said in проблема node js:
чуть изменил его и добавил после
const receipt = await web3.eth.getTransactionReceipt(txHash);
console.log(receipt)теперь в логе
Поток №1 : undefined
Поток №1 : Node process stopped.Скорей всего там какой-то сложный объект и он не может его сериализовать, чтобы вывести в лог БАСа. Поэтому не пытайтесь это сделать или передать его в переменную БАС, берите из него только нужные данные.
const { Web3 } = require('web3'); // Создайте экземпляр Web3, указав URL-адрес RPC-сервера Polygon const web3 = new Web3('https://polygon.llamarpc.com'); // Замените 'txHash' на хеш вашей транзакции const txHash = '0xf9c36be52a6bd83d640f5d007740a053be18775302576503b1591ec8af1a6131'; // Замените на фактический хеш вашей транзакции let tx_status try { // Получите информацию о транзакции с использованием промиса const receipt = await web3.eth.getTransactionReceipt(txHash); if (receipt === null) { tx_status = "pending"; console.log('Транзакция пока не подтверждена'); } else { console.log('Транзакция подтверждена'); if (receipt.status === "1n") { tx_status = "success" } else { tx_status = "fail" } [[TX_STATUS]] = tx_status; //console.log('Статус транзакции:', [[TX_STATUS]]); // '0x1' для успешной транзакции, '0x0' для неуспешной } } catch (error) { console.error('Ошибка при получении информации о транзакции:', error); } -
@UserTrue в receipt в формате json, мне оттуда нужен result, он в формате bigInt
если я сделаю
console.log('Статус:', receipt.status);то получу в лог Поток №1 : Статус:
бигинт как-то по-особенному надо выводить?сам json:
{ blockHash: '0x060f5717dff435edd16df0c9be20a01b3eb7e7d8e35cdd5b0b658031c5d69496', blockNumber: 48002943n, cumulativeGasUsed: 7263908n, effectiveGasPrice: 91377342858n, from: '0x354ef3cc21485c0ff2032291884e40c3415e550a', gasUsed: 118759n, logs: [ { address: '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789', topics: [Array], data: '0x', blockNumber: 48002943n, transactionHash: '0xf9c36be52a6bd83d640f5d007740a053be18775302576503b1591ec8af1a6131', transactionIndex: 37n, blockHash: '0x060f5717dff435edd16df0c9be20a01b3eb7e7d8e35cdd5b0b658031c5d69496', logIndex: 210n, removed: false }, { address: '0x000031dd6d9d3a133e663660b959162870d755d4', topics: [Array], data: '0x', blockNumber: 48002943n, transactionHash: '0xf9c36be52a6bd83d640f5d007740a053be18775302576503b1591ec8af1a6131', transactionIndex: 37n, blockHash: '0x060f5717dff435edd16df0c9be20a01b3eb7e7d8e35cdd5b0b658031c5d69496', logIndex: 211n, removed: false }, { address: '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789', topics: [Array], data: '0x000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000002ff2451ac80b3800000000000000000000000000000000000000000000000000000000000240ec', blockNumber: 48002943n, transactionHash: '0xf9c36be52a6bd83d640f5d007740a053be18775302576503b1591ec8af1a6131', transactionIndex: 37n, blockHash: '0x060f5717dff435edd16df0c9be20a01b3eb7e7d8e35cdd5b0b658031c5d69496', logIndex: 212n, removed: false }, { address: '0x0000000000000000000000000000000000001010', topics: [Array], data: '0x000000000000000000000000000000000000000000000000002ff2451ac80b380000000000000000000000000000000000000000000009dee182b0977e91b8a900000000000000000000000000000000000000000000000052bf15fc8b52f4740000000000000000000000000000000000000000000009dee152be5263c9ad7100000000000000000000000000000000000000000000000052ef0841a61affac', blockNumber: 48002943n, transactionHash: '0xf9c36be52a6bd83d640f5d007740a053be18775302576503b1591ec8af1a6131', transactionIndex: 37n, blockHash: '0x060f5717dff435edd16df0c9be20a01b3eb7e7d8e35cdd5b0b658031c5d69496', logIndex: 213n, removed: false }, { topics: [Array], data: '0x000000000000000000000000000000000000000000000000000ca85208443400000000000000000000000000000000000000000000000000532c096e467fde24000000000000000000000000000000000000000000006e45018836a104044e3a000000000000000000000000000000000000000000000000531f611c3e3baa24000000000000000000000000000000000000000000006e450194def30c48823a', blockNumber: 48002943n, transactionHash: '0xf9c36be52a6bd83d640f5d007740a053be18775302576503b1591ec8af1a6131', transactionIndex: 37n, blockHash: '0x060f5717dff435edd16df0c9be20a01b3eb7e7d8e35cdd5b0b658031c5d69496', removed: false } ], logsBloom: '0x10000000000000000000000000000000000000000000004000000000000400000008000000000002000200110000000000108000000000000000020000000000000000000000000000000002000000800000000000000000000300000000000000000400080000000400040000000000000000000000004080840000000000000000000b00000000010002000000000000000000000000000001000000000000200000000400000000400020000000000000001000000000000002000000004000000000000008000001000400010008004008000000800000108000000000000000010000000000000000000000000000000000000000000000000000100000', status: 1n, to: '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789', transactionHash: '0xf9c36be52a6bd83d640f5d007740a053be18775302576503b1591ec8af1a6131', transactionIndex: 37n, type: 2n -
@themarket said in проблема node js:
он в формате bigInt
его нужно привести к строке, BigInt это не просто число или строка
-
@themarket вряд-ли это проблема бас, скорей всего nodejs не может привести этот объект к json, а бас с нодой данными в json обменивается