Consumo de gas de una función pública vista

En mi contrato, tengo una función pública de vista que devuelve una matriz de elementos bytes32. En remix, produce una advertencia que dice que podría quedarse sin límite de gas de bloque si uso esta función.

Como había leído, cuando una función no realiza cambios de estado, la define como vista pública. Entonces, cuando lo llama, no tiene que pagar ether porque su nodo local llama a las variables del contrato y lo ejecuta localmente. ¿Es esto correcto? Entonces, ¿por qué tengo que preocuparme por el límite de gas?

Vuelva a editar después del comentario de Peltonen de Lauri. El código que usé es:

pragma solidity ^0.4.18;
contract Project{
    bytes32[] array;

    function addValue(bytes32 element)public{
        //only the administrator can add new values
        array.push(element);
    }

    function getAll()view public returns(bytes32[]){
        return array;
    }
}
Por favor incluya su código
Lauri Peltonen i Reeditar el comentario e incluí el código

Respuestas (1)

No paga gasolina cuando llama a una función de visualización. Esto no cambia el hecho de que todavía tiene operaciones por hacer, que tienen costos y, por lo tanto, están sujetas al límite superior de gas en el bloque, así como a un límite de tiempo.

Es una mala idea tratar de devolver una matriz ilimitada completa, porque la llamada expirará y no obtendrá nada.

Lo que podría hacer es usar un cursor como este , artículo que aborda el problema al que se enfrenta.

DESCARGO DE RESPONSABILIDAD: ¡NO ES MI BLOG O ARTÍCULO!

Usted paga gasolina cuando llama a una función de vista desde dentro de una transacción
Sí, cuando lo llama dentro de otra función, pero no cuando lo llama "normalmente".
Eli Drion, gracias por el artículo, fue muy útil. Tengo una pregunta que dice: "Para las funciones de vista que se llaman desde fuera de EVM (por ejemplo, desde JavaScript en una aplicación web), el gas no es un factor limitante porque no se está ejecutando ninguna transacción. El nodo que procesa la llamada realiza el cálculo localmente y devuelve el resultado. Cada nodo puede establecer sus propios límites de procesamiento, lo que normalmente limita el tiempo de ejecución. Si la llamada tarda demasiado, fallará". Si uso trufa, ¿puedo establecer estos límites muy altos para no tener ningún problema?