践行区块链

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 迁移到其它链时,如果需要重用这个分析工具,大概率相关数据后台要自己开发。

上一篇 下一篇

猜你喜欢

热点阅读