TON Overflow на русском

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

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

  • Как найти работу или идею проекта для разработки на TON?

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

    Что касается идей проекта, то есть инициатива TON Footsteps с некоторыми идеями и назначенными за них вознаграждениями: https://github.com/ton-society/ton-footsteps

    Кроме того, обычно хорошей идеей является создание проектов, которые "скрашивают ваш собственный зуд". Чувствуете ли вы потребность в чем-то в экосистеме TON? Если вы это сделаете, это может стать для меня отличной отправной точкой.

    Что касается вакансий, то на сайте есть страница "Карьера". https://jobs.ton.org/

    Вероятно, не все компании используют его, поэтому вы также можете ознакомиться с проектами на ton.app и связаться с некоторыми из них, чтобы узнать, есть ли у них открытые позиции.

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

    Иногда NFT используются для предоставления доступа к какому-либо эксклюзивному контенту. Допустим, есть Telegram-канал или чат, который должен быть доступен только владельцам определенных NFT. Как проверить, владеет ли новичок таким NFT? Есть ли для этой цели Telegram-бот или что-то в этом роде? Если нет, то как создать такого бота?

    Этот вопрос был импортирован из чата Telegram: <***Скрыто***

    click to show

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

  • Как функция округляет числа при делении?

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

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

    Оператор / по умолчанию использует округление по полу Оператор ~/ использует математическое округление Оператор ^/ использует округление по потолку
  • Что означает код ошибки "-13" при использовании TonWeb?

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

    Я полагаю, что на этот вопрос Владимир Плотвинов более или менее ответил в другом вопросе. Вы можете просмотреть его здесь:

    https://tonpie.io/topic/23274

    Для наглядности я перепечатаю его ответ:

    Вы получаете код выхода "-13". API вызвал lite-сервер и получил некоторый результат, вот почему вы получили 200 OK. -13 код выхода, я бы сказал, что это означает, что method_id не найден в smartcontract (но я не могу найти это замечание в документации).

  • [Решено] Как мне удалить смарт-контракт?

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

    Решено

    Вы можете использовать send_raw_message(cell msg, int mode) в рамках смарт-контракта, для удаления смарт-контракта.

    Это связано с тем, что режим 128 будет "переносить весь оставшийся баланс текущего смарт-контракта вместо значения, первоначально указанного в сообщении", по сути удаляя все TON из смарт-контракта. Режим 32 приведет к появлению сообщения "текущий счет должен быть уничтожен, если его результирующий баланс равен нулю", что в сочетании с 128 приведет к удалению смарт-контракта.

    Таким образом, использование mode = 160 с send_raw_message по сути приведет к удалению смарт-контракта.

  • [Решено] Как вы разрабатываете лотерейный контракт?

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

    Решено

    Требуется источник случайности, и есть множество способов сделать это: https://docs.ton.org/ko/develop/smart-contracts/guidelines/random-number-поколение

    Здесь существует базовая версия лотерейного скрипта, который использует функцию randomize_lt: https://github.com/pyAndr3w/ton-lottery-smc/blob/main/func/code.fc

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

    Решено

    Отличный вопрос! Предсказать хэш входного и выходного сообщений перед передачей транзакции невозможно.

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

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

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

  • [Решено] Запрос общего списка элементов в коллекции

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

    Решено

    Чтобы получить список адресов NFT в коллекции, вы можете выполнить двухэтапный процесс.

    Во-первых, вам нужно загрузить состояние контракта на сбор, а затем вызвать определенный "get-метод", который возвращает адрес каждого элемента на основе его индекса. Это позволяет вам собрать все соответствующие адреса NFT, связанные с коллекцией.

    Как только вы получите список адресов NFT, следующим шагом будет поиск соответствующих владельцев этих NFT. Это может быть достигнуто путем вызова соответствующего метода get для каждого отдельного контракта, указанного на предыдущем шаге. Поступая таким образом, вы можете собрать информацию о владельцах NFT, предоставляя представление о распределении прав собственности в коллекции.

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

  • Где я могу увидеть Jetton с числом десятичных знаков, отличным от 9?

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

    Да, есть такие джеттоны, например, jUSDT (USDT, переведенный с Ethereum через bridge.ton.org ) имеет десятичную точность, установленную равной 6: https://tonscan.org/jetton/EQBynBO23ywHy_CgarY9NK9FTz0yDsG82PtcbSTQgGoXwiuA

    Но также легко создать такой джеттон самостоятельно, используя https://minter.ton.org. Нужно просто указать десятичную точность в соответствующем поле на веб-сайте. По умолчанию оно равно 9, и, похоже, большинство людей просто не меняют это число.

  • Как мне сохранить сайт TON в хранилище TON?

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

    У меня есть узел хранения и сумка в хранилище TON, и эта сумка может быть получена из сети другими узлами. Я установил для DNS-записи "сайт" значение bagID (с флажком "размещено в хранилище TON"). Но сайт не открывается через общедоступные прокси-серверы ton, и я не могу заставить его работать через rldp-http-прокси (он генерирует слишком много журналов, и я ничего не могу там найти).

    Существуют ли какие-либо рабочие примеры сайта TON, размещенного в хранилище TON?

    Этот вопрос был импортирован из чата telegram: > <***Скрыто***

    click to show

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

  • Как хранить ячейки внутри ячеек?

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

    Вы можете использовать store_ref(b, c): https://docs.ton.org/develop/func/stdlib/#store_ref Он сохраняет ссылку на ячейку c в конструкторе b. Вы должны иметь возможность использовать ссылки для хранения любого количества ячеек, но для одной ячейки может быть только 4 ссылки. Это по-прежнему позволяет считывать данные из дерева ячеек.

    https://answers.ton.org/question/1539108146436378624/does-store-slice-act-нравится-хранить-ссылка

  • [Решено] Как вы получаете цену TON coin с помощью TON API?

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

    Решено

    Если вы имеете в виду сами узлы блокчейна, то узлы не будут отображать эти данные. Это действительно рыночный вопрос, а не вопрос, на который должен ответить сам протокол блокчейна. У каждого рынка есть свой собственный ответ на вопрос, какова цена тонны, и арбитраж постепенно уравновесит его.

    Однако существуют сервисы, которые суммируют цены на многих рынках, чтобы получить простой ответ для вас. tonapi.io допускает это:

    https://tonapi.io/v2/rates?tokens=ton&currencies=usd

    CoinMarketCap и CoinGecko оба также предоставляют свои собственные API-интерфейсы.

  • Рабочие цепочки EVM на дорожной карте

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

    В конце дорожной карты на веб-сайте TON есть пункт, в котором упоминается "Рабочие цепочки Bitcoin & EVM". Есть ли какие-нибудь материалы для чтения по этому поводу?

    Это упоминается в учебнике!

    Этот вопрос был импортирован из чата Telegram: > <***Скрыто***

    click to show

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

  • [Решено] Кто-нибудь может создать реактивный самолет?

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

    Решено

    Да, любой желающий может развернуть жетон. Jettons - это просто смарт-контракты, похожие на ERC-20 в Ethereum. Сеть не была бы очень децентрализованной, если бы это было не так!

    Технически, "официального" развертывания ETH не существует, потому что любой желающий может создать свой собственный мост и свой собственный токен ETH. Итак, вам предстоит провести исследование, чтобы выяснить, какой смарт-контракт Jetton лучше всего использовать в качестве вашего ETH-представительства. Как бы то ни было, ton.org в настоящее время используется TON мост в качестве их канонического моста.

  • [Решено] Как мне подключиться к веб-сайту с помощью TON?

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

    Решено

    На этом веб-сайте есть хороший пример того, как подключаться к нескольким типам кошельков TON, к сожалению, интерфейс не является открытым исходным кодом!

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

    То, что вы ищете, скорее всего, TON Connect Они предоставляют способы подключения кошельков к интерфейсу через свой SDK. Вы можете подключиться к одному из их пакетов SDK:

    import TonConnectUI from '@tonconnect/ui' const tonConnectUI = new TonConnectUI({ manifestUrl: 'https://<YOUR_APP_URL>/tonconnect-manifest.json', buttonRootId: '<YOUR_CONNECT_BUTTON_ANCHOR_ID>' }); // Try to connect here const connectedWallet = await tonConnectUI.connectWallet();

    Узнайте больше о том, как их использовать, с их SDK и документацией.

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

    Решено

    Вычисление цены на газ для операций "get / set" на хэш-карте в виртуальной машине TON (TVM) может быть немного сложным, поскольку оно "динамическое" и зависит от "размера словаря", которым манипулируют.

    Хотя точной формулы для определения цены на газ не существует, вы можете оценить ее, используя следующий подход:

    Gas Price ≈ 600 * log2(SIZE)

    Здесь "РАЗМЕР" представляет размер словаря. Цена на газ, полученная по этой формуле, выражена в единицах стоимости газа, что означает, что она измеряется в "микротонах (10^-6 тонн)`.

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

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

  • [Решено] Как вызвать функцию смарт-контракта в Python

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

    Решено

    Чтобы вызвать функцию из смарт-контракта с использованием Python, вы можете использовать пакет tonsdk, доступный на PyPI.

    Этот пакет предоставляет удобный способ взаимодействия со смарт-контрактами TON с использованием Python.

    Вы можете найти более подробную информацию и инструкции по установке на официальной странице пакета PyPI: https://pypi.org/project/tonsdk/

  • [Решено] Как я могу подключить MyLocalTon с помощью TonWeb?

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

    Решено

    Чтобы подключить "MyLocalTon" с помощью TonWeb, вам необходимо выполнить следующие действия:

    Установите свой собственный экземпляр TonCenter, следуя инструкциям в репозитории TonCenter GitHub: https://github.com/toncenter/ton-http-api#building-and-running

    Настройте свой экземпляр TonCenter на использование вашей локальной конфигурации сети TON, чтобы он мог подключаться к вашему LiteServer (LS). Инструкции по настройке вы можете найти здесь: https://github.com/toncenter/ton-http-api#Configuration

    Наконец, настройте TonWeb для подключения к вашему локальному экземпляру TonCenter. Как только это будет сделано, вы сможете использовать TonWeb для развертывания контрактов и взаимодействия с вашей локальной сетью TON.

    Установив и конфигурируя TonCenter и TonWeb, вы сможете установить соединение между MyLocalTon и TonWeb, что позволит вам развертывать контракты и управлять ими в вашей локальной сетевой среде TON.

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

    Решено

    Расхождения, с которыми вы сталкиваетесь с конечными точками TON API, могут быть вызваны запросом неверной рабочей цепочки. Адрес UQCzwxqIw1pt41DND9pgGfAOhJKtQQEgjVcpn0rHxv-4b8Ob находится в базовой цепочке (workchain=0), но вы ищете транзакции в мастер-цепочке (workchain=-1).

    Чтобы найти правильную транзакцию, выполните следующие действия:

    Запросите конечную точку /getBlockTransactions с правильными значениями workchain (workchain=0) и shard (-9223372036854775808):

    https://toncenter.com/api/v2/getBlockTransactions?workchain=0&shard=-9223372036854775808&seqno=21407484

    Этот запрос должен вернуть требуемую транзакцию.

    Если вы по-прежнему не можете найти транзакцию, извлеките все сегменты для найденного вами блока, используя конечную точку /shards:

    https://toncenter.com/api/v2/shards?seqno=16512830

    Затем для найденного вами блока и для каждого фрагмента получите список транзакций. Вы должны найти свою транзакцию в блоке со следующими параметрами: workchain=0, shard=-9223372036854775808 и seqno=21407484.

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

  • Что является более эффективным для этого 2-го типа кода в FunC?

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

    Случай 1:

    () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure { slice cs = in_msg_full.begin_parse(); int flags = cs~load_uint(4); if ((flags & 1) | (in_msg_body.slice_empty?())) { return (); } slice sender = cs~load_msg_addr(); int op = in_msg_body~load_uint(32); ;; (int op, int query_id) = (in_msg_body~load_uint(32), in_msg_body~load_uint(64)); if (op == op::claim) { query_id = in_msg_body~load_uint(64); ;; .....code..... ;; } elseif (op == op::process_claim) { query_id = in_msg_body~load_uint(64); ;; .....code..... ;; } }

    Случай 2:

    () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure { slice cs = in_msg_full.begin_parse(); int flags = cs~load_uint(4); if ((flags & 1) | (in_msg_body.slice_empty?())) { return (); } slice sender = cs~load_msg_addr(); ;; int op = in_msg_body~load_uint(32); (int op, int query_id) = (in_msg_body~load_uint(32), in_msg_body~load_uint(64)); if (op == op::claim) { ;; query_id = in_msg_body~load_uint(64); ;; .....code..... ;; } elseif (op == op::process_claim) { ;; query_id = in_msg_body~load_uint(64); ;; .....code..... ;; } }

    Как вы можете видеть, разница заключается только в вызове query_id = in_msg_body~load_uint(64) сначала или внутри метода if. Должны ли мы обратить внимание на эффективность использования газа в данный момент?

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