@ynvazius said in Ping через JavaScript либо Node.js:
Если он не сможет получить IP, то переменная IP останется пустой(null)?
да
подскажите пожалуйста в чем моя ошибка, вот код:
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 обменивается