Исключение твердости "из газа" при попытке передать эфир - PullRequest
0 голосов
/ 08 января 2019

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

Предупреждение от Remix

Ошибка от MetaMask

Я пробовал разные методы, например:

address.transfer(amount);
address.send(amount);
address.call.value(amount)( );

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

Я также пытался отрегулировать газ, и он не работал, я также пробовал необходимые 2300 для передачи, указанной в документах .

код:

pragma solidity ^0.4.24;

contract TestContract {        
    function payAddress(address _address) external payable {
         _address.transfer(msg.value);
    }
}

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

Спасибо, что прочитали.

редактирование:

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

Текущий код:

pragma solidity ^0.4.24;

contract TestContract {

    function() external payable { }

    function payContract() public payable {}

    function paySomeone(address _address, uint256 _amount) external {
         _address.transfer(_amount);
    }

    function getBalance() public view returns (uint256) {
         return address(this).balance;
   }

}

Остаток по договору

Используемые параметры

Та же ошибка метамаски, что и раньше

Как вы можете видеть здесь, баланс контракта составляет 10 wei, но когда я пытаюсь отправить 9 wei, он все равно выдает ошибку из-за газа. Я также все еще получаю ту же ошибку от Remix, как и раньше.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Я также опубликовал вопрос на бирже стеков и получил там ответ. Вопрос был мой Ганаш версия. Я переключился на тестовую сеть Robsten, и она заработала. Я свяжу пост здесь .

0 голосов
/ 08 января 2019

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

...