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

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

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

    click to show

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

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

    Известно, что транзакции Tick и Tock - это особые транзакции, они вызываются в начале и конце каждого блока masterchain. Но означает ли это, что они предназначены только для системных целей, или обычный разработчик также может их использовать? Что требуется для создания такой транзакции?

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

    click to show

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

  • [решено] Есть ли пример транзакции Jetton?

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

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

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

    click to show

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

  • Какой формат использует логическое время?

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

    В TON время - это 32-разрядное целое число без знака. Для логического времени время unix (секунды с момента начала эпохи) сдвигается влево на 32 бита, а затем используется серийный номер, начинающийся с единицы. Каждой транзакции или сообщению в цепочке присваивается следующий порядковый номер.

    Таким образом, первые 32 бита - это время unix, а следующие 32 бита - последовательно увеличивающиеся числа.

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

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

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

    click to show

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

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

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

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

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

    click to show

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

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

    Решено

    Прежде всего, LT (логическое время) уникально для каждого смарт-контракта в TON. Это означает, что разные адреса генерируют разные хэши для транзакций, и каждый из них будет помечен разным логическим временем внутри блока.

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

    Асинхронная структура блокчейна TON создает проблемы с гарантиями доставки сообщений. Хотя логическое время помогает установить порядок событий и транзакций, оно не гарантирует порядок доставки сообщений между несколькими смарт-контрактами. Это происходит из-за различных маршрутов в цепочках осколков.

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

    Для получения более подробной информации вы можете ознакомиться здесь: https://docs.ton.org/develop/smart-contracts/guidelines/message-delivery-guarantees#what-is-a-logical-time

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

    У меня есть вопрос, который может показаться глупым. Если я все правильно понимаю, отклоненные транзакции не увеличивают "seqno` кошелька отправителя. Может ли это привести к ситуации, когда я пытаюсь программно отправить больше значения, чем у меня есть, и поскольку значение seqno не увеличивается, а задача кажется незавершенной, сеть продолжает пытаться обработать ее, и я плачу сборы снова и снова? Сколько раз пользователь может заплатить комиссию в этом случае? Что можно сделать, чтобы остановить обработку сетью транзакции?

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

    click to show

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

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

    Решено

    Это правильный путь, вам действительно нужно установить флажок "0". И вы загружаетесь в "op` правильно. Но способ, которым вы работаете с комментарием, неверен.

    Символы закодированы в UTF-8, поэтому использование load_uint не будет работать должным образом, поскольку оно ожидает двоичную кодировку.

    Вместо этого вам придется разобрать его:

    () recv_internal(int balance, int msg_value, cell in_msg_full, slice in_msg_body) { int op = in_msg_body~load_uint(32); if (op == 0) { ;; load in the first 8 bits because of UTF-8 encoding int comment = in_msg_body~load_uint(8); ;; in UTF-8, 50 is the character for 2, because 50 = 0x32 var state = 0; if (comment == 50) { state = 2; } set_data(begin_cell().store_uint(op, 32).store_uint(comment, 8).store_int(state, 8).end_cell()); } }

    Обратитесь к UTF-8 здесь: https://www.utf8-chartable.de/

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

    Сообщения, не подлежащие возврату, позволят монетам оставаться на стороне контракта. Это используется при развертывании кошелька при прохождении инициализации состояния.

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

    Решено

    Это зависит от того, является ли транзакция внутренней или внешней.

    Если транзакция является внутренней, это зависит от флага отказа. Если адрес, на который направлена внутренняя транзакция, подлежит возврату, то сумма в 10 тонн за вычетом газа будет возвращена на первоначальный адрес. Транзакция по-прежнему будет записана в блокчейне.

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

    В приведенном вами примере, скорее всего, существует посредник в кошельке:

    Основная учетная запись -> кошелек -> контракт, таким образом, внешняя транзакция и внутренняя транзакция.

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

    Решено

    Прежде чем мы начнем, вам нужно знать, что само сообщение отправляется с типом данных "Ячейка" в TON. Это означает, что каждая ячейка имеет ограничение в "1023 бита` для хранения данных. Это ограничение включает данные, хранящиеся в ячейке, и любые необходимые заголовки или метаданные.

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

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

    Чтобы справиться с этой ситуацией, вам необходимо сохранить тело сообщения в отдельной ячейке, называемой ссылочной ячейкой. В заголовке сообщения вы бы использовали флаг, чтобы указать, что тело сообщения хранится в ссылочной ячейке. В этом случае "флаг тела сообщения inplace" (который может иметь значение 0 или 1) должен быть установлен в значение 1, указывающее, что тело сообщения хранится не в той же ячейке, что и заголовок, а в ссылочной ячейке.

    Сохраняя тело сообщения в ссылочной ячейке, вы можете избежать исключения переполнения ячейки и по-прежнему сохранять все сообщение (заголовок и тело) в рамках ограничений структуры ячеек блокчейна TON.

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

    Решено

    Это отличный вопрос! (Мне тоже потребовалось много времени, чтобы понять)

    ** Итак, по сути, вы спрашиваете:**

    Почему мы храним uint(....) там? * И почему мы там имеем дело с int_msg_info? 1/ Структура сообщения

    Чтобы понять, почему мы храним uint(...) в сообщении, вам нужно понять, как TVM работает для Message. На практике макет сообщения показывает, что для "сжатия" сообщения, которое мы хотим сохранить, мы должны сохранить его в "ячейку" и загрузить в смарт-контракт в качестве сообщения.

    2/ Значения по умолчанию для полей сообщений

    Есть ряд значений, которые нам нужно установить "по умолчанию", указав значения для bounced, src, ihr_fee, fwd_fee в некоторых случаях.

    Например, ниже приведен пример сообщения, которое мы помещаем в ячейку:

    var msg = begin_cell() .store_uint(0, 1) ;; tag .store_uint(1, 1) ;; ihr_disabled .store_uint(1, 1) ;; allow bounces .store_uint(0, 1) ;; not bounced itself .store_slice(source) .store_slice(destination) ;; serialize CurrencyCollection (see below) .store_coins(amount) .store_dict(extra_currencies) .store_coins(0) ;; ihr_fee .store_coins(fwd_value) ;; fwd_fee .store_uint(cur_lt(), 64) ;; lt of transaction .store_uint(now(), 32) ;; unixtime of transaction .store_uint(0, 1) ;; no init-field flag (Maybe) .store_uint(0, 1) ;; in-place message body flag (Either) .store_slice(msg_body) .end_cell(); 3/ Значение целых чисел в .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)

    Целые числа, используемые в .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1) укажите количество битов в соответствии со схемой TL-B с разбивкой по длине полей, которые там указаны. Но мы всегда указываем 0.

    Каждое целое число представляет длину в битах определенного поля в заголовке.

    Первое целое число '1' предназначено для поля tag * За ним следуют два '4для полейihr_disabledиbounce* Затем 64 бита для поляcreated_lt* 32 бита для поляcreated_at' * и, наконец, два 1' для 'init и `поля тела.

    Однако в приведенном примере все поля пусты, поэтому мы указываем 0 бит для всех полей.

    Ссылка:

    https://docs.ton.org/develop/smart-contracts/messages#message-layout * https://docs.ton.org/develop/smart-contracts/tutorials/wallet#commonmsginfo
  • [Решено] Как я могу перевести TON на PHP?

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

    Решено

    Я полагаю, что другие проекты TVM активно используют PHP, но TON этого не делает. Существуют расширения сообщества PHP, которые доступны для вашего использования, но они все еще находятся в разработке:

    https://github.com/olifanton/ton

    Это позволит вам взаимодействовать с кошельками:

    https://github.com/olifanton/ton/blob/main/src/Olifanton/Ton/Contracts/Wallets/V4/WalletV4.php

    Например, где переменная $kp - это ключевая пара, а переменная $transport - это структура, определенная SDK, которая по сути действует как поставщик:

    global $kp, $transport; $wallet = new WalletV3R1( new WalletV3Options( $kp->publicKey, ) ); $extMsg = $wallet->createTransferMessage( new TransferMessageOptions( dest: new Address("EQBYivdc0GAk-nnczaMnYNuSjpeXu2nJS3DZ4KqLjosX5sVC"), amount: Units::toNano("0.01"), seqno: (int)$wallet->seqno($transport), payload: "Hello world!", sendMode: SendMode::IGNORE_ERRORS->combine(SendMode::PAY_GAS_SEPARATELY) ) ); $transport->sendMessage($extMsg, $kp->secretKey);
  • 0 Голоса
    2 Сообщения
    16 Просмотры

    Решено

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

    В отличие от некоторых других блокчейнов, таких как Ethereum, "блокчейн TON не допускает динамической корректировки платы за газ в зависимости от рыночного спроса`. Цены на газ одинаковы для всех и определяются конфигурацией сети. * ** Таким образом, невозможно "заплатить больше", чтобы заставить валидаторов отдавать приоритет вашей транзакции перед другими.** *

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

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

    Решено

    compute_gas_fees и `other_fee" - это сборы, взимаемые сетью TON за обработку транзакций по смарт-контрактам.

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

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

    К сожалению, нет никакого способа снизить эти сборы напрямую. Однако есть несколько способов оптимизировать код вашего смарт-контракта, чтобы уменьшить количество взимаемых "compute_gas_fees". Это включает в себя оптимизацию алгоритмов, сокращение ненужных вычислений и минимизацию объема данных, хранящихся в блокчейне.

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

    Более подробную информацию о сборах вы можете получить здесь: https://ton.org/docs/develop/smart-contracts/fees#basic-fees-formula

  • Как сгенерировать график транзакций?

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

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

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

    click to show

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

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

    Решено

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

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

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

    Which means you should encode your parameters as: [https://toncenter.com/api/v2/getTransactions?address=Ef- kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprKDH&limit=2&lt=26866552000001&hash=PC%2Bfs9j6b6TVrIwkWlG%2BW%2B0ge2rM%2BzYCWC93GVL7OWM%3D&to_lt=0&archival=true](https://toncenter.com/api/v2/getTransactions?address=Ef- kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprKDH&limit=2&lt=26866552000001&hash=PC%2Bfs9j6b6TVrIwkWlG%2BW%2B0ge2rM%2BzYCWC93GVL7OWM%3D&to_lt=0&archival=true)

    Check out MDN docs in more (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent)

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

    Если я хочу взять блок транзакций из блокчейна TON и отсортировать их все в порядке выполнения, как я должен это сделать?

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

    click to show

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