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

逃离我推掉我的手 2022-09-15 13:58 159阅读 0赞

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

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

    • 概述
    • Solidity函数

      • 定义
      • payable关键字
    • 函数修饰符与函数能力

      • 函数修饰符
      • 函数能力
    • 相关资料

概述

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

Solidity函数

定义

function func_name(paramlist...) modifiers returns (returnlist...)

  • function:函数声明的关键字。
  • func_name:自定义函数名称。
  • paramlist:参数列表,可以有0个或者多个参数,格式是”参数类型 参数名称“。
  • moodifiers:函数的修饰符。
  • returns:返回值关键字。
  • returnlist:返回值类型列表,支持多个返回值,最多7个。

示例:

  1. function getSum() public view returns(uint256) {
  2. unit256 sum = ;
  3. // for循环
  4. for(uint256 i = 1; i <= 100; i ++) {
  5. sum += i; // 累加求和
  6. }
  7. return sum;
  8. }

payable关键字

在Solidity语言里,凡是涉及到ether转移的,函数或者地址都要加payable修饰符,代表可以支付。下面是一个充钱的函数:

  1. function deposit() public payable {
  2. // nothing to do(注:虽然这个函数什么也没有做,但是内建对象msg所携带的value已经被合约地址给接收了,也就是说合约是给"钱"就收的,可不会和你客气)
  3. }

注:可以通过查询余额的方式验证”钱”是否已收到。Solidity是一门面向对象的语言,每个合约内部都有一个this对象,在合约中可以把它强制转换为address类型,每一个address类型的对象都有一个balance元素,他就是账户的余额。查询账户余额的代码如下:

  1. function getBalance() public view returns (uint256) {
  2. // address(this) 强制转换为地址类型
  3. return address(this)balance;
  4. }

函数修饰符与函数能力

函数修饰符

函数修饰符主要用于控制函数访问权限。









































关键字 外部访问 类内访问 子类继承 子类访问
public
private 不能 不能 不能
external 不能
internal 不能

函数能力

以太坊的合约部署后可以看到3种颜色,分别是蓝色、橘红色和红色,不同的颜色代表着函数不同的能力。

  • 蓝色:只读函数,使用view管进制,该函数不允许修改状态变量,调用时不会消耗gas。
  • 橘红色:写函数,该类函数会修改状态变量的值,调用时会消耗gas。
  • 红色:可支付函数,该类函数涉及资产转移,必须加payable关键字,调用时会消耗gas,此类函数也可以修改状态变量。

注:就Solidity而言,其还提供了pure关键字,该关键字比view还要严格,既不可以访问状态变量,也不能更改状态变量。

注:对于橘红色和红色的函数,由于执行每一个指令都需要消耗gas,(因为概率问题,无法确定消耗多少gas就一定能执行函数成功)因此,用户在执行合约时,需要指定执行此合约时运行小号的gas上限。


^_^ 整理自《Go语言区块链应用开发从入门到精通》高野 编著

^_^ 本文已经被收录进《程序员成长笔记》 ,笔者JustryDeng

发表评论

表情:
评论列表 (有 0 条评论,159人围观)

还没有评论,来说两句吧...

相关阅读

    相关 智能合约

    智能合约(英语:Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。