区块链(Blockchain)是一种由多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术,也称为分布式账本技术(Distributed Ledger Technology)。从本质上看,区块链是通过去中心化和去信任化,集体维护、分布式存储的可靠数据库。
区块链本质上是一种去中心化的分布式数据库,是分布式数据存储、多中心的点对点传输、共识机制和加密算法等多种技术在互联网时代的创新应用模式。
在智能合约中,先通过定义预先设定的输入条件和对应的输出动作。编码完成后,技术人员需要将智能合约部署到区块链网络上,在网络中的节点能够对合约进行验证。如果合约中的条件触发,就会执行相应的动作,而不会受到外界的干扰。On the blockchain,smart contracts can access data and information within the block and achieve value transfer,which is also the reason why smart contracts and blockchain are inseparable.
while(state.amountSpecifiedRemaining!=0&&state.sqrtPriceX96!=sqrtPriceLimitX96){
//交易过程每一次循环的状态变量
StepComputations memory step;
step.sqrtPriceStartX96=state.sqrtPriceX96;
(step.tickNext,step.initialized)=tickBitmap.nextInitializedTickWithinOneWord(
state.tick,
tickSpacing,
zeroForOne
);
...
//从tick index计算sqrt(price)
step.sqrtPriceNextX96=TickMath.getSqrtRatioAtTick(step.tickNext);
(state.sqrtPriceX96,step.amountIn,step.amountOut,step.feeAmount)=SwapMath.computeSwapStep(
state.sqrtPriceX96,
(zeroForOne?step.sqrtPriceNextX96<sqrtPriceLimitX96:step.sqrtPriceNextX96>sqrtPriceLimitX96)
?sqrtPriceLimitX96
:step.sqrtPriceNextX96,
state.liquidity,
state.amountSpecifiedRemaining,
fee
);
if(exactInput){
state.amountSpecifiedRemaining-=(step.amountIn+step.feeAmount).toInt256();
state.amountCalculated=state.amountCalculated.sub(step.amountOut.toInt256());
}else{
state.amountSpecifiedRemaining+=step.amountOut.toInt256();
state.amountCalculated=state.amountCalculated.add((step.amountIn+step.feeAmount).toInt256());
}
...
if(state.sqrtPriceX96==step.sqrtPriceNextX96){
if(step.initialized){
int128 liquidityNet=
ticks.cross(
step.tickNext,
(zeroForOne?state.feeGrowthGlobalX128:feeGrowthGlobal0X128),
(zeroForOne?feeGrowthGlobal1X128:state.feeGrowthGlobalX128)
);
if(zeroForOne)liquidityNet=-liquidityNet;
secondsOutside.cross(step.tickNext,tickSpacing,cache.blockTimestamp);
state.liquidity=LiquidityMath.addDelta(state.liquidity,liquidityNet);
}
state.tick=zeroForOne?step.tickNext-1:step.tickNext;
}else if(state.sqrtPriceX96!=step.sqrtPriceStartX96){
state.tick=TickMath.getTickAtSqrtRatio(state.sqrtPriceX96);
}
}