没有合适的资源?快使用搜索试试~ 我知道了~
uniswap去中心化编写
需积分: 5 0 下载量 24 浏览量
2023-01-03
13:23:22
上传
评论
收藏 173KB DOCX 举报
温馨提示
试读
11页
uniswap去中心化的创建流程,里面含有代码以及创建的问题,有不会的请联系我,我会手把手教如何操作。
资源推荐
资源详情
资源评论
1 总体框架和 V2 的代码逻辑一致,整个功能分成两部分:核心功能(core)和辅助功能
(periphery)。两个部分的关系如下:
辅助功能也分为两个部分:交易池(Position)管理和 swap 路由管理。NonfungiblePositionManager
负责交易池的创建以及流动性的添加删除。SwapRouter 是 swap 路由的管理。UniswapV3Factory
是交易池(UniswapV3Pool)统一创建的接口。UniswapV3Pool 由 UniswapV3PoolDeployer 统一部署。
UniswapV3Pool 是核心逻辑,管理了 Tick 和 Position,实现流动性管理以及一个交易池中 swap 功
能实现。每个 Pool 中的 Position 都做成了 ERC721 的 Token。也就是说,每个 Position 都有独立的
ERC721 的 Token ID。
2 创建交易池(Pool)
NonfungiblePositionManager 负责交易池的创建以及流通性的添加/删除。先介绍一些全局变量的定
义:
/// @dev IDs of pools assigned by this contractmapping(address => uint80) private _poolIds;
/// @dev Pool keys by pool ID, to save on SSTOREs for position datamapping(uint80 => PoolAddress.PoolKey) private _p
oolIdToPoolKey;
/// @dev The token ID position datamapping(uint256 => Position) private _positions;
/// @dev The ID of the next token that will be minted. Skips 0uint176 private _nextId = 1;
/// @dev The ID of the next pool that is used for the first time. Skips 0uint80 private _nextPoolId = 1;
每一个 Pool 都有一个唯一编号,编号从 1 开始(_nextPoolId)。_poolIds 记录所有交易池的地址和
编号的对应关系。每个交易池的关键信息由 PoolKey 表示(定义在 libraries/PoolAddress.sol):
struct PoolKey {
address token0;
address token1;
uint24 fee;
}
每个交易池由交易池的两个 Token 以及收取的费用唯一标示。_poolIdToPoolKey 记录交易池编号和
PoolKey 的对应关系。
所有交易池中的 Position 都归总管理,并赋予一个全局唯一的编号(_nextId),从 1 开始。 每个 Position
由创建地址以及边界唯一确定:
function compute(
address owner,
int24 tickLower,
int24 tickUpper) internal pure returns (bytes32) {
return keccak256(abi.encodePacked(owner, tickLower, tickUpper));
}
接着看看 NonfungiblePositionManager 的构造函数:
constructor(
address _factory,
address _WETH9,
address _tokenDescriptor_
) ERC721Permit('Uniswap V3 Positions NFT-V1', 'UNI-V3-POS', '1') PeripheryImmutableState(_factory, _WETH9) {
_tokenDescriptor = _tokenDescriptor_;
}
_factory 是核心功能(core)中的 UniswapV3Factory 的地址。_WETH9 是 ETH 智能合约的地址。
_tokenDescriptor 是 ERC721 描述信息的接口地址。
通过 createAndInitializePoolIfNecessary 函数创建一个交易池:
剩余10页未读,继续阅读
资源评论
→_→小浩
- 粉丝: 11
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用 C 语言实现的计算非负整数的阶乘
- 2011-2021最新版本北京大学数字普惠金融指数(PKU-DFIIC).xlsx
- 县域数字乡村指数2018-2020(1).xlsx
- Docker容器配置进阶
- tensorflow-gpu-2.7.4-cp37-cp37m-manylinux2010-x86-64.whl
- 多段线、 圆、弧转多段线(仅我可见)
- tensorflow-2.7.2-cp38-cp38-manylinux2010-x86-64.whl
- 李慧琴C语言基础部分.zip
- yeyue-p8Yi4-ve4a83792.apk
- tensorflow-gpu-2.7.3-cp38-cp38-manylinux2010-x86-64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功