坚实的幻想

ON A CLEAR DISK YOU CAN SEEK FOREVER

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 已经不在一个量级了,难免会有理解上的偏差,本文权当是抛砖引玉,也希望有更多的人参与讨论。因为实现比较复杂,本系列会拆分成多篇文章,持续更新。 本文假定读者都能理解 ...

使用 neovim 打造一个现代化的编辑器

Neovim 与 vim 的恩怨情仇 2014 年,巴西程序员 Thiago de Arruda Padilha(aka tarruda)因为多次对 vim 提交 feature patch 遭到拒绝。出于对 vim 低效的开发社区的不满,决定众筹一个新项目 —— neovim,尝试解决 vim 当时的问题: 由于 vim 写于 90 年代,20 多年过去,产生了大量的遗留代码,导...

SR-IOV 虚拟化

概念 SR-IOV(Single Root Input/Output Virtualization) 是一项硬件虚拟化技术,它的目的是将一个 PCIe 设备(例如网卡),虚拟成多个互相隔离的设备,提供给不同的使用者(例如虚拟机)使用。使用 SR-IOV 的设备包含如下组件: 一个 PF(Physical Function),PF 具备 PCIe 设备的所有功能,可以将 PF 等同于...

Python bottle 源码解析

简介 Bottle 是一个轻量级的 Python Web 框架,它的代码量只有 4300 行(为了突出其精简性,所有代码放在了一个文件中)。但是麻雀虽小,五脏俱全,Bottle 提供了一个 Web 框架有必须的基本功能,如: 路由,支持动态的 URL 路由 模板,内置了模板功能,同时支持 mako, jinja2 和 cheetah 表单,文件上传,cookies,head...

Python WSGI 初探

WSGI 是什么 在构建 Web 应用时,通常会有 Web Server 和 Application Server 两种角色。其中 Web Server 主要负责接受来自用户的请求,解析 HTTP 协议,并将请求转发给 Application Server,Application Server 主要负责处理用户的请求,并将处理的结果返回给 Web Server,最终 Web Server ...