赞
踩
Solidity 有三种方法可以发送代币,分别是 transfer、send 和call。
方法 | 描述 |
transfer | 是 Solidity 中发送 代币 的最安全和推荐的方法。它会抛出异常并撤销整个交易,以防止攻击者接管合约。 |
send | 是一种比较早期的发送 代币 的方法。它返回一个布尔值,表示是否发送成功。但这种方法容易出现问题,不推荐使用。 |
call | 这种方法可以向其他合约发送 代币,并在调用函数时传递数据。这种方法需要在接收方合约中添加一个 payable 函数来接收 代币。如果接收方合约没有添加 payable 关键字,则会抛出异常并撤销整个交易。另外,这种方法容易受到重入攻击的影响,需要特别小心。 |
示例代码:
- pragma solidity ^0.8.7;
- // 3 ways to send ETH
- // transfer - 2300 gas, reverts
- // send - 2300 gas, returns bool
- // call -all gas, return bool and data
- contract SendEther{
- constructor() payable{}
- receive() external payable {}
-
- function sendViaTransfer(address payable _to, uint amount) external payable {
- //transfer方法
- _to.transfer(amount);
- }
-
- function sendViaSend(address payable _to, uint amount) external payable {
- //send 方法
- bool sent = _to.send(amount);
- require(sent, "send failed");
- }
-
- function sendViaCall(address payable _to, uint amount) external payable {
- //call 方法
- (bool success,) = _to.call{value: amount}("");
- require(success, "call failed");
- }
- }
-
- contract EthReceiver {//接收合约
- event Log(uint amount, uint gas);
-
- receive() external payable {
- emit Log(msg.value,gasleft());
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。