代码编织梦想

状态变量声明为 constant (常量)或者 immutable (不可变量),在这两种情况下,合约一旦部署之后,变量将不在修改。

特点如下:

  1. 对于 constant 常量, 他的值在编译器确定,而对于 immutable, 它的值在部署时确定。
  2. 与常规状态变量相比,常量和不可变量的gas成本要低得多,immutable成本比constant高
  3. 不是所有类型的状态变量都支持用 constant 或 immutable 来修饰,当前仅支持 字符串 (仅常量) 和 值类型。
  4. 如果状态变量声明为 constant (常量)。在这种情况下,只能使用那些在编译时有确定值的表达式来给它们赋值
  5. 声明为不可变量(immutable)的变量,可以在合约的构造函数中或声明时为不可变的变量分配任意值。 immutable只能赋值一次,并且在赋值之后才可以读取
  6. immutable可以在声明时赋值,不过只有在合约的构造函数执行时才被视为视为初始化。 这意味着,你不能用一个依赖于不可变量的值在行内初始化另一个不可变量。 不过,你可以在合约的构造函数中这样做。

    这是为了防止对状态变量初始化和构造函数顺序的不同解释,特别是继承时,出现问题。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37298500/article/details/126998309

以太坊智能合约solidity的优化_u012310362的博客-爱代码爱编程

存储中状态变量 静态大小的变量(除映射和动态大小的数组类型之外的所有内容)在从位置开始的存储中连续布局0。根据以下规则,如果可能,将需要少于32个字节的多个项目打包到单个存储槽中: • 存储槽中的第一项存储为低阶对齐。

以太坊智能合约solidity的0.5_u012310362的博客-爱代码爱编程

Solidity v0.5.0重大变化 注意 使用Solidity v0.5.0编译的合约仍然可以与合约甚至是使用旧版本编译的库进行交互,而无需重新编译或重新部署它们。更改接口以包括数据位置和可见性以及可变性说明符就足够了

如何升级truffle到v5.0.0使用solidity v0.5.0新特性?_朝歌1122的博客-爱代码爱编程

  1, 摘要 本文介绍如何升级Truffle到v5.0.0的方法便于编译使用Solidity v0.5.0,同时也介绍了一下Solidity v0.5.0新特性。 2,操作步骤 2.1 查看TRUFFLE版本并卸载 之前一直在用TRUFFLE 4.0版本,最近使用REMIX编译时发现Solidity 已升级到v0.5.0了。为了使用Solidi

区块链智能合约Coursera(第一周)智能合约基础-爱代码爱编程

课程链接 https://www.coursera.org/learn/smarter-contracts/home/week/1 这是区块链专项课程的第二门课 智能合约 Smart Contracts 为自己学习记的笔记,翻译可能存在问题,望谅解。 智能合约 Smart Contracts 智能合约基础 Smart Contract Basics

去中心化 去区块链_使用JavaScript和坚固性在以太坊区块链上构建去中心化应用程序dapp...-爱代码爱编程

去中心化 去区块链 In this blog, I build a decentralized application, also known as a “dapp”. While there are various definitions of a dapp, in general they are applications

UniswapV2周边合约学习(六)-- ExampleOracleSimple.sol-爱代码爱编程

记得朋友圈看到过一句话,如果Defi是以太坊的皇冠,那么Uniswap就是这顶皇冠中的明珠。Uniswap目前已经是V2版本,相对V1,它的功能更加全面优化,然而其合约源码却并不复杂。本文为个人学习UniswapV2源码的系列记录文章。 一、ExampleOracleSimple合约介绍 该合约位于examples目录下,比较简单,为一个以U

constant变量存储位置_Solidity 中 immutable (不可变量)与constant(常量)-爱代码爱编程

Solidity 0.6.5 中关键字 immutable 怎么用? [Solidity 0.6.5](https://learnblockchain.cn/docs/solidity/) 更新引入了一个新的关键字 `immutable ` , 它与之前的`constant`常量有何不同呢? ## constant 常量 constant 修饰的

Solidity学习笔记-爱代码爱编程

1、Solidity特性 相较于javaScript 新增address类型;语言内嵌框架支持支付;提供了payable等关键字,可以在语言层面直接支持支付;使用区块链进行数据存储。数据的每个状态都可以永久存储,所以再使用时需要确定变量使用内存,还是区块链存储;运行环境实在去中心化的网络上,所以需要强调合约或函数执行的调用方式不同的异常机制。

solidity:1. 变量和常量-爱代码爱编程

一 . Solidity 支持三种类型的变量: 状态变量 – 变量值永久保存在合约存储空间中的变量。局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。全局变量 – 保存在全局命名空间,用于获取区块链相关信息的特殊变量。 状态变量 contract Test { string public name; fun

solidity中reference type-爱代码爱编程

solidity中6种reference type: 1.struct 2.array 3.map 4.enum 5.immutable &constant // 不可变常量 6.string is same? 首字母缩写 一.stuct 多维的结构,结构体内还可以再包含字符串,整型,映射,结构体等复杂类型 1.设置struct 名称A str

Solidity如何优化Gas费用-爱代码爱编程

        在区块链中,每一笔智能合约的运行,都要根据复杂度消耗一笔GAS费;如果你要将值写入存储,则需要花费很多。如果你只是使用堆栈,它的成本会低一些;智能合约solidity语言的编写,不仅要考虑安全,也要考虑语言的优化,在以太坊上的交易gas是有上限的,特别是针对一些复杂业务的处理,有可能会导致gas超高,严重者导致此笔交易失败。 0、Stru

Solidity语言详解——view和pure函数的使用区别-爱代码爱编程

Solidity 语言有两类和状态读写有关的函数类型,一类是 view 函数(也称为视图函数),另一类是 pure 函数(也称为纯函数)。他们的区别是 view 函数不修改状态,pure 函数即不修改状态也不读取状态。 view 函数 可以将函数声明为 view 函数类型,这种情况下函数保证不修改状态。 如果编译器的 EVM 目标是拜占庭或更新

使用荷兰式拍卖模型以最优惠的价格出售您的 nft_chinadefi的博客-爱代码爱编程

使用荷兰式拍卖模型以最优惠的价格出售您的 NFT 拍卖是一种流行的方法,它可以以最好的价格出售NFT。 有一些拍卖技巧是为了出售我们的NFT收藏品,但荷兰式拍卖不同于其他技巧,它的使用频率更高。 与常规拍卖不同的是,在荷兰式拍卖中,价格开始时很高,然后在预定的时间间隔内慢慢下降。 简单地说,在荷兰式拍卖中,NFT的价格从初始价格(上限)

03-solidity8.0变量_yyjava的博客-爱代码爱编程

Solidity8.0 03-Solidity8.0变量 文章目录 Solidity8.0前言变量局部变量状态变量全局变量(提供有关区块链的信息)常量不可变变量读取和写入状态变量一、Solidity变量1.变量总结 前言 变量 Solidity 中有 3 种类型的变量 局部变量 在函数内部声明 不存储在区块链上 状态变量 在

solidity_北城以南没有天的博客-爱代码爱编程

Solidity基础 前言:最近新工作的主要业务是区块链相关,从五月开始就开始研究起了区块链相关的东西,solidity主要是用来写一些智能合约,在自己学习的过程中产出次文档,文档中有很多不全或者错误,大家海涵! ​ Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。Solidity 是一种面向对象的高级语言,用于实现

如何创建荷兰式拍卖智能合约_韩茹_的博客-爱代码爱编程

概述 通常要在两个不受信任的方之间执行任何交易,需要一个受信任的中间人;智能合约完全消除了对中间人的需求。在本文中,我们将学习如何创建荷兰拍卖智能合约,这将使整个拍卖过程无需信任。先决条件 以太坊测试网节点。MetaMask 和一些 Rospten 测试 ETH。创建ERC721 (NFT) 智能合约的知识。 使用智能合约的拍卖 拍卖是通过竞标过程

web3之路(一)-爱代码爱编程

学习资料:GitHub - AmazingAng/WTFSolidity: 我最近在重新学solidity,巩固一下细节,也写一个“Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 变量类型 数值类型(Value Type):包括布尔型,整数型等等,这类变量赋值时候直接传递数值。引用类型(Reference Type

solidity第七课——变量初始值和常数_不同类型变量起始地址的值-爱代码爱编程

一,变量初始值 在solidity中,声明但没赋值的变量都有它的初始值或默认值。这一讲,我们将介绍常用变量的初始值。 1.值的初始值 bool public _bool; // false string public _string; // "" int public _int; // 0 uint public _u

solidity8基础_solidity whennotpaused-爱代码爱编程

solidity8基础 权限修饰符全局变量view 和 pure存储memory、storage和calldata常用数据类型整型布尔型浮点型枚举类型地址类型映射数组结构体 常量&不可变量异常处理