• Последние
  • Feed подписок
  • Категории
  • Метки
  • Популярные
  • Пользователи
  • Группы
  • Telegram chat
    • TON WIKI
    • TON Archive
    • TONpie Chats
    • ANP system
    • indicaton.io
Theme Center
  • Theme Center
  • default

  • reset theme
Collapse

tonpie.io

    • Все категории
    Загрузить новые сообщения
Авторизуйтесь, чтобы написать сообщение
  • AnswersA

    [Решено] Запрос о передаче имени пользователя TG NFT и кода ошибки 206

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func a-nft a-smart-contract
    0 Голоса
    2 Сообщения
    50 Просмотры
    AnswersA

    Решено

    Это отличный вопрос. Если вы проверите URL репозитория для этого NFT, который является кодом в FunC, Telemint, вы увидите строку кода, которая гласит throw_unless(err::not_enough_funds, bid >= initial_min_bid);*1.

    Эта строка означает, что вам нужно больше средств в самом NFT, чтобы запустить такого рода транзакцию на практике. Другими словами, ** "недостаточно средств"** означает, что вы должны пополнить баланс смарт-контракта NFT таким образом, чтобы на нем было больше 1 йены.

    *1: https://github.com/TelegramMessenger/telemint/blob/c6e3d326376fa902c932299e6bfd710111ee2fed/func/nft-collection-no-dns.fc#L47

  • AnswersA

    [Решено] Каков размер в байтах смарт-контракта, который может быть развернут на TON?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func a-smart-contract a-tact
    0 Голоса
    2 Сообщения
    74 Просмотры
    AnswersA

    Решено

    Максимальный размер смарт-контракта, развернутого в сети TON, зависит от сложности контракта и количества используемых им ячеек. В общем, размер представления смарт-контракта в виде пакета ячеек (BoC) не должен превышать предельный размер одного блока shardchain, который составляет 2 МБ. Однако практические ограничения для смарт-контрактов намного меньше.

    Одна ячейка в сети TON может хранить до "1023 битов данных" и имеет "4 ссылки на другие ячейки`. Чем сложнее смарт-контракт, тем больше ячеек он будет использовать. Однако не существует строгого правила относительно количества ячеек, которые может содержать смарт-контракт, поскольку это зависит от конкретного варианта использования и сложности контракта.

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

    2 МБ на основе приведенного здесь: https://docs.ton.org/develop/howto/faq#average-block-size
  • AnswersA

    [Решено] В TON, как мы можем обрабатывать большие объемы данных в сообщениях? Каковы некоторые методы эффективного хранения и передачи больших объемов данных с помощью сообщений?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func a-messages a-transactions
    0 Голоса
    2 Сообщения
    103 Просмотры
    AnswersA

    Решено

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

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

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

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

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

  • AnswersA

    [Решено] Что означает `int_msg_info` в этой функции?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func a-messages a-transactions
    0 Голоса
    2 Сообщения
    91 Просмотры
    AnswersA

    Решено

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

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

    Почему мы храним 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
  • AnswersA

    Почему `recv_internal` / `recv_external` здесь одинаковы в примере с платежными каналами?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func a-smart-contract
    0 Голоса
    1 Сообщения
    47 Просмотры
    AnswersA

    Например, если вы подробно изучите код здесь: https://github.com/ton-blockchain/payment-каналы/blob-объект/e605580c3fb1feb22d80be9a0cddfcd05671c347/функция/асинхронныйканал.функция#L583

    Вы увидите, что код одинаков как для внешних, так и для внутренних функций приема:

    () recv_internal (int contract_balance, int _, cell _, slice in_msg) { return recv_any(contract_balance, in_msg); } () recv_external (int contract_balance, int _, cell _, slice in_msg) { ;; Note that only cooperative_close and cooperative_commit ;; will be accepted return recv_any(contract_balance, in_msg); }

    Мой вопрос таков: в чем разница между этими функциями в FunC и почему это происходит?

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

  • AnswersA

    [Решено] Не удается развернуть функциональный смарт-контракт: ошибка с кодом выхода 34.

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func a-smart-contract
    0 Голоса
    2 Сообщения
    37 Просмотры
    AnswersA

    Решено

    Две проблемы:

    Вы должны прочитать адрес из фрагмента через load_msg_addr, а не load_bits 2. Сохраняйте адрес в builder через Addr, а не addr

    addr - это псевдоним для 256uint. Между тем, полная сериализация адресов с помощью Addr также включает тег формата адреса, рабочую цепочку, 256-битную часть и некоторые дополнительные поля.

  • AnswersA

    [Решено] Где я могу найти функциональный код кошелька v3r1 и v3r2?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func
    0 Голоса
    2 Сообщения
    64 Просмотры
    AnswersA

    Решено

    Вы можете найти их в следующем репозитории GitHub, но они были написаны на Fift:

    https://github.com/ton-blockchain/ton/tree/master/crypto/smartcont

  • AnswersA

    [Решено] Как мне сохранить строку в FunC?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func
    0 Голоса
    3 Сообщения
    65 Просмотры
    AnswersA

    Вы также можете хранить более длинные строки, создав связанный список ячеек, смотрите пример здесь - [SnakeCell](https://github.com/getgems-io/nft - контракты/blob/main/пакеты/nft-контент/nftContent.ts)

  • AnswersA

    [Решено] Каков наилучший способ отладки неожиданных сбоев тестирования в FunC?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-debugging a-func
    0 Голоса
    2 Сообщения
    82 Просмотры
    AnswersA

    Решено

    Вы ищете функцию dump_stack().

    https://ton.org/docs/develop/func/stdlib/#dump_stack

    Он выводит последние 255 значений в стеке и показывает общую глубину стека.

    () dump_stack() impure asm "DUMPSTK";

    Также есть встроенные модули ~dump и ~strdump.

    https://ton.org/docs/develop/func/builtins#dump-variable

  • AnswersA

    [Решено] Является ли более экономичным использование Fift вместо FunC?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-fees a-fift a-func
    0 Голоса
    3 Сообщения
    92 Просмотры
    AnswersA

    Да, можно написать свой код непосредственно в Fift, чтобы сделать его более экономичным с точки зрения потребления газа. Причина в том, что Fift является языком более низкого уровня, чем FunC, что означает, что он обеспечивает более детальный контроль над кодом и позволяет более эффективно программировать.

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

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

  • AnswersA

    [Решено] Как получить текущую дату в FunC?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func
    0 Голоса
    2 Сообщения
    26 Просмотры
    AnswersA

    Решено

    функция now() вернет текущую дату в секундах

    https://ton.org/docs/develop/func/stdlib#now

  • AnswersA

    [Решено] Есть ли функция квадратного корня в FunC?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func
    0 Голоса
    2 Сообщения
    41 Просмотры
    AnswersA

    Решено

    Встроенной функции sqrt() нет, но вы можете использовать функцию из репозитория open-contracts:

    https://github.com/TonoxDeFi/open-contracts/tree/main/contracts/math

    В документации также есть список библиотек сообщества для FunC:

    https://ton.org/docs/develop/smart-contracts/libraries#libraries-from-community
  • AnswersA

    [Решено] Позволяет ли FunC вызывать функции рекурсивно?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func
    0 Голоса
    2 Сообщения
    61 Просмотры
    AnswersA

    Решено

    Да, вы можете выполнять рекурсивные вызовы в FunC. И это в основном то же самое, что и в других языках программирования. Простой пример рекурсивной функции pow:

    int pow (int num, int base) { if (base == 0) { return 1; } if (base % 2 == 1) { return pow(num, base - 1) * num; } int sqr = pow(num, base / 2); return sqr * sqr; }
  • AnswersA

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

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-architecture a-func
    0 Голоса
    2 Сообщения
    50 Просмотры
    AnswersA

    Решено

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

  • AnswersA

    Как вы можете получить доступ к отдельным элементам кортежа в FunC во время цикла while?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func
    0 Голоса
    2 Сообщения
    32 Просмотры
    AnswersA

    Используйте at, встроенную функцию int:

    https://ton.org/docs/develop/func/builtins

  • AnswersA

    [Решено] Почему функция uncons не выводит кортеж должным образом?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func
    0 Голоса
    2 Сообщения
    46 Просмотры
    AnswersA

    Решено

    https://ton.org/docs/develop/func/stdlib#uncons

    uncons работает со списками, а не с обычными кортежами.

  • AnswersA

    [Решено] Как хранить строки длиной более 1023 бит в ячейках TON?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func
    0 Голоса
    3 Сообщения
    59 Просмотры
    AnswersA

    Решено

    Это правильно; вам нужно использовать кодировку данных Snake, если вы хотите сохранить более 1023 бит в смарт-контракте (TVM).

    У вас нет другого выбора.

    Короткий ответ заключается в том, чтобы использовать метод, предоставленный Arter, проверив пример кода кодировки snake здесь: Пример кода кодировки Snake

    Кроме того, для более полного понимания того, как включить этот процесс в свою работу, вы можете обратиться к следующей документации: Ссылка на кодирование данных Snake

  • AnswersA

    [Решено] Как ссылка сериализуется в FunC?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func a-serialize a-storage
    0 Голоса
    2 Сообщения
    60 Просмотры
    AnswersA

    Решено

    Не пытайтесь десериализовать / сериализовать ссылочное значение, как если бы вы использовали целое число. Вместо этого используйте load_ref:

    (slice, cell) load_ref(slice s) asm( -> 1 0) "LDREF";

    https://ton.org/docs/develop/func/stdlib/#load_ref

  • AnswersA

    [Решено] Что такое MessageAny?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func
    0 Голоса
    2 Сообщения
    26 Просмотры
    AnswersA

    Решено

    "MessageAny" - это тип, который ссылается на тип Message.

    https://github.com/ton-блокчейн/ton/blob/master/crypto/block/block.tlb#L155

  • AnswersA

    [Решено] Как объединить строки в FunC?

    Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском a-func
    0 Голоса
    2 Сообщения
    52 Просмотры
    AnswersA

    Решено

    Тип string в FunC представлен slice , поэтому вам нужно создать новую ячейку и поместить в нее подстроки:

    slice charA = "A"; ;; char A slice charB = "B"; ;; char b ;; create cell with "ABBA" string in it cell cellABBA = begin_cell() .store_slice(charA) .store_slice(charB) .store_slice(charB) .store_slice(charA) .end_cell(); ;; convert cell to slice (or simply use the cell itself) slice stringABBA = cellABBA.begin_parse(); ~strdump(stringABBA); ;; #DEBUG#: ABBA
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Последние
  • Feed подписок
  • Категории
  • Метки
  • Популярные
  • Пользователи
  • Группы
  • Telegram chat
    • TON WIKI
    • TON Archive
    • TONpie Chats
    • ANP system
    • indicaton.io
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.