【问题标题】:What is the use of Uniswap Router Initialization in a Token ContractUniswap 路由器初始化在代币合约中的用途是什么
【发布时间】:2021-09-07 01:30:38
【问题描述】:

我刚开始使用 ETH 和 BSC 构建代币,这是我在许多合约中看到的一种说法。 在 Constructor 方法中,Uniswap 路由器可能与 V2 版本无关。这个有什么用?

 constructor () public {
 _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        

为什么需要这个初始化?这是什么功能?

如果有人可以提供帮助,不胜感激。

谢谢

【问题讨论】:

    标签: ethereum solidity erc20


    【解决方案1】:
    IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
    

    这一行初始化了一个指向0x10ED... 地址的指针,并期望合约(部署在0x10ED... 地址)实现IUniswapV2Router02 接口。

    接口是在调用者合约源代码的某个地方定义的。

    它允许您执行和调用接口定义的函数,而不是构建低级调用。它还允许您使用返回的数据类型,而不是解析返回的二进制文件。

    例子:

    pragma solidity ^0.8.5;
    
    interface IRemote {
        function foo() external view returns (bool);
    }
    
    contract MyContract {
        IRemote remote;
    
        constructor() {
            remote = IRemote(address(0x123));
        }
    
        function getFoo() external view returns (bool) {
            bool returnedValue = remote.foo();
            return returnedValue;
        }
    }
    

    【讨论】:

    • 谢谢@Petr...明白了...但是地址 0x1... 是 Uniswap V2 路由器。那么主代币合约是如何实现Uniswap接口的呢?谢谢
    • @user3161840 主代币合约没有实现接口。它只是定义它(没有实现它)。实现由合约在0x1地址上完成……通过在代币合约中定义(不实现)接口,代币合约可以执行Router合约中实现的功能。
    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2013-09-03
    • 2023-03-10
    • 2022-11-04
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多