Получение исходного сообщения из транзакции ETH

Когда кто-то просто отправляет ETH с одного адреса на другой и предполагает, что этот человек не включает в транзакцию специальное сообщение, то какое именно сообщение, отправляемое в сети, используется для подписи транзакции?

Читая основы того, как работает подпись сообщений, я обнаружил, что используется следующий метод и формула:

sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))

... но если подписывающая сторона не включает сообщение и отправляет только ETH или, возможно, просто использует MetaMask для отправки средств, что именно становится сообщением?

(Примечание: выполнение декодирования транзакции показывает, что поле «данные» просто «0x», но не уверен, связано ли это поле данных с самим сообщением или нет).

Ответы (1)

Все транзакции Ethereum содержат dataполе. Это поле может быть

  • Пустой

  • Полезная нагрузка для вызова функции смарт-контракта

  • Любое сообщение пользователя

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

Когда он пуст, содержит ли он по-прежнему префикс «\x19Ethereum Signed Message:\n», встроенный как часть необработанных данных транзакции?
Нет. Вы имеете в виду преамбулу подписи сообщения, и ее цель состоит в том, чтобы отличать подписанные транзакции Ethereum от подписанных сообщений Ethereum (не может иметь один и тот же хэш).