Skip to content

Commit d998226

Browse files
committed
Add study notes for 2025-08-19
1 parent 480d16e commit d998226

1 file changed

Lines changed: 156 additions & 0 deletions

File tree

jaredchao.md

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,162 @@ timezone: UTC+8
1515
## Notes
1616

1717
<!-- Content_START -->
18+
# 2025-08-19
19+
20+
## EIP-1155 多代币
21+
22+
**EIP-1155** 是以太坊的多代币标准,允许单个智能合约管理多种代币类型,包括同质化代币(FT)、非同质化代币(NFT)或其他配置(如半同质化代币)。
23+
24+
### 核心特点
25+
- **单合约多代币类型**:一个部署的合约可以包含任意组合的同质化、非同质化代币
26+
- **高效批量转账**:支持一次交易转移多种代币类型
27+
- **降低 Gas 成本**:相比多个单独的代币合约,显著减少交易费用
28+
- **统一接口**:为所有代币类型提供标准化的操作接口
29+
30+
## 与现有标准的对比
31+
32+
| 标准 | 特点 | 局限性 |
33+
|------|------|--------|
34+
| ERC-20 | 同质化代币 | 每种代币需要独立合约 |
35+
| ERC-721 | 非同质化代币 | 每个集合需要独立合约 |
36+
| ERC-1155 | 多代币类型统一管理 | 更复杂的实现逻辑 |
37+
38+
## 核心接口
39+
40+
### 主要函数
41+
42+
#### 1. 单个代币转账
43+
```solidity
44+
function safeTransferFrom(
45+
address _from,
46+
address _to,
47+
uint256 _id,
48+
uint256 _value,
49+
bytes calldata _data
50+
) external;
51+
```
52+
53+
#### 2. 批量代币转账
54+
```solidity
55+
function safeBatchTransferFrom(
56+
address _from,
57+
address _to,
58+
uint256[] calldata _ids,
59+
uint256[] calldata _values,
60+
bytes calldata _data
61+
) external;
62+
```
63+
64+
#### 3. 余额查询
65+
```solidity
66+
// 单个余额查询
67+
function balanceOf(address _owner, uint256 _id) external view returns (uint256);
68+
69+
// 批量余额查询
70+
function balanceOfBatch(
71+
address[] calldata _owners,
72+
uint256[] calldata _ids
73+
) external view returns (uint256[] memory);
74+
```
75+
76+
#### 4. 授权管理
77+
```solidity
78+
// 设置全部代币授权
79+
function setApprovalForAll(address _operator, bool _approved) external;
80+
81+
// 查询授权状态
82+
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
83+
```
84+
85+
### 重要事件
86+
87+
#### TransferSingle 事件
88+
```solidity
89+
event TransferSingle(
90+
address indexed _operator,
91+
address indexed _from,
92+
address indexed _to,
93+
uint256 _id,
94+
uint256 _value
95+
);
96+
```
97+
98+
#### TransferBatch 事件
99+
```solidity
100+
event TransferBatch(
101+
address indexed _operator,
102+
address indexed _from,
103+
address indexed _to,
104+
uint256[] _ids,
105+
uint256[] _values
106+
);
107+
```
108+
109+
## 接收者合约(Token Receiver)
110+
111+
接收 ERC-1155 代币的智能合约必须实现 `ERC1155TokenReceiver` 接口:
112+
113+
### 单个代币接收
114+
```solidity
115+
function onERC1155Received(
116+
address _operator,
117+
address _from,
118+
uint256 _id,
119+
uint256 _value,
120+
bytes calldata _data
121+
) external returns (bytes4);
122+
```
123+
124+
### 批量代币接收
125+
```solidity
126+
function onERC1155BatchReceived(
127+
address _operator,
128+
address _from,
129+
uint256[] calldata _ids,
130+
uint256[] calldata _values,
131+
bytes calldata _data
132+
) external returns (bytes4);
133+
```
134+
135+
## 安全转账规则
136+
137+
### 关键规则
138+
1. **权限检查**:调用者必须获得转出账户的授权
139+
2. **地址验证**:接收地址不能是零地址
140+
3. **余额验证**:转出余额必须充足
141+
4. **事件发出**:必须发出相应的转账事件
142+
5. **合约检查**:如果接收者是合约,必须调用相应的钩子函数
143+
144+
### 安全检查流程
145+
1. 验证转账参数有效性
146+
2. 检查授权和余额
147+
3. 更新余额状态
148+
4. 发出转账事件
149+
5. 如果接收者是合约,调用接收钩子
150+
6. 验证钩子返回值
151+
152+
## 元数据标准
153+
154+
### URI 模板
155+
代币元数据 URI 支持 ID 替换:
156+
```
157+
https://token-cdn-domain/{id}.json
158+
```
159+
其中 `{id}` 会被替换为64位十六进制代币ID(小写,补零)。
160+
161+
### JSON Schema
162+
```json
163+
{
164+
"name": "代币名称",
165+
"decimals": 18,
166+
"description": "代币描述",
167+
"image": "https://example.com/image/{id}.png",
168+
"properties": {
169+
"custom_property": "自定义属性值"
170+
}
171+
}
172+
```
173+
18174
# 2025-08-18
19175

20176
##### ERC721

0 commit comments

Comments
 (0)