项目定制
由于Uniswap 是为以太坊公链设计的,所以前端里面和合约有一些配置是代码写死的,所以我们需要先修改下
前端修改
前端代码地址:https://github.com/Uniswap/uniswap-interface
前端依赖以下几个npm包
- uniswap-sdk
@uniswap/sdk
- default-token-list
@uniswap/default-token-list
主要修改以下几点
修改uniswap-sdk
代码地址:https://github.com/Uniswap/uniswap-v2-sdk
我们先看下前端依赖的sdk版本
"@uniswap/sdk": "3.0.3",
可以看到项目依赖的是3.0.3
,查看代码,并没有相应的tag..,只是个commit,这个仓库git用的真是令人发指。。
由于需要我们自己维护这个库的数据,所以我们直接基于上面的commit fork下。
fork后的测试仓库:https://github.com/cppfuns/uniswap-sdk
修改网络
由于目前Uniswap支持eth主网,以及各个测试网,这并不是我们需要的,我们的定制链只支持主网和测试网。
修改ChainId为所需要的id以及选项
export enum ChainId {
MAINNET = 65524,
TESTNET = 65525,
}
修改合约地址
这个等后面部署完合约再来修改,先记下
然后修改下工厂合约的地址和code hash
修改WETH地址
在定制链主网和测试网上分别部署WETH合约,修改对应的合约地址
export const WETH = {
[ChainId.MAINNET]: new Token(ChainId.MAINNET, '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6', 18, 'WETH', 'Wrapped Ether'),
[ChainId.TESTNET]: new Token(ChainId.TESTNET, '0x73DcdfeBe2b1Db8FAe6f0A5AA0f35C3BaDa6811A', 18, 'WETH', 'Wrapped Ether')
}
修改default-token-list
fork: https://github.com/cppfuns/default-token-list.git
根据网络需要修改相应的配置
修改uniswap-interface
修改运行节点环境
由于我们是定制链,没有infura,所以修改为我们自己定制链的网络环境
REACT_APP_CHAIN_ID="链id"
REACT_APP_NETWORK_URL="http://节点地址"
修改网络配置
NETWORK_LABELS默认的主网不需要添加
const NETWORK_LABELS: { [chainId in ChainId]?: string } = {
[ChainId.TESTNET]: 'testnet'
}
type FormaticSupportedChains = Extract<ChainId, ChainId.MAINNET | ChainId.TESTNET>
const CHAIN_ID_NETWORK_ARGUMENT: { readonly [chainId in FormaticSupportedChains]: string | undefined } = {
[ChainId.MAINNET]: undefined,
[ChainId.TESTNET]: 'testnet'
}
const EMPTY_LIST: TokenAddressMap = {
[ChainId.TESTNET]: {},
[ChainId.MAINNET]: {}
}
const ETHERSCAN_PREFIXES: { [chainId in ChainId]: string } = {
65524: '',
65525: 'testnet.'
}
const prefix = `https://${ETHERSCAN_PREFIXES[chainId] || ETHERSCAN_PREFIXES[65524]}etherscan.io`
可支持的链id
修改MetaMask可以支持的链id,否则无法连接
export const injected = new InjectedConnector({
supportedChainIds: [65524, 65525]
})
修改合约地址
下面提到的合约,都可以去https://etherscan.io/address/合约地址#code 去查看,然后编译,部署到自己的定制网络中
修改ROUTER_ADDRESS
各个主网的代币地址
export const DAI = new Token(ChainId.MAINNET, '0x5D0624A7401ecB5075eDFd4855D3b9d8909Da744', 18, 'DAI', 'Dai Stablecoin')
export const USDC = new Token(ChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C')
export const USDT = new Token(ChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD')
export const COMP = new Token(ChainId.MAINNET, '0xc00e94Cb662C3520282E6f5717214004A7f26888', 18, 'COMP', 'Compound')
export const MKR = new Token(ChainId.MAINNET, '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2', 18, 'MKR', 'Maker')
export const AMPL = new Token(ChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth')
export const WBTC = new Token(ChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC')
export const GOVERNANCE_ADDRESS = '0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F'
export const TIMELOCK_ADDRESS = '0x1a9C8182C09F50C8318d769245beA52c32BE35BC'
const UNI_ADDRESS = '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'
修改对应网络UNI地址
export const UNI: { [chainId in ChainId]: Token } = {
[ChainId.MAINNET]: new Token(ChainId.MAINNET, UNI_ADDRESS, 18, 'UNI', 'Uniswap'),
[ChainId.TESTNET]: new Token(ChainId.TESTNET, UNI_ADDRESS, 18, 'UNI', 'Uniswap')
}
修改WETH_ONLY地址
const WETH_ONLY: ChainTokenList = {
[ChainId.MAINNET]: [WETH[ChainId.MAINNET]],
[ChainId.TESTNET]: [WETH[ChainId.TESTNET]]
}
修改多签合约地址
const MULTICALL_NETWORKS: { [chainId in ChainId]: string } = {
[ChainId.MAINNET]: '0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441',
[ChainId.TESTNET]: '0x2A16f8A9C88Ddaad5928D85Ce065940b7b25E11c'
}
修改V1_FACTORY_ADDRESSES
V1_FACTORY_ADDRESSES v1版本暂时用不到,修改只是为了网络配置
修改getColorFromToken
getColorFromToken,特殊地址,主要是为了网络配置
修改useENSRegistrarContract
useENSRegistrarContract,特殊地址,主要是为了网络配置
修改代币获取列表
在线获取地址
修改获取地址,由于目前没有在线地址,所以都先暂时删除了
修改未支持的代币列表
列表地址暂时删除
修改依赖包
uniswap-interface
"@uniswap/sdk": "https://github.com/cppfuns/uniswap-sdk.git",
"@uniswap/default-token-list": "https://github.com/cppfuns/default-token-list.git"