The blockchain mall creates a perfect integration platform of consumer shopping and blockchain technology,so that the advantages of blockchain technology can serve the actual transaction scenario of consumer shopping and help consumers realize the dream of value-added shopping.The model first uses the blockchain mall platform to leverage the trend of blockchain technology to help physical enterprises rapidly increase product sales,and at the same time,it also allows consumers to obtain substantial benefits in shopping.
pragma solidity>=0.5.0;
import'uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol';
import"./SafeMath.sol";
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
//在不进行任何外部调用的情况下计算一对的CREATE2地址
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
))));
}
//fetches and sorts the reserves for a pair
//获取并排序一对的储备
function getReserves(address factory,address tokenA,address tokenB)internal view returns(uint reserveA,uint reserveB){
(address token0,)=sortTokens(tokenA,tokenB);
(uint reserve0,uint reserve1,)=IUniswapV2Pair(pairFor(factory,tokenA,tokenB)).getReserves();
(reserveA,reserveB)=tokenA==token0?(reserve0,reserve1):(reserve1,reserve0);
}
//given some amount of an asset and pair reserves,returns an equivalent amount of the other asset
//给定一定数量的资产和配对准备金,返回等量的其他资产
//BB/AA=B/A-->BB=AA*(B/A)
function quote(uint amountA,uint reserveA,uint reserveB)internal pure returns(uint amountB){
require(amountA>0,'UniswapV2Library:INSUFFICIENT_AMOUNT');
require(reserveA>0&&reserveB>0,'UniswapV2Library:INSUFFICIENT_LIQUIDITY');
amountB=amountA.mul(reserveB)/reserveA;
}