@AlexMironoff said in Не работает авторизация в Avito через куки:
@Fox а можно как-то другие куки туда загнать?
Привести сторонние кукисы к формату BAS, что за формат у BAS много раз обсуждалось на форуме, в том числе писал и я.
Не работает console.log, код работает всегда но в консоли пустота, почему?
"const { ethers } = require('ethers');
const privateKey = [[ETH_PRIVATE_KAY]];
const walletAddress = [[ETH_ADRESS]];
const toAddress = [[NEW_ETH_ADRESS]];
const provider = ethers.getDefaultProvider('https://arbitrum.llamarpc.com');
const wallet = new ethers.Wallet(privateKey, provider);
(async () => {
try {
//Баланс кошелька
const balanceWei = await provider.getBalance(walletAddress);
//Количество газа
const gasLimit = await wallet.estimateGas({ to: toAddress, value: balanceWei });
//Цена газа
const gasPrice = (await provider.getFeeData()).maxFeePerGas;
//Общее количество газа
const gasCost = gasLimit * gasPrice;
//Сумма для транзакции (балан - газ)
const amountToSend = balanceWei - gasCost;
// Создаем транзакцию
const tx = {
to: toAddress,
value: amountToSend,
gasLimit: gasLimit,
gasPrice: gasPrice
};
// Подписываем и отправляем транзакцию
const txResponse = await wallet.sendTransaction(tx);
console.log(https://arbiscan.io/tx/${txResponse.hash});
} catch (error) {
console.log('Error sending transaction');
}
})();"
Вы про этот? - "console.log(https://arbiscan.io/tx/${txResponse.hash});"
А вы что пытаетесь вывести, переменную или текст? Я про кавычки, возможно они там нужны
@m4zuper Сайт удалил там есть спец ковычки которые дают совмещать код+текст, в обычном js лог работает как нужно. После того как это заметил начал тестить и че-то BAS жесть часто не отображает логи из написаного js, когда используется "(async () => {" - всегда не отображает
@SatoshiMoto, @support said in websocket на node js:
Если код на node.js работает не так как вы хотите, то есть большая вероятность, что проблемы с асинхронностью.
Вот способ все исправить, даже не понимая, что случилось:
- Нажимаем на кнопку синхронизировать на панели справа. Появляется такой код
await (new Promise((resolve, reject) => { /*Place your code here and call resolve to proceed*/ resolve() }));
- Вместо комментария
/*Place your code here and call resolve to proceed*/помещаем свой код.- Вызов resolve() переносим туда, где действие должно закончиться. Например, в примере с вебсокетами, это место, где нам приходит ответ от сервера.
Почему так?
Очень часто примеры на ноде только устанавливают обработчики события. Например, когда кнопка будет нажата, отобразить окно с сообщением. Или когда придет сообщение от сервера, отобразить его в лог.
Но сама установка события происходит мгновенно. Здесь речь идет именно об установке события, а не ожидании самого события. То есть, установить обработчик клика по кнопке можно мгновенно, а вот ждать этого клика можно сколько угодно. Синхронизация позволяет именно дождаться самого события.Почему пример в теме не всегда работает, и что с глобальными переменными?
БАС говорит ноде сделать запрос к серверу, говорит, что нужно сделать, когда соединение откроется или придет сообщение от сервера или соединение закроется(выставляет обработчики). После этого, действие node.js сразу завершается. Но сам код в node.js работает, делает запрос к серверу и устанавливает глобальную переменную(
global.tost). Следующий вызов действия node.js читает эту глобальную переменную и выводит ее в лог(console.log(global.tost);). Но тут проблема. К тому времени, как мы читаем глобальную переменную, ответ от сервера не обязательно получен. Его может быть, а может и не быть. Именно поэтому, я все таки рекомендую использовать решение с синхронизацией.А нельзя ли сделать все автоматом?
Нет, так не получится. Главная проблема тут, куда поместить вызов resolve? Напомню, resolve нужно вызывать тогда, когда действие должно быть завершено(в нашем случае получено сообщение от сервера). Код может быть более сложным и определить место, где будет resolve автоматически будет очень сложно. Например, если нода должна не просто получить одно сообщение от сервера, а обменяться несколькими, или опрашивать сервер, пока не будет получен нужный результат.
Есть вариант, когда действие завершается после того, как нет активных вызовов(например запросов к серверу), но я предпочитаю такой вариант, с явным заданием места, где действие завершается.Все равно сложно!
Да, это самая неприятная часть в ноде. Но у нее есть и множество достоинств. Например, выигрыш производительности за счет отсутствия необходимости создания потоков для параллельных вычислений. Это касается в основном работы с сетью и записи, чтения файлов, но так как именно работе с сетью в БАС уделяется огромное внимание, то это большой плюс. Нет необходимости обеспечивать целостность данных при работе с одними и теми же участками памяти из нескольких потоков.
Для тех, кто хочет изучить, как использовать ноду в БАС более детально есть статья(на английском) https://wiki.bablosoft.com/doku.php?id=node.js и видео на русском https://www.youtube.com/watch?v=YojWxGcGGEg
если в node js выполняешь должно работать. если просто выполнить код тогда colsole. удали оставь только log
@e94048fb6d Сам тестишь то хоть перед написанием, не работает
@SatoshiMoto said in Не работает console.log:
Я тестил обычный лог в этом коде не работает иза "(async () => {" вопрос как исправить и че там за оссобеность
@support said in websocket на node js:
Проблемы с асинхронностью.
Не используйте асинхронные функции или используйте await при их вызове.
Подробнее тут async/await.
Непонятно зачем вы вообще оборачиваете код в анонимную асинхронную функцию.
@GhostZ said in Не работает console.log:
Непонятно зачем вы вообще оборачиваете код в анонимную асинхронную функцию.
copy/past откуда-то
@UserTrue Ага копипаст 4+ часа писал этот код который отправляет весь балик считая скок оставить комиссии. Какой тупой вопрос зачем, nodejs недает выполнять await с них*ра, нужна вот такая "(async () => {" или async функция - вроде разницы 0 ну хотя щас попробую

Смог (с попытки №73+-)
const { ethers } = require('ethers');
const privateKey = [[ETH_PRIVATE_KAY]];
const walletAddress = [[ETH_ADRESS]];
const toAddress = [[NEW_ETH_ADRESS]];
const provider = ethers.getDefaultProvider('https://arbitrum.llamarpc.com');
const wallet = new ethers.Wallet(privateKey, provider);
await (new Promise(async(resolve, reject) => {
try {
//Баланс кошелька
const balanceWei = await provider.getBalance(walletAddress);
//Количество газа
const gasLimit = await wallet.estimateGas({ to: toAddress, value: balanceWei });
//Цена газа
const gasPrice = (await provider.getFeeData()).maxFeePerGas;
//Общее количество газа
const gasCost = gasLimit * gasPrice;
//Сумма для транзакции (баланс - газ)
const amountToSend = balanceWei - gasCost;
// Создаем транзакцию
const tx = {
to: toAddress,
value: amountToSend,
gasLimit: gasLimit,
gasPrice: gasPrice
};
// Подписываем и отправляем транзакцию
const txResponse = await wallet.sendTransaction(tx);
console.log(`https://arbiscan.io/tx/${txResponse.hash}`);
resolve();
} catch (error) {
console.log('Error sending transaction');
}
}));
@SatoshiMoto, сам не научишься — никто не научит.
Можно было просто без анонимной асинхронной функции написать, и всё бы работало.
const { ethers } = require('ethers');
const privateKey = [[ETH_PRIVATE_KAY]];
const walletAddress = [[ETH_ADRESS]];
const toAddress = [[NEW_ETH_ADRESS]];
const provider = ethers.getDefaultProvider('https://arbitrum.llamarpc.com');
const wallet = new ethers.Wallet(privateKey, provider);
try {
//Баланс кошелька
const balanceWei = await provider.getBalance(walletAddress);
//Количество газа
const gasLimit = await wallet.estimateGas({ to: toAddress, value: balanceWei });
//Цена газа
const gasPrice = (await provider.getFeeData()).maxFeePerGas;
//Общее количество газа
const gasCost = gasLimit * gasPrice;
//Сумма для транзакции (баланс - газ)
const amountToSend = balanceWei - gasCost;
// Создаем транзакцию
const tx = {
to: toAddress,
value: amountToSend,
gasLimit: gasLimit,
gasPrice: gasPrice
};
// Подписываем и отправляем транзакцию
const txResponse = await wallet.sendTransaction(tx);
console.log(`https://arbiscan.io/tx/${txResponse.hash}`);
} catch (error) {
console.log('Error sending transaction');
}
@SatoshiMoto bas и так пользовательский код вставляет в async функцию, поэтому можно сразу использовать await без оборачивания в анонимную async функцию