¿La lectura de datos es gratuita a diferencia de una transacción? [duplicar]

Entiendo que escribir datos en un contrato inteligente es una transacción y costará gasolina. ¿Leer datos de blockchain costará gasolina?

Por ejemplo, tengo una estructura para recopilar datos sobre una persona: nombre, edad, sexo. Ahora sembré 1000 personas durante la inicialización del contrato. ¿Puedo consultar para obtener toda la información de las Personas? ¿Puedo escribir una función para iterar a través de la asignación de personas y devolver todos los registros? Por favor, hágame saber si hay alguna manera eficiente de hacer esto y si costará gasolina.

struct Person {
    uint age;
    string name;
    string gender;
}
mapping(uint => Person) Persons;

Respuestas (1)

Mientras solo lea datos de la cadena de bloques y no cambie la cadena de bloques, no necesita realizar una transacción. La función a la que llama se lleva a cabo solo por el nodo al que está conectado y no minado, de modo que no necesita pagar gasolina. Puedes encontrar más detalles en esta respuesta .

Entonces sí, puede consultar el mapeo. Si puede iterar a través del mapeo depende. Si usa como clave un contador que se actualiza con cada Persona que coloca en el mapeo, entonces puede hacerlo. Si la clave es un número que identifica a la Persona, no será posible iterar.

Tenga en cuenta que si uinten su mapeo es solo un contador, también podría usar una matriz de Person. Puede encontrar más información sobre diferentes patrones de almacenamiento en esta respuesta

Si define la asignación como Public, puede usar la función getter integrada para acceder a ella.

"puede consultar el mapeo e iterar a través de él " Creo que no hay forma de iterar a través de las claves de un archivo mapping. (Necesita conocer las claves de alguna otra manera).
Tienes razón, tengo que ser más específico. Supuse que la clave es un contador que aumenta con cada Persona que se coloca en el mapeo. Funcionará entonces, si conoce la cantidad de Personas que puso en el mapeo. Si la clave es un número que identifica a la persona de alguna manera, entonces no funcionará. Actualizaré la pregunta.
Tiene sentido que sea gratis, la mayoría de las veces obtiene los datos existentes de su nodo local directamente
Gracias por las respuestas. Sí, tengo un contador para rastrear la cantidad de registros y puedo iterar a través de él. Mi pregunta de seguimiento: ¿es una buena idea recorrer todos los registros? ¿Hay algún límite de memoria que pueda alcanzar? Estoy tratando de encontrar el mejor enfoque.
Supongo que estás hablando de devolver la matriz completa o el mapeo. Esperaría que haya un límite, pero no tengo más experiencia o conocimiento al respecto. En cuanto a la velocidad, suele ser recomendable recuperar algunos fragmentos más grandes que cada elemento por separado, ya que minimiza la sobrecarga de rpc.