Ich habe versucht, eine Liste von Beiträgen mit dem folgenden Code zu lesen
struct posts {
bytes32 postTag;
string post;
address[] acceptedBy;
uint8[] voteCount;
}
mapping(address => posts) totaluserPosts;
Ich habe versucht, alle Beiträge auf unterschiedliche Weise zu lesen, konnte aber keine Möglichkeit finden, dies zu tun.
Ist es möglich, alle Beiträge mit einer Anfrage zu lesen?
Die kurze Antwort ist, dass Sie eine Funktion erstellen müssen, da der "kostenlose" Getter, den Sie über das public
Mapping erhalten, dies nicht tut.
Eine bessere Antwort besteht darin, die Notwendigkeit des Massendatendumps zu überdenken. Normalerweise reicht es aus, wenn Sie jedes Mal Ereignisse ausgeben, wenn etwas in diese Struktur eingefügt wird, und das bedeutet, dass Software-Clients bereits über diese Informationen informiert sein sollten. Ergo, warum nochmal danach fragen, da dies spritintensiv und nicht besonders schnell ist. Eine vollständigere Beschreibung dieses Denkens: https://blog.b9lab.com/the-joy-of-minimalism-in-smart-contract-design-2303010c8b09
Anregung. Regeln der Namensgebung:
struct PostStruct {
bytes32 postTag;
string post;
address[] acceptedBy;
uint8[] voteCount;
}
mapping(address => posts) postStructs;
Beispiele für benutzerdefinierte Funktionen:
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;
}
Da die Kosten der obigen Funktion mit der Skalierung bis zur Unbrauchbarkeit steigen, ist es eine gute Idee, eine Alternative mit festen Kosten einzubeziehen:
function getPostAcceptedByByRow(address post, uint row) public returns(address acceptedBy) {
return postStructs[post].acceptedBy[row];
}
Ich hoffe es hilft.
vhi