solidity8.0的基本语法

本文详细介绍了Solidity 8.0的基本语法,包括值类型和引用类型、变长数组操作、整型溢出处理、引用传递和值拷贝的区别、纯函数与视图函数的使用、常量定义、结构控制与循环、错误处理机制require/revert/assert、自定义错误、函数修饰器、结构体赋值、映射操作、枚举类型、存储位置、事件和继承等内容,旨在帮助开发者掌握最新版Solidity的关键特性。
摘要由CSDN通过智能技术生成

solidity基本语法:

1、值类型和引用类型

值类型:基础数据类型,int,bool,address,func。

引用类型:复杂数据类型,struct,mapping,数组[]。

2、变长数组的成员方法

变长数组的方法:只能在一端操作。(定长数组不可以操作)

.length获取数组长度

.push(),向末尾添加元素。

.pop(),删除末尾的元素。

另外,变长数组要注意,如果for循环影响到数组的取值,可能会因为太大,导致超出gaslimit最终没法执行。

另外,删除数组中的元素,如何弄?

3、地址的成员方法

<address>.balance:获取地址的以太币余额

<address (payable)>.transfer:合约向该地址转账

3、整型溢出

整数溢出:在老版本中,如果整数溢出,不会报错,就很容易出错,而新版本会报错,无法编译通过,所以防止整型溢出的办法就是,用新版本的solidity编译器。

4、引用类型于值类型

引用类型占用空间巨大,值拷贝开销很大。

引用类型数据的三种存储位置:

1、memory,内存,生命周期仅存在于函数调用期间。

2、storage,状态变量的保存位置,开销最大

3、calldata,调用数据,用于函数参数不可变存储区域。

5、引用传递和值拷贝

在solidity中,基础数据类型,比如bool,int,address,他们的赋值传参都是值拷贝,所有复杂数据类型,比如:struct,mapping,数组类型[],他们的赋值传参的时候,到底是值拷贝还是引用传递,要看两者的数据类型是否一致。

在使用引用类型的数据时,我们必须使用存储位置关键字(memory,storage,calldata)来指定数据存储位置,有且只有类成员变量无需指定(其实就是指合约,因为合约就是solidity中的类),因为他们默认是storage。我们的合约是不需要指定存储关键字的,因为默认就是storage(其实等同于上一句话,合约中的成员变量的存储位置无需指定,自动默认)。

引用类型的传参到底是值拷贝还是引用传递:

如果相同类型的赋值时引用传递,其余是值拷贝,其中特殊的是,storage与storage之间是值拷贝。

具体来说,memory与memory之间传值是引用传递

storage与local storage之间是引用传递。

以下是值拷贝

storage与memory之间是值拷贝,但是memory向storage是不可以传值的,否则会报错。

storage与storage之间是值拷贝。

花不花gas,只取决于两个层面:

1、是否修改了storage参数

2、你函数 调用有没有声明pure或者view

如果两个条件都满足,即没有修改storage状态变量,而且你调用的函数声明了pure或者view,就可以不用花gas,否则,哪怕是查询函数调用一次就要花一次gas。

6、pure和view

pure对状态变量不可读不可写,只对局部变量进行操作。

view,对状态变量可读,不可写。

7、常量的定义和全局变量

用constant + 大写变量名,可以节省gas。

只读方法,难道不是不要gas吗?其实不是的,因为在写入函数中读取变量的时候,要按照是否是常量来收取gas,所以,我们需要把不需要修改的变量定义为constant。

全局变量

区块和交易有关的:

block.number (uint)当前区块号

 block.timestample, (uint)  从开始到当前区块按秒计的时间戳

msg.sender:(address)当前消息的调用者

msg.value:(uint)随消息发送的wei

tx.orign:(address payable) 交易的发起者   

abi有关的接口

abi.encode(),等abi相关的内置函数

错误处理

require(),revert()

类型信息

type()

type(T).max,type(T).min

地址和合约相关

 

8、结构控制与三元运算符

结构控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值