• Тонна, застрявшая в SafePal, не будет отправлена TonKeeper

    TON Overflow на русском
    0 Голоса
    1 Сообщения
    48 Просмотры

    У меня в safepal застрял какой-то Ton, и когда я пытаюсь отправить его на свой кошелек tonkeeper, он просто показывает логотип spinning progress навсегда и никогда не меняется, и это происходит на всех моих устройствах. Я пытался импортировать кошелек, но он всегда показывает мне кошелек, который не принадлежит мне в сети ton, в то время как все остальные активы верны, что я могу сделать, чтобы вывести свой ton из safepal?

    Оригинал вопроса

  • 0 Голоса
    2 Сообщения
    179 Просмотры

    https://docs.ton.org/develop/dapps/ton-connect/message-builders

    Перевод с комментарием - base64

  • Игра в телеграм "TAKE Robot" @TonTakeRoBot

    TON Игры
    1 Голоса
    1 Сообщения
    42 Просмотры

    TonTake RoBot - это захватывающий бот, в формате кликер-игры. В нем прекрасно проработанный и простой в использовании интерфейс. Здесь ты можешь сражаться с любым другом в телеграм, делать ставки в TON и апгрейдить робота за TAKE. Купив робота однажды - он станет твоим навсегда! Робот не требует дополнительного ухода, и выдается бесплатно в комплекте с контейнером!
    Суть этого игрового бота заключается в том, что у тебя есть свой собственный робот, которого ты можешь улучшать бесплатно приглашая рефералов или вкладывая криптовалюту TAKE. Играть можно как в одиночном, так и в многопользовательском режиме.

    Как получить робота?
    При входе в бота вам автоматически выпадает один из видов роботов
    •Исследователь (35% шанс выпадения)
    •Силач (30% шанс)
    •Броневик (20% шанс)
    •Защитник (10% шанс)
    •Терминатор (5% шанс)
    Но также можно купить более интересных новых роботов в магазине бота.

    Как играть?
    В многопользовательском режиме ты можешь встретиться со случайным соперником или вызвать на дуэль своего друга, ведь в боте предусмотрена функция приглашения по ссылке.
    А в одиночном режиме есть 3 карты: "Заброшенный завод", где можно восстановить здоровье, и "Пустыня"- где с каким то шансом можно встретить враждебного робота, победив которого вы получите опыт для прокачки своего робота.
    И "Остров" где противник будет очень силен, но там ты сможешь найти бесценные Тейки, которые сделают из твоего робота - неуязвимого терминатора!

    Виды апгрейда:
    • Улучшенный аккумулятор - увеличивает здоровье на 5 единиц за каждый апгрейд.
    • Плазменный меч - увеличивает максимальный урон на 2 единицы.
    • Улучшенный ремкомплект - увеличивает силу ремкомплекта на 2 единицы.
    • Титановая броня - увеличивает бронирование на 1 единицу.

    Как еще получить TON?
    Вы можете нажать кнопку Турнир, и в случае победы получить призы в Тонах. 90% всех вложенных ваших средств за участие в турнире - идет на выплату победителям! Первое, второе и третье места в турнирах - вот цели, которых следует добиться чтобы получить TON.

    Бонусы за рефералов.
    Также в боте предусмотрена система рефералов, где за одного реферала вы получите 1 очко опыта для прокачки робота + 0.003 ТАКЕ!

    TON и TAKE
    Получить приз и вывести из бота возможно только валюту TON! Вывести ТАКЕ невозможно, но за счет ТАКЕ можно значительно улучшить своего робота чтобы выиграть больше TON.
    Валюта ТАКЕ тратится на апгрейд вашего робота и на покупку новых роботов - таков наш дефляционный механизм токена ТАКЕ (органический рост ТАКЕ).

    TonTake RoBot разрабатывался с любовью! Это легкий проект, которому не надо уделять много внимания, но он займет важное место в ваших сердцах и осчастливит множество участников!

  • 0 Голоса
    2 Сообщения
    165 Просмотры

    TLDR: Для внешних сообщений на кошельки не устанавливайте флаг +16, вместо этого установите флаг +2.

    Значение флага +16: Если при обработке действия произошла ошибка, отсканируйте сообщение в дополнение к откату транзакции. Это бесполезно для внешних сообщений, поскольку нет отправителя, который мог бы получить отсканированное сообщение.

    Значение флага +2: Если при обработке действия произошла ошибка, не откатывайте транзакцию и игнорируйте ее. Это очень важно во внешних сообщениях для кошельков.

    Кошельки сначала проверяют подпись, и когда параметры верны, они ПРИНИМАЮТ сообщение, а затем пытаются обработать вводимые действия. Если какое-либо действие завершается неудачей и оно не игнорируется, транзакция будет отменена, но кошелек оплатит газ, поскольку он уже принял сообщение.

    Поэтому очень важно не допустить сбоя после того, как сообщение будет ПРИНЯТО. Вот почему вы должны установить флаг +2 во внешних сообщениях для кошельков.

  • Транзакция, не отражающаяся на обмене

    TON Overflow на русском
    0 Голоса
    1 Сообщения
    14 Просмотры

    я отправил транзакцию со своего кошелька telegram на кошелек Exchange, но забыл прокомментировать, транзакция не отражается на кошельке exchange, есть ли способ обойти это или средства были потеряны.

    Оригинал вопроса

  • 💌 [Feedback] Обратная связь

    indicaton.io
    1 Голоса
    1 Сообщения
    30 Просмотры

    Привет!
    Чувствуйте себя свободно в написании фидбека по сервису indicaton тут ^..^
    Постарайтесь не переходить на личности и не использовать ненормативную лексику.
    С уважением, ваш :ban-🔨:

    Сайт с графиками | Канал | Бот | Навигация

  • Фаундер NFT коллекции BANX

    Знакомства и контакты
    1 Голоса
    1 Сообщения
    36 Просмотры

    👋Всем привет, я @banx4 – главный в NFT коллекции BANX @banx_banx

    Буду рад новым знакомствам🤝

  • TON founders & devs

    Знакомства и контакты
    2 Голоса
    1 Сообщения
    51 Просмотры

    Привет!

    Я @reoston - коммьюнити менеджер проекта @indicaton - аналитической платформы и агрегатора инфы в TON.

    Буду рад новым контактам и идеям!

  • транзакция прошла успешно, но на другой кошелек

    TON Overflow на русском
    0 Голоса
    2 Сообщения
    110 Просмотры

    Привет из TMA!👋🏻

  • Ссылка для получения TON монет

    TON Overflow на русском
    0 Голоса
    1 Сообщения
    11 Просмотры

    можно ли и как сформировать ссылку, которую я могу отправить кому-либо, получатель ссылки, перейдя по ней, получает установленную сумму монет с моего кошелька. В @wallet телеграм есть похожий сервис, когда контакту можнл отравить чек, активировав который, контакт получает перевод. Вот нужно что-то похожее.

    Оригинал вопроса

  • Отправка Тон-монет на кошельки

    TON Overflow на русском
    0 Голоса
    3 Сообщения
    25 Просмотры

    спасибо, уже нашел, библиотека tontools прекрасно подходит.

  • 0 Голоса
    2 Сообщения
    62 Просмотры

    Если эти тонны заблокированы в вашем контракте, у вас нет другого выбора, кроме как попросить получателя вывести баланс контракта. Итак, вам нужно выполнить новую операцию, чтобы вывести желаемое количество монет TON конкретному получателю.

    например:

    if (op == op::withdraw()) { throw_unless(73, equal_slices(sender_address, admin_address)); slice to_address = in_msg_body~load_msg_addr(); int amount = in_msg_body~load_coins(); ;; send raw message to "to_address" with specified withdraw "amount" ;; consider reserving some ton coins for storage and future fees return (); }
  • Как реализовать VRF, подобный ChainLink?

    TON Overflow на русском
    0 Голоса
    2 Сообщения
    22 Просмотры

    Я создал эллиптическую кривую VRF для TON: https://github.com/ProgramCrafter/ecvrf-coordinator-contract.

    Его контракт с координатором в testnet - "kQAkRQPZL7siQjoc26FFXRGgb/r/ZzmdP4P+anwZfcwvkWkh", принимающий сообщения от пользователей в соответствии со следующим TL-B:

    op::subscribe_random#AB4C4859 consumer:MsgAddressInt = InMsgBody; op::provide_random#069CECA8 rnd:u256 = OutMsgBody;

    Сценарий ** вычисления ** случайных значений и отправки их в блокчейн является приватным, но он не нужен для проверки того, что они действительно непредсказуемы и детерминированно основаны на вызове.

  • [Решено] Где я могу получить TON монеты для testnet?

    TON Overflow на русском
    0 Голоса
    4 Сообщения
    939 Просмотры

    Я написал статью под названием "[Testnet Faucet — получать монеты testnet на TON](https://medium.com/@shashankchauhan1709/testnet-faucet-receive-testnet - монеты-на-ton-66a922d9b82f)".

  • Построить ТОННУ локально

    TON Overflow на русском
    0 Голоса
    1 Сообщения
    17 Просмотры

    Здравствуйте, TON недавно обновил репозиторий документацией по сборке, но при локальной сборке появляется много ошибок, в основном файл libsodium не найден.

    Оригинал вопроса

  • CLI-кошелек командной строки Linux

    TON Overflow на русском
    0 Голоса
    5 Сообщения
    74 Просмотры

    Всем привет! Просто предупреждаю, у MyTonWallet теперь есть [проверяемые версии] (https://github.com/mytonwalletorg/mytonwallet/blob/master/docs/gpg- check.md) на GitHub, а также возможность в настройках отказаться от автоматического обновления в настольной версии (Windows /macOS /Linux).

  • 0 Голоса
    2 Сообщения
    25 Просмотры

    Шестнадцатеричная цифра 0xF имеет двоичное представление "1111". Все, что имеет "&" с ней, останется прежним.

    Шестнадцатеричная цифра 0x7 имеет такое двоичное представление: "0111". Все, что содержит "&" с ней, потеряет первый бит, или первый бит станет нулевым.

    В вашем первом примере "0x5... & 0x7..." остается "0x5...", потому что "5" имеет двоичное представление "0101", а первый бит уже равен 0.

    В вашем втором примере "0x8... & 0x7..." изменено на "0x0...", потому что "8" имеет двоичное представление "1000", и после установки первого бита на "0" у нас будет 0000 или шестнадцатеричная цифра 0x0.

  • 0 Голоса
    1 Сообщения
    38 Просмотры
    // Create a transfer const seqno: number = await contract.getSeqno(); const transfer = await contract.createTransfer({ seqno, secretKey: keyPair.secretKey, messages: [ internal({ value: '0.11', to: 'EQBVXzBT4lcTA3S7gdrg5hnl5fnsSWj4oNEzNp09aQxkwj1G', body: '123456', }), ], }); const res = await contract.send(transfer);

    Я попытался расшифровать передачу с помощью transfer.hash().toString('hex'); Но после отправки я сравнил хэши, и они оказались разными.

    Я думал, что смогу найти это в данных getTransactions(): Transaction[] после отправки перевода. При попытке найти его по seqno. Потому что я знаю, что текущий seqno и транзакция с seqno+1 должны быть тем, что мне нужно. Но я не нашел seqno в элементах getTransactions().

    Как я могу получить фактический хэш после отправки перевода? Я использую библиотеку TypeScript ton. Спасибо тебе.

    Оригинал вопроса

  • 0 Голоса
    3 Сообщения
    34 Просмотры

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

    () recv_internal(int balance, int msg_value, cell in_msg_cell, slice in_msg) {} () recv_internal(int msg_value, cell in_msg_cell, slice in_msg) {} () recv_internal(cell in_msg_cell, slice in_msg) {} () recv_internal(slice in_msg) {}

    Вы должны проанализировать in_msg_body, чтобы получить код операции, основанный на том, как отправитель сохранил код операции в сообщении.

    Обычно он хранится как первый 32-битный внутри in_msg_body.

  • 0 Голоса
    1 Сообщения
    122 Просмотры

    Эй, я пытаюсь передать Jettons с помощью функции firebase. Однако я действительно страдаю от завершения функции. Я не уверен, чего мне не хватает, может быть, каких-то адресов? Я также не уверен, как мне прочитать эту ошибку.

    Вот несколько адресов (я использую openmask, а мнемоника - начальная фраза main_wallet) main_wallet_address: 0QBdd6N85lIBz193LTHESG8m9XVlH0owI6nn4hdXGy6S2u7N (с jettons) jetton_wallet: EQBh5qTitSdsZmHuHutn5_cqdwaPVHzYgSc3dRoRzAwR4dTr jetton_minter: EQAtwEufBNdM_YkCaz6fEA4AkddgcEouTrEwZJB4NNUyz3Te (символ: ТЕСТ)

    Прямо сейчас я получаю:

    {"severity":"INFO","message":"my address 0:5d77a37ce65201cf5f772d31c4486f26f575651f4a3023a9e7e217571b2e92da"} > SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON > at JSON.parse (<anonymous>) > at parseJSONFromBytes (node:internal/deps/undici/undici:5418:19) > at successSteps (node:internal/deps/undici/undici:5389:27) > at fullyReadBody (node:internal/deps/undici/undici:1500:9) > at process.processTicksAndRejections (node:internal/process/task_queues:95:5) > at async specConsumeBody (node:internal/deps/undici/undici:5398:7) > at async HttpProvider.call2 (C:\Users\style\Desktop\tonstars\functions\node_modules\tonweb\src\providers\index.js:149:24) > at async JettonMinter.getJettonData (C:\Users\style\Desktop\tonstars\functions\node_modules\tonweb\src\contract\token\ft\JettonMinter.js:87:24) > at async SendTokens (C:\Users\style\Desktop\tonstars\functions\lib\index.js:76:16) > at async C:\Users\style\Desktop\tonstars\functions\lib\index.js:53:15 > {"severity":"ERROR","message":"SyntaxError: Unexpected token '<', \"<!DOCTYPE \"... is not valid JSON\n at JSON.parse (<anonymous>)\n at parseJSONFromBytes (node:internal/deps/undici/undici:5418:19)\n at successSteps (node:internal/deps/undici/undici:5389:27)\n at fullyReadBody (node:internal/deps/undici/undici:1500:9)\n at process.processTicksAndRejections (nodt async HttpProvider.call2 (C:\\Users\\style\\Desktop\\tonsumeBody (node:internal/deps/undici/undici:5398:7)\n at async HttpProvider.call2 (C:\\Users\\style\\Desktop\\tonstars\\functions\\nstars\\functions\\node_modules\\tonweb\\src\\providers\\ at async JettonMinter.getJettonData (C:\\Users\\style\\Desktop\\tonstars\\functions\\node_modules\\tonweb\\src\\contract\\token\\ftindex.js:149:24)\n at async JettonMinter.getJettonDataers\\style\\Desktop\\tonstars\\functions\\lib\\index.js:76:16)\n at async C:\\Users\\style\\Desktop\\tonstars\\functions\\lib\\inde (C:\\Users\\style\\Desktop\\tonstars\\functions\\node_modules\\tonweb\\src\\contract\\token\\ft\\JettonMinter.js:rror: Unexpected token '<', \"<!DOCTYPE \"... is not valid JSON\n at JSON.parse (<anonymous>)\n at parseJSONFromBytes (node:inte87:24)\n at async SendTokens (C:\\Users\\style\\Desktode:internal/deps/undici/undici:5389:27)\n at fullyReadBody (node:internal/deps/undici/undici:1500:9)\n at process.processTicksAnp\\tonstars\\functions\\lib\\index.js:76:16)\n at asyn at async specConsumeBody (node:internal/deps/undici/undici:5398:7)\n at async HttpProvider.call2 (C:\\Users\\style\\Desktop\\tonstc C:\\Users\\style\\Desktop\\tonstars\\functions\\lib\\inex.js:149:24)\n at async JettonMinter.getJettonData (C:\\Users\\style\\Desktop\\tonstars\\functions\\node_modules\\tonweb\\src\\condex.js:53:15"}

    и вот код

    import TonWeb from "tonweb"; import { mnemonicToKeyPair, KeyPair } from "tonweb-mnemonic"; import { onCall } from "firebase-functions/v2/https"; import * as logger from "firebase-functions/logger"; import { defineString } from "firebase-functions/params"; import {mnemonicToWalletKey} from "@ton/crypto"; import admin from "firebase-admin"; import { WalletV3ContractR2 } from "tonweb/dist/types/contract/wallet/v3/wallet-v3-contract-r2"; const app = admin.initializeApp() const db = admin.firestore(app); const walletMnemonic = defineString("WALLET_MNEMONIC"); // main wallet mnemonic const walletPassword = defineString("WALLET_PASSWORD"); // main wallet password const apiKey = defineString("API_KEY"); // api key type WithdrawJettonsRequest = { boc: string; } type TransactionData = { amount: number; nanoAmount: number; jettonsAmount: number; jettonsNanoAmount: number; toAddress: string; status: "pending" | "success" | "failed"; timestamp: number; }; exports.withdrawJettons = onCall(async (request) => { const data = request.data as WithdrawJettonsRequest; const transactionRef = db.collection("transactions").doc(data.boc); const transactionSnapshot = await transactionRef.get(); if (!transactionSnapshot.exists) { throw new Error(`Transaction ${data.boc} not found`); } const transactionData = transactionSnapshot.data() as TransactionData; if (transactionData.status !== "pending") { throw new Error(`Transaction ${data.boc} is not pending`); } const tonweb = new TonWeb(new TonWeb.HttpProvider("https://testnet.toncenter.com/api/v2/jsonRPC", { apiKey: apiKey.value() })); const r = await SendTokens(transactionData, tonweb); await transactionRef.update({ status: "success", }) logger.info("Transaction updated") return r }); export const SendTokens = async (transactionData: TransactionData, tonweb: TonWeb) => { console.log(walletMnemonic.value()) const keyPair = await mnemonicToWalletKey(walletMnemonic.value().split(" ")); const WalletClass = tonweb.wallet.all.v3R2; const wallet = new WalletClass(tonweb.provider, { publicKey: keyPair.publicKey }); const address = await wallet.getAddress(); logger.info("my address", address.toString()); const jettonMinter = new TonWeb.token.jetton.JettonMinter(tonweb.provider, { adminAddress: address, jettonContentUri: "", jettonWalletCodeHex: "TEST", address: "0:2dc04b9f04d74cfd89026b3e9f100e0091d760704a2e4eb13064907834d532cf" }); let data; try { data = await jettonMinter.getJettonData(); } catch (e) { console.log(e) logger.error(e); throw e; } logger.info('Total supply:', data.totalSupply.toString()); logger.info('URI to off-chain metadata:', data.jettonContentUri); // logger.info('Owner address:', data.adminAddress(true, true, true)); const jettonWalletAddress = await jettonMinter.getJettonWalletAddress(address); logger.info("jetton wallet address", jettonWalletAddress.toString()) const jettonWallet = new TonWeb.token.jetton.JettonWallet(tonweb.provider, { address: jettonWalletAddress }); const jettonData = await jettonWallet.getData(); logger.info("minter address", jettonData.jettonMinterAddress.toString()); logger.info('Jetton wallet address:', address.toString(true, true, true)); const seqno = (await wallet.methods.seqno().call()) || 0; logger.info('Secno:', seqno); const comment = new Uint8Array([... new Uint8Array(4), ... new TextEncoder().encode('TS pre-sale')]); await wallet.methods.transfer({ secretKey: keyPair.secretKey, toAddress: jettonWalletAddress, // address of Jetton wallet of Jetton sender amount: TonWeb.utils.toNano('0.05'), // total amount of TONs attached to the transfer message seqno: seqno, payload: await jettonWallet.createTransferBody({ queryId: seqno, jettonAmount: transactionData.jettonsNanoAmount, // Jetton amount (in basic indivisible units) toAddress: new TonWeb.utils.Address(transactionData.toAddress), // recepient user's wallet address (not Jetton wallet) forwardAmount: TonWeb.utils.toNano('0.01'), // some amount of TONs to invoke Transfer notification message forwardPayload: comment, // text comment for Transfer notification message responseAddress: address // return the TONs after deducting commissions back to the sender's wallet address }), sendMode: 3, }).send() } ```

    Оригинал вопроса