区块链特辑——solidity语言基础
Posted wybsignal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链特辑——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位元非)
& | 0 | 1 |
0 | 0 | 0 |
1 | 0 | 1 |
| | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 1 |
^ | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 0 |
~ | 0 | 1 |
1 | 0 |
整数
int,unit
·移位运算符
·<<(左位移),A<<N等价于A**(2**N)
·>>(右位移),A>>N等价于A/(2**N)
·3(二进制)→011
以上是关于区块链特辑——solidity语言基础的主要内容,如果未能解决你的问题,请参考以下文章