为什么我们需要稳固的图书馆



我是个新手。现在我很困惑,因为我们可以在实体中写函数吗?

例如,我们为什么需要图书馆。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 ..
}

2个主要原因。

  • 代码可重用性。合同最大大小为24kb
  • 经济型

Uniswap的合同太多。如果他们在3个不同的合同中需要相同的功能,他们必须在3个合同中实现相同的功能。这将使每个合同代码看起来臃肿,而且每个合同部署都将非常昂贵。想想";图书馆";就像OOB中的单例对象一样,您创建一个对象并将其存储在内存中,每次需要该对象时,EVM都会从同一位置将其带给您。

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

相关内容

  • 没有找到相关文章

最新更新