• Почему функция mnemonicToWalletKey из библиотеки тон генерирует неверный адрес кошелька?

    Код в целом выглядит правильно для создания кошелька и получения его адреса в TON. Но есть несколько моментов, которые можно проверить:

    1) Мнемоническая фраза: Проверьте, что мнемоническая фраза правильно разделена и передана в функцию mnemonicToWalletKey. Убедитесь, что мнемоническая фраза состоит из правильного количества слов и корректно обработана (например, не содержит лишних пробелов или символов).

    2) Версия контракта кошелька: В вашем коде используется WalletContractV3R1. Убедитесь, что это соответствует версии кошелька, которую вы ожидаете использовать. Если вы хотите использовать WalletContractV4, вам нужно изменить эту часть кода.

    3) Проверка на деплоирование контракта: Ваш код проверяет, деплоирован ли контракт на блокчейне. Это хорошая практика, но стоит убедиться, что API клиента TON корректно обрабатывает этот запрос.

    4) Логирование и отладка: Добавьте больше логов, чтобы увидеть промежуточные значения, такие как сгенерированный публичный ключ и итоговый адрес кошелька. Это поможет выявить потенциальные ошибки в данных или их обработке.

    Вот модифицированный пример кода, включая некоторые дополнительные логи для отладки:

    import { mnemonicToWalletKey } from "ton-crypto";
    import { TonClient, WalletContractV3R1 } from "ton";
    import { getHttpEndpoint } from "@orbs-network/ton-access";
    
    async function main() {
        const mnemonic = "your,mnemonic,phrase,here";  // Укажите вашу мнемоническую фразу
        const key = await mnemonicToWalletKey(mnemonic.split(","));
        console.log("Public Key:", key.publicKey);  // Логирование публичного ключа
    
        const wallet = WalletContractV3R1.create({ publicKey: key.publicKey, workchain: 0 });
        console.log("Wallet Address:", wallet.address);  // Логирование адреса кошелька
    
        const endpoint = await getHttpEndpoint({ network: "mainnet" });
        const client = new TonClient({ endpoint });
    
        if (!await client.isContractDeployed(wallet.address)) {
            console.log("Wallet is not deployed.");
            return;
        }
    
        console.log("All OK -", wallet.address);
    }
    
    main();


    Этот код добавляет логи для ключевых переменных, что поможет вам понять, какие именно данные генерируются и используются в вашем скрипте. Если вы продолжите сталкиваться с проблемами, возможно, стоит проверить документацию или исходные коды используемых библиотек на предмет известных проблем или обновлений.
    Ответ написан
  • Как подключиться к trust wallet при помощи node js?

    Привет.
    Для работы с Trust Wallet через Node.js, тебе нужно взаимодействовать с блокчейном напрямую, поскольку Trust Wallet лишь интерфейс для блокчейна и не предоставляет собственного API для подобных задач. Вместо этого, ты можешь использовать различные библиотеки и API, для работы с блокчейнами, с которыми Trust Wallet может взаимодействовать (например, Ethereum, Binance Smart Chain и т.д.).

    Популярные либы:
    • Web3.js
    • ethers.js
    • Binance Smart Chain


    Пример кода на web3.js
    Вот базовый пример того, как можно начать работу с web3.js для получения баланса Ethereum адреса:

    const Web3 = require('web3');
    // Указываем провайдера. Это может быть Infura, Alchemy или любой другой узел Ethereum.
    const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_PROJECT_ID');
    
    const address = 'адрес_кошелька';
    
    web3.eth.getBalance(address, (err, wei) => {
      // Переводим из wei в Ether
      balance = web3.utils.fromWei(wei, 'ether');
      console.log(balance);
    });


    Отправка транзакций
    Отправка транзакций немного сложнее, поскольку нужно будет подписать транзакцию с использованием приватного ключа (что должно обрабатываться очень осторожно и безопасно), а затем отправить подписанную транзакцию в сеть.

    Важные соображения:
    • Безопасность: Будь осторожны при обработке приватных ключей. Никогда не храни их в открытом виде и не передавай через незащищенные каналы.
    • Инфраструктура: В зависимости от твоего приложения, может понадобиться узел блокчейна (например, через Infura для Ethereum). Это может потребовать регистрации и, возможно, подписки.
    • Совместимость: Убедись, что выбранный блокчейн поддерживается Trust Wallet и твоим приложением.


    Начните с определения того, какой блокчейн ты будешь использовать, и изучи соответствующие библиотеки и их документацию. Это даст хорошее представление о том, как начать работу и какие функции тебе будут доступны
    Ответ написан
    2 комментария
  • Почему эффект применяется только к одной кнопке из трёх?

    https://codepen.io/kusakinvova/pen/ExJRvqO
    вот как я решил проблему

    document.querySelectorAll('.btn_clip').forEach(button => {
        button.addEventListener('mousemove', e => {
            // Получаем координаты курсора относительно кнопки
            const rect = button.getBoundingClientRect();
            const x = e.clientX - rect.left;
            const y = e.clientY - rect.top;
    
            // Устанавливаем переменные для текущей кнопки
            button.style.setProperty('--x', x + 'px');
            button.style.setProperty('--y', y + 'px');
        });
    });
    Ответ написан
    8 комментариев
  • Как загрузить в бакет Yandex Cloud файл, используя axios nodejs?

    В твоем коде есть несколько моментов, которые нужно исправить, чтобы загрузить файл в бакет Yandex Cloud с использованием axios в Node:

    1) Метод загрузки: не GET, а PUT. Для загрузки файла нужно использовать PUT.
    2) Передача файла: нужно передать содержимое файла в теле запроса, у тебя только заголовки.
    3) Content-Type: Указанный вами Content-Type должен соответствовать типу загружаемого файла. Ты указал 'image/jpeg', убедись, что это действительно соответствует типу файла.

    Пример кода для загрузки файла может выглядеть так:

    const axios = require('axios');
    const fs = require('fs').promises;
    const path = require('path');
    
    // Информация о файле и бакете
    const yandexApiKey = '**********************************';
    const bucketName = 'speech-bucket2';
    const objectName = args.fileName;
    
    (async () => {
        try {
            const filePath = path.join(__dirname, `../imgs/${args.fileName}`);
            const audioBytes = await fs.readFile(filePath);
    
            const uploadUrl = `http://${bucketName}.storage.yandexcloud.net/${objectName}`;
    
            // Используем метод PUT для загрузки файла
            const response = await axios.put(uploadUrl, audioBytes, {
                headers: {
                    'Authorization': `Api-Key ${yandexApiKey}`,
                    'Content-Type': 'image/jpeg', // Убедитесь, что это правильный MIME-тип для вашего файла
                },
            });
    
            console.log('Файл успешно загружен:', response.data);
        } catch (error) {
            console.error('Ошибка при загрузке файла:', error.message);
        }
    })();


    Проверь еще следующее:
    - Убедись, что путь к файлу и его MIME-тип указаны правильно.
    - Проверьте, что API ключ и настройки доступа к бакету настроены корректно.
    - Возможно, потребуется дополнительно настроить CORS настройки.
    Ответ написан
    2 комментария
  • Почему в electron-builder ссылки на svg имеют не верный путь?

    Проблема, с которой вы столкнулись, кажется связана с настройками сборки Electron и особенно с конфигурацией пути к ресурсам в вашем приложении. В Electron для указания путей к ресурсам можно использовать как абсолютные, так и относительные URL. В вашем случае, кажется, что electron-builder не корректно обрабатывает путь к ресурсам после сборки приложения.

    При использовании electron:serve, локальный сервер разработки предоставляет ресурсы по прямым ссылкам, что и отображается в вашем CSS как url(localhost:8080/img/arabian.29710604.svg). Это стандартное поведение для среды разработки.

    Однако, когда вы переходите к сборке приложения с помощью electron:build, структура путей изменяется. electron-builder пытается адаптировать пути к файлам так, чтобы они были доступны внутри пакета приложения, но в вашем случае, похоже, формируется некорректный путь.

    Ваша конечная цель — чтобы путь был вида df-installer-beta://./img/arabian.29710604.svg, что указывает на использование пользовательского протокола, заданного в customFileProtocol. Однако, генерируется путь df-installer-beta/img/arabian.29710604.svg, без указания протокола и слешей, что делает его невалидным.

    Возможные решения
    1) Убедитесь в корректности настройки customFileProtocol: В вашем конфиге customFileProtocol выглядит корректно. Однако, стоит убедиться, что эта настройка правильно используется при загрузке ресурсов. Это означает, что ваши ссылки на ресурсы должны явно использовать этот протокол.

    2) Проверка путей в сборке: Удостоверьтесь, что пути к ресурсам корректно обрабатываются в процессе сборки. Возможно, вам придется вручную настроить пути в сборке, чтобы они соответствовали ожидаемому формату.

    3) Использование __dirname или __static для указания абсолютных путей: В контексте Electron, вы можете использовать __dirname в main process или __static (если он доступен через вашу конфигурацию electron-builder) для указания абсолютного пути к вашим статическим ресурсам.

    4) Проверка настроек Webpack: Убедитесь, что настройки Webpack корректно обрабатывают пути к вашим ресурсам. Это может потребовать настройки publicPath или использования специальных loader'ов, которые учитывают особенности загрузки ресурсов в Electron.

    Эти шаги должны помочь вам настроить корректную обработку путей к SVG-файлам в вашем Electron-приложении.
    Ответ написан
    Комментировать
  • Как перезаписать переменную для добавления через InnerHTML?

    Для того чтобы обновить содержимое переменной и отобразить его на странице с учетом новых значений из локального хранилища без необходимости полностью дублировать код, можно использовать функцию. Создайте функцию, которая будет генерировать HTML-структуру с актуальным значением из локального хранилища и присваивать этот HTML элементу на странице.

    Вот пример того, как можно реализовать такую функцию:
    function updateProfile() {
        var username = localStorage.getItem("username") || 'Неизвестный пользователь';
        var block_profile = `
        <div class="main-block" id="block_profile">
            <div class="div-block-50">
                <h2 class="h2">${username}</h2>
                <div class="div-block-51"><a href="#" class="tags cab exit w-button">Выйти&nbsp;везде</a><a href="#" class="tags cab exit w-button">Выйти </a></div>
            </div>
        </div>
        `;
        
        // Предполагая, что у вас есть элемент с id="app" на странице
        document.getElementById('app').innerHTML = block_profile;
    }
    
    // Вызовите эту функцию для инициализации при загрузке страницы
    updateProfile();
    
    // И также можете вызвать эту функцию каждый раз, когда нужно обновить информацию на странице
    // Например, после изменения значения в localStorage
    localStorage.setItem("username", "Новое Имя"); // Пример изменения значения
    updateProfile(); // Обновляем содержимое на странице

    Этот подход позволяет избежать дублирования кода и обеспечивает более чистую и управляемую структуру кода. Вместо того чтобы вручную искать и изменять конкретные элементы на странице, вы просто пересоздаете необходимый блок полностью с актуальными данными, что часто бывает быстрее и проще для понимания.
    Ответ написан
    2 комментария
  • Почему условие не срабатывает после первого выполнения?

    Кажется, ваша проблема заключается в том, что вы пытаетесь повторно назначить обработчик события клика внутри уже существующего обработчика клика. Это приводит к тому, что после первого изменения состояния кнопки (когда она получает класс cut), ваша логика для сворачивания элементов никогда не выполняется, потому что для этого требуется ещё один клик, который должен быть отдельно обработан.

    Для решения этой проблемы вам нужно избегать добавления обработчика события внутри другого обработчика события. Вместо этого, определите логику "Показать еще" и "Свернуть" в одном обработчике, используя условия для проверки текущего состояния:

    $(".catalog-btn_more").on('click', function (event) {
        event.preventDefault();
        var $this = $(this); // Сохраняем ссылку на текущую кнопку для удобства
        if ($this.hasClass("cut")) {
            // Логика для "Свернуть"
            $(".section-compact-list .section-compact-list__item").slice(12).hide().fadeOut(800); // Скрываем все элементы, кроме первых 12
            $this.removeClass('cut');
            $this.children()[0].innerHTML = "Показать еще";
        } else {
            // Логика для "Показать еще"
            var $hidden = $(".section-compact-list .section-compact-list__item:hidden");
            $hidden.slice(0, 12).css("display", "flex").hide().fadeIn(800);
            if ($hidden.length <= 12) { // Изменено условие, чтобы правильно обрабатывать состояние кнопки
                $this.addClass('cut');
                $this.children()[0].innerHTML = "Свернуть";
            }
        }
    });


    Теперь у вас есть один обработчик событий, который корректно обрабатывает оба состояния кнопки. Убедитесь, что правильно подбираете условие для изменения текста кнопки и добавления класса cut, чтобы ваша логика "Показать еще"/"Свернуть" работала корректно.
    Ответ написан
    Комментировать
  • Как настроить prettier для html чтоб не закрывал одиночные тэги?

    попробуй писать теги добавляя / в конце
    <br />
    <img />
    <input />
    Ответ написан
    Комментировать
  • Как проверить нашел ли поиск какие либо данные или пустой bitrix.search?

    В шаблоне компонента bitrix.search в файле result_modifier.php (если его нет, то можно смело создать Битрикс его сам подключит) посмотрите что содержит массив $arResult.
    Ответ написан
    Комментировать
  • Как избавиться от ошибки "waiting for lock" в TortoiseHG?

    При "ожидании блокировки на хранилище" удалите файл хранилища: .hg/wlock (или он может быть в .hg/store/lock)
    Ответ написан
    1 комментарий
  • Как поставить цель на кнопки в WooCommerce?

    Советую использовать технологию Google Tag Manager, не нужно будет копаться в коде и "дергать" программистов.
    Ответ написан
    Комментировать