Solidity语言学习笔记————4、常量

本文详细介绍了Solidity中常量状态变量的概念及其使用限制。包括不允许的功能表达式、允许的内置函数调用以及当前支持的类型等。通过示例代码展示了如何定义常量。

常量(Constant State Variables)

状态变量可以被定义为constant。这样的话,它必须在编译期间通过一个表达式赋值。 
这种情况下,以下功能的表达式不被允许:

  • 访问storage
  • 访问区块链数据,如nowthis.balanceblock.number
  • 访问合约执行的中间数据,如msg.gas
  • 向外部合约发起调用。

可能会造成内存分配副作用表达式是允许的,但对其它内存对象的产生副作用的表达式不被允许。内置的函数keccak256keccak256ripemd160ecrecoveraddmodmulmod可以允许调用,即使它们调用的是外部合约。

允许内存分配带来可能的副作用的原因是,因为这将允许构建复杂的对象,比如,查找表。虽然当前的特性尚未完整支持。

编译器并不会为常量在storage上预留空间,每个使用的常量都会被对应的常量表达式所替换,也许优化器会直接替换为常量表达式的结果值。

不是所有的类型都支持常量,当前支持的仅有值类型和字符串。

pragma solidity ^0.4.0;

contract C {
    uint constant x = 32**22 + 8;
    string constant text = "abc";
    bytes32 constant myHash = keccak256("abc");
}


Solidity是用于编写智能合约的编程语言,在区块链开发中应用广泛,而Web.js(如web3.js)则是用于与区块链进行交互的JavaScript库,二者在区块链前端开发中紧密相关。 在岗位方面,Solidity开发主要负责智能合约的开发,从业者除了要了解相关的Solidity语法知识,还需要接触各种dapp,该岗位在上海、深圳、北京较多,其他省份基本没有;而web3.js开发与传统的web2前端开发工程师类似,学习基础的前端知识,多了解一个web3的库即可,主要开发前端js代码,通过js进行合约交互和绘制合约界面,EVM开发岗位较多,需要了解EVM底层原理 [^1]。 从技术应用层面看,对于前端开发者而言,Web2应用的开发主要依赖于传统的Web技术,如HTML、CSS、JavaScript等;而Web3应用的开发,如涉及Solidity应用前端,需要掌握更多的区块链技术、去中心化技术以及智能合约编程等方面的知识,同时也需要更加注重用户隐私和安全等方面的考虑 [^3]。 在使用web3.js与Solidity合约交互时,web3可通过contract调用部署的合约,这里的合约通常是用Solidity语言编写的。web3本身也有一些api可以直接和区块链交互。不过,不同区块链上即便为同一种代币,也是不互相关联的,可看成是两个数据库的数据。并且不同版本的web3方法可能不一样,文档有些又不全,需要类比和阅读源码,多次测试 [^2]。 以一个web3博客系统为例,其涉及的技术栈包括Next.js、Polygon、Solidity、The Graph、IPFS、Hardhat等,其中Hardhat是Ethereum开发环境,web3modal可方便快速地连接钱包等 [^4]。 以下是一个简单的使用web3.js调用Solidity合约的示例代码: ```javascript const Web3 = require('web3'); // 假设已经部署的合约地址和ABI const contractAddress = 'YOUR_CONTRACT_ADDRESS'; const contractABI = [/* 合约ABI */]; // 初始化web3实例 const web3 = new Web3('YOUR_PROVIDER_URL'); // 获取合约实例 const contract = new web3.eth.Contract(contractABI, contractAddress); // 调用合约的某个方法 contract.methods.someFunction().call() .then(result => { console.log('合约方法调用结果:', result); }) .catch(error => { console.error('调用合约方法时出错:', error); }); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值