BSEX交易所開發運營版丨BSEX交易所繫統開發(開發詳細)及原始碼功能

xiaofufu發表於2023-04-10

  通俗講,DAPP之於區塊鏈,就像APP之於IOS和Android。即:DAPP=前端+智慧合約。前端可以使用任何語言編寫,只要能夠充分展示使用者介面,呼叫後端的程式碼即可。這裡面,智慧合約就是連線DAPP和資料庫的橋樑,相當於傳統網際網路APP中的API聯結器,其結構:前端→智慧合約→區塊鏈。


  隨著區塊鏈架構體系的不斷髮展,越來越多的研究對區塊進行改造從而實現了對空間屬性的支援。因此,區塊鏈技術可以為資料打上時空標籤,透過在區塊中加入資料的時間和空間資訊,將同樣內容的資料集標識為不同的資料集個體,從而解決了資料要素流通中資料集可以被無限複製而無法辨識的難題,實現資料來源可確認。


  區塊鏈的可追溯性來源於區塊鏈資料結構的特殊性。在區塊鏈系統中,它的鏈式結構是從創世區塊開始的,其後系統產生的所有區塊都透過父區塊的雜湊值前後相連,並最終能追溯到創世區塊。


  關於區塊鏈專案技術開發唯:MrsFu123,代幣發行、dapp智慧合約開發、鏈遊開發、單雙幣質押、多鏈錢包開發、NFT盲盒遊戲、公鏈、鏈上游戲開發


  Uniswap博餅、交易所開發、量化合約開發、合約對沖、互助遊戲開發、Nft數字藏品開發、眾籌互助開發、元宇宙開發、swap開發、DAO智慧合約、


  夾子合約、鏈上合約開發、ido開發、商城開發等,開發過各種各樣的系統模式,更有多種模式、制度、案例、後臺等,成熟技術團隊,歡迎實體參考。


  由於每個區塊都包含一段時間內系統進行的所有交易資料,因此完整的區塊鏈資料包含了自創世區塊以來,系統所有進行的交易及交易前後的關聯資訊。同時,得益於區塊鏈資訊的不可篡改特性,使得這種可追溯性是可靠可信的。


  interface IWETH{


  function deposit()external payable;


  function transfer(address to,uint value)external returns(bool);


  function withdraw(uint)external;


  }


  contract UniswapV2Router02 is IUniswapV2Router02{


  using SafeMath for uint;


  address public immutable override factory;


  address public immutable override WETH;


  //交易時間是否過期,dapp中預設設定時20分鐘內成交有效


  modifier ensure(uint deadline){


  require(deadline>=block.timestamp,'UniswapV2Router:EXPIRED');


  _;


  }


  constructor(address _factory,address _WETH)public{


  factory=_factory;


  WETH=_WETH;


  }


  receive()external payable{


  assert(msg.sender==WETH);//only accept ETH via fallback from the WETH contract


  }


  //****ADD LIQUIDITY****


  //新增流動性內部方法,透過該方法計算出兩個幣的實際所需數量


  function _addLiquidity(


  address tokenA,//代幣地址A


  address tokenB,//代幣地址B


  uint amountADesired,//代幣A期望新增量


  uint amountBDesired,//代幣B期望新增量


  uint amountAMin,//代幣A最小新增量(這兩個min,收益新增的時候可以和Desired一樣,二次新增的時候,一般都是小於Desired,具體小多少,演演算法可以檢視uniswap前端程式碼)


  uint amountBMin//代幣B最小新增量


  )internal virtual returns(uint amountA,uint amountB){//返回值是兩個


  //create the pair if it doesn't exist yet


  //透過factory,查詢pair,如果等於0地址,就表示還沒有該交易對,呼叫建立方法


  if(IUniswapV2Factory(factory).getPair(tokenA,tokenB)==address(0)){


  IUniswapV2Factory(factory).createPair(tokenA,tokenB);//建立交易對


  }


  //可以先了解下UniswapV2Library中相關方法的意思


  //如果查詢兩個值都是0,新增,直接使用期望值


  (uint reserveA,uint reserveB)=UniswapV2Library.getReserves(factory,tokenA,tokenB);


  if(reserveA==0&&reserveB==0){


  (amountA,amountB)=(amountADesired,amountBDesired);//直接使用這兩個值,比例就是相互的幣價


  }else{


  //如果兩個儲備量不為0,需要根據當前的價格/比例去新增流動性


  //先透過quote計算如果輸入A的數量,得出B的實際輸入量


  uint amountBOptimal=UniswapV2Library.quote(amountADesired,reserveA,reserveB);


  //如果B的實際輸入量<=B的期望輸入數量,


  if(amountBOptimal<=amountBDesired){


  //實際輸入量需要大於等於引數中的最小數量


  require(amountBOptimal>=amountBMin,'UniswapV2Router:INSUFFICIENT_B_AMOUNT');


  (amountA,amountB)=(amountADesired,amountBOptimal);//得到兩個的實際新增量


  }else{


  //如果上面計算的B的實際輸入量大於期望輸入量,就說明使用者得B數量不夠,需要反過來,透過B計算A的數量,看A的數量是否滿足,


  //透過B計算A的數量


  uint amountAOptimal=UniswapV2Library.quote(amountBDesired,reserveB,reserveA);//


  assert(amountAOptimal<=amountADesired);//需要計算得來的A量小於等於A的預期輸入量


  require(amountAOptimal>=amountAMin,'UniswapV2Router:INSUFFICIENT_A_AMOUNT');//且實際輸入量,需要大於等於最小數量


  (amountA,amountB)=(amountAOptimal,amountBDesired);//得到兩個的實際新增量


  }


  }


  }


  function addLiquidity(//新增流動性,兩個代幣


  address tokenA,


  address tokenB,


  uint amountADesired,


  uint amountBDesired,


  uint amountAMin,


  uint amountBMin,


  address to,//lp接收人,新版的uniswap前端好像不支援設定這個了


  uint deadline//交易的成交時間,預設是當前時間+20分鐘後的時間的秒值


  )external virtual override ensure(deadline)returns(uint amountA,uint amountB,uint liquidity){


  //呼叫內部方法_addLiquidity獲取到兩個幣實際所需要的數量


  (amountA,amountB)=_addLiquidity(tokenA,tokenB,amountADesired,amountBDesired,amountAMin,amountBMin);


  address pair=UniswapV2Library.pairFor(factory,tokenA,tokenB);//查詢到pair地址


  TransferHelper.safeTransferFrom(tokenA,msg.sender,pair,amountA);//給pair轉A數量


  TransferHelper.safeTransferFrom(tokenB,msg.sender,pair,amountB);//給pair轉B數量


  liquidity=IUniswapV2Pair(pair).mint(to);//呼叫pair的mint方法,會有新增的lp數量返回


  }


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

相關文章