Solidity 中 immutable (不可变量)与constant(常量)

这篇文章主要介绍了Solidity 中 immutable (不可变量)与constant(常量) ,文中通过代码以及文档配合进行讲解,很详细,它对在座的每个人的研究和工作具有很经典的参考价值。 如果需要,让我们与区块链资料网一起学习。

https://www.interchains.cc/22591.html

Solidity 中 immutable (不可变量)与constant(常量)是很好的区块链资料,他说明了区块链当中的经典原理,可以给我们提供资料,Solidity 中 immutable (不可变量)与constant(常量)学习起来其实是很简单的,

不多的几个较为抽象的概念也很容易理解,之所以很多人感觉Solidity 中 immutable (不可变量)与constant(常量)比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难

Solidity 中 immutable (不可变量)与constant(常量)

  • Solidity 中 immutable (不可变量)与constant(常量) Tiny熊
  • 发表于 2020-05-27

Solidity 0.6.5 中关键字 immutable 怎么用?

Solidity 0.6.5 更新引入了一个新的关键字 immutable , 它与之前的constant常量有何不同呢?

constant 常量

constant 修饰的变量需要在编译期确定值, 链上不会为这个变量分配存储空间, 它会在编译时用具体的值替代, 因此, constant常量是不支持使用运行时状态赋值的(例如: block.number , now , msg.sender 等 )

constant 目前仅支持修饰 strings 及 值类型.

以下是常量的声明:

pragma solidity >0.6.4 <0.7.0;  contract C {     uint constant X = 32**22 + 8;     string constant TEXT = "abc"; }

immutable 不可变量

immutable 修饰的变量是在部署的时候确定变量的值, 它在构造函数中赋值一次之后,就不在改变, 这是一个运行时赋值, 就可以解除之前 constant 不支持使用运行时状态赋值的限制.

immutable不可变量同样不会占用状态变量存储空间, 在部署时,变量的值会被追加的运行时字节码中, 因此它比使用状态变量便宜的多, 同样带来了更多的安全性(确保了这个值无法在修改).

这个特性在很多时候非常有用, 最常见的如 ERC20代币用来指示小数位置的 decimals 变量, 它应该是一个不能修改的变量, 很多时候我们需要在创建合约的时候指定它的值, 这时 immutable 就大有用武之地, 类似的还有要保存 创建者地址, 关联合约地址.

以下是 immutable 的声明举例:

contract Example {      uint public constant decimals_constant;       uint immutable decimals;     uint immutable maxBalance;     address immutable owner = msg.sender;      function Example(uint _decimals, address _reference) public {        decimals_constant = _decimals; // TypeError: Cannot assign to a constant variable.        decimals = _decimals;        maxBalance = _reference.balance;      }      function isBalanceTooHigh(address _other) public view returns (bool) {         return _other.balance > maxBalance;     }  }

原文链接: https://learnblockchain.cn/article/1059 作者: Tiny熊 , 欢迎大家在知乎,微博,GitHub 关注我. 本文首发于登链社区

来自专栏: 全面掌握Solidity智能合约开发

部分转自网络,侵权联系删除www.interchains.cchttps://www.interchains.cc/22591.html

区块链毕设网(www.interchains.cc)全网最靠谱的原创区块链毕设代做网站 部分资料来自网络,侵权联系删除! 最全最大的区块链源码站 ! QQ3039046426
区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » Solidity 中 immutable (不可变量)与constant(常量)

提供最优质的资源集合

立即查看 了解详情