智能合约的函数与函数修饰符
Posted justry_deng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能合约的函数与函数修饰符相关的知识,希望对你有一定的参考价值。
智能合约的函数与函数修饰符
概述
与传统编程不同的是,在智能合约开发时没有主函数入口这样从上到下的流程逻辑。如果把智能合约理解为一个进程的话,开发的函数是为了提供与该进程交互的接口。
Solidity函数
定义
function func_name(paramlist...) modifiers returns (returnlist...)
function
:函数声明的关键字。func_name
:自定义函数名称。paramlist
:参数列表,可以有0个或者多个参数,格式是"参数类型
参数名称
"。moodifiers
:函数的修饰符。returns
:返回值关键字。returnlist
:返回值类型列表,支持多个返回值,最多7个。
示例:
function getSum() public view returns(uint256)
unit256 sum = ;
// for循环
for(uint256 i = 1; i <= 100; i ++)
sum += i; // 累加求和
return sum;
payable关键字
在Solidity语言里,凡是涉及到ether转移的,函数或者地址都要加payable修饰符,代表可以支付。下面是一个充钱的函数:
function deposit() public payable
// nothing to do(注:虽然这个函数什么也没有做,但是内建对象msg所携带的value已经被合约地址给接收了,也就是说合约是给"钱"就收的,可不会和你客气)
注:可以通过查询余额的方式验证"钱"是否已收到。Solidity是一门面向对象的语言,每个合约内部都有一个this对象,在合约中可以把它强制转换为address类型,每一个address类型的对象都有一个balance元素,他就是账户的余额。查询账户余额的代码如下:
function getBalance() public view returns (uint256)
// address(this) 强制转换为地址类型
return address(this)balance;
函数修饰符与函数能力
函数修饰符
函数修饰符主要用于控制函数访问权限。
关键字 | 外部访问 | 类内访问 | 子类继承 | 子类访问 |
---|---|---|---|---|
public | 能 | 能 | 能 | 能 |
private | 不能 | 能 | 不能 | 不能 |
external | 能 | 不能 | 能 | 能 |
internal | 不能 | 能 | 能 | 能 |
函数能力
以太坊的合约部署后可以看到3种颜色,分别是蓝色、橘红色和红色,不同的颜色代表着函数不同的能力。
蓝色
:只读函数,使用view
管进制,该函数不允许修改状态变量,调用时不会消耗gas。橘红色
:写函数,该类函数会修改状态变量的值,调用时会消耗gas。红色
:可支付函数,该类函数涉及资产转移,必须加payable
关键字,调用时会消耗gas,此类函数也可以修改状态变量。
注:就Solidity而言,其还提供了pure
关键字,该关键字比view还要严格,既不可以访问状态变量,也不能更改状态变量。
注:对于橘红色和红色的函数,由于执行每一个指令都需要消耗gas,(因为概率问题,无法确定消耗多少gas就一定能执行函数成功)因此,用户在执行合约时,需要指定执行此合约时运行小号的gas上限。
^_^ 整理自《Go语言区块链应用开发从入门到精通》高野 编著
^_^ 本文已经被收录进《程序员成长笔记》 ,笔者JustryDeng
以上是关于智能合约的函数与函数修饰符的主要内容,如果未能解决你的问题,请参考以下文章
智能合约实战 solidity 语法学习 03 [ 函数修饰符 view public private constant payable ]
智能合约实战 solidity 语法学习 04 [ 函数修饰符 view public private constant payable ] 附代码