區(qū)塊鏈商城系統(tǒng)開發(fā)(開發(fā)及案例)丨區(qū)塊鏈商城開發(fā)源碼分析
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
//需求方案I59詳細2OO7設計3O69
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);
}設計及流程:yy625019
//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;
}