【问题标题】:how to make contract fetch ether from an account如何让合约从账户中获取以太币
【发布时间】:2018-09-21 04:10:52
【问题描述】:

我是刚接触 Solidity 的新手。我在玩,想知道我是否可以让合约从一个账户获取以太币并将其转移到另一个账户。 谢谢你

【问题讨论】:

标签: ethereum solidity smartcontracts ether


【解决方案1】:

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

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

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

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

有些方法看似可行,但它是通过来自 User1 的预签名交易完成的,这很可能是您不想实现的目标。

【讨论】:

  • 感谢您的回答。你能告诉我更多关于预签名交易的信息吗?
  • 看看this的文章。基本思想是,交易只是广播到 ETH 网络的签名消息。预签名交易是尚未广播到网络的同一交易。
【解决方案2】:

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

另一种方法是将您的以太币转移到包装以太币 (WETH) 合约中,该合约为您提供以太币支持的 ERC20 代币,然后您可以访问approve()transferFrom()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 2015-11-25
    • 2020-10-21
    • 2021-11-15
    相关资源
    最近更新 更多