Как контракт получателя может узнать исходного отправителя с помощью токена ERC223 tokenFallback?

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

Отправитель --> Контракт токена --> Контракт получателя

Означает ли это, что msg.senderконтракт получателя получит адрес токена? Если да, то как контракт получателя может знать первоначальный адрес отправителя?

Ответы (1)

Вы правы, что msg.senderв получателе будет адрес токена-контракта. Вот почему первым параметром tokenFallbackявляется адрес исходного отправителя: для токена, совместимого с ERC223, получатель узнает исходного отправителя по этому первому параметру.

https://github.com/ethereum/EIPs/issues/223 упоминает следующие моменты:

Контракт на работу с токенами

function tokenFallback(address _from, uint _value, bytes _data)Функция для обработки передачи токенов, которая вызывается из контракта токена, когда держатель токена отправляет токены. _from— адрес отправителя токена, _value — количество входящих токенов, а _data — прикрепленные данные, аналогичные msg.data транзакций Ether. Работает по аналогии с резервной функцией транзакций эфира и ничего не возвращает.

ПРИМЕЧАНИЕ. msg.sender будет токеном-контрактом внутри функции tokenFallback. Может быть важно отфильтровать, какие токены отправляются (по адресу токена-контракта). Отправитель токена (человек, инициировавший транзакцию токена) будет _from внутри функции tokenFallback.