Bitcoin Forum

Local => Кодеры => Topic started by: Cy80rG on October 25, 2017, 03:05:56 PM



Title: Контракт не принимает эфир
Post by: Cy80rG on October 25, 2017, 03:05:56 PM
Добрый день!

Изучаю эфириум и его смарт-контракты.
Пробую в тестовой приватной сети сделать смарт-контракты токенов и краудсейла.
Беру код вот отсюда https://ethereum.org/token#the-code (https://ethereum.org/token#the-code) и отсюда https://ethereum.org/crowdsale#the-code (https://ethereum.org/crowdsale#the-code)
Деплою через кошелек Эфириума (майнинг при этом работает, блоки собираются).
После деплоя контракта токенов и краудсейла пытаюсь с основного кошелька отправить эфир на адрес краудсейл-контракта, но получаю ошибку: It seems this transaction will fail. If you submit it, it may consume all the gas you provide.
Так же в окне подтверждения пишется "Estimated fee consumption: The contract won't allow this transaction to be executed".
Если ошибку проигнорировать, и подтвердить транзакцию, то ничего не происходит. Баланс не уменьшается, токены не зачисляются.
Кошелек Ethereum Wallet 0.9.2

Могли бы вы подсказать, почему так происходит? Где может быть ошибка?
Спасибо!


Title: Re: Контракт не принимает эфир
Post by: Jaga-Jaga on October 25, 2017, 08:08:21 PM
Добрый день!

Изучаю эфириум и его смарт-контракты.
Пробую в тестовой приватной сети сделать смарт-контракты токенов и краудсейла.
Беру код вот отсюда https://ethereum.org/token#the-code (https://ethereum.org/token#the-code) и отсюда https://ethereum.org/crowdsale#the-code (https://ethereum.org/crowdsale#the-code)
Деплою через кошелек Эфириума (майнинг при этом работает, блоки собираются).
После деплоя контракта токенов и краудсейла пытаюсь с основного кошелька отправить эфир на адрес краудсейл-контракта, но получаю ошибку: It seems this transaction will fail. If you submit it, it may consume all the gas you provide.
Так же в окне подтверждения пишется "Estimated fee consumption: The contract won't allow this transaction to be executed".
Если ошибку проигнорировать, и подтвердить транзакцию, то ничего не происходит. Баланс не уменьшается, токены не зачисляются.
Кошелек Ethereum Wallet 0.9.2

Могли бы вы подсказать, почему так происходит? Где может быть ошибка?
Спасибо!
На ethereum.org нормальные рабочие примеры, я сам проверял.
Ошибка как у вас у меня тоже была, возможно не с этими примерами, но вроде ее я решил очень просто, вроде если у вас контракт owned то его надо с параметром хозяина деплоить, в remix-е надо указать в поле "At Address" указать адрес хозяина. (адрес надо в кавычках указывать), как называется этот параметр в кошельке я не знаю. Если что попробуйте через remix задеплоить контракт.


Title: Re: Контракт не принимает эфир
Post by: ShDenis on October 26, 2017, 10:00:42 AM
может в контракте нет ни одной payable функции? нужно сделать.


Title: Re: Контракт не принимает эфир
Post by: Cy80rG on October 26, 2017, 11:13:10 AM
...если у вас контракт owned то его надо с параметром хозяина деплоить
Спасибо за ответ! Но нет, контракт не owned...

кстати, актуальный код с ethereum.org/crowdsale не компилируется - ругается на "event GoalReached(address beneficiary, uint amountRaised);", но поскольку это всего лишь описание я его меняю на "event GoalReached(address _beneficiary, uint _amountRaised);" и все ок. Но это так, мелочь...


Title: Re: Контракт не принимает эфир
Post by: Cy80rG on October 26, 2017, 11:33:45 AM
может в контракте нет ни одной payable функции? нужно сделать.
есть payable fallback:
function () payable {
        require(!crowdsaleClosed);
        uint amount = msg.value;
        balanceOf[msg.sender] += amount;
        amountRaised += amount;
        tokenReward.transfer(msg.sender, amount / price);
        FundTransfer(msg.sender, amount, true);
}
Это прямо из примера (копипейст)...

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


Title: Re: Контракт не принимает эфир
Post by: ShDenis on October 26, 2017, 11:45:39 AM
А с другого контракта не переводили на этот эфир? Если получится, возможно что данная payable функция ещё под какими-то требованиями, например, должна быть пустой, что бы контракт мог принимать платежи с кошелька напрямую. Что-то такое я где-то краем глаза видел.


Title: Re: Контракт не принимает эфир
Post by: Mishman on October 31, 2017, 01:44:37 PM
Да, перепроверьте, все ли условия выполняются при вызове function(), т.е. отправке эфира на адрес контракта. Обычно эта ошибка говорит о том, что какое-то условие в функции не может быть выполнено.


Title: Re: Контракт не принимает эфир
Post by: Cy80rG on November 08, 2017, 09:44:39 AM
Товарищи, всем спасибо за ответы! Проблема была в том, что на адрес краудсейл-контракта надо было перевести токены. Т.е. надо было, чтобы именно адрес краудсейл-контракта имел токены, а не адрес, с которого контракт деплоился... Я как-то умудрился упустить этот момент!... (( Надеюсь, теперь это кому-то тоже поможет!
Еще раз всем спасибо!!! )


Title: Re: Контракт не принимает эфир
Post by: yokotoka on November 09, 2017, 04:20:36 PM
А вы заранее фиксированную эмиссию токенов решили сделать?


Title: Re: Контракт не принимает эфир
Post by: Cy80rG on November 10, 2017, 08:49:30 AM
А вы заранее фиксированную эмиссию токенов решили сделать?
Да