【问题标题】:why do we need library in solidity?为什么我们需要可靠的图书馆?
【发布时间】:2022-11-08 11:26:18
【问题描述】:

我是新来的。现在我很困惑,因为我们可以在solidity中编写函数?

例如,为什么我们需要图书馆。 uniswap 使用的库来写下他们的一些可重用的功能。

    library UniswapV2Library {
        using SafeMath for uint;
    
        // returns sorted token addresses, used to handle return values from pairs sorted in this order
        function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
            require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
            (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
            require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
        }
    
        // 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'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
                ))));
        }
        .... other functions ..
}

【问题讨论】:

  • 是的,这可以使用简单的函数来实现,但是库就像智能合约一样工作,但它减少了为什么 uniswap 使用库的气体

标签: solidity smartcontracts uniswap


【解决方案1】:

2个主要原因。

  • 代码可重用性
  • 经济型

Uniswap 的合约太多了。如果他们在 3 个不同的合约中需要相同的功能,他们必须在 3 个合约中实现相同的功能。这将使每个合约代码看起来很臃肿,而且每个合约部署都会额外昂贵。将“库”想象为 OOB 中的单例对象,您创建一个对象并将其存储在内存中,每次您需要该对象时,EVM 都会从同一位置将其提供给您。

他们可以创建一个基础合约并从合约继承,而不是创建一个库,但是继承意味着将基础合约的代码复制到子合约中,因此这也会花费太多的 gas。

【讨论】:

    猜你喜欢
    • 2017-02-24
    • 2019-06-09
    • 2015-07-06
    • 2014-06-30
    • 2016-03-07
    • 1970-01-01
    • 2016-01-14
    • 2012-06-14
    • 1970-01-01
    相关资源
    最近更新 更多