¿Hay un límite de gas para las solicitudes de vista?

Por ejemplo, una función que solo devuelve grandes datos de estructura. ¿Hay algún límite en los datos para que no sea posible llamar a esta función?

pragma solidity ^0.4.13;

contract Project
{
    struct Person {
        address addr;
        uint funds;
    }
    
    Person[] people;
    
    function getPeople(uint[] indexes)
        public
        view
        returns (address[], uint[])
    {
        address[] memory addrs = new address[](indexes.length);
        uint[]    memory funds = new uint[](indexes.length);
        
        for (uint i = 0; i < indexes.length; i++) {
            Person storage person = people[indexes[i]];
            addrs[i] = person.addr;
            funds[i] = person.funds;
        }
        
        return (addrs, funds);
    }
}

fuente de código

Si almacené 1000000000000... Persona, ¿puedo devolverlos con getPeople()?

Edit: Cambiada la función de ver, evitando confusiones.

Su función debe declararse view, y luego no debería haber ningún costo de gas involucrado. Todos los datos están (ya) en la cadena de bloques, no está cambiando nada, por lo que no hay minería involucrada, por lo tanto, no hay costo de gas posterior.
@goodvibration para aclarar, mi pregunta era si aún se puede ver una función que no puede ser llamada por un contrato ya que excedería el límite de gas.
En 2022, todavía parece que Geth proporcionará 50M de gas . Si necesita más, debe especificar .

Respuestas (2)

Si está llamando desde una cuenta externa (usando web3 o similar), entonces no hay costo de gas asociado porque la función es vista y se resuelve en el nodo al que está conectado. Por otro lado, si esto se llama desde un contrato, entonces habría un costo de gas asociado y el límite de gas es el mismo que para cualquier otra transacción.

En cuanto a la cantidad que señala, almacenar esta cantidad de datos es poco práctico y muy costoso. leyendo este formulario el nodo será factible, pero desde un contrato no funcionaría.

Espero que esto ayude

¿No hay problema debido a la memoria interna del evm?
Me perdí la parte donde el OP dijo que quiere almacenar y leer una gran cantidad de datos. La cantidad que sugiere no es práctica ya que es demasiado cara.
Te lo perdiste porque toda la pregunta es confusa y poco clara. Primero, el título de la pregunta pregunta "¿Existe un límite de gas para las solicitudes de vista?", lo que implica que la pregunta es sobre viewfunciones, que es más o menos a lo que se ha referido. Luego, en el cuerpo de la pregunta, la función en sí no se declara view, lo que realmente no se "alinea" con el título. Luego, una mirada más profunda muestra que se puede declarar view, haciendo que su respuesta vuelva a ser relevante. Y por último, la pregunta cambia repentinamente de lectura de datos a cambio de datos, por lo que su respuesta vuelve a ser incompleta.
Se actualizó la función usandoview

Definitivamente si, consume gas!

No consume gas cuando se llama desde un nodo local o SOLO Web3.

La ejecución del código que escribió consume gas en el EVM, incluso si no modifica la cadena de bloques sino solo la memoria local.

Si este no fuera el caso, cualquier función de visualización de EVM debería poder entrar en un bucle infinito sin detenerse en la eternidad...

Por ejemplo, su ciclo for consume gasolina: mire en las mesas de papel amarillo.

Por otro lado, si su aplicación de JavaScript que se ejecuta en su PC local accede a las variables públicas, no consume gas al leer la cadena de bloques (mediante el acceso a Web3, por ejemplo).

Solo para confirmar. ¿Tu 'definitivamente sí' está relacionado con la primera o la segunda pregunta?
En mi opinión, esta respuesta es engañosa: no es "definitivamente sí", ya que viewlas funciones de llamada no costarán gasolina cuando se llamen desde una cuenta externa. Todo esto se explica correctamente en la otra respuesta.
Definitivamente si consume gas, pero si llama por nodo local o Web3.
Agrego por Lauri Peltonen: la pregunta es clara, léase el título. La respuesta “definitivamente sí” es la respuesta correcta a ese título. Por supuesto.
Pero, ¿cuál sería el límite real de cantidad de datos que el nodo podría enviar a un cliente? ¿Está limitado por el mismo límite de gas en el bloque de génesis? ¿Está eso limitado en el nodo mismo?