区块链技术一般用于构建交易系统,而且要保证交易的信息真实可信,可追踪且不可篡改。 每一次交易的信息被确认后存储在一个区块中,区块信息通过散列技术加密,以保证信息不被篡改。这些区块按时间顺序构成链条。 每个节点都保有完整的区块链信息,176开阀0206案例5616 个别节点的信息损坏,不会对区块链信息产生影响。这种信息记录方式被称作分布式账本。 区块链技术就是一种数据库技术,V++++mrsfu123 每个区块就像一个硬盘,把信息全部保存下来,再通过密码学技术进行加密,这些被保存起来的数据是不能被篡改的。 区块链是一种特殊的分布式数据库,任何服务器都可以成为区块链中的一个节点,且节点之间是平等的,无中心化,区块链中的数据是经过加密存储,已经存储的数据无法修改,可以保证数据的准确性。 将代币path[0],转入到交易对,数量为amounts[0]。转入代币后,进行真正的swap操作: function _swap(uint[]memory amounts,address[]memory path,address _to)internal virtual{ for(uint i;i<path.length-1;i++){ (address input,address output)=(path<i>,path[i+1]); (address token0,)=UniswapV2Library.sortTokens(input,output); uint amountOut=amounts[i+1]; (uint amount0Out,uint amount1Out)=input==token0?(uint(0),amountOut):(amountOut,uint(0)); address to=i<path.length-2?UniswapV2Library.pairFor(factory,output,path[i+2]):_to; IUniswapV2Pair(UniswapV2Library.pairFor(factory,input,output)).swap( amount0Out,amount1Out,to,new bytes(0) ); } } 原理比较简单,针对每一条路径,调用交易对的swap操作。 Core逻辑 Core逻辑实现了单个交易对的逻辑。通过UniswapV2Factory可以创建一个个Pair(交易池)。每个具体实现逻辑在UniswapV2Pair中。 mint 每个交易对创建流动性。 function mint(address to)external lock returns(uint liquidity){ 因为在调用mint函数之前,在addLiquidity函数已经完成了转账,所以,从这个函数的角度,两种代币数量的计算方式如下: uint balance0=IERC20(token0).balanceOf(address(this)); uint balance1=IERC20(token1).balanceOf(address(this)); uint amount0=balance0.sub(_reserve0); uint amount1=balance1.sub(_reserve1); 当前的balance是当前的reserve加上注入的流动性的代币数量。 uint _totalSupply=totalSupply;//gas savings,must be defined here since totalSupply can update in _mintFee