С простыми переводами в ethereum всё понятно - комиссию платит отправитель, но когда дело доходит до смарт-контракта, то возникают вопросы.
Помогите разобраться.
Допустим есть смарт-контракт, который просто хранит деньги пользователей на балансе и по запросу переводит их назад на их кошельки.
1) Допустим пользователь перевёл 1 ETH на адрес контракта, и заплатил комиссию.
Дальше, контракт должен записать, что этот 1 ETH принадлежит именно этому пользователю.
За эту запись ведь нужно заплатить комиссию? И её должен заплатить контракт (так как запись инициирует он). Но как контракт комиссию будет платить, если на его счету пока 0? Возьмёт комиссию с баланса пользователя, для которого делает запись?
2) Допустим, через какое-то время пользователь решил запросить этот 1 ETH на свой кошелёк. Комиссию за перевод оплачивает отправитель - то есть смарт-контракт. Всё тот же вопрос - откуда контракт возьмёт деньги на оплату комиссии? С баланса этого же пользователя? Получается, что пользователь получит не 1 ETH, а за вычетом комиссии?
Независимо от количество контрактов в вызове (а их может быть больше одного) и не зависимо от того, какой тип транзакции (пересылка средств это просто подвид остальных обращений контракту и/или другому адресу) - всегда платит тот, кто подписал транзакцию.
Причем хоть и называется комиссией, но по факту инициатор должен оплатить сложность работы операции, измеряемую в газе. Отправка средств - это одна из самых дешевых транзакций, порядка 23 000 газа.
А вот вывод средств - это уже выполнение хоть какого-то минимального кода и будет дороже, хотя зависит от реализации.
И еще один момент - цена за газ очень сильно варьируется и иногда можно выставить 0, хотя гарантий что такая транзакция будет включена в блокчейн нет.
1) у смарта нет на счету ничего, в любое время все на счетах кошельков
Как это? Если на счету контракта не может быть денег, то куда они исчезают, когда пользователь переводит их на адрес смарт контракта?
Есть и другой вопрос из этой же области: в сети полно разных хайпов на смарт контрактах. Пользователи переводят деньги в смарт контракт и потом получают назад с %. Если деньги они переводят не в смарт контракт, то куда тогда?