智能合约(三、四)

2018-11-21  本文已影响83人  Mr丶易客

智能合约(三)

一、错误处理

    Ø assert 类型异常:内部错误

    Ø require 类型异常: 外部错误

    Ø revert  类型异常:终止并还原状态

   注意:异常函数的参数为false时抛出异常

二、函数修饰器

    Ø 使用形式:关键字:modifier

need-to-insert-img

Ø 多函数修改器

顺序执行,执行到_ 就跳到第二个参数的函数体 再执行 遇到 _ 就再跳到第三个参数的函数体,执行后再退回去,,,类似递归。

Ø 重写

n 即继承关键字is

n 使用形式:

need-to-insert-img

注意:覆盖的函数名、类型、参数、都一样,与C++一致

三、Solidity编码规范

Ø 合约、库、事件及结构体命名应该使用单词首字母大写的方式,

Ø 函数、参数、变量及修饰器应该使用首单词小写后面单词大写的方式,

Ø 缩进:4个空格

Ø 函数之间有空行,函数左括号和定义在一行

Ø 编写函数顺序:a.构造函数   b.回退函数(如果有)

c.外部函数(external)  d.公有函数(public) 

 e.内部函数(internal)   f.私有函数(private)

Ø 区分事件与函数

n 事件可以加前缀并全大写

Ø 常量:全大写及下划线分割的方式

四、事件Event的使用

Ø 关键字:event  与 emit

Ø 使用与监听

need-to-insert-img

need-to-insert-img

五、函数高级部分

注意:在构造函数内,不能使用this调用函数

Info()函数 :

feed.info.value(10).gas(310000)(); // 附加以太币及gas来调⽤info

callFeed()

Call() ,callcode() , delegatecall()

call() 函数:想一个合约发送消息,参数可以是任意类型的,并把参数打包成32字节

call指定函数:第一个参数如果是4个字节,会认为是签名的序号值,

如果只是想传个参数值,应避免参数为4个字节。

Call()返回值结果:bool类型

智能合约(四)

一、solidity继承

1:使用关键字is表示继承

2:访问属性:继承不可访问父合约的私有函数,构造函数不可以继承

3:支持多继承,可以存在相同的函数,变量以及事件,按照最远原则进行继承

4:继承之后的重写要求函数名称,参数,返回值,访问属性完全相同

5:可以显式调用父合约的构造函数,有两种方式

6:通过两种方式显式调用父合约的方法,合约名称. func() super. func()

7:支持棱形继承,按照最远原则处理 

多继承是最远的向上继承,如1, 2, 3, 4,  4=>3 , 3=>2 , 2=>1 ,

Super:当前合约的上一层合约即所继承的合约

二、接口interface

抽象合约:只声明不实现即没有函数体

接口类似于抽象合约,但它们不能实现任何功能。还有其他限制:

• 无法继承其他合约或接口。

• 无法定义构造函数。

• 无法定义变量。

• 无法定义结构体。

• 无法定义枚举。

接口可以像继承合约一样继承,但是需要实现接口内的所有方法

三、库的使用 library

• 无状态变量(state variables)。

• 不能继承或被继承

• 不能接收以太币

• 不能销毁一个库

1、Using 的使用

指令using A for B;用来把库函数(从库A)关联到类型B。这些函数将会把调用函数的实例作为第一个参数 即

Ø Using+库名+for+函数的第一个参数类型

Ø Using+库名+for+ * (代表任意类型)

注意:当库有多个函数时,就会用到第二种方法应注意参数类型是否对应,即使不对应也会被关联。

上一篇下一篇

猜你喜欢

热点阅读