type
status
date
slug
summary
tags
category
icon
password
前言:
这是我前段时间学习Solidity时的笔记,现在做一整理,记录了我在学习Solidty中的一些思考,以及一些容易遗漏的记录;后续随着理解的更加深入,仍会同步更新;
如果需要详细学习相关知识,请参考‣ ,本文仅推荐用于伴读。
ERC20、代币水龙头
- IERC20
- 相关代码:
空投合约
- 空投合约
_to.call(value:amount){””}
这里的value默认单位为wei,如果需要发送ether,可以amount * 1 ether 来进行换算
- 相关代码 airdrop合约
ERC721
- IERC165 检查一个智能合约是否支持ERC721的接口
- 确保目标合约实现了onERC721Received()函数
- 相关代码 erc721
荷兰拍卖、默克尔树
- merkle tree
通过两两哈希,来获取根节点,利用根节点的可验证性,来保护整个数据不被篡改;Merkle proof即为从叶子节点到根节点的路径;
- 相关代码
数字签名、链上随机数
- 椭圆曲线签名算法ECDSA 签名目的为证明当前为私钥的持有者、以及被签名数据没有被篡改过; 整个博客讲的非常详细
- 和前端如何验证流程
hash(A,B) → metamask签名 →signature
hash(A,B) →msgHash
verify(msgHash,signature) → signer,这个signer 是否和metamask签名的公钥是否相同
- 调用LINK生成随机数
注意:订阅 ID 类型已从 VRF V2 中的
uint64
变为 VRF V2.5 中的uint256
- 相关代码
NFT交易所、ERC1155
- ERC1155
在
ERC721
中,每个代币都有一个tokenId
作为唯一标识,每个tokenId
只对应一个代币;而在ERC1155
中,每一种代币都有一个id
作为唯一标识,每个id
对应一种代币。
- 代码
WETH、分账、线性释放、代币锁
- 函数参数的位置指定
主要针对引用类型:数组、结构体、映射、字符串
memory
:表示数据将被存储在内存中,适用于需要修改或者临时存储的数据,允许在函数内容 修改参数内容,但会消耗更多gas;calldata
:calldata为只读,最省gas,直接从调用数据中读取,不需要复制到内存;
- 代码
代理合约、可升级合约、透明代理、通用可升级代理
- 代理合约 在fallback()回调函数中基于delegatecall来调用被代理合约;
- 选择器冲突 函数选择器为函数签名的哈希的前4个字节;
如”burn(uint256)”和(collate_propagate_storage()”具有相同的选择器;
- 透明代理 管理员:调用代理合约的可升级函数对合约升级,不能通过回调函数调用逻辑合约 其他用户:不能调用可升级函数,但是可以调用逻辑合约的函数。
- 通用可升级代理 将升级函数放在逻辑合约中,并检查调用者是否为管理员;
- 相关代码 ProxyContract case
多签钱包
- 多签钱包 通过一个bytes数组来存储签名,之后根据每个签名的长度为65进行分离,挨个验证,当通过数目大于等于threshold后,执行交易;
ERC4626代币化金库标准、EIP712类型化数据签名
- ERC4626 用vault这个名称不太好理解到底在干嘛,应该换为shareToken,这个名称会好理解一些,可以视作veToken的前身;
- EIP712 钱包会展示签名消息的原始数据,用户可以在验证数据符合预期之后签名;
- 相关代码
ERC-2612 ERC20Permit,多重调用
- Nonce补充 nonce用于确认交易顺序,撤销pending中的交易,确定生成的合约地址
- ERC20Permit 这里的用途主要是分离permit的发起者和gas的付费人(实际进行approve)的两个角色,用户仅仅需要进行签名即可进行交易,用于近似的cex体验;
- Multicall calldata同样可以修饰结构体的声明,Call calldata calli;calli直接从调用数据中读取,不需要复制到内存,从而节省gas;
去中心化交易所、闪电贷
- gas 计算 通过opcodes,以太坊规定了每个opcode的gas消耗,复杂度越高的opcodes消耗越多的gas;如ADD操作消耗3 gas,SSTORE操作消耗20000 gas等等
- flashloan 也就是在一笔TX中同时完成借贷-执行-还款三个行为;
- 作者:eddie
- 链接:https://www.binlog.com/article/13a4ec7d-70d7-80cf-ab5f-d2cba1355184
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。