Отправляют ли внешние аккаунты сообщения/транзакции друг с другом? Почему контракт не подписывает свое сообщение?

Вопрос 1: Может ли один владелец счета отправить эфир другому без использования смарт-контракта?

Вопрос 2: Есть ли необходимость, чтобы две учетные записи отправляли сообщения/транзакции напрямую друг другу?


  • транзакция: подписанное сообщение: отправлено внешней учетной записью.
  • сообщение отправляется по контракту другому контракту.

Но контракт может вызывать другие функции контракта и изменять состояние второго контракта. Итак, вопрос:

Вопрос 3: Почему контракту не нужно подписывать сообщение, которое он отправляет?

1. Да, вы можете напрямую использовать sendTransaction2. Я не совсем понимаю, но 2 аккаунта могут отправлять транзакции без контракта. 3. Поскольку контракты регулируются EoA. Таким образом, EOA регулирует работу контракта,

Ответы (1)

Внешняя учетная запись отправляет etherлибо другой внешней учетной записи, либо смарт-контракту идентичным образом — инициируя подписание транзакции. Смарт-контракт получит только в том etherслучае, если вызываемая функция помечена payable.

В случае отправки с внешней учетной записи на другую внешнюю учетную запись etherпросто переводятся (если у отправителя есть деньги), без проблем.

Смарт-контракт может отправлять ether, но для начала эта отправка должна быть инициирована из внешней учетной записи (другими словами, смарт-контракты не могут инициировать транзакции). В прошлом люди называли этот тип отправки internal transaction, но в наши дни это называется message call, message, callи т. д.

Однако будьте осторожны со словом «сообщение». Я могу инициировать внешнюю транзакцию для другой внешней учетной записи и вставить messageтекст в inputполе. Тогда мой друг сможет прочитать это «сообщение».

Другой тип, о котором messageвы услышите, — это messageсмарт-контракт.

Что касается «почему контракт не нужно подписывать...», подумайте об этом так: смарт-контракт — это autonomous. Там нет никого, кто бы что-то подписывал. Кроме того, смарт-контракт не может инициировать транзакции. Кроме того, если бы смарт-контракт мог инициировать транзакции и подписывать их, его закрытый ключ обязательно должен был бы храниться в блокчейне. Каждый мог это увидеть, любой мог это украсть, и было бы легко выдать себя за смарт-контракт, так что это не сработало бы в любом случае.