Я попытался прочитать список сообщений, используя приведенный ниже код.
struct posts {
bytes32 postTag;
string post;
address[] acceptedBy;
uint8[] voteCount;
}
mapping(address => posts) totaluserPosts;
Я пытался читать все сообщения по-разному, но не мог найти способ сделать это.
Можно ли прочитать все посты через один запрос?
Короткий ответ: вам нужно создать функцию, потому что «бесплатный» геттер, который вы получаете через сопоставление, public
этого не делает.
Лучший ответ — пересмотреть необходимость создания массива данных. Обычно мне достаточно, если вы генерируете события каждый раз, когда что-то вставляется в эту структуру, и это означает, что программные клиенты уже должны быть проинформированы об этой информации. Следовательно, зачем просить об этом снова, если это газоемко и не особенно быстро. Более полное описание этого мышления: https://blog.b9lab.com/the-joy-of-minimalism-in-smart-contract-design-2303010c8b09
Предположение. Соглашения об именах:
struct PostStruct {
bytes32 postTag;
string post;
address[] acceptedBy;
uint8[] voteCount;
}
mapping(address => posts) postStructs;
Примеры пользовательских функций:
function getPostAddressCount(address post, uint row) public returns(uint count) {
return postStructs[post].address.length;
}
function getPostAcceptedBy(address post) public returns(address[] acceptedBy) {
return postStructs[post].acceptedBy;
}
Поскольку стоимость вышеописанной функции возрастает с масштабированием до такой степени, что становится неработоспособной, рекомендуется включить альтернативу с фиксированной стоимостью:
function getPostAcceptedByByRow(address post, uint row) public returns(address acceptedBy) {
return postStructs[post].acceptedBy[row];
}
Надеюсь, поможет.
вие