大框架以及很多归纳内容来自:
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"(内容);
数值类型(Value Type):简单来说就是不可变的,包括布尔型,整数型等等,这类变量赋值时候直接传递数值。
函数类型(Function Type):
Solidity文档里把函数归到数值类型,但我觉得他跟其他类型差别很大,所以单独分一类。引用类型(Reference Type):包括数组和结构体,这类变量占空间大,赋值时候直接传递地址(类似指针)。
映射类型(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的地址拥有balance和tranfer()两个成员,方便查询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的第一个字节

