坚实的幻想

ON A CLEAR DISK YOU CAN SEEK FOREVER

下一代借贷协议 —— Silo Finance

已有借贷协议的问题 资金效率和安全性之间的矛盾 以 COMP 和 AAVE 为首的借贷市场,都会以 DAO 的形式来管理借贷市场的可用的借贷资产。为了安全性,往往只有足够去中心化并且有足够多流动性的 token 可以被加入到借贷市场中,但是用户往往又希望借贷平台上有更多的借贷代币。 由于 COMP/AAVE 中的借贷都是共享借贷池的,随着借贷市场中代币的增多,系统的安全性也会必然随之降...

How to fork a CHI gastoken?

Fork CHI gastoken 的想法来自于和一位网友的对话。这位网友打算 fork 一个自己的 CHI gastoken,并优化其中的某些步骤,来让自己的合约的 gas 开销更加低一些。但是他在 fork CHI 代码部署之后,却发现无法成功执行 CHI.free() 操作。正好我在之前学习 gastoken 原理的时候看过 CHI 的具体实现,就尝试帮他解决了这个问题。 我觉得这个...

Solidity 中的对数计算

背景 在进行 solidity 开发时,某些场景可能需要进行对数的计算。对数计算虽然在通用编程领域已经有成熟的解决方案(几乎所有编程语言都有相关的内置库或者第三方库来实现)。但是在 solidity 中没有 floating/fixed point number(fixed point number 在 solidity 0.8 版本中仍处于 not fully supported 阶段)...

Uniswap v3 的小彩蛋:NFT 和 LP 迁移工具

Alpha leak 从 uniswap v3 公开初版的代码到现在已经一个多月了,这期间 uniswap-v3-periphery 仓库的合约更新了很多代码。据粗浅观察,主要有以下 2 个改动: 优化了 LP Token,由之前的普通 ERC721 token 变成了带动态效果 SVG 图片的 NFT token 增加了一个 migrator 合约,可以将 uniswap v...

Uniswap v3 详解(六):闪电贷

Flash swap Uniswap v2 版本中,就已经提供了被称作 flash swap 的闪电贷功能。即可以向一个交易对借贷 x token,但在还贷时使用 y token. 一个普通的 Uniswap v2 交易的执行顺序为: 交易之前,Uniswap Pair 合约中 x, y token 余额满足 $x \cdot y = k$ 用户支付 x token 到合约中...

Uniswap v3 详解(五):Oracle 预言机

Uniswap v2 的 Oracle Uniswap v2 版本起,就已经提供了预言机功能,用来计算交易对的时间加权平均价(TWAP, Time Weighted Average Price),但是存在下面几个问题: v2 版本的预言机使用门槛比较高,官方合约中只提供了最新的价格累积值,开发者需要自己实现历史价格的记录和抓取 在使用 DEX 预言机时,深度是一个比较重要的考量...

Uniswap v3 详解(四):交易手续费

以普通用户的视角来看,对比 Uniswap v2,Uniswap v3 在手续费方面做了如下改动: 添加流动性时,手续费可以有 3个级别供选择:0.05%, 0.3% 和 1%,未来可以通过治理加入更多可选的手续费率 Uniswap v2 中手续费会在收取后自动复投称为 LP 的一部分,即每次手续费都自动变成流动性加入池子中,而 Uniswap v3 中收取的手续费不会自动复投(...

Uniswap v3 详解(三):交易过程

交易过程 v3 的 UniswapV3Pool 提供了比较底层的交易接口,而在 SwapRouter 合约中封装了面向用户的交易接口: exactInput:指定交易对路径,付出的 x token 数和预期得到的最小 y token 数(x, y 可以互换) exactOutput:指定交易路径,付出的 x token 最大数和预期得到的 y token 数(x, y 可以互换...

Uniswap v3 详解(二):创建交易对/提供流动性

前文已经说过 Uniswap v3 的代码架构。一般来说,用户的操作都是从 uniswap-v3-periphery 中的合约开始。 创建交易对 创建交易对的调用流程如下: 用户首先调用 NonfungiblePositionManager 合约的 createAndInitializePoolIfNecessary 方法创建交易对,传入的参数为交易对的 token0, token...

Uniswap v3 详解(一):设计原理

刚看完 Uniswap v2 的代码,本来打算写一个 Uniswap v2 设计与实现,结果 Uniswap v3 就发布了。趁着这个机会就先写一个 Uniswap v3 设计与实现吧。 因为 v3 版本的实现复杂度和 v2 已经不在一个量级了,难免会有理解上的偏差,本文权当是抛砖引玉,也希望有更多的人参与讨论。因为实现比较复杂,本系列会拆分成多篇文章,持续更新。 本文假定读者都能理解 ...