如何让合约从账户中获取以太币

how to make contract fetch ether from an account

我是 solidity 的新手。我在玩,想知道我是否可以制定一份合同,从一个账户获取以太币并将其转移到另一个账户。 谢谢

除非您从中获取以太币的账户也是一个合约并且提供了允许以太币提取的方法,否则这是不可能的。合约无法从外部拥有的账户中自动获取以太币。

另一种方法是将您的以太币转移到 Wrapped Ether (WETH) 合约,该合约为您提供以太币支持的 ERC20 代币,然后您可以使用 approve()transferFrom()

简短的回答是你不能使用合约从另一个地址获取以太币。如果某种形式的这种情况是可能的,就很难阻止恶意行为者对所有人这样做。

较长的答案是,在Solidity中,对pull transactions rather than to push them更有利。记住这一点,你不应该试图从一个账户中获取以太币,而是你应该以这样一种方式设计合约,即所涉及的账户将他们的分配从合约中取出。您可以执行以下两项操作之一:

  1. 用户 1 将以太币发送到自动将资金转发给用户 2 的合约中(尽管我不确定在这种情况下你为什么要使用合约)。
  2. 用户 1 向合约发送资金并让用户 2 在第二笔交易中取回资金。

这两个都有效,但是你不能让合约自动从第一个用户那里获取以太币。

有一些方法看起来是可行的,但它是通过用户 1 的预签名交易完成的,这很可能是您不想实现的。