почему моя функция вывода потребляет бесконечный газ? это довольно простая функция - PullRequest
1 голос
/ 05 ноября 2019

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

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

pragma solidity ^0.5.11;

//Our First Contract is a Faucet
contract Faucet
{

//Deposits ethers
 function deposit(uint256 amount) payable public {
     require(msg.value == amount);
    // nothing to do!
}


//Give out ether to anyone who asks
function withdraw(uint256 withdraw_amount) public
{
    if(withdraw_amount <= address(this).balance)
    {
        //Send  the amount to address which requested it
        msg.sender.transfer(withdraw_amount);

    }

}

}

Примечание: я успешно развернул контракт, но транзакциитерпят неудачу, потому что у них заканчивается газ. Это из-за этого предупреждения?

1 Ответ

2 голосов
/ 05 ноября 2019

ОБНОВЛЕНИЕ

Если вы хотите отправить эфир в контракт без вызова какой-либо из его функций, вам необходимо иметь запасную функцию в этом контракте.

Добавьте эту функцию в контракт:

function () external payable {}

Код выглядит отлично.

Я также не столкнулся с какими-либо проблемами при фактическом запуске вашего кода. Иногда сообщения об ошибках не точны. Может быть, вы называете отзыв со значением?

Вы можете использовать remix для проверки.

...