Cover photo

Solidity语言的小分享(1)

大框架以及很多归纳内容来自:

https://github.com/AmazingAng/WTFSolidity

基础篇

语言就是语法加词汇!

和其他语言如中文一样,也是语法加词汇:

我 吃 饭

我 吃(很好吃的)饭

我(快速地)吃(很好吃的)饭

一些写在最前面的话

没啥意义第一个是版权啥的,第二个是兼容。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

合约开始

合约都在扩号内,每句加

contract HelloWeb3{
..bulabula..;
..bulabula..;
}

语法

大体会是:变量类型 + 地点 + 名称 + 内容

根据不同的变量类型,细节微调。

例子:hello world

string(变量类型)public(地点)asd(名字)= "hello world"(内容);

变量类型

  1. 数值类型(Value Type):简单来说就是不可变的,包括布尔型,整数型等等,这类变量赋值时候直接传递数值。

  2. 函数类型(Function Type)Solidity文档里把函数归到数值类型,但我觉得他跟其他类型差别很大,所以单独分一类。

  3. 引用类型(Reference Type):包括数组和结构体,这类变量占空间大,赋值时候直接传递地址(类似指针)。

  4. 映射类型(Mapping Type): Solidity里的哈希表。

变量语法

数值

语法:数值类型 + 地点 + 名称 + 内容

词汇如下:

布尔型(bool)

运算符:

  • ! (逻辑非)

  • && (逻辑与, "and" )

  • || (逻辑或, "or" )

  • == (等于)

  • != (不等于)

  • 比较运算符: <=<==!=>=>

bool(类型) public(地点) zhende(名字) = true;

假
bool private jiade = !zhende;

或
bool public zhenjia = zhende && jiade; 

比大小
bool public _numberbool = _number2 > _number3;

整数

int 整数、uint 正整数、uint256 256位正整数

运算符: +-, 一元运算 -+*/%(取余),**(幂)

定义一个数字
uint256 public _number = 123;

加法
uint256 public _number1 = _number + 1;

幂
uint256 public _number2 = _number1**2; 

余数
uint256 public _number3 = _number2 % 2; 

地址

地址类型(address)存储一个 20 字节的值(以太坊地址的大小)。地址类型也有成员变量,并作为所有合约的基础。有普通的地址和可以转账ETH的地址(payable)。payable的地址拥有balancetranfer()两个成员,方便查询ETH余额以及转账。

地址
address public _address = 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;

让地址成为Payable类
address payable public _address1 = payable(_address); 

payable的地址类型可以查余额
uint256 public balance = _address1.balance; 

字节

字节数组bytes分两种,一种定长(byte, bytes8, bytes32),另一种不定长。定长的属于数值类型,不定长的是引用类型(之后讲)。 定长bytes可以存一些数据,消耗gas比较少。

固定长度的字节数组
bytes32 public _byte32 = "CoinEx"; 
bytes1 public _byte = _byte32[0]; 

CoinEx变量以字节的方式存储进变量_byte32

_byte变量存储_byte32的第一个字节

https://blog.51cto.com/u_15057858/4390670