Solidity

函式中的 ETH 交易失敗

  • September 19, 2021

我想知道在哪種情況下(如果)以下程式碼會失敗:

function aOfContractA(uint256 amount):
  uint256 toSend = contractB.calculateAmount(msg.sender, amount); 
  require(toSend <= address(this).balance, "To low contract balance");

  bool success = payable(msg.sender).send(toSend); //here

  emit Success(msg.sender, toSend);

  return success;
}

是否有可能在註釋“//here”的行中,ETH 的交易/發送失敗?如果它會失敗,為什麼?

是的,這可能會失敗。這行程式碼會將 ETH 發送到 msg.sender。Msg.sender 可以是任何人,包括另一個智能合約。當智能合約直接接收到任意數量的 ETH 時,呼叫“receive()”回退函式及其程式碼(如果有)將被執行。此回退功能可能會失敗並導致整個事務恢復。

引用自:https://ethereum.stackexchange.com/questions/110215