关于 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
<100 subscribers
<100 subscribers

随着 NFT 的繁荣,我们终于看到一些项目方对 ERC-721 提出了更新。对于一个 NFT 团队来说,技术大概率不是他们的长处,但还是让我们来看看他们对 ERC-721 有一些什么样的想法
各位开发过 NFT,并且用 ERC-721 标准进行开发的读者们用的是什么库呢?我们一般第一选择是 Openzeppelin 的库,但 Openzeppelin 的 tokenURI 规范和 Opensea 并不是非常的兼容。Openzeppelin 要求平台在访问元数据时,自动为 tokenURI 加上 .json 的后缀。然而 Opensea 并不遵守这个规范,隔壁 Rarible 倒是遵守了这个规范。因此我经常会这样魔改一下:
import "@openzeppelin/contracts/utils/Strings.sol";
string(abi.encodePacked(baseURI, tokenId.toString(), ".json"));
Azuki 推出了完全兼容 ERC-721 的 ERC-721A,并支持使用 NPM 进行安装,作为库导入到自己编写的合约里。目前在官方给出的清单中,有将近 40 个项目使用了 ERC-721A,例如 Cereal Club,X Rabbit Club,The Women of Crypto 等。除了单纯的 ERC721A,Azuki 还推出了两个变种,ERC721A Burnable 和 ERC721A Owners Expicit。如果你想要使用 ERC-721A 进行开发,需要注意的的是 ERC-721A 并没有类似 Openzeppelin 那样的完整 API 文档。
在 ERC-721A 中,Azuki 的改进有两点:
Mint 1 个 NFT 和 Mint 多个 NFT 手续费几乎一样
降低 Mint 的基础手续费
Azuki 还将 ERC-721A 和 ERC-721 Enumerable 的 Mint 手续费做了比较:

从数字上来看,基础 Mint 手续费降低了一倍,每多 Mint 一个,ERC-721A 只会增加些许的手续费。
为了达到这点 Azuki 在代码层面做了这几个主要改动:
删除 ERC-721 Enumerable。ERC-721 Enumerable 以更昂贵的 Mint,大大增加了读取速度。Azuki 认为如果 TokenId 是有顺序的,我们可以手动遍历,因此 ERC-721 Enumerable 是没有必要的。
支持 Batch Mint,并且只进行一次更新。例如 Alice Mint 了 3 个 NFT。常规的合约会对 Alice 的 Balance 进行 3 次更新。从 0 → 1,1 → 2,2 → 3。然而 Azuki 只进行了一次更新,即 0 → 3。以太坊的写操作非常昂贵,因此这个方法可以为我们省下不少的手续费。
对于一次 Mint,不管 Mint 了几只,ERC-721A 也仅仅需要一次写入来更新所有这些 NFT 的所有者。如果一个用户拥有连续的三个 NFT,那么在存储中只有第一个的所有者是他,后面两个则为初始的 0 地址。因此 Azuki 在读取 NFT 的所有者函数中又额外的逻辑。

根据项目自己的一些需求,Azuki 对通用库进行了一些修改,来实现在特定场景的手续费降低。例如第三条就牺牲了读取的性能。这里的大部分优化都存在 Tradeoff。
如果你喜欢本期内容,️欢迎点赞分享给你觉得有需要的人。
💻 Website: unblock256.com
✈️ Telegram: un.Block Weekly
🕊️ Twitter: @unBlock256
📧 Email:unblocketh@gmail.com
📤 分发渠道:知乎 | Notion | Substack | Medium | Mirror | RSS | 即刻 | 微信订阅
视觉设计:Jenny
特别鸣谢:
本文非商业目的转载授权遵循 CC BY-NC 4.0 协议
版权所有 ©️un.Block 2021

随着 NFT 的繁荣,我们终于看到一些项目方对 ERC-721 提出了更新。对于一个 NFT 团队来说,技术大概率不是他们的长处,但还是让我们来看看他们对 ERC-721 有一些什么样的想法
各位开发过 NFT,并且用 ERC-721 标准进行开发的读者们用的是什么库呢?我们一般第一选择是 Openzeppelin 的库,但 Openzeppelin 的 tokenURI 规范和 Opensea 并不是非常的兼容。Openzeppelin 要求平台在访问元数据时,自动为 tokenURI 加上 .json 的后缀。然而 Opensea 并不遵守这个规范,隔壁 Rarible 倒是遵守了这个规范。因此我经常会这样魔改一下:
import "@openzeppelin/contracts/utils/Strings.sol";
string(abi.encodePacked(baseURI, tokenId.toString(), ".json"));
Azuki 推出了完全兼容 ERC-721 的 ERC-721A,并支持使用 NPM 进行安装,作为库导入到自己编写的合约里。目前在官方给出的清单中,有将近 40 个项目使用了 ERC-721A,例如 Cereal Club,X Rabbit Club,The Women of Crypto 等。除了单纯的 ERC721A,Azuki 还推出了两个变种,ERC721A Burnable 和 ERC721A Owners Expicit。如果你想要使用 ERC-721A 进行开发,需要注意的的是 ERC-721A 并没有类似 Openzeppelin 那样的完整 API 文档。
在 ERC-721A 中,Azuki 的改进有两点:
Mint 1 个 NFT 和 Mint 多个 NFT 手续费几乎一样
降低 Mint 的基础手续费
Azuki 还将 ERC-721A 和 ERC-721 Enumerable 的 Mint 手续费做了比较:

从数字上来看,基础 Mint 手续费降低了一倍,每多 Mint 一个,ERC-721A 只会增加些许的手续费。
为了达到这点 Azuki 在代码层面做了这几个主要改动:
删除 ERC-721 Enumerable。ERC-721 Enumerable 以更昂贵的 Mint,大大增加了读取速度。Azuki 认为如果 TokenId 是有顺序的,我们可以手动遍历,因此 ERC-721 Enumerable 是没有必要的。
支持 Batch Mint,并且只进行一次更新。例如 Alice Mint 了 3 个 NFT。常规的合约会对 Alice 的 Balance 进行 3 次更新。从 0 → 1,1 → 2,2 → 3。然而 Azuki 只进行了一次更新,即 0 → 3。以太坊的写操作非常昂贵,因此这个方法可以为我们省下不少的手续费。
对于一次 Mint,不管 Mint 了几只,ERC-721A 也仅仅需要一次写入来更新所有这些 NFT 的所有者。如果一个用户拥有连续的三个 NFT,那么在存储中只有第一个的所有者是他,后面两个则为初始的 0 地址。因此 Azuki 在读取 NFT 的所有者函数中又额外的逻辑。

根据项目自己的一些需求,Azuki 对通用库进行了一些修改,来实现在特定场景的手续费降低。例如第三条就牺牲了读取的性能。这里的大部分优化都存在 Tradeoff。
如果你喜欢本期内容,️欢迎点赞分享给你觉得有需要的人。
💻 Website: unblock256.com
✈️ Telegram: un.Block Weekly
🕊️ Twitter: @unBlock256
📧 Email:unblocketh@gmail.com
📤 分发渠道:知乎 | Notion | Substack | Medium | Mirror | RSS | 即刻 | 微信订阅
视觉设计:Jenny
特别鸣谢:
本文非商业目的转载授权遵循 CC BY-NC 4.0 协议
版权所有 ©️un.Block 2021
No activity yet