流动性池
什么是流动性池
池子的创建
通过Factory创建
// from JAMMFactory.sol
function createPair(
address tokenA,
address tokenB,
uint24 fee
) external override returns (address pair) {
require(tokenA != tokenB, "JAMMFactory: IDENTICAL_ADDRESSES");
(address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
require(token0 != address(0), "JAMMFactory: ZERO_ADDRESS");
require(
fee == FEE_0_5_PERCENT ||
fee == FEE_1_PERCENT ||
fee == FEE_2_PERCENT ||
fee == FEE_3_PERCENT,
"JAMMFactory: INVALID_FEE"
);
require(getPair[token0][token1][fee] == address(0), "JAMMFactory: PAIR_EXISTS");
// deploy the pair using CREATE2
bytes memory bytecode = type(JAMMPair).creationCode;
bytes32 salt = keccak256(abi.encodePacked(token0, token1, fee));
assembly {
pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
}
// initialize the pair
JAMMPair(pair).initialize(token0, token1, fee);
getPair[token0][token1][fee] = pair;
getPair[token1][token0][fee] = pair;
allPairs.push(pair);
emit PairCreated(token0, token1, fee, pair, allPairs.length);
}确定性地址生成
池子的状态
储备量管理
储备量更新
流动性代币 (LP代币)
LP代币的作用
LP代币的铸造
LP代币的销毁
交易执行
Swap函数
安全机制
重入保护
最小流动性锁定
溢出保护
实用函数
Skim函数
Sync函数
Last updated