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);
}
}
Si almacené 1000000000000... Persona, ¿puedo devolverlos con getPeople()
?
Edit: Cambiada la función de ver, evitando confusiones.
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
view
funciones, 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.view
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).
view
las funciones de llamada no costarán gasolina cuando se llamen desde una cuenta externa. Todo esto se explica correctamente en la otra respuesta.
buena vibración
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.senju
ética