Soldity 接收函数错误 - Remix 的“Transact”和另一个合约的 .transfer() 之间的差异?

问题描述

我正在为 solidity 中的接收功能苦苦挣扎。我尝试通过 ContractOne 为 ContractTwo 提供资金,然后立即将收到的资金转换为 WETH。如果我通过调用具有价值的合约来实现(在 Remix 上按交易),一切正常,但是,一旦我尝试使用另一个合约,它就会失败。

ContractOne 如下所示:

contract ParteinaherVerein {

constructor(address payable party) payable {
    party.transfer(msg.value);
}}

ContractTwo 有如下接收函数

receive() external payable {
    
    if (msg.sender == wrappedEtherAddr) {
        // Do nothing
    } else {
        ETH2WETH();  // Locks Eth to get Weth
    }
}

在 Remix 中,我的错误如下所示: VM 错误:还原。 revert 事务已恢复到初始状态。注意:如果您发送价值并且您发送的价值应小于您当前的余额,则应支付被调用函数。调试事务以获取更多信息。

注意:我的 ETH2WETH 由以下几行组成:(但这不应该包括任何错误,因为当我通过 Remix 界面直接从 EOA 与它进行交易时,它可以正常工作)

 function ETH2WETH() 
    public 
{
    (bool success,) = address(WETHLike).call
    {
        value: address(this).balance
    }
    (
        abi.encodeWithSignature("deposit(uint256)",address(this).balance)
    );
    require(success);
}

提前致谢。现在已经花费了我的时间。 最好!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...