Uniswap V3 智能合约一键部署,源代码一键开源验证工具包
克隆
git clone https://github.com/Fankouzu/uniswap-v3-deploy.git
安装依赖
cd uniswap-v3-deploy
npm install
配置.env
mv .env.sample .env
vim .env
MNEMONIC='输入助记词'
INFURA_API_KEY='输入infura key'
ETHERSCAN_APIKEY='输入etherscan api key'
编译合约
如果只需要部署UniswapV3则可以跳过这一步,但是如果你未来想要部署Uniswap的interface前端,则必须依赖一套UniswapV2的合约才可以运行前端,你也可以让你的前端链接现有的UniswapV2合约,这样也可以跳过这一步
部署Uniswap V2合约
部署UniswapV2合约需要依赖一个WETH9合约,一般情况下一个正式链(例如以太坊主网,或币安智能链)都有一个全链通用的WETH9合约,你需要找到这个合约的地址并作为参数用在部署命令上;
你也可以部署一套自己的WETH9合约,如果你的链上没有通用的WETH9合约,参数中不带有--weth9,就会部署脚本就会自动部署一套你自己的WETH9合约;
npx hardhat deployV2 --weth9 {0x....WETH合约地址} --network {网络名称缩写}
例如将合约部署到币安智能链主网(bscmain),指定weth合约地址为0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c 命令如下:
npx hardhat deployV2 --weth9 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c --network bscmain
npx hardhat deployV2 --network {网络名称缩写}
部署uniswap v3合约
npx hardhat deployV3 --weth9 {0x....WETH合约地址} --network {网络名称缩写}
npx hardhat deployV3 --network {网络名称缩写}
[可选操作]
如果你在未来需要部署Uniswap的前端,则需要依赖一套Multicall2合约,如果你所在的链上已经存在Multicall2合约,则你只需要找到地址即可,在前端配置上Multicall2的地址,Multicall2合约是通用的,如果已经存在就不需要部署自己的合约了;
npx hardhat deploy --contract Multicall2 --network {网络名称缩写}
验证uniswap V2合约
npx hardhat verifyV2 --weth9 {0x....WETH合约地址} --network {网络名称缩写}
验证uniswap V3合约
npx hardhat verifyV3 --weth9 {0x....WETH合约地址} --network {网络名称缩写}
验证multicall2合约[可选]
npx hardhat verify {0x....Multicall2合约地址} --network {网络名称缩写}
你可以通过修改network.ts 文件来增加支持的网络,在这个文件里已经预设了一些网络的RPC地址和一些所需的参数,更得的链信息参阅https://chainlist.org/
只有支持合约验证的链才可以通过上面的命令行对合约进行验证,其他不支持的链有的也许可以通过浏览器上传代码方法进行验证,但是也有的链因为浏览器功能局限,导致无法验证合约
网络名称
chainId
缩写(用在命令参数中)
支持合约验证
hardhat本地测试环境
*
hardhat
Ropsten
3
ropsten
*
Rinkeby
4
rinkeby
*
Görli
5
goerli
*
Kovan
42
kovan
*
Binance Smart Chain Testnet
97
bsctest
*
Binance Smart Chain Mainnet
56
bscmain
*
Huobi ECO Chain Testnet
256
hecotest
*
Huobi ECO Chain Mainnet
128
hecomain
*
Meter Testnet
101
mtrtest
Meter Mainnet
82
mtrmain
Clover Testnet
1023
clvtest
Clover Mainnet
1024
clvmain
Haic
17843
haicmain
Galt
17845
galtmain
CoinEx Smart Chain Testnet
53
coinextest
CoinEx Smart Chain Mainnet
52
coinexmain
Matic(Polygon)
137
maticmain
*
Matic Testnet Mumbai
80001
matictest
*
Fantom Opera Testnet
4002
ftmtest
Fantom Opera Mainnet
250
ftmmain
*
HOO Smart Chain Testnet
170
hootest
HOO Smart Chain Mainnet
70
hoomain
OKExChain Testnet
65
oktest
OKExChain Mainnet
66
okmain
xDAI Chain
100
xdai
Harmony Mainnet
1666600000
harmonymain
Harmony Testnet
1666700000
harmonytest
Avalanche Fuji Testnet
43113
avaxtest
Avalanche Mainnet
43114
avaxmain
Celo Alfajores Testnet
44787
celotest
Celo Mainnet
42220
celomain
Moonbeam Testnet
1287
moonbeamtest
npx hardhat accounts --network {网络名称缩写}
获取并验证INIT_CODE_HASH
通过这个命令可以验证V2合约中的INIT_CODE_PAIR_HASH
和V3合约中的POOL_INIT_CODE_HASH
这个脚本首先会通过计算源代码的方法计算出对应的两个hash,之后会模拟部署合约,并从合约中读取两个hash,如果你发现两对hash都是对应的,则正确,如果不对应,则有错误