23-02-23

First Post:

Last Update:

2023-02-23

学习资源

自定义修饰符

定义一个自定义修饰符,使用 modifier 关键字,然后在花括号内编写对应的逻辑,例如:

1
2
3
4
5
6
7
8
9
10
modifier onlyOwner() {
require(msg.sender == owner, "Only owner can execute this function");
_; // 占位符
}

function withdraw(uint amount) public onlyOwner {
// 只有 owner 能够调用这个函数
// 执行提现逻辑
}

在这个实现中,我们使用 require 函数来检查当前交易的发送者地址是否与合约的拥有者地址相等,如果不相等,则会抛出一个错误信息并终止操作。如果相等,则会继续执行原来的操作。

货币单位

  • 1 wei == 1
  • 1 gwei == 1*10^9
  • 1 ether == 1*10^18

!注意:数值与单位之间要用空格隔开

字节数组

有个概念要记一下:? 字(word)与字节(byte)、位(bit) ?:一个字节有8位,常见的例子有一个电脑多少位,它的字就有多少位

32位计算机:1字=32位=4字节,64位计算机:1字=64位=8字节

bytes——动态版

1
2
3
4
5
6
bytes bb;
function bt() public {
bb.push(0x11);
bb.push(0x12);
bb.push(0x44);
}

bytesX——固定版

1
2
3
4
5
6
7
以太坊虚拟机是256位的,一个字就是256位那么X为多少就表示需要多少字,然后转换成十六进制
bytes1 byt1 = 0x11;
bytes2 byt2 = 0x2222;
bytes3 byt3 = 0x333333;
bytes4 byt4 = 0xFFFFFFFF;//最大
bytes1 bytMIN = 0x00;
···

一个神奇的案例

1
2
3
4
5
6
7
8
9
10
11
12
contract byt {
bytes2 sm = 0x5b33;
function plus256 public returns(bytes3) {
return sm;//returns 0x5b3300
}
function isPlus256 public returns(bool) {
return 0x5b0000/(256*256) == sm;
}
function plus256 public returns(bytes2) {
return sm;//error
}
}

uint跟int的极限

代码:

1
2
3
4
int minInt = type(int).min;
int maxInt = type(int).max;
uint minU = type(uint).min;
uint maxU = type(uint).max;

输出结果