Solidity 进阶知识总结

2018年7月31日 作者 jacky

函数类型,函数也是可以作为一个类型的。

数据的存储位置

变量出了可以存储在内存中,还可以存储在区块链上。

这样设计是为了EVM符合图灵完备。
图灵完备,就是可以完全模拟图灵机的编程语言或者虚拟机。简单来说,一切可以计算的问题都能计算,这样的虚拟机或者编程语言就叫做图灵完备。再简单点说,什么都能做的编程语言就叫图灵完备。要现实这样的功能,就需要具备条件分支和循环。

函数参数的类型默认是memory类型的,直接在函数声明的函数变量是storage。

数组

数组可以是一维的,也可以的是多维的。可以的固定长度的,也可以是可变长度的。

结构体

struct 用于自定义数据类型,成员也可以是结构体

结构体可以用于函数的返回值,但是返回结构体的函数只能在合约内部调用。
如果在函数中要返回结构体的变量,需要返回多个值的函数。

当函数返回结构体的时候需要引入pragma experimental ABIEncoderV2;

delete 重置变量(将变量恢复到初始状态)

注意:delete 不能重置mapping 类型的变量

view 函数关键字和 pure 函数关键字

0.4.71以前 都是用constant修饰函数的,0.4.17以后,用view代替了constant

view 修饰的函数,只能读取storage变量的值,不能写入(只读不写)

pure 修饰的函数,不能对storage变量进行读写,但是还是可以修改memery变量(不能读也不能写)

函数调用(使用new创建合约)

函数的调用方式

1.普通的调用
2.命名参数调用
3.调用另一个合约中的函数(使用new创建合约)

返回多值函数和多值解构

返回多值

多值解构

计量单位

Gas 计量单位

时间计量单位

时间计量的单位:

seconds、minutes、hours、days、weeks、years

代码略……