首页 > 其他分享 >solidity的pure和view的区别

solidity的pure和view的区别

时间:2024-05-28 16:15:28浏览次数:24  
标签:状态 读取 solidity pure view 合约 函数

当你在 Solidity 中编写智能合约时,你可能会遇到两个关键字:pureview。这两个关键字用于函数声明,用于指示函数的行为和对区块链状态的访问方式。在本文中,我们将深入探讨 pureview 的区别以及它们在 Solidity 中的使用场景。

1. pure 函数

pure 关键字用于声明函数不会访问或修改合约的状态。这意味着 pure 函数不会读取合约中的任何变量,也不会写入任何变量。它们只是执行计算并返回结果。pure 函数的一个重要特性是它们不能调用其他非 pureview 函数,因为这可能会涉及到状态的读取。

下面是一个简单的 pure 函数的例子:

pragma solidity ^0.8.0;

contract MathOperations {
    function add(uint256 a, uint256 b) public pure returns (uint256) {
        return a + b;
    }
}

在上面的示例中,add 函数声明为 pure,因为它只是对输入参数进行数学运算,并返回结果,而不涉及对合约状态的访问或修改。

2. view 函数

pure 函数不同,view 函数声明了函数仅用于读取合约状态,而不修改它。view 函数可以读取合约中的变量和数据,但不能修改它们。这使得 view 函数可以安全地在以太坊网络上执行,因为它们不会改变区块链状态。

以下是一个使用 view 关键字声明的简单示例:

 

pragma solidity ^0.8.0;

contract MyContract {
    uint256 public myNumber;

    function getMyNumber() public view returns (uint256) {
        return myNumber;
    }
}

在上面的示例中,getMyNumber 函数被声明为 view,因为它只是返回了合约中的一个状态变量,而不会修改它。

区别总结

尽管 pureview 函数都用于声明函数对状态的访问方式,但它们之间有几个重要的区别:

  • pure 函数不能读取合约状态,也不能调用其他非 pureview 函数。它们只是执行计算并返回结果。
  • view 函数可以读取合约状态,但不能修改它。它们可以安全地被其他合约或外部调用者调用。

适用场景

选择使用 pureview 取决于函数的预期行为和逻辑需求:

  • 如果函数执行的是纯粹的数学运算或逻辑操作,并且不涉及合约状态的读取或修改,则应该使用 pure
  • 如果函数需要读取合约状态但不修改它,则应该使用 view
  • 如果函数需要修改合约状态,则不应该使用 pureview 关键字。

结论

pureview 关键字为 Solidity 开发者提供了一种明确声明函数对合约状态的访问方式的方法。通过正确使用这些关键字,开发者可以编写更安全、更清晰的智能合约代码,从而提高合约的可靠性和可维护性。

标签:状态,读取,solidity,pure,view,合约,函数
From: https://www.cnblogs.com/zhanchenjin/p/18218213

相关文章

  • TV RecyclerView 滑动后操作保持落焦在左侧第一个View
     在recyclerview中,想要无论滑动到哪,每次按遥控器落焦,需要落焦在左侧第一个item上面,如果不能触屏还好,触屏会导致焦点丢失根据系统的反馈,如果你滑动了列表,刚好列表的item卡在一半的位置,此时系统的落焦规则,不一定会到第一个之前试过一个效果一般的方案,就是通过 findFirstV......
  • PreviewMouseLeftButtonDown与MouseLeftButtonDown的撕烤
    在WPF(WindowsPresentationFoundation)中,PreviewMouseLeftButtonDown和MouseLeftButtonDown是两个常用的鼠标事件,它们在事件路由策略和处理时机上有所不同。了解这两个事件的区别以及如何在实际应用中使用它们,可以帮助开发者更好地处理用户交互。事件的基本区别PreviewMouseL......
  • kkFileView——全能的在线文件预览解决方案
    引言在数字化办公日益普及的今天,文件的在线预览成为了一个不可或缺的功能。无论是个人还是企业,都希望能够在浏览器中直接打开并浏览各种格式的文档。今天,我们将探索一款国产开源免费的在线文件文档预览软件——kkFileView。一、kkFileView简介kkFileView是一个基于Spring......
  • WPF在ListView中绑定Command命令的写法
    假定:ViewModel中有一个数据源叫Persons,有一个命令叫DoCommand,通过System.Windows.Interactivity触发器绑定鼠标MouseUp事件,当UI端绑定了DataContext数据上下文之后,Command="{BindingDoCommand}"是找不到这个命令的,必须使用Binging类的RelativeSource属性先找到当前UI,再找到DataC......
  • WebView2在WPF中的应用
    开发环境运行环境:.Net6开发环境:VisualStudio202217.1.3框架语言:WPF安装WebView2通过PackageManager控制台安装Install-PackageMicrosoft.Web.WebView2通过Nuget包管理器安装在窗体中添加名字空间:xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;asse......
  • Android 深入系统源码探讨 Activity、Window 和 View 的关系与实践
    文章目录1、概括2、AndroidWindow设计2.1、Window类2.2、PhoneWindow2.3、WindowManager2.4、ViewRootImpl2.5、DecorView3、AndroidActivity设计3.1、Activity的基本概念3.2.、Activity的生命周期3.3、Activity的内部结构4、AndroidView设计4.1、View的基本概......
  • LabVIEW超快激光微纳制造系统设计
    LabVIEW超快激光微纳制造系统设计在当前的制造行业中,精密加工技术的需求日益增长,尤其是在微纳尺度上。超快激光制造技术,以其独特的加工精度和加工效率,成为了精密加工领域的重要手段。然而,大多数超快激光制造系统的集成度不高,操作繁琐,难以满足高效、精准的制造需求。为解决这些......
  • LabVIEW控制步进电机如何应用于自动化设备中?
    LabVIEW是一种图形化编程语言,广泛应用于数据采集、仪器控制和工业自动化。步进电机因其精确的定位控制特性,被广泛应用于自动化设备中。通过LabVIEW控制步进电机,可以实现高效、精准的自动化操作。本文将详细介绍如何在LabVIEW中控制步进电机及其在自动化设备中的具体应用,包括连......
  • 深度解读速卖通aliexpress.item_review API评论数据
    速卖通(AliExpress)是一个全球知名的跨境电商平台,它提供了各种API接口供开发者使用,以获取平台上的数据。其中,item_review API可能是指用于获取商品评论的API(请注意,实际的API接口名称和参数可能会根据速卖通平台的更新而有所变化)。在深度解读这个API时,我们需要考虑以下几个方面......
  • 深入浅出Viewport设计原理2
    逻辑像素、逻辑分辨率对于同一个元素,DPR越大,渲染时需要的物理像素就越多。这是我们上面得出的结论。那么,在软件开发中,元素的大小到底应该写成多少px?为了解决这个问题,我们引入“逻辑像素”的概念。平时我们在css中写的px指的就是逻辑像素,而不是物理像素,一个逻辑像素可以......