Requisito de gas infinito: Compilación de un contrato simple en Remix

Estoy tratando de compilar un contrato simple en Remix pero recibo las siguientes 3 advertencias:

  1. Requerimiento de gas de la función Greeter.hello() alto: infinito. Si el requisito de gas de una función es superior al límite de gas del bloque, no se puede ejecutar. Evite bucles en sus funciones o acciones que modifiquen grandes áreas de almacenamiento (esto incluye borrar o copiar arreglos en almacenamiento)
  2. Requisito de gas de la función Greeter.set(string) alto: infinito. Si el requisito de gas de una función es superior al límite de gas del bloque, no se puede ejecutar. Evite bucles en sus funciones o acciones que modifiquen grandes áreas de almacenamiento (esto incluye borrar o copiar arreglos en almacenamiento)

  3. Requerimiento de gas de la función Greeter.yourName() alto: infinito. Si el requisito de gas de una función es superior al límite de gas del bloque, no se puede ejecutar. Evite bucles en sus funciones o acciones que modifiquen grandes áreas de almacenamiento (esto incluye borrar o copiar arreglos en almacenamiento)

El contrato se da a continuación:

pragma solidity ^0.4.22;

contract Greeter {
   string public yourName;
   constructor() public{
      yourName = "World";
   }
   function (string name) public {
      yourName = name;
   }
   function hello( ) public constant returns (string) {
      return yourName;
   }
}

Algún cuerpo, por favor, guíeme sobre cómo eliminar las advertencias anteriores.

Zulfi.

Respuestas (1)

Todas esas advertencias son correctas. Preguntaste cómo "eliminarlos", pero creo que ese es el enfoque incorrecto. Están allí porque estás manipulando hilos, y no hay forma de saber cuánto durarán esos hilos, por lo que no hay forma de saber cuánto gas se podría consumir manipulándolos.

Podría usar algo más que cadenas, por ejemplo bytes32(que se puede usar aproximadamente para almacenar cadenas de hasta 32 bytes), pero ¿por qué? Si el motivo es simplemente "para silenciar una advertencia", entonces creo que puede estar malinterpretando el propósito y el valor de las advertencias.

Gracias. Los eliminé usando bytes32 en lugar de cadenas en todas partes del contrato. Gracias por tu respuesta y por otro post en este foro que dice lo mismo.