共计 6002 个字符,预计需要花费 16 分钟才能阅读完成。
在上一篇文章咱们具体解说了如何 在以太坊测试网络部署 uniswap v2 去中心化交易所,然而只能反对特定的几个以太坊网络:Mainnet、Ropsten、Rinkeby、Goerli、Kovan。当初咱们来解说如何反对其它以太坊网络,包含咱们本人搭建的私链。次要波及对前端配置参数进行批改。
1 部署 multicall 合约
multicall 合约用于将多笔合约调用操作打包进同一笔交易,它的目标是为了保障执行多笔操作时所有操作可能程序地执行,以及保障它们要么全副实现,要么全副不实现。
因为 Mainnet、Ropsten、Rinkeby、Goerli 和 Kovan 网络都曾经部署了 multicall 合约,所以在之前的文章外面咱们并没有重新部署它。然而在咱们的私链上并没有部署,所以下一步咱们先将 multicall 合约部署到私链上。
1.1 装置编译工具
multicall 我的项目应用 dapp.tools 开发、测试和部署智能合约,咱们须要先装置工具:
# user must be in sudoers
sudo curl -L https://nixos.org/nix/install | sh
# Run this or login again to use Nix
. "$HOME/.nix-profile/etc/profile.d/nix.sh"
sudo curl https://dapp.tools/install | sh
1.2 配置环境变量
依据本身状况批改以下环境变量,而后执行命令:
export ETH_GAS=4500000
export ETH_GAS_PRICE=1000000000
export ETH_KEYSTORE=/root/keystore
export ETH_PASSWORD=/root/keystore/pass
export ETH_FROM=0x0000000000000000000000000000000000000000
export ETH_RPC_URL=http://localhost:8545
ETH_GAS
:单笔交易的 GAS 下限ETH_GAS_PRICE
:交易的 GAS 价格ETH_KEYSTORE
:发送交易地址的 .keystore 文件门路ETH_PASSWORD
:发送交易地址的 .keystore 文件的解锁明码ETH_FROM
:发送交易地址ETH_RPC_URL
:以太坊 RPC 节点的地址
1.3 编译和部署合约
首先 clone multicall 代码仓库,拉取我的项目依赖并编译合约:
git clone https://github.com/makerdao/multicall.git
cd multicall
dapp update && dapp build
而后执行 dapp create
命令部署合约。
dapp create src/Multicall.sol:Multicall
++ seth send --create 608060405234801561001057600080fd5b5061053e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c80630f28c97d1461007d578063252dba421461009b57806327e86d6e146100bc5780634d2301cc146100c457806372425d9d146100d757806386d516e8146100df578063a8b0574e146100e7578063ee82ac5e146100fc575b600080fd5b61008561010f565b6040516100929190610429565b60405180910390f35b6100ae6100a9366004610302565b610113565b604051610092929190610432565b610085610235565b6100856100d23660046102e0565b61023e565b61008561024b565b61008561024f565b6100ef610253565b6040516100929190610415565b61008561010a3660046103e1565b610257565b4290565b805143906060906001600160401b038111801561012f57600080fd5b5060405190808252806020026020018201604052801561016357816020015b606081526020019060019003908161014e5790505b50905060005b835181101561022f576000606085838151811061018257fe5b6020026020010151600001516001600160a01b03168684815181106101a357fe5b6020026020010151602001516040516101bc91906103f9565b6000604051808303816000865af19150503d80600081146101f9576040519150601f19603f3d011682016040523d82523d6000602084013e6101fe565b606091505b50915091508161020d57600080fd5b8084848151811061021a57fe5b60209081029190910101525050600101610169565b50915091565b60001943014090565b6001600160a01b03163190565b4490565b4590565b4190565b4090565b80356001600160a01b038116811461027257600080fd5b92915050565b600082601f830112610288578081fd5b81356001600160401b0381111561029d578182fd5b6102b0601f8201601f19166020016104b2565b91508082528360208285010111156102c757600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156102f1578081fd5b6102fb838361025b565b9392505050565b60006020808385031215610314578182fd5b82356001600160401b038082111561032a578384fd5b81850186601f82011261033b578485fd5b803592508183111561034b578485fd5b61035884858502016104b2565b83815284810190828601875b868110156103d25781358501604080601f19838f03011215610384578a8bfd5b61038d816104b2565b6103998e8c850161025b565b815281830135898111156103ab578c8dfd5b6103b98f8d83870101610278565b828d015250865250509287019290870190600101610364565b50909998505050505050505050565b6000602082840312156103f2578081fd5b5035919050565b6000825161040b8184602087016104d8565b9190910192915050565b6001600160a01b0391909116815260200190565b90815260200190565b600060408201848352602060408185015281855180845260608601915060608382028701019350828701855b828110156104a457878603605f190184528151805180885261048581888a018985016104d8565b601f01601f19169690960185019550928401929084019060010161045e565b509398975050505050505050565b6040518181016001600160401b03811182821017156104d057600080fd5b604052919050565b60005b838110156104f35781810151838201526020016104db565b83811115610502576000848401525b5050505056fea2646970667358221220c366d862b441877d320885ceaf80c85465dd463862a5da9358351de241a6761764736f6c63430006070033 'Multicall()'
seth-send: Published transaction with 1374 bytes of calldata.
seth-send: 0x4a046cbff360620e9a3a31ad7e003f15f0e011459da73069c30a6a223a9fbce4
seth-send: Waiting for transaction receipt.........
seth-send: Transaction included in block 55269.
0xE4cB75D35af81EcCb44eB9521524C9C6f93440d2
最初终端输入的 0xE4cB75D35af81EcCb44eB9521524C9C6f93440d2
就是已部署的 multicall 合约地址,须要记录下来,前面会用到。
2. 批改前端配置
2.1 增加 ChainId
上面的步骤中咱们假如公有网络的名称为 PRIVNET,ChainId 是 1024,请依据本身状况进行替换。WETH 合约地址 0x5740F4E31A84FcB79720e807d022BD0833809e4A 请参考上一篇文章进行部署。
- 关上
node_modules/@uniswap/sdk/dist/sdk.cjs.development.js
文件,找到 function (ChainId) 办法,在办法最初增加代码ChainId[ChainId["PRIVNET"] = 1024] = "PRIVNET";
。而后再找到全局对象WETH
,再外面增加_WETH[exports.ChainId.PRIVNET] = new Token(exports.ChainId.PRIVNET, '0x5740F4E31A84FcB79720e807d022BD0833809e4A', 18, 'WETH', 'Wrapped ETH')
。 - 关上
node_modules/@uniswap/sdk/dist/sdk.esm.js
文件,找到 function (ChainId) 办法,在办法最初增加代码ChainId[ChainId["PRIVNET"] = 1024] = "PRIVNET";
。而后再找到全局对象WETH
,再外面增加_WETH[ChainId.PRIVNET] = new Token(ChainId.PRIVNET, '0x5740F4E31A84FcB79720e807d022BD0833809e4A', 18, 'WETH', 'Wrapped ETH')
。 - 关上
src/components/Header/index.tsx
文件,在全局对象 NETWORK_LABELS 外面增加[ChainId.PRIVNET]: 'Privnet'
。 - 关上
src/connectors/index.ts
文件,在 supportedChainIds 数组外面增加 ChainId1024
。 - 关上
src/constants/index.ts
文件,在全局对象 WETH_ONLY 外面增加[ChainId.PRIVNET]: [WETH[ChainId.PRIVNET]]
。 - 关上
src/constants/multicall/ndex.ts
文件,在全局对象 MULTICALL_NETWORKS 外面增加[ChainId.PRIVNET]: '0xE4cB75D35af81EcCb44eB9521524C9C6f93440d2'
,外面的地址是之前咱们部署的 multicall 合约地址。 - 关上
src/constants/v1/index.ts
文件,在全局对象 V1_FACTORY_ADDRESSES 外面增加[ChainId.PRIVNET]: '0x0000000000000000000000000000000000000000'
。 - 关上
src/state/lists/hooks.ts
文件,在全局对象 EMPTY_LIST 外面增加[ChainId.PRIVNET]: {}
。 - 关上
src/utils/index.ts
文件,在全局对象 ETHERSCAN_PREFIXES 外面增加1024: ''
。其中1024
是私链的 ChainId。
2.2 批改原生代币名称
如果咱们须要将原生代币名称由 ETH 改为其它的,例如 GAS,还须要作出以下批改。
- 关上
node_modules/@uniswap/sdk/dist/sdk.cjs.development.js
文件,找到Currency.ETHER
,将值改为new Currency(18, 'GAS', 'Gas Token');
- 关上
node_modules/@uniswap/sdk/dist/sdk.esm.js
文件,找到Currency.ETHER
,将值改为new Currency(18, 'GAS', 'Gas Token');
- 关上
src/components/Header/index.tsx
文件,将文本 ETH 批改为GAS
。 - 关上
src/components/SearchModal/CommonBases.tsx
文件,将文本 ETH 批改为{ETHER.symbol}
。