KostiaSA, ваша правда. По поводу необходимости payable функции, что бы на контракт вообще можно было перевод эфира сделать я уже отдельную тему с вопросом создал. По поводу data поля - это как вариант подойдёт, хотя не сильно удобно, и вопрос - а в каких кошельках может не быть этого поля? И ещё один вопрос - а как отследить и отличать перевод какого токена был сделан на контракт?
А чем модификатор payable для этой функции не подходит?
Я потихоньку тоже начинаю осваивать смарт контракты, у меня вопрос по payable функции, как можно задать цену вызова функции и как будет происходить оплата? Когда тот кто захочет вызвать мою payable функцию как он будет это делать и как я получу оплату за это? Еще хитрый вопрос, что будет если у того кто вызывает payable функцию немного не хватит эфира на балансе то функция совсем не вызовется или начнет исполняться код и потом где то функция остановится?
Никак цену вызова задать не получится. Боле того, это не вызов функции идёт, а перехват для обработки приёма платежа на стороне контракта. Можно только сделать проверку на сумму платежа внутри payable функции и возвращать деньги назад, если сумма неправильная. Т.е. пользователь делает произвольный перевод в адрес контракта, и функции payable контракта вызываются сами (нужно будет самому проверить все ли функции вызываются, в какой очерёдности, и можно ли вызвать функцию самостоятельно, хотя последнее маловероятно). Соответственно, если эфира на балансе меньше "необходимого", то перевод просто не получится сделать (нельзя имея на балансе 10 eth, перевести кому-то 11 eth, и наверное даже все 10ETH не получится отдать, по причине оплаты GAZ за транзакцию). Если же вызывается функция требующая GAZ за вызов, которого не достаточно, то код начнёт выполняться, но потом остановится и откатится до довызывного состояния. Потраченный GAZ не вернётся. Вроде как-то так.