BSEX交易所開發運營版丨BSEX交易所繫統開發(開發詳細)及原始碼功能
通俗講,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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- BSEX交易所繫統開發(開發方案)丨BSEX交易所開發(原始碼詳情)原始碼
- BSEX交易所繫統技術開發詳情(細節分析)
- 交易所繫統丨交易所繫統開發(上線版)丨交易所開發詳細原始碼部署原始碼
- 交易所開發(海外版)丨交易所繫統開發(Python)丨 交易所繫統原始碼功能Python原始碼
- 區塊鏈交易所開發運營版丨區塊鏈交易所繫統開發(詳細案例)及邏輯方案丨原始碼區塊鏈原始碼
- 交易所開發(海外版)/交易所繫統開發(案例詳細)/交易所繫統原始碼及demo原始碼
- 合約跟單交易所開發運營版丨合約跟單交易所繫統開發成熟方案及原始碼詳細原始碼
- swap交易所繫統(原始碼)丨swap交易所繫統開發(去中心化交易所開發詳細)原始碼中心化
- BSEX交易所模式軟體開發系統詳情模式
- BSEX交易所合約系統開發方案
- Uniswap交易所繫統開發(穩定版)丨Uniswap交易所開發成品及原始碼原始碼
- 交易所開發(穩定版)/交易所繫統開發(python開發)/交易所開發(原始碼版)Python原始碼
- 區塊鏈交易所繫統開發(海外版)丨區塊鏈交易所繫統開發(開發案例及原始碼)區塊鏈原始碼
- (demo)交易所App開發功能|交易所繫統開發原始碼APP原始碼
- 交易所開發(海外版)丨交易所繫統開發(多語言)丨交易所成熟原始碼版原始碼
- 去中心化交易所開發正式版丨去中心化交易所繫統開發技術詳細及原始碼分析中心化原始碼
- 交易所開發(海外版)丨交易所繫統開發(Demo)交易所專案系統開發(原始碼定製)原始碼
- 數字貨幣交易所開發正式版丨數字貨幣交易所繫統開發(開發詳情)及案例原始碼原始碼
- 合約跟單/交易所開發方案,合約跟單/交易所繫統開發(穩定版)丨原始碼詳細原始碼
- 現貨期權交易所繫統開發(多語言)丨現貨期權交易所繫統開發(詳細邏輯及原始碼)原始碼
- Uniswap交易所開發穩定版丨Uniswap交易所繫統開發(開發模板)
- 深度解析:交易所繫統開發(海外版)交易所繫統開發(多語言)交易所開發(原始碼部署)原始碼
- 數字貨幣交易所開發詳情丨數字貨幣交易所繫統開發(詳細及邏輯)丨數字貨幣交易所原始碼原始碼
- 數字貨幣交易所開發(案例)丨數字貨幣交易所繫統開發(JAVA/PHP開發)及原始碼JavaPHP原始碼
- 數字貨幣交易所繫統開發(海外版)丨數字貨幣交易所開發(原始碼版)原始碼
- 數字貨幣交易所錢包系統開發(開發說明)丨數字貨幣錢包交易所繫統開發(原始碼詳細)原始碼
- 數字貨幣交易所開發方案丨數字貨幣交易所繫統開發(正式版)丨數字貨幣交易所開發原始碼原始碼
- BSEX交易所DAPP合約交易系統模式開發技術方案APP模式
- BSEX交易所去中心化系統開發技術(邏輯分析)中心化
- 現貨期權交易所開發案例原始碼丨現貨期權交易所繫統開發(海外版)原始碼
- swap交易所繫統開發(成熟技術)交易所中心繫統開發流程(原始碼搭建)原始碼
- swap去中心化交易所繫統開發(正式版)丨swap交易所原始碼部署中心化原始碼
- 數字貨幣交易所開發(海外版)丨數字貨幣交易所繫統開發(swap交易所開發案例)
- 現貨合約跟單交易所開發(穩定版)丨現貨合約跟單交易所繫統開發(詳情及邏輯)原始碼原始碼
- 去中心化薄餅交易所繫統開發詳細,PancakeSwap去中心化交易所繫統開發原理分析中心化
- 現貨期權交易所開發詳情丨現貨期權交易所繫統開發(原理及邏輯)
- 合約跟單交易所開發(案例開發)丨合約跟單交易所繫統開發實現技術方案及原始碼專案原始碼
- 現貨期權合約交易所開發正式版丨現貨期權合約交易所繫統開發(詳情規則)及案例原始碼原始碼