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;
}
}
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!
Lauri Peltonen
kati