关于区块链:如何使-uniswap-v2-去中心化交易所支持以太坊私链

在上一篇文章咱们具体解说了如何 在以太坊测试网络部署 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
  1. ETH_GAS:单笔交易的GAS下限
  2. ETH_GAS_PRICE:交易的GAS价格
  3. ETH_KEYSTORE:发送交易地址的 .keystore 文件门路
  4. ETH_PASSWORD:发送交易地址的 .keystore 文件的解锁明码
  5. ETH_FROM:发送交易地址
  6. 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 请参考上一篇文章进行部署。

  1. 关上 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')
  2. 关上 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')
  3. 关上 src/components/Header/index.tsx 文件,在全局对象 NETWORK_LABELS 外面增加 [ChainId.PRIVNET]: 'Privnet'
  4. 关上 src/connectors/index.ts 文件,在 supportedChainIds 数组外面增加 ChainId 1024
  5. 关上 src/constants/index.ts 文件,在全局对象 WETH_ONLY 外面增加 [ChainId.PRIVNET]: [WETH[ChainId.PRIVNET]]
  6. 关上 src/constants/multicall/ndex.ts 文件,在全局对象 MULTICALL_NETWORKS 外面增加 [ChainId.PRIVNET]: '0xE4cB75D35af81EcCb44eB9521524C9C6f93440d2',外面的地址是之前咱们部署的 multicall 合约地址。
  7. 关上 src/constants/v1/index.ts 文件,在全局对象 V1_FACTORY_ADDRESSES 外面增加 [ChainId.PRIVNET]: '0x0000000000000000000000000000000000000000'
  8. 关上 src/state/lists/hooks.ts 文件,在全局对象 EMPTY_LIST 外面增加 [ChainId.PRIVNET]: {}
  9. 关上 src/utils/index.ts 文件,在全局对象 ETHERSCAN_PREFIXES 外面增加 1024: ''。其中 1024 是私链的 ChainId。

2.2 批改原生代币名称

如果咱们须要将原生代币名称由 ETH 改为其它的,例如 GAS,还须要作出以下批改。

  1. 关上 node_modules/@uniswap/sdk/dist/sdk.cjs.development.js 文件,找到 Currency.ETHER,将值改为 new Currency(18, 'GAS', 'Gas Token');
  2. 关上 node_modules/@uniswap/sdk/dist/sdk.esm.js 文件,找到 Currency.ETHER,将值改为 new Currency(18, 'GAS', 'Gas Token');
  3. 关上 src/components/Header/index.tsx 文件,将文本 ETH 批改为 GAS
  4. 关上 src/components/SearchModal/CommonBases.tsx 文件,将文本 ETH 批改为 { ETHER.symbol }

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据