智能合约的函数与函数修饰符

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 ] 附代码

通学智能合约系列(十四)--函数2

通学智能合约系列(十四)--函数2

如何将 ERC20 代币发送到智能合约余额?

将 nonReentrant 修饰符与应付函数一起使用会导致错误吗?