Require on address(this).transfer(msg.value) 抛出错误

Require on address(this).transfer(msg.value) throws error

需要帮助理解为什么 require 会抛出错误并阻止我的合约编译。该函数旨在允许代理所有者升级当前版本的代理合约,并通过低级调用调用新实现来初始化所需的任何内容。

function upgradeToAndCall(address implementation, bytes memory data) public payable
    onlyProxyOwner
    {
      upgradeTo(implementation);
      require(address(this).transfer(msg.value)(data),'');
  }

我收到两个错误

No matching declaration found after argument-dependent lookup.

Type is not callable

如有任何帮助,我们将不胜感激。

1.There 不需要在 require 中使用传递函数,默认情况下,如果传递没有发生,它会抛出错误。 如果你想保留在 require() 中,你可以使用 .send() 函数。

2.By 通过 payable 函数发送的默认 eth 将存储在合约本身中,因此无需使用 address(this).transfer(msg.value)。相反,您可以使用其他地址来传输以太币。

3.And 将(数据)传递给 transfer() 函数不正确。