[решено] Несогласованный фрагмент при вызове my_address() в разных контекстах
-
Я сталкиваюсь с несогласованностью при вызове
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 он выдает разные результаты в зависимости от контекста, в котором он вызывается. Кто-нибудь может объяснить, почему это происходит и как я должен с этим справиться?
-
CS{ячейка{...} биты: 0..267; ссылки: 0..0}
- это строковое представление фрагмента. Срез - это структура для считывания ячейки.В вашем примере, в зависимости от контекста, 2 разные ячейки возвращаются и преобразуются в фрагменты. Первый имеет 267 бит, а второй - 268 бит, но также начинается с бита 1.
То есть, несмотря на то, что эти ячейки разные, поскольку срезы начинаются с разных индексов, в конце они представляют одно и то же, и, как вы сказали, после их синтаксического анализа с использованием
parse_std_addr
, они оба возвращают один и тот же адрес.Используя этот адрес, они должны создать один и тот же дочерний адрес. Ваша проблема может заключаться в этой части вашего кода.