Это чистый способ выйти из контракта в Solidity?

57
5

Я смотрел высоко и низко о том, как снять средства из контракта Ethereum без преобладания. Редактор Remix предупреждает, что эта функция может вызвать бесконечный цикл.

Gas requirement of function KOTH.cleanTheKingsChest() high: infinite. If the gas requirement of a function is higher than the block gas limit, it cannot be executed. Please avoid loops in your functions or actions that modify large areas of storage (this includes clearing or copying arrays in storage)

И... Должен ли я использовать безопасную математику Open-Zeppelin's для этой функции?

function cleanTheKingsChest() public isOwner {
uint bal = address(this).balance;
address(owner).transfer(bal);
}

спросил(а) 2018-04-28T20:01:00+03:00 2 года, 5 месяцев назад
1
Решение
58

Это передаст весь эфир, содержащийся в контракте, на адрес владельца. Нет проблемы с тем, как вы это делаете.

Причина предупреждения заключается в том, что вы вызываете другой адрес. Этот адрес сам по себе может быть контрактом с пользовательской функцией transfer или возврата (если метод transfer не определен). Поскольку Remix не знает, что может сделать эта реализация, он не может оценить использование газа. Это не вызывает беспокойства, поскольку transfer вызовов ограничивается 2100 газовой стипендией.

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

ответил(а) 2018-04-28T23:42:00+03:00 2 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема