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

本文介绍了智能合约中的函数定义,包括参数列表、函数修饰符和返回值。payable关键字用于处理ether转账,而函数修饰符如public、private等控制访问权限。此外,还讲解了不同颜色函数代表的读写能力和消耗gas的情况,以及view和pure关键字的限制。
摘要由CSDN通过智能技术生成

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


概述

与传统编程不同的是,在智能合约开发时没有主函数入口这样从上到下的流程逻辑。如果把智能合约理解为一个进程的话,开发的函数是为了提供与该进程交互的接口。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值