当前位置:   article > 正文

037.Solidity入门——24发送代币_solidity发币

solidity发币

Solidity 有三种方法可以发送代币,分别是 transfer、sendcall。

方法

描述

transfer

是 Solidity 中发送 代币 的最安全和推荐的方法。它会抛出异常并撤销整个交易,以防止攻击者接管合约。

send

是一种比较早期的发送 代币 的方法。它返回一个布尔值,表示是否发送成功。但这种方法容易出现问题,不推荐使用。

call

这种方法可以向其他合约发送 代币,并在调用函数时传递数据。这种方法需要在接收方合约中添加一个 payable 函数来接收 代币。如果接收方合约没有添加 payable 关键字,则会抛出异常并撤销整个交易。另外,这种方法容易受到重入攻击的影响,需要特别小心。

示例代码:

  1. pragma solidity ^0.8.7;
  2. // 3 ways to send ETH
  3. // transfer - 2300 gas, reverts
  4. // send - 2300 gas, returns bool
  5. // call -all gas, return bool and data
  6. contract SendEther{
  7. constructor() payable{}
  8. receive() external payable {}
  9. function sendViaTransfer(address payable _to, uint amount) external payable {
  10. //transfer方法
  11. _to.transfer(amount);
  12. }
  13. function sendViaSend(address payable _to, uint amount) external payable {
  14. //send 方法
  15. bool sent = _to.send(amount);
  16. require(sent, "send failed");
  17. }
  18. function sendViaCall(address payable _to, uint amount) external payable {
  19. //call 方法
  20. (bool success,) = _to.call{value: amount}("");
  21. require(success, "call failed");
  22. }
  23. }
  24. contract EthReceiver {//接收合约
  25. event Log(uint amount, uint gas);
  26. receive() external payable {
  27. emit Log(msg.value,gasleft());
  28. }
  29. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/369149
推荐阅读
相关标签
  

闽ICP备14008679号