当前位置:   article > 正文

在Sepolia测试网中部署uniswap合约_uniswap v2合约地址以及abi

uniswap v2合约地址以及abi

1、软件环境:
ubuntu18.04
npm 版本:8.11.0
node 版本:v16.15.1

2、下载源代码:
git clone https://github.com/Uniswap/uniswap-v2-core.git
git clone https://github.com/Uniswap/uniswap-v2-periphery.git

3、申请一个 api :
https://infura.io

4、编译合约
首先是 uniswap-v2-core 项目,进入目录后拉取依赖然后编译:
cd uniswap-v2-core
yarn
yarn compile

编译后的代码存放在 build 目录,我们需要把它拷贝至之前创建的 uniswap-contracts 目录。
cp -r build …/uniswap-contracts

接下来编译 uniswap-v2-periphery 项目,也是相同的步骤,最后将编译后的代码拷贝到 uniswap-contracts 目录:
cd uniswap-v2-periphery
yarn
yarn compile
cp -r build …/uniswap-contracts

5、部署合约
编译好的合约代码我们已经全部拷贝到 uniswap-contracts 目录。接下来就是部署合约了,这一步稍微麻烦一些,需要我们编写一个脚本。
首先在 uniswap-contracts 目录下创建一个文本文件 deploy.js,并将下面的代码拷贝进去。
以下是我能部署的脚本,跟参考文中的内容稍有不同:
const {Web3} = require(‘web3’)
const WETH9 = require(‘/home/lixin/Desktop/uniswap/uniswap-contracts/build/WETH9.json’) #都是写的绝对路径,相对路径居然不管用
const UniswapV2Pair = require(‘/home/lixin/Desktop/uniswap/uniswap-contracts/build/UniswapV2Pair.json’)
const UniswapV2Factory = require(‘/home/lixin/Desktop/uniswap/uniswap-contracts/build/UniswapV2Factory.json’)
const UniswapV2Router01 = require(‘/home/lixin/Desktop/uniswap/uniswap-contracts/build/UniswapV2Router01.json’)
const UniswapV2Router02 = require(‘/home/lixin/Desktop/uniswap/uniswap-contracts/build/UniswapV2Router02.json’)

const endpoint = ‘https://sepolia.infura.io/v3/6ac7856aebfd44c489’; # https://infura.io 网申请的一个api
const hexPrivateKey = ‘’; #钱包私匙

async function sendTransaction(web3, chainId, account, data, nonce, gasPrice) {
const message = {
from: account.address,
gas: 7000000,
gasPrice: gasPrice,
data: data.startsWith(‘0x’) ? data : ‘0x’ + data,
nonce: nonce,
chainId: chainId
}
const transaction = await account.signTransaction(message)
return web3.eth.sendSignedTransaction(transaction.rawTransaction)
}

(async () => {
const options = { timeout: 1000 * 30 }
const web3 = new Web3(endpoint)
const account = web3.eth.accounts.privateKeyToAccount(hexPrivateKey)

const chainId = await web3.eth.getChainId()
const gasPrice = await web3.eth.getGasPrice()
let nonce = await web3.eth.getTransactionCount(account.address)

// deploy WETH contract
let weth = null
{
    const contract = new web3.eth.Contract(WETH9.abi)
    const data = contract.deploy({ data: WETH9.bytecode }).encodeABI()
    const receipt = await sendTransaction(web3, chainId, account, data, nonce, gasPrice)
    console.info('WETH:', weth = receipt.contractAddress)
    nonce = Number(nonce)
    nonce = nonce + 1
}

// deploy UniswapV2Factory contract
let factory = null
{
    const contract = new web3.eth.Contract(UniswapV2Factory.abi)
    const options = { data: UniswapV2Factory.bytecode, arguments: [account.address] }
    const data = contract.deploy(options).encodeABI()
    const receipt = await sendTransaction(web3, chainId, account, data, nonce, gasPrice)
    console.info('UniswapV2Factory:', factory = receipt.contractAddress)
    nonce = Number(nonce)
    nonce = nonce + 1
}

// deploy UniswapV2Router01 contract
{
    const contract = new web3.eth.Contract(UniswapV2Router01.abi)
    const options = { data: UniswapV2Router01.bytecode, arguments: [factory, weth] }
    const data = contract.deploy(options).encodeABI()
    const receipt = await sendTransaction(web3, chainId, account, data, nonce, gasPrice)
    console.info('UniswapV2Router01:', receipt.contractAddress)
    nonce = Number(nonce)
    nonce = nonce + 1
}

// deploy UniswapV2Router02 contract
{
    const contract = new web3.eth.Contract(UniswapV2Router02.abi)
    const options = { data: UniswapV2Router02.bytecode, arguments: [factory, weth] }
    const data = contract.deploy(options).encodeABI()
    const receipt = await sendTransaction(web3, chainId, account, data, nonce, gasPrice)
    console.info('UniswapV2Router02:', receipt.contractAddress)
    nonce = Number(nonce)
    nonce = nonce + 1
}

let data = UniswapV2Pair.bytecode
if (!data.startsWith('0x')) data = '0x' + data
console.info('INIT_CODE_HASH:', web3.utils.keccak256(data))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

})()

在与 deploy.js 文件同目录下执行拉取依赖命令
npm init -f
npm install web3

执行部署合约脚本
node deploy.js

lixin@ubuntu:~/Desktop/uniswap/uniswap-contracts/build$ node deploy.js
WETH: 0x380218198cfb54d8f1b86e9f6cffb6280f1b552a
UniswapV2Factory: 0x51c6bbb8d7d3adbade4ee9e191a416d59270e601
UniswapV2Router01: 0x4a108b0b88f6f79448ac628773d29e4492350a06
UniswapV2Router02: 0x9ac070709cd3443dccc837e99e90d52570f8b1f6
INIT_CODE_HASH: 0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f

正常情况下,会出现上面的输出,如果有异常,估计是钱包中测试币不够,部署上面几个合约大致要 0.3个 ETH测试币

6、部署前端
下载前端代码:git clone https://github.com/Uniswap/uniswap-interface.git
拉取依赖:
cd uniswap-interface
yarn

由于我们部署了新的合约,而前端配置里面还是 uniswap 官方的合约地址,所以需要进行如下修改:
修改 uniswap-interface/src/constants/index.ts 文件中 ROUTER_ADDRESS 的值为 U n i s w a p V 2 R o u t e r 02 。修改 u n i s w a p − i n t e r f a c e / s r c / s t a t e / s w a p / h o o k s . t s 文件中 B A D R E C I P I E N T A D D R E S S E S 数组的值为 [ {UniswapV2Router02}。 修改 uniswap-interface/src/state/swap/hooks.ts文件中 BAD_RECIPIENT_ADDRESSES 数组的值为 [ UniswapV2Router02。修改uniswapinterface/src/state/swap/hooks.ts文件中BADRECIPIENTADDRESSES数组的值为[{UniswapV2Factory}, ${UniswapV2Router01}, ${UniswapV2Router02}]。
修改 uniswap-interface/node_modules/@uniswap/sdk/dist/sdk.cjs.development.js 和 uniswap-interface/node_modules/@uniswap/sdk/dist/sdk.esm.js 文件中 FACTORY_ADDRESS 为 ${UniswapV2Factory}。
修改 uniswap-interface/node_modules/@uniswap/sdk/dist/sdk.cjs.development.js 和 uniswap-interface/node_modules/@uniswap/sdk/dist/sdk.esm.js 文件中 INIT_CODE_HASH 为 ${INIT_CODE_HASH}。
修改 uniswap-interface/node_modules/@uniswap/sdk/dist/sdk.cjs.development.js 和 uniswap-interface/node_modules/@uniswap/sdk/dist/sdk.esm.js 文件中全局变量 WETH,将其中 key 为 GÖRLI 的 Token 类型的地址修改为 ${WETH}。

上面就是最后一行,我不确定是不是修改对了,其它的直接用部署合约时控制台打印出来的合约地址替换

7、运行前端程序
yarn start

我是输出如下:
You can now view @uniswap/interface in the browser.

Local: http://localhost:3000
On Your Network: http://192.168.198.129:3000

Note that the development build is not optimized.
To create a production build, use yarn build.

8、在浏览器中输入 http://192.168.198.129:3000 查看效果。
我在虚拟机中用火狐 能正常运行前端,,但在外面主机上用谷哥就运行不了,不知什么原因

9、遇到的问题与解决方法
编译合约的时候,遇到编译不过,但也没有解决,第二天早上再来编译居然可以编译通过,不知什么情况 ,其实官网上已有编译好的,可以直接下载后直接部署,这个只是没试过
部署合约的时候,主要是上面部署脚本中的 gas 可能会小了,取决于网络拥堵情况吧,不差币的话,调大一点
部署合约的时候还遇到 nonce = nonce + 1 报错,然后问AI ,AI建议 nonce = Number(nonce) 转换一下,居然跟网上的参考文中的不一样,不知差异是如何引起的
部署合约的时候跟原文部署脚本中不一样的地方有二个,下面是我能成功部署的修改
const {Web3} = require(‘web3’)
const web3 = new Web3(endpoint) 创建 web3对象的语句跟原文不一样

10、参考链接:
https://segmentfault.com/a/1190000040401731

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号