最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

世界速读:区块链特辑——solidity语言基础(四)

来源:博客园

Solidity语法基础学习

七、事件:

事件 Event

·日志(log),是用来快速索引并查询过往资料的手段。

·而solidity是透过“事件”在区块链上写下日志,使用者或由触发的事件所产生的日志,会被写在“执行该交易的区块中”,现在是永久存储。

Indexed & Non-Indexed

·而在以太坊,有两种不同型态的事件可以使用:


(资料图片仅供参考)

·Index 索引的

·Non-Indexed 非索引的

·他们的差异在于“有没有被放过Topics栏位”

·“Topics”有四格bytes32的空格

·Topics[0]→

·keccak(

事件名称+”(”+

事件参数.map(canonical_type_of).join(“.”)+

)

)

·Topics[1~3]则是用来存放Indexed事件参数

Topics的好处

·由于Indexed的资料会放在Topics的资料空间中,因此使用者可以直接监听Topics的栏位,快速找到自己想找的资料。

·而Non-Indexed的资料则会全部被打包成以ABI编码格式的连续资料,存放在data资料栏位中。

·当然Non-Indexed的资料需要先decode才再能查询

宣告语法

event EVENT_NAME(……);

·关键词:event

·宣告一个事件,()内存放的是参数。

·参数名称不一定要填:

·( uint , int , string )

·( uint A , int B , string S )

使用事件

emit EVENT_NAME(……);

·关键字:emit

·触发事件:后面填入对应的参数

放入Topics的索引

event E(type index, ... );

·关键字:indexed

·由于Topics只有三格空间,因此不论事件的参数有多少,最多只能有三个indexed标记的参数。

·若为reference type型态,则会被keccak()处理以后才会被放入。

Example:收发代币事件检测

·新增功能:

·建立合约时触发Create(address,value)的事件。

·透过receive收钱时,触发Rceive(address,value)的事件。

·提领时,触发Withdraw(address,value)的事件。

八、运算:

运算符

Operator

·如同数学上,四则运算有加减乘除

·在solidity里面,不同的型态就有对应的运算符

布尔值

Bool

·!(逻辑非),true <> false

·&&(逻辑与),A且B

·||(逻辑或),A或B

·==(相等),A等价于B

·!=(不等),A不等价于B

·||与&&有短路求值的规则:

·A||B,其中A若为true,则||后面会直接被跳过不判断。

·A&&B,其中A若为false,则&&后面会直接被跳过不判断。

整数

int,unit

·数值比较:

·<=(小于等于)、<(小于)

·==(等于)、!=(不等于)

·>=(大于等于)、>(大于)

·算术运算符:

·+,-,*,/,%(取模数),**(次方)

整数

int,unit

·位元运算符:

·&(AND位元与)

·|(OR位元或)

·^(XOR位元互斥或)

·~(NOT位元非)

&01
000
101
|01
001
111
^01
001
110
~01
10

整数

int,unit

·移位运算符

·<<(左位移),A<

·>>(右位移),A>>N等价于A/(2**N)

·3(二进制)→011

关键词: 四则运算 算术运算符 加减乘除