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

  • reset theme
Collapse

tonpie.io

Подпишись на канал фаундера и разработчика экосистемы tonpie

[решено] Несогласованный фрагмент при вызове my_address() в разных контекстах

Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском
2 Сообщения 1 Posters 31 Просмотры
    • Сначала старые
    • Сначала новые
    • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • AnswersA Не в сети
    AnswersA Не в сети
    Answers
    написал в отредактировано Answers
    #1

    Я сталкиваюсь с несогласованностью при вызове my_address() в разных контекстах и надеюсь, что кто-нибудь сможет помочь мне понять, почему это происходит.

    Когда я вызываю my_address() внутри функции get, она возвращает фрагмент, который начинается с 0 бит, как показано ниже:

    CS{Cell{004380008d090b360188f0560ee4010388f181ad345579022d85d84b0ac904ead5acb410} bits: 0..267; refs: 0..0}
    

    И наоборот, когда я вызываю my_address() внутри нечистой функции, она возвращает фрагмент, начинающийся с 1 бита:

    CS{Cell{026fc0004684859b00c4782b07720081c478c0d69a2abc8116c2ec25856482756ad65a0254910843292a22680000000001ab3f0500bd26da1340} bits: 1..268; refs: 0..0}
    

    Несмотря на эти различия, когда я анализирую оба адреса с помощью parse_std_addr, они возвращают одну и ту же рабочую цепочку и 256-разрядный целочисленный адрес:

    workchain = 0
    integer address = 1993502832782254581058910437300945815969310326214648768594806511355848123808
    

    Следовательно, при вычислении дочернего адреса контракта с использованием my_address он выдает разные результаты в зависимости от контекста, в котором он вызывается. Кто-нибудь может объяснить, почему это происходит и как я должен с этим справиться?


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

    1 ответ Последний ответ
    0
  • AnswersA Не в сети
    AnswersA Не в сети
    Answers
    написал в отредактировано Answers
    #2

    Решено

    CS{ячейка{...} биты: 0..267; ссылки: 0..0} - это строковое представление фрагмента. Срез - это структура для считывания ячейки.

    В вашем примере, в зависимости от контекста, 2 разные ячейки возвращаются и преобразуются в фрагменты. Первый имеет 267 бит, а второй - 268 бит, но также начинается с бита 1.

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

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

    1 ответ Последний ответ
    0

  • Войти

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

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

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

  • Login or register to search.