Skip to main content

支付 ETH

合约中发送 ETH 的三种方式

  • transfer: 带有 2300gas,如果失败会 revert
  • send: 带有 2300gas,会返回一个 bool 值标志成功/失败
  • call: 会发送所有剩余的 gas,返回(bool success,bytes memoy data),如果调用的是一个合约,合约的返回值会在 data 中提现
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

contract SendEther {
constructor() payable {}

receive() external payable {}

// 带有2300gas 如果失败,会被revert
function sendViaTransfer(address payable _to) external payable {
_to.transfer(123);
}

// 带有2300gas,返回一个bool值标记成功或失败
function sendViaSend(address payable _to) external payable {
bool success = _to.send(123);
require(success, "send failed");
}

/*
1. 会发送所有剩余的gas
2. 会返回(bool success, bytes memory data)两个参数,如果调用的是智能合约,智能合约的返回值会在data中体现
*/
function sendViaCall(address payable _to) external payable {
// (bool success, bytes memory data) = _to.call{value: 123}("");
(bool success, ) = _to.call{value: 123}("");
require(success, "call failed");
}
}