“与其感慨路难行,不如马上出发。”
发送以太币

有三种通过调用函数发送以太币的方式:

  • <address payable>.transfer(uint256 amount)
  • <address payable>.send(uint256 amount) returns (bool)
  • <address>.call{gas: gasLimit, value: amount}(bytes memory) returns (bool, bytes memory)

transfersend 要求接收方地址是 payable 的。会固定发送 2300 gas 的矿工费,不可调节。如果接收方是合约,那么合约的 receivefallback 方法不能执行复杂的操作,否则会耗尽 gas,导致转账失败。

transfer 失败后会抛出异常,交易回滚。sendcall 不会自动回滚交易,需要根据返回值处理回滚逻辑,这点特别需要注意。

call 是低级别方法,可以调用合约的任何函数,转账只是其中一种用法,具体用法可以参考 合约交互。仅就转账而言,其用法:

  • 接收方地址不必是 payable
  • 通过 gas 调节矿工费用,若不指定 gas,则会消耗交易中 gasLimit 剩余可用 gas
  • 通过 value 指定转账金额
  • 参数为 "",表示不调用合约方法,仅转账