关于 Uniswap V3 的计算
机制改变Uniswap V3 采用了集中流动性(Concentrated Liquidity)。用户可以为自己的流动性设置一个价格区间。超出这个价格区间或低于这个价格区间,所有代币将被转换成两者中不值钱的那个。这一步转化造成的损失是无常损失。一个价格区间中的最小间隔叫 Tick,为 0.01%。 符号Swap添加流动性相关阅读:Uniswap V3 白皮书编辑于昨天 14:30文章被以下专栏收录* Blockchian;unblock256.com
矿工可提取价值
日渐增多的 MEV 可能导致了高昂的 Gas Fee在*上一期*的周报中我们为大家介绍了 Gas Fee , Gas Fee 越高,交易就越可能被矿工打包。本期我们就来讨论一下这种打包机制所产生的问题,Miner-extractable Value(MEV)。 MEV 指的是矿工重新排序交易后可以获得的利润。在实际情况中, MEV 可能并不是矿工推动。有可能是我付出了一个很高的 Gas Fee ,希望矿工优先打包我的交易。 希望矿工优先打包交易的原因有以下几种:抢跑(Frontrunning)主流的 DEX 都支持滑点,也就是成交价格的区间,假设当前下单价格 100 块,滑点是 5%,这意味着成交价格会在 95 - 105 之间。 宽松的价格区间让套利者有机可乘。 假如一个套利者在内存池中(没有打包的交易都会在内存池中)看到一笔大额买单(币价即将上涨)。根据 AMM 的模型,只要有买单成交,代币价格就会上升。因此,套利者可以通过高额的 Gas Fee 或者贿赂矿工来插入一笔买单,抢在代币价格上涨之前完成买入。套利者的抢跑行为将导致后续的那一笔大额买单以以更高的价格成交。 其实在现...
流动性挖矿(Yield Farming)
⚠️ 以下为非投资建议 (No Financial Advise) 内容,流动性挖矿存在投资风险。概念流动性挖矿是 AMM 协议下的提供流动性的更进一步,它是通过锁定流动性来获取代币奖励。 如何获取收益*上期*我们讲到在 AMM 协议下,流动性提供者可以通过从交易手续费中获取一定收益。流动性挖矿与单纯的提供流动性(LP)略有不同,它是将组好的 LP,注入到资金池中(矿池),以获取额外的不同的代币支付奖励。用于奖励的代币大多为矿场的代币。以 BSC 上的 PancakeSwap 的 Farm 作为例子,这是一个 $BUSD - $BNB 矿池,在 Stake(质押、注入)前,我们需要先为 $BUSD - $BNB 交易对提供流动性以及 Approve(授权使用代币)。 LP 组好后,我们就可以将我们的 LP Stake 进矿池,开始挖矿。 一段时间后,我们可以获得 $CAKE (PancakeSwap 的平台代币)作为奖励,通过 Harvest(收成)我们就可以把 $CAKE 收入囊中。与此同时,我们的 $BUSD - $BNB 还在努力的工作,持续产出 $CAKE。 又过了一段...
关于 Uniswap V3 的计算
机制改变Uniswap V3 采用了集中流动性(Concentrated Liquidity)。用户可以为自己的流动性设置一个价格区间。超出这个价格区间或低于这个价格区间,所有代币将被转换成两者中不值钱的那个。这一步转化造成的损失是无常损失。一个价格区间中的最小间隔叫 Tick,为 0.01%。 符号Swap添加流动性相关阅读:Uniswap V3 白皮书编辑于昨天 14:30文章被以下专栏收录* Blockchian;unblock256.com
矿工可提取价值
日渐增多的 MEV 可能导致了高昂的 Gas Fee在*上一期*的周报中我们为大家介绍了 Gas Fee , Gas Fee 越高,交易就越可能被矿工打包。本期我们就来讨论一下这种打包机制所产生的问题,Miner-extractable Value(MEV)。 MEV 指的是矿工重新排序交易后可以获得的利润。在实际情况中, MEV 可能并不是矿工推动。有可能是我付出了一个很高的 Gas Fee ,希望矿工优先打包我的交易。 希望矿工优先打包交易的原因有以下几种:抢跑(Frontrunning)主流的 DEX 都支持滑点,也就是成交价格的区间,假设当前下单价格 100 块,滑点是 5%,这意味着成交价格会在 95 - 105 之间。 宽松的价格区间让套利者有机可乘。 假如一个套利者在内存池中(没有打包的交易都会在内存池中)看到一笔大额买单(币价即将上涨)。根据 AMM 的模型,只要有买单成交,代币价格就会上升。因此,套利者可以通过高额的 Gas Fee 或者贿赂矿工来插入一笔买单,抢在代币价格上涨之前完成买入。套利者的抢跑行为将导致后续的那一笔大额买单以以更高的价格成交。 其实在现...
流动性挖矿(Yield Farming)
⚠️ 以下为非投资建议 (No Financial Advise) 内容,流动性挖矿存在投资风险。概念流动性挖矿是 AMM 协议下的提供流动性的更进一步,它是通过锁定流动性来获取代币奖励。 如何获取收益*上期*我们讲到在 AMM 协议下,流动性提供者可以通过从交易手续费中获取一定收益。流动性挖矿与单纯的提供流动性(LP)略有不同,它是将组好的 LP,注入到资金池中(矿池),以获取额外的不同的代币支付奖励。用于奖励的代币大多为矿场的代币。以 BSC 上的 PancakeSwap 的 Farm 作为例子,这是一个 $BUSD - $BNB 矿池,在 Stake(质押、注入)前,我们需要先为 $BUSD - $BNB 交易对提供流动性以及 Approve(授权使用代币)。 LP 组好后,我们就可以将我们的 LP Stake 进矿池,开始挖矿。 一段时间后,我们可以获得 $CAKE (PancakeSwap 的平台代币)作为奖励,通过 Harvest(收成)我们就可以把 $CAKE 收入囊中。与此同时,我们的 $BUSD - $BNB 还在努力的工作,持续产出 $CAKE。 又过了一段...
Share Dialog
Share Dialog

Subscribe to un.Block

Subscribe to un.Block
NFT 背后的技术是 ERC721 或 ERC1155, 今天我们就来学习一下 ERC721 的开发,说不定过两周 un.Block 就有自己的 NFT 了
首先,在 ERC721 的合约中,每个 NFT 都有以下内容
name: 代币名字
symbol: 代币符号
tokenID: 代币编号
URI: NFT元数据
其中,元数据是 NFT 最重要的部分,它直接决定了 NFT 里面存放的内容。对于一些图片类的 NFT ,元数据通常都会存放图片的链接字符串,这个链接可能是中心化网站的链接(就像我们日常用的图床链接一样),或者是 ipfs 链接。
实际上,元数据可以存放的不只有字符串,以下是在 EIP-721 中给出的元数据示例:
关于 NFT 元数据的存储问题,在之前的周报 #12#13 已经解释过了,大家有兴趣可以自行阅读。
漫游 ERC721
EIP-721 给了关于 ERC721 的 3 个接口,分别是:
IERC721: 核心 ERC721
IERC721Metadata: ERC721 元数据
IERC721Enumerable: 关于 ERC721 的供应量、序号之类的数字接口
其中,IERC721 是唯一必须实现的接口,但这个接口过于简单,几乎没有项目会只实现一个 IERC721 就发布。
因此,我们将和大家分享多一些关于 ERC721 实用接口。
除了上述的 3 个接口之外,还有以下功能可以让 ERC721 锦上添花:
ERC721Pausable: 暂停 ERC721 代币交易
ERC721Burnable: 摧毁代币!
AccessControl: 合约权限管理
OpenZepplin 给出了一个功能较为完善的 ERC721 合约范例 —— ERC721PresetMinterPauserAutoId 这个范例能在 ERC721 的基础上实现以下功能:
允许用户摧毁掉自己的代币
一个铸造者 (minter) 角色来负责铸造代币
一个交易管理员角色 (pauser),有权暂停代币转账
自动生成代币编号(tokenID) 和 元数据 (URI)
ERC721: 元数据与铸币
ERC721 在某些功能,如查询余额、授权、转账,与 ERC20 如出一辙(我们在 #9 跟大家介绍过 ERC20),值得深入了解的就是 ERC721 的元数据与铸币过程
1⃣️元数据以 mapping 的形式存储

1⃣️ 通过 _setTokenURI 函数,我们可以设置 URI,这里需要传入 tokenID 和 URI元数据

3⃣️ ERC721 的 _mint 函数和 ERC20 很相似,本质就是将代币分发给用户,由于 tokenID 代表了 NFT 代币,因此调用 mint 函数的时候只需要指定用户和 tokenID 即可

值得一提的是,OpenZepplin 并不推荐我们直接使用 _mint,而是推荐使用 _safeMint 来铸造代币
_safeMint 会在铸造前进行检查,要求如下:
tokenID 需要不存在,可以理解为这个 tokenID 对应的 NFT 还没有被铸造
收款地址需要有接受 ERC721 代币的能力,这个检查主要是针对为了合约接收代币
相关阅读:
NFT 背后的技术是 ERC721 或 ERC1155, 今天我们就来学习一下 ERC721 的开发,说不定过两周 un.Block 就有自己的 NFT 了
首先,在 ERC721 的合约中,每个 NFT 都有以下内容
name: 代币名字
symbol: 代币符号
tokenID: 代币编号
URI: NFT元数据
其中,元数据是 NFT 最重要的部分,它直接决定了 NFT 里面存放的内容。对于一些图片类的 NFT ,元数据通常都会存放图片的链接字符串,这个链接可能是中心化网站的链接(就像我们日常用的图床链接一样),或者是 ipfs 链接。
实际上,元数据可以存放的不只有字符串,以下是在 EIP-721 中给出的元数据示例:
关于 NFT 元数据的存储问题,在之前的周报 #12#13 已经解释过了,大家有兴趣可以自行阅读。
漫游 ERC721
EIP-721 给了关于 ERC721 的 3 个接口,分别是:
IERC721: 核心 ERC721
IERC721Metadata: ERC721 元数据
IERC721Enumerable: 关于 ERC721 的供应量、序号之类的数字接口
其中,IERC721 是唯一必须实现的接口,但这个接口过于简单,几乎没有项目会只实现一个 IERC721 就发布。
因此,我们将和大家分享多一些关于 ERC721 实用接口。
除了上述的 3 个接口之外,还有以下功能可以让 ERC721 锦上添花:
ERC721Pausable: 暂停 ERC721 代币交易
ERC721Burnable: 摧毁代币!
AccessControl: 合约权限管理
OpenZepplin 给出了一个功能较为完善的 ERC721 合约范例 —— ERC721PresetMinterPauserAutoId 这个范例能在 ERC721 的基础上实现以下功能:
允许用户摧毁掉自己的代币
一个铸造者 (minter) 角色来负责铸造代币
一个交易管理员角色 (pauser),有权暂停代币转账
自动生成代币编号(tokenID) 和 元数据 (URI)
ERC721: 元数据与铸币
ERC721 在某些功能,如查询余额、授权、转账,与 ERC20 如出一辙(我们在 #9 跟大家介绍过 ERC20),值得深入了解的就是 ERC721 的元数据与铸币过程
1⃣️元数据以 mapping 的形式存储

1⃣️ 通过 _setTokenURI 函数,我们可以设置 URI,这里需要传入 tokenID 和 URI元数据

3⃣️ ERC721 的 _mint 函数和 ERC20 很相似,本质就是将代币分发给用户,由于 tokenID 代表了 NFT 代币,因此调用 mint 函数的时候只需要指定用户和 tokenID 即可

值得一提的是,OpenZepplin 并不推荐我们直接使用 _mint,而是推荐使用 _safeMint 来铸造代币
_safeMint 会在铸造前进行检查,要求如下:
tokenID 需要不存在,可以理解为这个 tokenID 对应的 NFT 还没有被铸造
收款地址需要有接受 ERC721 代币的能力,这个检查主要是针对为了合约接收代币
相关阅读:
<100 subscribers
<100 subscribers
No activity yet