Я новичок в солидности. Я играл и хотел знать, могу ли я заставить контракт получать эфир с одной учетной записи и переводить его на другую учетную запись. Благодарю вас
как заставить контракт получать эфир со счета
Ответы (2)
Короткий ответ: вы не можете использовать контракт для получения эфира с другого адреса. Если бы какая-то форма этого была возможна, было бы трудно помешать злоумышленникам делать это со всеми.
Более длинный ответ заключается в том, что в Solidity более выгодно вытягивать транзакции, а не проталкивать их. Имея это в виду, вы не должны пытаться получить эфир из аккаунта, а лучше спроектировать контракт таким образом, чтобы задействованный аккаунт вытягивал их распределение из контракта. Вы можете сделать одно из двух:
- Пользователь 1 отправляет эфир в контракт, который автоматически перенаправляет средства Пользователю 2 (хотя я не уверен, зачем в этом случае использовать контракт).
- Пользователь 1 отправляет средства на контракт, а Пользователь 2 получает средства во второй транзакции.
Оба они работают, но вы не можете автоматически получать эфир от первого пользователя по контракту.
Есть способы, когда это кажется возможным, но это делается с помощью предварительно подписанной транзакции от пользователя 1, чего, скорее всего, вы и не пытаетесь достичь.
Если учетная запись, с которой вы получаете эфир, также не является контрактом и не предоставляет метод, позволяющий вывести эфир, это невозможно. Контракт не может автономно получать эфир из внешней учетной записи.
Альтернативой является перевод вашего эфира на контракт Wrapped Ether (WETH), который вместо этого предоставляет вам токен ERC20, обеспеченный эфиром, который затем дает вам доступ к approve()
и transferFrom()
.