1

我正在重新实现 Uniswap v2 合约,但我无法弄清楚这一点。

https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2Pair.sol

所以,据我了解:

如果在添加流动性时不存在交易对/流动性池,UniswapFactory.sol 会创建一个新的 LP 池合约。

这个矿池合约 UniswapV2pair.sol 本身就是一个 ERC20 合约。但是,我对它继承的 UniswapV2ERC20 合约有一些疑问。

https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2ERC20.sol

似乎名称和符号被硬编码到合同中

string public constant name = "Uniswap V2;

string public constant symbol = 'UNI-V2';

,因此当从前端向流动性矿池合约调用“name”时,它将始终返回字符串“Uniswap V2”,无论底层 LP 代币是什么(如 DAI-ETH、USDC-ETH.. 等)。

我对此的理解正确吗?我知道功能应该没问题,因为所有这些 Pair Liquidity 池合约都部署为单独的合约,但对我来说,名称和符号不能只是设置为“DAI-ETH LP”之类的东西,这对我来说似乎有点奇怪。构造函数而不是全部作为相同的“uniswap v2”。

谢谢

4

1 回答 1

1

您正在正确阅读代码。Uniswap 决定为所有 LP 代币合约(即配对合约)设置相同的名称。

这种方法更加强调实际的对令牌地址,而不是名称。

如果一对名称包含代币名称,不诚实的作者可以创建一个名为 USDT 的自定义代币,一个名为“ETH-USDT LP”的 Uniswap 对,并引诱不会检查该代币地址的用户出售他们的 ETH 以换取原本一文不值的代币(而不是“真正的”USDT)。

于 2022-02-19T15:03:36.550 回答