当前位置: 首页 > news >正文

solidity函数篇2

1.视图函数

视图函数确保它们不会修改状态。 函数可以声明为视图。 如果函数中存在以下语句,则视为修改状态,编译器将在这种情况下抛出警告。

  • 修改状态变量。

  • 发送事件。

  • 创建其他合约。

  • 使用自毁功能。

  • 通过调用发送以太币。

  • 调用任何未标记为视图或纯的函数。

  • 使用底层调用。

  • 使用包含某些操作码的内联汇编。

Getter 方法默认是视图函数。

请参阅下面使用视图函数的示例。

示例

pragma solidity ^0.5.0;contract Test {function getResult() public view returns(uint product, uint sum){uint a = 1; // local variableuint b = 2;product = a * b;sum = a + b; }
}

2.纯函数

纯函数确保它们不会读取或修改状态。 函数可以声明为纯函数。 如果函数中存在以下语句,则视为读取状态,在这种情况下编译器将引发警告。

  • 读取状态变量。

  • 访问地址(this).balance 或 <address>.balance。

  • 访问block、tx、msg中任意一个特殊变量(可以读取msg.sig和msg.data)。

  • 调用任何未标记为纯的函数。

  • 使用包含某些操作码的内联汇编。

纯函数可以使用 revert() 和 require() 函数在发生错误时恢复潜在的状态更改。

3.回退函数

回退函数是合约可用的特殊函数。 它具有以下特点 −

  • 当合约上调用不存在的函数时,会调用它。

  • 需要标记为外部。

  • 它没有名字。

  • 它没有参数

  • 它不能返回任何东西。

  • 每个合约可以定义一个。

  • 如果没有标记为应付,如果合约收到没有数据的普通以太币,则会抛出异常。

以下示例显示了每个合约的回退函数的概念。

示例

pragma solidity ^0.5.0;contract Test {uint public x ;function() external { x = 1; }    
}
contract Sink {function() external payable { }
}
contract Caller {function callTest(Test test) public returns (bool) {(bool success,) = address(test).call(abi.encodeWithSignature("nonExistingFunction()"));require(success);// test.x is now 1address payable testPayable = address(uint160(address(test)));// Sending ether to Test contract,// the transfer will fail, i.e. this returns false here.return (testPayable.send(2 ether));}function callSink(Sink sink) public returns (bool) {address payable sinkPayable = address(sink);return (sinkPayable.send(2 ether));}
}


文章转载自:

http://gttDwBo7.nLgyq.cn
http://fGEK7iBC.nLgyq.cn
http://6Kr8Vtb3.nLgyq.cn
http://GtPlD867.nLgyq.cn
http://jjclOTPw.nLgyq.cn
http://Oa114Jw8.nLgyq.cn
http://eGnjp04w.nLgyq.cn
http://yL1AyfIZ.nLgyq.cn
http://tumTLTrY.nLgyq.cn
http://MX09eah9.nLgyq.cn
http://2nIGNOrf.nLgyq.cn
http://V7RqvlyT.nLgyq.cn
http://VfiivCL8.nLgyq.cn
http://A40fJCGQ.nLgyq.cn
http://iZZmInGT.nLgyq.cn
http://vF7loY5S.nLgyq.cn
http://WgdfYPHW.nLgyq.cn
http://adzwvXUJ.nLgyq.cn
http://MDEjU3Af.nLgyq.cn
http://HsgpvTM8.nLgyq.cn
http://Whn9mlrg.nLgyq.cn
http://0etLnfa2.nLgyq.cn
http://HJuIbQGf.nLgyq.cn
http://0lbhhRA1.nLgyq.cn
http://zHCacV7j.nLgyq.cn
http://rWJQR6Jz.nLgyq.cn
http://VclY97hf.nLgyq.cn
http://XTz2hYc3.nLgyq.cn
http://7zS0X8zt.nLgyq.cn
http://V3SyuYw6.nLgyq.cn
http://www.dtcms.com/a/370390.html

相关文章:

  • 【AI论文】ELV-Halluc:长视频理解中语义聚合幻觉的基准测评
  • v0.29.2 敏感词性能优化之基本类型拆箱、装箱的进一步优化的尝试
  • 提示词工程(Prompt Engineering)的崛起——为什么“会写Prompt”成了新技能?
  • 前端入门——案例一:登录界面设计(html+css+js)
  • MySQL的组复制(MGR)高可用集群搭建
  • 前端开发学习路径
  • JVM调优总结
  • 大模型API设计:如何用OpenAI兼容接口封装自定义模型?
  • 四个关于云属性的四个卫星数据集的介绍
  • WIN10+ubuntu22.04.05双系统装机教程
  • MCAP :机器人数据容器的全面实践指南
  • Pandas基础(安装、导入Pandas、读取数据、查看数据)
  • 【第四章:大模型(LLM)】10.微调方法与实战-(7)项目实战1:Llama3使用LoRA微调中文增强大模型
  • 没有深度学习
  • Redis-主从复制-哨兵模式
  • PPTist,一个完全免费的 AI 生成 PPT 在线网站
  • [水果目标检测5]AppleYOLO:基于深度OC-SORT的改进YOLOv8苹果产量估计方法
  • 跨平台游戏引擎 Axmol-2.8.1 发布
  • Linux系统编程—进程控制
  • 管理与监控(下)
  • 学习:uniapp全栈微信小程序vue3后台(11)
  • EG1160 SOP16 高压大电流 半桥驱动芯片
  • C++ STL系列-02.泛型入门
  • 大型Go项目中搭建CI/CD流水线
  • 【DCU】DCU产品与调试工具hy-smi使用指南:从基础到性能分析
  • 字节跳动OmniHuman-1.5发布:单图+音频秒变超真实视频,AI数字人技术再升级
  • B.50.10.10-微服务与电商应用
  • 深入浅出迁移学习:从理论到实践
  • unsloth 笔记;数据集
  • 小迪自用web笔记29