Uniswap 定制时要注意的几个点
2020-11-14 本文已影响0人
Ashton
Uniswap 搭建相关文章已经很多了,我只提几个我碰到的一开始没注意到的点。
0x01 init code hash
在 UniswapV2Library.sol 合约文件中有下面一段代码:
// calculates the CREATE2 address for a pair without making any external calls
function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
(address token0, address token1) = sortTokens(tokenA, tokenB);
pair = address(uint(keccak256(abi.encodePacked(
hex'ff',
factory,
keccak256(abi.encodePacked(token0, token1)),
hex'e5e068031409b9d730ba1fc59b0ce3b6dd8f7d2398549b6f019150cd22bf2b9a' // init code hash
))));
}
这里面有段硬编码的 hex'e5e068031409b9d730ba1fc59b0ce3b6dd8f7d2398549b6f019150cd22bf2b9a'
是特别要注意的,很可能在你的环境中这个值会发生变化,需要自己生成一个新的值。
如何生成呢?也很简单,用下面的合约代码就可以:
function getPairHash() public view returns (bytes32) {
return keccak256(type(UniswapV2Pair).creationCode);
}
0x02 LP Token
LP Token 的定义是在 UniswapV2ERC20.sol 这个合约中做的:
string public constant name = 'Uniswap V2';
string public constant symbol = 'UNI-V2';
uint8 public constant decimals = 18;
大部分项目定制的时候是需要更改这个 token 定义的,不过改了这个注意会影响到 router 合约中的 removeLiquidityWithPermit
函数,需要前端做响应改动才会使该函数运行成功。
0x03 Analytics
Uniswap 的分析工具做的挺不错的,不过该工具的数据来源于 https://thegraph.com/,这个数据来源只在以太坊可用,将 uniswap 迁移到其它链时,如果需要重用这个分析工具,大概率相关数据后台要自己开发。