• Существует ли эквивалент инструкции "NOP" в Fift?

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

    ищите подходящие инструкции здесь - https://docs.ton.org/learn/tvm-инструкции/instructions

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

    Почему во время процедуры TonCLI run_tests появляется "уже определено", даже если в тестовом файле есть только 2 процедуры?

    Ошибка заключается в следующем:

    [ 1][t 0][2022-08-03 17:54:16.452700431][Fift.cpp:67] top: abort level 1: swap { <continuation 0x5592f7b91d00> } if HERE drop level 2: [in @PROC:<{:] over @fail-ifdef HERE 2 { <continuation 0x5592f7c09180> } does null swap @doafter<{ 0 32 u, level 3: <text interpreter continuation> level 4: <continuation 0x5592f7bae2d0> level 5: <text interpreter continuation> [ 1][t 0][2022-08-03 17:54:16.452739603][fift-main.cpp:204] Error interpreting file `/tmp/tmpohjkaaen.fif`: contract_tests.fif:84: PROC:<{:procedure already defined

    Всякий раз, когда я переопределяю тестовый контракт в попытке исправить его, он терпит неудачу на этапе сборки.

    Кроме того, всякий раз, когда я закомментирую следующий код, ошибка никогда не срабатывает:

    cell build_new_addr( int addr ){ cell new_addr = begin_cell() .store_uint(1, 2) .store_uint(5, 9) .store_uint(addr, 5) .end_cell(); return new_addr; }

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

    click to show

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

  • Как скомпилировать файл fift в целом?

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

    Поскольку я подробно изучаю проект multisig, как я могу использовать командную строку в GitHub (https://github.com/akifoq/multisig) используя следующую команду:

    fift -s <script-name> <args>.

    Можете ли вы дать какие-то общие рекомендации по этому поводу?"

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

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

    Попробуйте установить через GitHub вместо pip:

    https://github.com/disintar/toncli

  • В Fift, как работает слово "word"?

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

    Функции в Fift называются "словами", и для них есть специальное слово "word". Технический документ (https://ton.org/docs/fiftbase.pdf) объясняет это таким образом:

    « word (x – S) , анализирует слово , разделенное символом с кодовой точкой Unicode x , из оставшейся части текущей строки ввода и выдает результат в виде строки. Например, bl word abracadabra type выведет строку “abracadabra”. Если x = 0 , пропускает начальные пробелы, а затем сканирует до конца текущей строки ввода. Если x = 32 , пропускает начальные пробелы перед разбором следующего слова».

    Но я не совсем понимаю, как работает "x", не могли бы вы объяснить это другими словами? Я вижу, что некоторые люди используют команды типа "124 слова", что это означает? Если я хочу использовать \n в качестве разделителя слов, что мне следует использовать?

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

    click to show

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

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

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

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

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

  • Что почитать о Fift?

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

    В разделе Fift в документах только что появилась обзорная страница за это.

    В настоящее время в нем перечислены такие ссылки:

    Технический документ, о котором вы упомянули * Сообщение в блоге «Введение в Fift» * Примеры скриптов Fift * Видеоряд на русском языке (английская версия из этой серии тоже только начался, но на момент написания статьи есть только одно англоязычное видео)

    Кроме того, в документах есть еще две страницы:

    Сборка Fift и TVM * Пять глубоких погружений
  • 0 Голоса
    1 Сообщения
    6 Просмотры

    Кто-нибудь знает, что означает следующее сообщение об ошибке Fift? Я думаю, что я правильно настроил fiftlib.

    [fift-main.cpp:204] Error interpreting file counter.fif: counter.fif:8: PROCINLINE:<{:-?"

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

    click to show

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

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

    Решено

    Самый простой способ решить эту проблему - просто загрузить предварительно скомпилированный двоичный файл:

    https://github.com/ton-defi-org/ton-binaries

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

    Решено

    PUSHINT - это инструкция TVM-asm, необходимая для сборки смарт-контракта. Аналог из Fift - это просто написание числа "1" или любого другого, которое вы хотите.

    Использование кодов операций TVM вне смарт-контракта невозможно.

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

    Решено

    У Fift есть некоторая документация на официальном сайте:

    https://ton.org/docs/develop/fift-and-tvm-assembly * https://ton.org/docs/develop/fift-deep-dive
  • 0 Голоса
    1 Сообщения
    9 Просмотры

    Я получаю следующую ошибку при компиляции Fift. Я использую эту команду:

    ./ton-build/crypto/fift counter.fif

    Fift path error

    Я следовал [этому руководству](https://ton.org/docs/#/compile?id=download-global - config), но когда я запускаю func или fift, я получаю

    Команда 'func' не найдена, вы имели в виду....

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

    click to show

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

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

    Решено

    Если коротко, то да. ** Смарт-контракты записываются в FunC, затем компилируются в Fift и развертываются на блокчейне.** Позже с ними можно взаимодействовать с помощью либо Fift, либо SDK-оболочки.

    С другой стороны, при вызове recv_internal в стеке всегда есть 4 аргумента.

    Объявляя recv_internal с менее чем 4 аргументами, вы заставляете FunC игнорировать большинство глубоких переменных (они все равно будут там, но ваш код не будет знать об этом на протяжении всего выполнения TVM).

    вот пример для recv_internal в последнем [учебном пособии](https://ton - community.github.io/tutorials/02-contract /) построен сообществом:

    () recv_internal(int msg_value, cell in_msg, slice in_msg_body) impure { ;; well known function signature if (in_msg_body.slice_empty?()) { ;; check if incoming message is empty (with no body) return (); ;; return successfully and accept an empty message } int op = in_msg_body~load_uint(32); ;; parse the operation type encoded in the beginning of msg body var (counter) = load_data(); ;; call our read utility function to load values from storage if (op == 1) { ;; handle op #1 = increment save_data(counter + 1); ;; call our write utility function to persist values to storage } }

    Вы можете узнать больше здесь: https://ton.org/docs/learn/tvm-instructions/tvm-обзор#инициализацияtvm

    Для более глубокого понимания вы можете проверить Ch4.4 в техническом документе https://ton.org/tblkch.pdf

  • Как вычислить синус в Fift?

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

    Во многих языках программирования существуют методы, подобные Math.sin() в Java, которые возвращают синус угла. Как я могу вычислить такое значение с помощью Fift?

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

    click to show

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

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

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

    Декомпиляция кода включает в себя преобразование "низкоуровневого" представления программы, такого как "байт-код" или "сборка", обратно в исходный код более высокого уровня, который легче читается человеком. Хотя теоретически возможно перепроектировать код Fift обратно в FunC, существует несколько связанных с этим проблем:

    Потеря информации: В процессе компиляции некоторые высокоуровневые абстракции и языковые конструкции в функциональном коде могут быть утеряны или преобразованы таким образом, что их будет трудно восстановить.

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

    Оптимизация: Оптимизация компилятора может еще больше усложнить процесс декомпиляции, поскольку она может изменить структуру и поток кода.

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

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

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

    Решено

    Вариант 1 - загрузить предварительно скомпилированные двоичные файлы TON

    Вы можете найти предварительно скомпилированные двоичные файлы для func, fift и lite-client в репозитории https://github.com/ton-defi-org/ton-binaries

    Загрузите двоичные файлы из Релизов страница этого репозитория - убедитесь, что выбрали правильную версию в соответствии с используемой вами операционной системой и установили дополнительные зависимости

    После загрузки убедитесь, что загруженные двоичные файлы являются исполняемыми, изменив их разрешения (т.е. запустив chmod +x fift). Также полезно поместить эти двоичные файлы в свой путь (или скопировать их в /usr /local /bin), чтобы убедиться, что вы можете получить к ним доступ из любого места.

    Чтобы проверить, что все было установлено правильно, запустите в терминале fift -V && func -V && lite-client -V

    Если вы планируете использовать fift, также скачайте fiftlib.zip , откройте zip-файл в каком-нибудь каталоге на вашем компьютере (например, /usr/local/lib/fiftlib) и установите переменную окружения FIFTPATH так, чтобы она указывала на этот каталог.

    Вариант 2 - скомпилируйте самостоятельно

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

    Суть инструкций для Linux (Ubuntu / Debian) приведена ниже:

    sudo apt update sudo apt install git make cmake g++ libssl-dev zlib1g-dev wget cd ~ && git clone https://github.com/ton-blockchain/ton.git cd ~/ton && git submodule update --init mkdir ~/ton/build && cd ~/ton/build && cmake .. -DCMAKE_BUILD_TYPE=Release && make -j 4 Вариант 3 - другие источники для двоичных файлов

    Основная команда обеспечивает автоматические сборки для нескольких операционных систем в виде Действий на GitHub.

    Перейдите по ссылке выше, выберите рабочий процесс слева, соответствующий вашей операционной системе, нажмите на недавнюю сборку green passing и в разделе "Артефакты" загрузите "ton-двоичные файлы".