使用Uniswap V2部署自己的去中心化交易所

简介: UniswapV2Pair.sol管理着流动性资金池,不同币对有着不同的实例,比UniswapV2Pair.sol, 如 USDT-WETH 这一个币对,就对应一个UniswapV2Pair.sol合约地址**,DAI-WETH 又对应另一个UniswapV2Pair.sol**。UniswapV2ERC20.sol则是用户往资金池里注入流动性的一种凭证,也称为流动性代币,其实也是一种ERC20代币,同样支持转账功能。当用户在Uniswap v2添加两个交易对( 如USDT-WETH),也就是添加流动性, Uniswap会增加对应UniswapV2ERC20.sol实例(如USDT-WETH

图片1.png

Dapp链接:https://www.chainpip.com/dapp-view/6724

部署UniswapV2前需要准备的智能合约项目:
~uniswap-v2-core: 核心合约
~uniswap-v2-periphery: 与核心合约交互的边缘合约,主要就是路由合约
~uniswap-lib: 工具合约
整合以上三个项目到一个项目中:
图片2.png

uniswap-v2-core

core核心主要有三个合约文件:
~UniswapV2Factory.sol: 工厂合约
~UniswapV2Pair.sol:配对合约
~UniswapV2ERC20.sol:LP Token 合约

UniswapV2Pair.sol管理着流动性资金池,不同币对有着不同的实例,比UniswapV2Pair.sol, 如 USDT-WETH 这一个币对,就对应一个UniswapV2Pair.sol合约地址,DAI-WETH 又对应另一个UniswapV2Pair.sol
UniswapV2ERC20.sol则是用户往资金池里注入流动性的一种凭证,也称为流动性代币,其实也是一种ERC20代币,同样支持转账功能。当用户在Uniswap v2添加两个交易对( 如USDT-WETH),也就是添加流动性, Uniswap会增加对应UniswapV2ERC20.sol实例(如USDT-WETH LP Token)的余额,Uniswap根据用户持有LP Token的额度,计算手续费收益奖励给用户。
每个UniswapV2Pair.sol都有对应的一种UniswapV2ERC20.sol与之绑定。其实,UniswapV2Pair 继承了 UniswapV2ERC20,所以配对合约本身其实也是 LP Token 合约。
UniswapV2Factory.sol则是用来部署UniswapV2Pair.sol的,通过工厂合约的 createPair() 函数来创建新的配对合约实例。

uniswap-v2-periphery

periphery核心有两个合约文件:
~UniswapV2Router01.sol:路由合约 01 版本
~UniswapV2Router02.sol:路由合约 02 版本,相比 01 版本主要增加了几个支持交税费用的函数
这两个合约只要部署一个就行,本教程只部署UniswapV2Router01.sol

uniswap-lib

提供uniswap-v2-periphery的函数库。

开始部署Uniswap V2

在部署Uniswap V2之前,我们需要改下Uniswap V2代码中init code hash值,否则即便部署成功,也使用不了。位于项目contracts/libraries/UniswapV2Library.sol文件中的pairFor函数:
图片3.png

init code hash是UniswapV2Pair的bytecode通过keccak-256计算的值:
图片4.png

点击Bytecode按钮,在弹框中复制Bytecode值,打开网址 http://emn178.github.io/online-tools/keccak_256.html
图片5.png

记得选择Input type为"Hex",最终得到的"02253df52a97965e4b0f62119b1048e43d71c7e02dd706e7a1d07655ed5f8642",就是我们要的init code hash

部署合约

只要部署三个合约:
~UniswapV2Factory
~WETH (可选, 也可使用链上已有的WETH地址)
~UniswapV2Router01
图片6.png

UniswapV2Factory参数:
~_feeToSetter: 设置手续费的管理员,可任选一个钱包地址
UniswapV2Router01参数:
~_factory: UniswapV2Factory部署后的合约地址
~_WETH: WETH合约地址

添加流动池

~addLiquidity:该接口支持添加两种 ERC20 代币作为流动性
~addLiquidityETH:与上一个接口不同,该接口提供的流动性资产,其中有一个是 ETH

添加两个代币流动池

图片7.png

添加代币与ETH流动池

图片8.png

代币授权

在添加流动性时,需要先授权代币给路由合约地址
可以使用一下授权面板,记得修改底部的合约地址为要授权的代币地址
图片9.png

交易

~swapExactTokensForTokens:用 ERC20 兑换 ERC20,但支付的数量是指定的,而兑换回的数量则是未确定的
~swapTokensForExactTokens:也是用 ERC20 兑换 ERC20,与上一个函数不同,指定的是兑换回的数量
~swapExactETHForTokens:指定 ETH 数量兑换 ERC20
~swapTokensForExactETH:用 ERC20 兑换成指定数量的 ETH
~swapExactTokensForETH:用指定数量的 ERC20 兑换 ETH
~swapETHForExactTokens:用 ETH 兑换指定数量的 ERC20
~swapExactTokensForTokensSupportingFeeOnTransferTokens:指定数量的 ERC20 兑换 ERC20,支持转账时扣费
~swapExactETHForTokensSupportingFeeOnTransferTokens:指定数量的 ETH 兑换 ERC20,支持转账时扣费
~swapExactTokensForETHSupportingFeeOnTransferTokens:指定数量的 ERC20 兑换 ETH,支持转账时扣费

代币之间交易

图片10.png

原文链接(含可复制代码):https://www.chainpip.com/dynamic/231

相关文章
|
供应链 安全 物联网
区块链去中心化交易所源码|去中心化交易系统开发
随着区块链技术的发展,应用的扩展,区块链软件开√发也随之应用到物联网、供应链管理等领域,其中包含区块链交Y所系统,区块链去中心化交Y所,依托于区块链技术,具有去中心化、匿名性、信息不可纂改等特点
|
7月前
|
安全 区块链 数据库
|
算法 区块链
去中心化DAPP交易所系统开发方案与指南
去中心化带来的透明交易,不仅仅是简单地向参与者展示交易信息,更是为参与者提供了保障合法权益的机制。
|
存储 算法 安全
DAPP钱包开发|去中心化钱包系统开发
区块链是一种去中心化的分布式账本技术,它通过密码学算法将交易数据存储在多个节点上
|
区块链 数据库 开发者
数字货币去中心化交易所系统开发(详细功能)/案例设计/程序逻辑/成熟技术丨数字货币去中心化交易所开发源码项目
区块链技术,也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。区块链技术不是一个单项的技术,而是一个集成了多方面研究成果基础之上的综合性技术系统。There are three indispensable core technologies:consensus mechanism,Cryptography principle and distributed data storage.
DAPP去中心化交易所系统开发详细功能丨DAPP去中心化钱包系统开发规则详细/成熟技术/源码说明
 A smart contract is a computer program that runs on a blockchain. Programs include functions and data (also known as variables or parameters), which operate on data. The data used by the function needs to be stored in the computer's memory
|
安全 区块链
DAPP去中心化交易所系统开发(开发项目)丨DAPP去中心化交易所系统开发(详细案例)/源码功能
  智能合约是区块链DApp的重要组成部分,是实现区块链DApp商业逻辑的基础。因此,设计智能合约应该根据业务需求进行规划,明确合约的功能和业务流程。
|
存储 安全 前端开发
中心化交易平台开发:如何构建一个有效的数字货币交易所系统
随着加密货币市场的飞速增长,许多企业都在寻找有效的解决方案,以使其加密货币交易项目取得成功。而在这里,UI/UX 的作用无疑是巨大的。系统的运行方式完全取决于界面的简洁性、导航的有效性和用户旅程的顺畅性。 对于那些选择构建集中式加密交换系统的人来说,设计尤为重要。人们经常在没有丰富交易经验的情况下使用此类平台,因此应尽可能清晰直观。但是,如何为观众提供既简单又有效的交流方式呢? 这篇文章将解释集中交换,提供一些示例,并揭示如何设计这样一个系统来应对最常见的 UI/UX 挑战。
中心化交易平台开发:如何构建一个有效的数字货币交易所系统
|
安全 Serverless 区块链
交易所搭建
交易所搭建 交易所平台搭建 搭建数字货币交易所 交易所系统搭建源码 虚拟币交易所搭建 虚拟货币交易所搭建 数字资产交易所搭建 数字货币交易所搭建 区块链交易所搭建 搭建交易所 西安交易所搭建
|
安全 区块链 开发工具
区块链交易所是什么?交易所搭建
数字货币交易所搭建的功能介绍