公排矩阵佛萨奇2.0系统丨公排矩阵佛萨奇2.0系统开发(开发案例)丨公排矩阵佛萨奇源码
去中心化应用(DApp)程序架构
Web3去除了管理中心,无需数据库集中存储应用程序的状态,也不需要集中的网络服务器来存放后端的逻辑,Web3的应用程序(DApp)架构与Web2时代的App有很大不同,Web3可以利用区块链在互联网上的去中心化状态机上构建应用程序。
状态机是由状态寄存器和组合逻辑电路构成的,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。区块链可以理解为一种被实例化为创世状态的状态机,并且有非常严格的规则(即共识)来定义该状态如何转换。
//如果tokenA,tokenB的流动池不存在,就创建流动池
if(IUniswapV2Factory(factory).getPair(tokenA,tokenB)==address(0)){
IUniswapV2Factory(factory).createPair(tokenA,tokenB);
}关于区块链项目技术开发唯:MrsFu123,代币发行、dapp智能合约开发、链游开发、单双币质押、多链钱包开发、NFT盲盒游戏、公链、链上游戏开发
Uniswap、交易所开发、量化合约开发、合约对冲、互助游戏开发、Nft数字藏品开发、众筹互助开发、元宇宙开发、swap开发、DAO智能合约、
夹子合约、链上合约开发、ido开发、商城开发等,开发过各种各样的系统模式,更有多种模式、制度、案例、后台等,成熟技术团队,欢迎实体参考。
//获取tokenA,tokenB的目前库存数量
(uint reserveA,uint reserveB)=UniswapV2Library.getReserves(factory,tokenA,tokenB);
if(reserveA==0&&reserveB==0){
//如果库存数量为0,也就是新建tokenA,tokenB的流动池,那么实际添加的amountA,amountB就是amountADesired和amountBDesired
(amountA,amountB)=(amountADesired,amountBDesired);
}else{
//reserveA*reserveB/amountADesired,算出实际要添加的tokenB数量amountBOptimal
uint amountBOptimal=UniswapV2Library.quote(amountADesired,reserveA,reserveB);
if(amountBOptimal<=amountBDesired){
//如果amountBMin<=amountBOptimal<=amountBDesired,amountA和amountB就是amountADesired和amountBOptimal
require(amountBOptimal>=amountBMin,'UniswapV2Router:INSUFFICIENT_B_AMOUNT');
(amountA,amountB)=(amountADesired,amountBOptimal);
}else{
//reserveA*reserveB/amountBDesired,算出实际要添加的tokenA数量amountAOptimal
uint amountAOptimal=UniswapV2Library.quote(amountBDesired,reserveB,reserveA);
//如果amountAMin<=amountAOptimal<=amountADesired,amountA和amountB就是amountAOptimal和amountBDesired
assert(amountAOptimal<=amountADesired);
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
)internal virtual returns(uint amountA,uint amountB){
if(IUniswapV2Factory(factory).getPair(tokenA,tokenB)==address(0)){
IUniswapV2Factory(factory).createPair(tokenA,tokenB);
}
(uint reserveA,uint reserveB)=UniswapV2Library.getReserves(factory,tokenA,tokenB);
if(reserveA==0&&reserveB==0){
(amountA,amountB)=(amountADesired,amountBDesired);
}else{
uint amountBOptimal=UniswapV2Library.quote(amountADesired,reserveA,reserveB);
if(amountBOptimal<=amountBDesired){
require(amountBOptimal>=amountBMin,'UniswapV2Router:INSUFFICIENT_B_AMOUNT');
(amountA,amountB)=(amountADesired,amountBOptimal);
}else{
uint amountAOptimal=UniswapV2Library.quote(amountBDesired,reserveB,reserveA);
assert(amountAOptimal<=amountADesired);
require(amountAOptimal>=amountAMin,'UniswapV2Router:INSUFFICIENT_A_AMOUNT');
(amountA,amountB)=(amountAOptimal,amountBDesired);
}
}
}