Leer la lista de publicaciones usando struct

Traté de leer una lista de publicaciones usando el siguiente código

struct posts {

  bytes32 postTag;
  string post;
  address[] acceptedBy;
  uint8[] voteCount;

}

mapping(address => posts) totaluserPosts;

Traté de leer todas las publicaciones de diferentes maneras, pero no pude encontrar la manera de hacerlo.

¿Es posible leer todas las publicaciones a través de una solicitud?

¿Estás tratando de devolver una matriz de las publicaciones de estructura?

Respuestas (1)

La respuesta corta es que debe crear una función porque el captador "gratuito" que recibe a través del publicmapeo no hace esto.

Una mejor respuesta es reconsiderar la necesidad del volcado masivo de datos. Por lo general, será suficiente si emite eventos cada vez que se inserta algo en esta estructura y eso significa que los clientes de software ya deberían estar informados sobre esta información. Ergo, ¿por qué volver a pedirlo dado que hacerlo consume mucha gasolina y no es especialmente rápido? Una descripción más completa de este pensamiento: https://blog.b9lab.com/the-joy-of-minimalism-in-smart-contract-design-2303010c8b09

Sugerencia. Convenciones de nombres:

struct PostStruct {

  bytes32 postTag;
  string post;
  address[] acceptedBy;
  uint8[] voteCount;

}

mapping(address => posts) postStructs;

Ejemplos de funciones personalizadas:

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;
}

Dado que el costo de la función anterior aumenta con la escala hasta el punto de ser inviable, es una buena idea incluir una alternativa de costo fijo:

function getPostAcceptedByByRow(address post, uint row) public returns(address acceptedBy) {
  return postStructs[post].acceptedBy[row];
}

Espero eso ayude.

¿Puede explicar lo que quiso decir con el mapeo (dirección => publicaciones) postStructs? @Rob HitchensB9lab
Se corrigió para un cambio de nombre consistente.