Обычный шаблон, который я использую в своем контрактном программировании, может быть неэффективным по сравнению с использованием структур.Я хотел узнать мнение тех, у кого больше опыта в оптимизации памяти и газа.Например, в случае, когда я хочу отправлять сообщения на блокчейне, я бы сделал следующее (оставив много модификаторов и других деталей, поскольку это пример):
struct Message {
address otherParty;
bytes32 message;
}
struct User {
uint256 nextSent;
uint256 nextReceived;
uint256 lastReadIndex;
}
mapping (address => User) users;
//maps address to sent messages. (maps index to message struct)
mapping (address => mapping (uint256 => Message)) sent;
//maps address to received messages.
mapping (address => mapping (uint256 => Message)) received;
Будет ли приведенный ниже кодлучшая альтернатива?Мой текущий мыслительный процесс состоит в том, что два сопоставления подряд просто объединяют два ключа, а это означает, что для внутреннего сопоставления не требуется дополнительная память.Внешнее сопоставление уже резервирует требуемую память для его хеш-таблицы.
Но, опять же, размещение сопоставлений внутри структуры User делает все более понятным.И если я ошибаюсь из-за того, что внутреннее сопоставление не требует зарезервированной памяти, нет разницы между хранением двух сопоставлений у каждого пользователя или сохранением двух сопоставлений на каждого адреса (каждый из которых также связан с пользователем).).
struct Message {
address otherParty;
bytes32 message;
}
struct User {
uint256 nextSent;
uint256 nextReceived;
uint256 lastReadIndex;
mapping (uint256 => Message) sent;
mapping (uint256 => Message) received;
}
mapping (address => User) users;
С нетерпением ждем ответов на этот вопрос, и если оба они одинаковы, что предпочитает сообщество (я бы предположил второй метод).