类型
整型
int / uint :分别表示有符号和无符号的不同位数的整型变量。 支持关键字 uint8 到 uint256 (无符号,从 8 位到 256 位)以及 int8 到 int256,以 8 位为步长递增。 uint 和 int 分别是 uint256 和 int256 的别名。
contract Base {
// 整型应该和 java 或者 c 等强类型语言差不多
uint num = 1;
int num3 = 1;
}
字符串
字符串 有两个关键字 是 storage 和 memory
storage 这个是会永久存贮在区块链中
memory 这个是存贮在内存中
contract Base {
string str1 = "1"; // 这个 str1 会永久存贮到区块链上
// 这里函数传参的时候的 _str会存贮到内存中
function fn(string memory _str) public {
str1 = _str;
}
}
布尔类型
contract Base{
bool boo = false;
function onChange(bool _boo) public {
boo = _boo;
}
}
地址类型
contract Base {
address owner= msg.sender;
function changeOwner(address _owner) public {
owner = owner;
}
// 表示一个地址为空
address n = address(0);
}
全局变量
block 、tx 和 msg
Block
- block.blockhash(uint blockNumber) returns (bytes32):指定区块的区块哈希——仅可用于最新的 256 个区块且不包括当前区块;而 blocks 从 0.4.22 版本开始已经不推荐使用,由 blockhash(uint blockNumber) 代替
- block.coinbase (address): 挖出当前区块的矿工地址
- block.difficulty (uint): 当前区块难度
- block.gaslimit (uint): 当前区块 gas 限额
- block.number (uint): 当前区块号
- block.timestamp (uint): 自 unix epoch 起始当前区块以秒计的时间戳
Msg
- msg.data (bytes): 完整的 calldata
- msg.gas (uint): 剩余 gas - 自 0.4.21 版本开始已经不推荐使用,由 gesleft() 代替
- msg.sender (address): 消息发送者(当前调用)
- msg.sig (bytes4): calldata 的前 4 字节(也就是函数标识符)
- msg.value (uint): 随消息发送的 wei 的数量
- now (uint): 目前区块时间戳(block.timestamp)
tx
- tx.gasprice (uint): 交易的 gas 价格
- tx.origin (address): 交易发起者(完全的调用链)
函数
contract Base{
/* 一个函数的结构
下面的函数结构除了 可见性 和函数名称是必须写的,
剩下的都是可写可不写的,根据实际情况来就可以了
*/
function 函数名称(参数类型 参数名称) 可见性 修改器 retuns(值类型) {
body.....
}
// 实例
function getMsgSender(address _owner) public view retunrs(address) {
retunrn msg.sender;
}
}