Solidity数据类型之函数类型

这篇具有很好参考价值的文章主要介绍了Solidity数据类型之函数类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

solidity中函数的形式

 function <function name>(<parameter types>) {internal|external|public|private} 
 [pure|view|payable] [returns (<return types>)]

每个关键字的意思(方括号里面的写不写都可以)

function: 声明函数时的固定用法,想写函数,就要以function关键字开头。
function name: 函数名
(parameter types): 圆括号里写函数的参数,就是要传到函数的变量类型和变量名字。
{internal|external|public|private}: 函数可见性说明符,一共4种。合约之外的函数,即"自由函数",始终具有隐含internal可见性。

  • public:内部外部均可见。
  • private:只能从本合约内部访问,继承的合约也不能用。
  • external:只能从合约外部访问(但是可以用this.f()来调用,f是函数名)。
  • internal:只能从合约内部访问,继承的合约可以用。(类似于java里面的private)

小提示

  • 如果没有标明可见性类型的函数,默认为public。
  • public|private|internal 也可用于修饰状态变量。 public变量会自动生成同名的getter函数,用于查询数值。
  • 没有标明可见性类型的状态变量,默认为internal。
    [pure|view|payable]: 决定函数权限/功能的关键字。payable(可支付的)很好理解,带着它的函数,运行的时候可以给合约转入ETH。
    [returns ()]: 函数返回的变量类型和变量名称。

什么是Pure和View

solidity加入这两个关键字,个人感觉是因为gas fee。合约的状态变量存储在链上,gas fee很贵,如果不改变链上状态,就不用付gas。包含pure跟view关键字的函数是不改写链上状态的,因此用户直接调用他们是不需要付gas的(合约中非pure/view函数调用它们则会改写链上状态,需要付gas)。

在以太坊中,以下语句被视为修改链上状态

  • 写入状态变量。
  • 释放事件。
  • 创建其他合约。
  • 使用selfdestruct。
  • 通过调用发送以太币。
  • 调用任何未标记view或pure的函数。
  • 使用低级调用(low-level calls)。
  • 使用包含某些操作码的内联汇编。

关于以太坊是什么这方面的内容我感觉这篇文章讲很好

以太坊是什么 - 以太坊开发入门指南

pure与view的作用

  • pure,中文意思是“纯”,在solidity里理解为“纯纯牛马”。包含pure关键字的函数,不能读取也不能写入存储在链上的状态变量。
  • view,“看”,在solidity里理解为“看客”。包含view关键字的函数,能读取但也不能写入状态变量
  • 不写pure也不写view,函数既可以读取也可以写入状态变量。
    Solidity数据类型之函数类型,# Solidity,区块链,python,函数,Solidiy
    含有pure返回的是一个新的变量,_number是1,传入的new_number最后被加了1
    Solidity数据类型之函数类型,# Solidity,区块链,python,函数,Solidiy
    如果add()包含view,比如function add() external view,也会报错。因为view能读取,但不能够改写状态变量。可以稍微改写下方程,让他不改写number,而是返回一个新的变量。

view函数可以读取状态变量,因此可以读取到number,返回的是number+1

Solidity数据类型之函数类型,# Solidity,区块链,python,函数,Solidiy

internal v.s. external

minus()由于是internal,只能由合约内部调用,而外部不能。因此,我们必须再定义一个external的minusCall()函数,来间接调用内部的minus()。

    // internal: 内部
    function minus() internal {
        number = number - 1;
    }

    // 合约内的函数可以调用内部函数
    function minusCall() external {
        minus();
    }

Solidity数据类型之函数类型,# Solidity,区块链,python,函数,Solidiy

payable

我们定义一个external payable的minusPayable()函数,间接的调用minus(),并且返回合约里的ETH余额(this关键字可以让我们引用合约地址)。 我们可以在调用minusPayable()时,往合约里转入1个ETH(设置转账数值)。
Solidity数据类型之函数类型,# Solidity,区块链,python,函数,Solidiy

// payable: 递钱,能给合约支付eth的函数
function minusPayable() external payable returns(uint256 balance) {
    minus();    
    balance = address(this).balance;
}

我们可以在返回的信息中看到,合约的余额是1 ETH。
Solidity数据类型之函数类型,# Solidity,区块链,python,函数,Solidiy文章来源地址https://www.toymoban.com/news/detail-743837.html

到了这里,关于Solidity数据类型之函数类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】数据类型之集合与函数

    1.1 集合的定义 集合(set)是一个无序的不重复元素序列。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而 不是 { },因为 { } 是用来创建一个空字典。 1.2 实例 3.1 函数的定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的

    2024年02月12日
    浏览(30)
  • 【区块链 | EVM】深入理解学习EVM - 深入Solidity数据存储位置:内存

    图片来源: Mech Mind on Unsplash 这是深入Solidity数据存储位置系列的另一篇。在今天的文章中,我们将学习EVM内存的布局,它的保留空间,空闲内存指针,如何使用 memory 引用来读写内存,以及使用内存时的常规最佳做法。 我们将使用 Ethereum Name Service (ENS)中的合约代码片段,

    2024年02月02日
    浏览(50)
  • 以太坊智能合约开发:Solidity 语言中的数据类型

    本文我们介绍Solidity语言的数据类型,重点是值类型,包括布尔类型、整型、地址类型、字节类型、字符串类型和枚举类型。并且通过两个智能合约例子,用于演示这些数据类型的声明与使用方法。 访问 Github 仓库 获取更多资料。 Solidity中关于数据类型的定义如下: Solidity是

    2024年02月02日
    浏览(69)
  • Python——第2章 数据类型、运算符与内置函数

    目录 1 赋值语句 2 数据类型 2.1 常用内置数据类型 2.1.1  整数、实数、复数 2.1.2  列表、元组、字典、集合  2.1.3  字符串 2.2  运算符与表达式 2.2.1  算术运算符  2.2.2  关系运算符 2.2.3  成员测试运算符 2.2.4  集合运算符 2.2.5  逻辑运算符 2.3  常用内置函数 2.3.1  类型转换

    2023年04月21日
    浏览(44)
  • 4.11 Pandas中的DataFrame数据类型API函数参考手册(一) (Python)

    前言 Pandas 是一个专门用于数据处理和分析的 Python 库,它提供了众多强大的数据结构和函数,帮助用户更加轻松、高效地完成数据处理和分析任务。其中,DataFrame 数据类型是 Pandas 中非常重要的一种数据结构,可以方便地对二维表格数据进行操作、处理、统计和可视化等工作

    2024年02月10日
    浏览(48)
  • 区块链四种类型的节点:全节点、超节点、轻节点和挖掘节点,比特币节点如何验证一个区块,CheckBlock函数

    目录 区块链四种类型的节点:全节点、超节点、轻节点和挖掘节点 挖掘节点 满节点和超节点

    2024年02月11日
    浏览(50)
  • 【区块链 | Solidity】跟我学 Solidity(7):事件

    如何使用事件记录数据 原文: https://medium.com/better-programming/learn-solidity-events-2801d6a99a92 作者: wissal haji 欢迎订阅《Solidity智能合约零基础开发教程专栏》系列文章。 在今天的文章中,我们将看到如何使用web3.js从区块链中读取事件。 Solidity中的事件就像你习惯于使用其他语

    2024年01月25日
    浏览(54)
  • 区块链2——Solidity智能合约开发

    区块链 索引目录 智能合约是一种以代码形式编写的自动执行合约,它们运行在区块链上。这些合约定义了在特定条件下发生的事件以及相应的行为。 1.1 智能合约结构 版本声明(Version Declaration): 智能合约通常以声明版本开始,指定合约应该使用的Solidity编译器版本。例如

    2024年02月05日
    浏览(69)
  • 区块链智能合约编程语言 Solidity

    上文介绍了区块链生态发展,我们知道以太坊的到来可以使开发人员基于区块链开发DApp,本文介绍 Solidity 编程语言的使用,然后基于 Solidity 编写一个简单的智能合约。 Solidity 是以太坊开发人员使用的编程语言,用来编写智能合约,运行在以太坊虚拟机(EVM)上。 有开发经

    2024年02月12日
    浏览(61)
  • 区块链入门系列文章—solidity中的HelloWord

    本系列教程将从零开始记入笔者学习区块链的过程,欢迎批评指正。 Solidity 的代码都涵盖在智能合约里面. 一个智能合约就是以太坊应用的最小单元, 所有的变量和函数都属于一个智能合约, 它是你所有应用的起点。 代码如下(示例): pragma solidity ^0.4.19; 0.4.19代表的是你使

    2024年02月02日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包