Creé un contrato inteligente simple para almacenar grandes cantidades de datos (13-20kB) en la cadena de bloques de Ethereum. Pero cuando trato de realizar una transacción, a veces fallan (con poca correlación con la cantidad de datos) con un mensaje de "¡Advertencia! Error encontrado durante la ejecución del contrato [Fuera de gasolina] "
El límite de gas es 3000000 y no hay un umbral de datos claro que haga que la transacción falle. Dos transacciones con el mismo contenido pueden comportarse de manera diferente (una da un error y la otra no).
Aquí está el código que estoy usando para almacenar los datos:
contract SimpleStorage {
mapping(address => string) public Usersdata;
function Storedata(string data) public {
Usersdata[msg.sender] = data;
}
function getData() public view returns (string) {
return Usersdata[msg.sender];
}
}
Según el contrato que comentó (y edité para agregar a la pregunta original), no es sorprendente que tenga problemas con el gas. El almacenamiento por contrato cuesta 20k para la inicialización de una ranura, y cada ranura almacena 32 bytes. Almacenar 10 KB de datos en almacenamiento costaría aproximadamente 10000/32*20000 gas, que es más de 6 millones de gas. Esto también ignora el costo de los datos como datos de entrada, que no es barato (aunque es mucho más barato que los costos de almacenamiento). En general, almacenar grandes conjuntos de datos como este en la cadena se considera una mala práctica.
natewelch_
Ron Berreby
natewelch_
Ron Berreby
natewelch_
Ron Berreby