当前位置:网站首页>Solidity函数学习
Solidity函数学习
2022-07-07 15:37:00 【华为云】
目录
今天给大家分享一下Solidity中的函数的学习
函数
Solidity中的函数为:
它们可以在合约内部编写,也可以是自由函数(写在合约外)。
返回值(或称返回变量)
函数可以返回任意数量的值作为输出。有两种方法从函数返回变量:
1. 使用返回变量名:
2. 直接在return语句中提供返回值:
使用第二种方法,你可以省略返回变量的名称,而仅指定其类型。
支持的返回参数和类型
为了调用智能合约函数,我们需要使用ABI规范来指定要调用的函数并对参数进行编码,这些参数将包含在交易的数据字段中并发送给以太坊网络来执行。
ABI编码也用于事件和返回类型,更多详细信息可以在中找到。
注意: (如果你使用的是Solidity版本:0.7.5才可以使用 v2 版本。对于低于0.7.5的版本,我们需要使用实验版本:pragma experimental ABIEncoderV2;
)。
使用 Solidity 0.7.5 版本的示例。
可见性(Visibility)
函数的可见性有四种:
- Private(私有):限制性最强,函数只能在所定义的智能合约内部调用。
- Internal(内部):可以在所定义智能合约内部调用该函数,也可以从继承合约中调用该函数。
- External(外部):只能从智能合约外部调用。 (如果要从智能合约中调用它,则必须使用
this
。) - Public(公开):可以从任何地方调用。 (最宽松)
状态可变性(mutability)
- view:用
view
声明的函数只能读取状态,而不能修改状态。 - pure:用
pure
声明的函数既不能读取也不能修改状态。 - payable:用
payable
声明的函数可以接受发送给合约的以太币,如果未指定,该函数将自动拒绝所有发送给它的以太币。
交易与调用
用view
和pure
关键字定义的函数不会改变以太坊区块链的状态,这意味着当你调用这些函数时,你不会向区块链发送任何交易,因为交易被定义为从一个状态到另一个状态的状态栏变换。其仅仅是,你连接的节点通过检查其自己的区块链版本在本地执行函数代码,并将结果返回,而无需将任何交易广播到以太坊网络。
特殊函数
在本节中,我们将看到一些可以使用的特殊函数。
Getter 函数
定义为public的状态变量具有getter函数,该函数由编译器自动创建。该函数与变量具有相同的名称,并且具有外部可见性。
接收以太币函数
合约最多可以具有一个receive
函数。这个函数不能有参数,不能返回任何参数,并且必须具有receive
可见性和 payable
状态可变性。
当向合约发送Ether且未指定调用任何函数(calldata 为空)时执行。这是在普通的以太坊转账上执行的函数(例如,通过.send()
或.transfer()
转账)。
该函数声明如下:
Fallback函数
合约最多可以具有一个fallback
函数(一般翻译为回退函数)。这个函数不能有参数,不能返回任何参数,并且必须具有external
可见性。如果其他函数均不匹配给定的函数签名,或者根本没有提供任何数据并且没有receive
函数,则在调用合约时执行该函数。
你可以这样声明一个函数:
如果对一个没有实现
receive
函数或payable
回退函数的合约转账,则合约将抛出异常,以太币会退还。
可以在Remix中自行尝试一下,创建一个没有receive
或payable fallback
的合约,并向其中发送一些以太币。点击**Transact(交易)**后,你应该会看到一条类似以下的消息。
函数修饰器
当你要在执行函数之前检查某些条件时,可以使用修饰器。例如,如果你要检查发件人是否是合约的所有者,则可以编写以下内容:
使用修饰器,我们可以分离该代码,以便我们可以将其与其他函数复用,我们只需要声明修饰器,如下所示:
然后将修饰器名称添加到函数中:
通过在用空格分隔的列表中指定多个修饰器,可以将它们应用到一个函数,并按给出的顺序对其进行应用。
边栏推荐
- Flask搭建api服务-生成API文档
- ByteDance Android gold, silver and four analysis, Android interview question app
- Interface oriented programming
- 自定义View必备知识,Android研发岗必问30+道高级面试题
- 【视频/音频数据处理】上海道宁为您带来Elecard下载、试用、教程
- Process from creation to encapsulation of custom controls in QT to toolbar (I): creation of custom controls
- 最新Android高级面试题汇总,Android面试题及答案
- Direct dry goods, 100% praise
- Smart logistics platform: make overseas warehouses smarter
- Lie cow count (spring daily question 53)
猜你喜欢
Seaborn data visualization
Direct dry goods, 100% praise
最新2022年Android大厂面试经验,安卓View+Handler+Binder
自定义View必备知识,Android研发岗必问30+道高级面试题
掌握这个提升路径,面试资料分享
skimage学习(2)——RGB转灰度、RGB 转 HSV、直方图匹配
Sator推出Web3遊戲“Satorspace” ,並上線Huobi
skimage学习(3)——使灰度滤镜适应 RGB 图像、免疫组化染色分离颜色、过滤区域最大值
浅浅理解.net core的路由
skimage学习(3)——Gamma 和 log对比度调整、直方图均衡、为灰度图像着色
随机推荐
Flask搭建api服务-生成API文档
Localstorage and sessionstorage
A tour of gRPC:03 - proto序列化/反序列化
智慧物流平台:让海外仓更聪明
skimage学习(2)——RGB转灰度、RGB 转 HSV、直方图匹配
QT 图片背景色像素处理法
Lie cow count (spring daily question 53)
LeetCode 1043. Separate the array to get the maximum and daily questions
Number of exchanges in the 9th Blue Bridge Cup finals
直接上干货,100%好评
Flask搭建api服务-SQL配置文件
Skimage learning (1)
Sator a lancé le jeu web 3 "satorspace" et a lancé huobi
SlashData开发者工具榜首等你而定!!!
DAPP defi NFT LP single and dual currency liquidity mining system development details and source code
LeetCode 1155. N ways to roll dice one question per day
Seaborn数据可视化
最新Android高级面试题汇总,Android面试题及答案
如何在博客中添加Aplayer音乐播放器
面向接口编程