как заставить контракт получать эфир со счета

Я новичок в солидности. Я играл и хотел знать, могу ли я заставить контракт получать эфир с одной учетной записи и переводить его на другую учетную запись. Благодарю вас


person hahahoho    schedule 21.09.2018    source источник
comment
Возможно, это может дать вам некоторые идеи ethereum.stackexchange.com/q/28233/26362   -  person Zulhilmi Zainudin    schedule 21.09.2018
comment
@ZulhilmiZainudin Ссылка была полезной, спасибо. Но я не хочу, чтобы в моих контрактах хранились значения эфира.   -  person hahahoho    schedule 21.09.2018


Ответы (2)


Короткий ответ: вы не можете использовать контракт для получения эфира с другого адреса. Если бы какая-то форма этого была возможна, было бы трудно помешать злоумышленникам делать это со всеми.

Более длинный ответ заключается в том, что в Solidity более выгодно вытягивать транзакции, а не проталкивать их. Имея это в виду, вы не должны пытаться получить эфир из аккаунта, а лучше спроектировать контракт таким образом, чтобы задействованный аккаунт вытягивал их распределение из контракта. Вы можете сделать одно из двух:

  1. Пользователь 1 отправляет эфир в контракт, который автоматически перенаправляет средства Пользователю 2 (хотя я не уверен, зачем в этом случае использовать контракт).
  2. Пользователь 1 отправляет средства на контракт, а Пользователь 2 получает средства во второй транзакции.

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

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

person Shane Fontaine    schedule 21.09.2018
comment
Спасибо за ваш ответ. Можете ли вы рассказать мне больше о предварительно подписанной транзакции. - person hahahoho; 21.09.2018
comment
Ознакомьтесь с этой статьей. Основная идея заключается в том, что транзакция — это просто подписанное сообщение, которое транслируется в сеть ETH. Предварительно подписанная транзакция — это та же транзакция, которая еще не транслировалась в сеть. - person Shane Fontaine; 21.09.2018

Если учетная запись, с которой вы получаете эфир, также не является контрактом и не предоставляет метод, позволяющий вывести эфир, это невозможно. Контракт не может автономно получать эфир из внешней учетной записи.

Альтернативой является перевод вашего эфира на контракт Wrapped Ether (WETH), который вместо этого предоставляет вам токен ERC20, обеспеченный эфиром, который затем дает вам доступ к approve() и transferFrom().

person Raghav Sood    schedule 21.09.2018