В FunC существует ли эквивалент отображения Solidity?
-
У меня есть смарт-контракт, который принимает сообщения от пользователей. Я хотел бы сохранить историю запросов. Как я могу сохранить список пар (адрес, текст сообщения)? Правильно ли я понимаю, что я не могу использовать tuple для такого случая, потому что он имеет ограничение в 256 записей? Существуют ли какие-либо рекомендации по хранению такого динамического списка? Аналогично отображению в Solidity.
Этот вопрос был импортирован из чата Telegram: > <***Скрыто***
click to show
-
Диктует
Dicts можно использовать для хранения сопоставления ключей со значениями. Однако в TON рекомендуется избегать хранения неограниченных dicts. Это диктанты, которые динамически растут с течением времени. Вариант использования, который вы описали, является динамическим. Причина, по которой этого следует избегать, заключается в том, что ваше хранилище растет, и по мере его роста вам приходится платить все больше и больше, чтобы сохранить его в блокчейне.
Чтобы сохранить динамический список, вы должны разбить его на более мелкие части. Это называется сегментированием, и вы можете найти больше информации о том, как это сделать, в этой замечательной статье:
https://blog.ton.org/how-to-shard-your-ton-smart-contract-and-why-studying-анатомия-тонн-джеттонов
Кортежи
Кортежи ограничены 256 записями, но вы можете использовать их как неограниченный список в стиле ML. Это означает сохранить первый элемент в качестве первого элемента кортежа, а остальную часть списка в другом кортеже в качестве второго элемента и снова использовать эту же структуру для остальной части списка до конца, который обычно является нулевым значением:
(1, (2, (3, null())))
Но в FunC (и TON в целом) это полезно только для работы с данными в памяти, поскольку, когда вы хотите их сохранить, вы должны сериализовать их в ячейку.