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

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

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

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

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

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

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

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

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

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

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

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

    Я пытаюсь выполнить простой обмен 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(); }

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

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

    Возможно, вы слышали, что в таком случае помогает telegram. В качестве альтернативы, куда можно обратиться за помощью, опросив бота @wallet_supportbot, который некоторое время вообще не отвечал

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

    Мы создаем Jetton для игры, в которую пользователи могут вносить депозиты и выводить средства со своего кошелька. Но мне было интересно, как мы можем справиться с комиссией за транзакции между кошельками, поскольку она составляет около 0,05 тонны, а при большом количестве транзакций это может стоить больше, чем мы зарабатываем

    Итак, каково решение этой проблемы? должны ли мы оплачивать сборы? если это пользователь, как я могу его оплатить (прямо сейчас у нас есть кошелек в базе данных для каждого пользователя, поэтому пока в системе нет транзакций, поскольку мы планируем создать кошелек для каждого пользователя)

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

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

    Я использую ton-connect для подключения кошелька с помощью бота. однако после того, как пользователь подтверждает подключение в кошельке, он перенаправляется на walletbot.me/undefined

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

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

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

    Я отправил какой-то jetton на другой кошелек, но адрес назначения тела ответа не в [привычном формате вместо этого](https://blog.ton.cat/ton - address-formats/) как я могу преобразовать этот адрес во что-то, что я могу сравнить с моим собственным адресом кошелька jetton?

    "body": { "type": "jetton_transfer", "query_id": 0, "amount": 1000000000000, "destination": { "type": "addr_std", "workchain_id": 0, "address": "28c33c2eab67fa99b41ac2177d1993e4c8d7c717f09f51d2a15b3f2b62665b32" }, "response_destination": { "type": "addr_std", "workchain_id": 0, "address": "b406c5bbe23420825aebeff61bd372af180db17701b65b774979bcf1111be58a" } }

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

  • Тип контракта неизвестен

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

    Я создал кошелек программно, следуя этой [статье](https://docs.ton.org/develop/smart - контракты/учебные пособия/кошелек#-развертывание кошелька). Я просто скопировал код и выполнил его. Создал кошелек и создал 2 транзакции (входящую и исходящую)

    Но на tonscan.org написано, что тип контракта неизвестен (первый скриншот). В отличие от кошелька, который был создан в приложении Tonkeeper (второй скриншот)

    Почему это так работает и как я могу это исправить?

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

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

    Всем привет.

    В моем приложении я разрешаю вносить и снимать немного Jetton. Я хотел бы реализовать вывод средств таким образом, чтобы пользователь компенсировал комиссию за транзакцию (что-то вроде 0,05 тонны за перевод Jetton). У меня есть несколько способов реализовать это с помощью tonSDK, например:

    попросите перевести 0,05 тонны на кошелек may, а затем отправьте Jettons * поскольку у Jetton фиксированный курс к ton - конвертируйте комиссию в Jetton и снимайте ее с вывода * добавьте некоторую сущность, например токен вывода - пользователь покупает некоторое количество токенов вывода, а затем может использовать их для вывода Jetton.

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

    Не могли бы вы мне что-нибудь посоветовать?

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

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

    Спасибо вам за разъяснение!

    Кроме того, я думаю, что стандартная реализация nft должна быть обновлена. В настоящее время она использует builder_null?, которого больше нет в stdlib, и определяет коды операций с использованием устаревшего метода. Это может сбивать с толку, особенно для новичков в языке

  • Транзакция не поступила

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

    Привет всем. Я столкнулся с проблемой при переводе TON с 1 кошелька на другой. Транзакция была завершена, баланс уменьшился, но средства не дошли до получателя. Вот ссылка на нее в браузере https://tonviewer.com/EQBoYF5rlWZ9XHpi1_O_4vGU0bCteZFqoYliZD64vjlRzaZ1/transaction/53ad9db6715f44d1637f7a6be079157fe30d4b5964b03bb7217e9f715a9724c3 .На скриншоте показано, что пишет рецензент об этом переводе. Что делать в такой ситуации?

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

  • Ошибка при переносе кошелька

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

    привет, у меня такая же проблема. у вас есть новости по этой ситуации?

  • Неактивный кошелек

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

    Отправьте любую сумму со своего кошелька.

    Вам не нужно беспокоиться о том, что он неактивен. При первой отправке исходящей транзакции программное обеспечение вашего кошелька развернет ваш кошелек в цепочке и затем отправит с него указанную сумму.

  • Тема полигон, тестируем тесты

    Другое
    0 Голоса
    10 Сообщения
    232 Просмотры

    Зимние Зимние тесты тесты

  • Я хочу знать о том, как я могу заработать в TON

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

    Привет, для начала вы можете поучаствовать в документировании и улучшении контента TON. Существует баунти-программа с готовым к выполнению заданием и разумной выплатой. Будьте активны в сообществе и участвуйте в конкурсе. Когда вы приобретете достаточные знания и навыки, подайте заявку на работу на веб-сайте и с помощью нетворкинга присоединяйтесь к компании, которая занимается созданием

  • Деривация счета

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

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

    Кроме того, меня немного сбило с толку то, что у него есть функция

    /** * Convert mnemonics to HD seed * @param mnemonicArray mnemonic array * @param password mnemonic password * @returns 64 byte seed */ async function mnemonicToHDSeed(mnemonicArray, password) { mnemonicArray = normalizeMnemonic(mnemonicArray); return (await mnemonicToSeed(mnemonicArray, 'TON HD Keys seed', password)); } exports.mnemonicToHDSeed = mnemonicToHDSeed;

    Но я не совсем понимаю его назначение... в документации он использует mnemonicToPrivateKey, который имеет начальное значение TON по умолчанию, затем в mnemonicToHDSeed он использует начальное значение TON HD Keys. Я немного заблудился, пожалуйста, помогите.

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

  • Нужна помощь с @tonconnect/ui-react

    TON Overflow на русском
    0 Голоса
    2 Сообщения
    84 Просмотры
    Проверьте это, я думаю, здесь вы можете либо ввести список кошельков, которые вы хотите использовать для своего подключения https://ton-connect.github.io/sdk/modules/_tonconnect_sdk.html#fetch-wallets-list
  • Как получить событие emit из смарт-контракта

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

    Кролик