Требование бесконечного газа: составление простого контракта на Remix

Я пытаюсь составить простой контракт на Remix, но получаю следующие 3 предупреждения:

  1. Потребность в газе для функции Greeter.hello() высокая: бесконечная. Если потребность в газе для функции выше, чем лимит газа в блоке, она не может быть выполнена. Пожалуйста, избегайте циклов в ваших функциях или действиях, которые изменяют большие области хранилища (включая очистку или копирование массивов в хранилище).
  2. Потребность в газе для функции Greeter.set(string) высокая: бесконечная. Если потребность в газе для функции выше, чем лимит газа в блоке, она не может быть выполнена. Пожалуйста, избегайте циклов в ваших функциях или действиях, которые изменяют большие области хранилища (включая очистку или копирование массивов в хранилище).

  3. Потребность в газе для функции Greeter.yourName() высокая: бесконечная. Если потребность в газе для функции выше, чем лимит газа в блоке, она не может быть выполнена. Пожалуйста, избегайте циклов в ваших функциях или действиях, которые изменяют большие области хранилища (включая очистку или копирование массивов в хранилище).

Контракт представлен ниже:

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;
   }
}

Кто-нибудь, пожалуйста, помогите мне, как удалить вышеуказанные предупреждения.

Зульфи.

Ответы (1)

Все эти предупреждения верны. Вы спрашивали, как их "удалить", но я думаю, что это неправильный подход. Они там, потому что вы манипулируете строками, и нет никакого способа узнать, какой длины будут эти строки, поэтому нет никакого способа узнать, сколько газа может быть израсходовано, манипулируя ими.

Вы можете использовать что-то кроме строк, например bytes32(которое можно примерно использовать для хранения до 32-байтовых строк), но почему? Если причина в том, чтобы просто «замолчать предупреждение», то я думаю, что вы можете неправильно понять цель и ценность предупреждений.

Спасибо. Я удалил их, используя bytes32 вместо строки везде в контракте. Спасибо за ваш ответ и за другой пост на этом форуме, который говорит то же самое.