區塊鏈泰山眾籌商城開發原始碼版丨區塊鏈泰山眾籌系統開發(方案及功能)

xiaofufu發表於2023-02-25

  新零售指的就是新型零售商業模式,將線上與線下進行融合,消費者可以從線上進行選物,然後到線下門店進實際體驗,另外還可以透過大資料來瞭解消費者的消費習慣,從而提供更加完善的服務。


  新零售即企業以網際網路為依託,透過運用大資料、人工智慧等先進技術手段,對商品的生產、流通與銷售過程進行升級改造,進而重塑業態結構與生態圈,並對線上服務、線下體驗以及現代物流進行深度融合的零售新模式。


  pragma solidity=0.5.16;


  import'./interfaces/IUniswapV2Factory.sol';


  import'./UniswapV2Pair.sol';


  contract UniswapV2Factory is IUniswapV2Factory{


  address public feeTo;


  address public feeToSetter;


  mapping(address=>mapping(address=>address))public getPair;


  address[]public allPairs;


  event PairCreated(address indexed token0,address indexed token1,address pair,uint);


  //初始化就設定好誰是設定手續費接收的人的設定者


  constructor(address _feeToSetter)public{


  feeToSetter=_feeToSetter;


  }


  //獲取一共有多少個交易對


  function allPairsLength()external view returns(uint){


  return allPairs.length;


  }


  //建立交易對函式


  //建立交易對只是建立一個交易對地址,還沒有往裡面新增代幣數量


  function createPair(address tokenA,address tokenB)external returns(address pair){


  //必須是兩個不一樣的ERC20合約地址


  require(tokenA!=tokenB,'UniswapV2:IDENTICAL_ADDRESSES');


  //讓tokenA和tokenB的地址從小到大排列


  (address token0,address token1)=tokenA<tokenB?(tokenA,tokenB):(tokenB,tokenA);


  //token地址不能是0


  require(token0!=address(0),'UniswapV2:ZERO_ADDRESS');


  //必須是uniswap中未建立過的pair


  require(getPair[token0][token1]==address(0),'UniswapV2:PAIR_EXISTS');//single check is sufficient


  //獲取模板合約UniswapV2Pair的creationCode


  bytes memory bytecode=type(UniswapV2Pair).creationCode;


  //以兩個token的地址作為種子生產salt


  bytes32 salt=keccak256(abi.encodePacked(token0,token1));


  //直接呼叫匯編建立合約


  assembly{ 


  pair:=create2(0,add(bytecode,32),mload(bytecode),salt)


  }


  //初始化剛剛建立的合約


  IUniswapV2Pair(pair).initialize(token0,token1);


  //交易對對映填充


  //記錄剛剛建立的合約對應的pair


  getPair[token0][token1]=pair;


  getPair[token1][token0]=pair;


  allPairs.push(pair);


  emit PairCreated(token0,token1,pair,allPairs.length);


  }


  //設定接收手續費的人,只能設定者能設定


  //用於設定feeTo地址,只有feeToSetter才可以設定。


  function setFeeTo(address _feeTo)external{


  require(msg.sender==feeToSetter,'UniswapV2:FORBIDDEN');


  feeTo=_feeTo;


  }


  //設定接收手續費的人的設定者,只能上一個設定者進行設定,也就是設定權利轉交


  //用於設定feeToSetter地址,必須是現任feeToSetter才可以設定。


  function setFeeToSetter(address _feeToSetter)external{


  require(msg.sender==feeToSetter,'UniswapV2:FORBIDDEN');


  feeToSetter=_feeToSetter;


  }


  }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69956839/viewspace-2937014/,如需轉載,請註明出處,否則將追究法律責任。

相關文章