TON Overflow на русском

552 Темы 1.0k Сообщения

Русское зеркало answers.ton.org

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

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

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

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

  • отправляйте JETTONS через @tonconnect/ui или @tonconnect/sdk

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Получите доступ к TON в кошельке типа контракта Jetton

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

    Если эти тонны заблокированы в вашем контракте, у вас нет другого выбора, кроме как попросить получателя вывести баланс контракта. Итак, вам нужно выполнить новую операцию, чтобы вывести желаемое количество монет 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?

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

    Я создал эллиптическую кривую 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?

    0 Голоса
    4 Сообщения
    485 Просмотры

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

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

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

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

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

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

    0 Голоса
    5 Сообщения
    35 Просмотры

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

  • Каков наилучший способ понять передачу & и кода операции в TEP?

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

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

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

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

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

  • Как я могу получить хэш транзакции после отправки sen?

    0 Голоса
    1 Сообщения
    19 Просмотры
    // 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. Спасибо тебе.

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

  • [Решено] Что такое функция recv_internal и для чего нужны ее аргументы?

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

    каждое из следующих объявлений 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.

  • SyntaxError: Неожиданный токен при попытке передачи JETTONS

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

    Эй, я пытаюсь передать 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() } ```

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

  • Как добавить LP к токенам TON

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

    Всем привет, я хотел бы знать, как добавить lp к токенам jetton, отчеканенным через ton minter.

    Я просто не хочу просто переводить деньги между кошельками, я хочу, чтобы токен был доступен для обмена и имел ценность. Как мне это сделать

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

  • 0 Голоса
    3 Сообщения
    15 Просмотры
  • Пропавший BNB

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

    я новичок в cryto, поэтому уверен в правильности формулировки, однако я нажал на ссылку, которая должна была показать, на какую сумму toncoin я имел право с момента использования Telegram. затем появилась начисленная сумма, на которую я имел право. Я следил за видео и делал это шаг за шагом, и в тот момент, когда я должен был забрать свой телефон, он разрядился. когда я включил его обратно, мои 70 долларов Bnb (которые, по его словам, были нужны для оплаты за бензин) исчезли, но я не получил anytime toncoin. Я не могу повторить процесс, потому что сейчас он не подключается, потому что он говорит, что у меня недостаточно скорости подачи газа, и я не знаю, как что-либо отследить или выяснить, было ли это просто возможным мошенничеством

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

  • STON.fi Простой обмен TON -> USDT

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

    Я пытаюсь выполнить простой обмен TON -> USDT на STON.fi. Это, кажется, сложнее, чем ожидалось. Смотрите ниже функции. Буду признателен за любые советы. Транзакция проходит, но я не получаю токены.

    async function stonfi(mnemonic) { const keyPair = await mnemonicToWalletKey(mnemonic.split(' ')); const tonweb = new TonWeb(new TonWeb.HttpProvider('https://toncenter.com/api/v2/jsonRPC', { apiKey: 'e4cf6......' })); const WalletClass = tonweb.wallet.all.v4R2; const wallet = new WalletClass(tonweb.provider, { publicKey: keyPair.publicKey, }); const address = await wallet.getAddress(); const JETTON0 = 'EQBynBO23ywHy_CgarY9NK9FTz0yDsG82PtcbSTQgGoXwiuA'; //USDT; const PROXY_TON = 'EQCM3B12QK1e4yZSf8GtBRT0aLMNyEsBc_DhVfRRtOEffLez'; const router = new Router(tonweb.provider, { revision: ROUTER_REVISION.V1, address: ROUTER_REVISION_ADDRESS.V1, }); const tonToJettonTxParams = await router.buildSwapProxyTonTxParams({ // address of the wallet that holds TON you want to swap userWalletAddress: address, proxyTonAddress: PROXY_TON, // amount of the TON you want to swap offerAmount: new TonWeb.utils.BN('1000000'), // address of the jetton you want to receive askJettonAddress: JETTON0, // minimal amount of the jetton you want to receive as a result of the swap. // If the amount of the jetton you want to receive is less than minAskAmount // the transaction will bounce minAskAmount: new TonWeb.utils.BN(1), // query id to identify your transaction in the blockchain (optional) queryId: 12345, // address of the wallet to receive the referral fee (optional) referralAddress: undefined, }); const seqno = (await wallet.methods.seqno().call()) || 0; var result = await wallet.methods .transfer({ secretKey: keyPair.secretKey, toAddress: ROUTER_REVISION_ADDRESS.V1, amount: '1000000', seqno: seqno, payload: tonToJettonTxParams.payload }) .send(); }

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