相同点 :

都可以在合约之间相互转账,send和call都有返回值。需要在代码中判断返回值。

  • addr.transfer(1 ether)、addr.send(1 ether)、addr.call.value(1 ether)的接收方都是addr。
  • 如果使用addr.transfer(1 ether)、addr.send(1 ether),addr合约中必须增加fallback回退函数!
  • 如果使用addr.call.value(1 ether),那么被调用的方法必须添加payable修饰符,否则转账失败!

不同点:

1. transfer

  • 如果异常会转账失败,抛出异常(等价于require(send()))(合约地址转账)
  • 有gas限制,最大2300
  • 函数原型:<address payable>.transfer(uint256 amount)

2. send

  • 如果异常会转账失败,仅会返回false,不会终止执行(合约地址转账)
  • 有gas限制,最大2300
  • 函数原型:<address payable>.send(uint256 amount) returns (bool)

3. call

  • 如果异常会转账失败,仅会返回false,不会终止执行(调用合约的方法并转账)
  • 没有gas限制
  • <address>.call(bytes memory) returns (bool, bytes memory)

多建议使用call 。因为随着 eip 的升级,底层的操作gas会发生变化,可能会导致之前安全的代码不在安全。

Solidity 中 transfer、send、call的区别相关推荐

  1. Android Handler中post方法与send方法的区别及使用

    目录 概述 Handler使用sendMessage方法 Handler使用post方法 post方法与send方法的区别 全部代码 效果图 后记 概述 Handler机制是Android中线程通信的 ...

  2. 已知bug列表——Solidity中文文档(12)

    写在前面:HiBlock区块链社区成立了翻译小组,翻译区块链相关的技术文档及资料,本文为Solidity文档翻译的第十二部分<已知bug列表>,特发布出来邀请solidity爱好者.开发者 ...

  3. 风格指南——Solidity中文文档(10)

    写在前面:HiBlock区块链社区成立了翻译小组,翻译区块链相关的技术文档及资料,本文为Solidity文档翻译的第十部分<风格指南>,特发布出来邀请solidity爱好者.开发者做公开的 ...

  4. 网络编程中BIO和NIO的区别

    网络编程中BIO和NIO的区别 先上结论 BIO中,每个请求因为要阻塞直到结果返回,所以比较好的解决是每个请求都需要一个线程来处理,但是线程又是他的制约条件. NIO中,每个请求进来都会绑定到一个ch ...

  5. Response.Redirect(),Server.Transfer(),Server.Execute()的区别

    Response.Redirect(),Server.Transfer(),Server.Execute()的区别 1.Response.Redirect(): Response.Redirect方法 ...

  6. python中的return和print的区别_python中return和print的区别(详细)

    Huskiesir python最近正在研究.今天,我面临一个问题,那就是,返回和印刷的区别.双方都能输出结果.的区别是什么?闲话少说,看下面的例子.# Code1: def break_words( ...

  7. 浅谈HTTP中Get与Post的区别_转

    可参考:HTTP请求中POST与GET的区别 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个UR ...

  8. 【网摘】 浅谈HTTP中GET与POST的区别

    文章出处:http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html 浅谈HTTP中Get与Post的区别 Http定义了与服务器交互的不 ...

  9. 一起谈.NET技术,asp.net 页面转向 Response.Redirect, Server.Transfer, Server.Execute的区别...

    Response.Redirect 简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面.你可以使用下面的代码将用户引导到另一个页面: Response.Redirect("WebForm ...

最新文章

  1. java使用Crawler4j开发爬虫
  2. subprocess中执行git命令报告no such file or directory一例
  3. C#委托、事件学习之(一)——委托事件描述
  4. canoco5冗余分析步骤_打造高性能的大数据分析平台
  5. 【答阿里寒冬面试题】呵呵,大神的面试题就是好!
  6. cesium3dtiles位置改变
  7. spring mvc 总体概况
  8. 在计算机回收站中可以恢复,电脑回收站删除了怎么恢复吗
  9. 30天自制操作系统之叠加处理
  10. deepinu盘制作工具_用U盘装系统,试试这款多系统启动盘制作工具!
  11. 智能文档比对小程序,支持扫描件比对、PDF比对,Word比对,合同比对、公文比对,限时免费使用
  12. Vue 下载文件需要token设置
  13. Linux Shell基础教程
  14. req.getParameterValues 输出前端乱码
  15. excel锁定单元格不能修改_Excel如何锁定部分区域不被编辑,1分钟就学会
  16. 淘宝客搜索链接组成详解
  17. scikit-learn中的OneHotEncoder用法
  18. Secondary NameNode:究竟是什么?
  19. 保险与赌博的差异,航延险是赌博吗?
  20. redisTemplate乱码问题

热门文章

  1. 9.0系统登录 服务器,游戏工作室来袭!魔兽9.0经济系统与服务器负荷再次面临考验...
  2. 记Java如何获取MAC地址
  3. 使用 java-client 连接k8s
  4. c语言数据结构大作业,数据结构大作业——树(和广义表)
  5. 数据库设计规范-通用版
  6. 大聪明教你学Java设计模式 | 第九篇:桥接模式
  7. 自托管视频共享平台Clipable
  8. 很高兴认识大家。新人请多担待
  9. 【Android界面实现】使用Canvas对象实现“刮刮乐”效果
  10. 保研北京大学计算机研究生的同学,本科都是哪些大学?