Lesen Sie die Liste der Beiträge mit struct

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?

Versuchen Sie, ein Array der Strukturposts zurückzugeben?

Antworten (1)

Die kurze Antwort ist, dass Sie eine Funktion erstellen müssen, da der "kostenlose" Getter, den Sie über das publicMapping 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.

können Sie erklären, was Sie mit der Zuordnung (Adresse => Beiträge) von postStructs gemeint haben? @Rob Hitchens B9lab
Korrigiert für konsistente Umbenennung.