那智能合约到底是什么呢?In short,a smart contract is a contract that uses Computer language instead of Legal writing to record terms and is automatically executed by a program.简换句话说,智能合约就是传统合约的数字化版本,跑在区块链网络上,由程序自动执行。
智能合约是用计算机语言取代了法律语言记录条款、由程序自动执行的合约。部署在区块上的它,也具备了区块链的数据公开透明、不可篡改、永久运行的特点。
区块链技术一般用于构建交易系统,而且要保证交易的信息真实可信,可追踪且不可篡改。每一次交易的信息被确认后存储在一个区块中,区块信息通过散列技术加密,以保证信息不被篡改。这些区块按时间顺序构成链条。每个节点都保有完整的区块链信息,个别节点的信息损坏,不会对区块链信息产生影响。这种信息记录方式被称作分布式账本。
function quoteExactInputSingle(
address tokenIn,
address tokenOut,
uint24 fee,
uint256 amountIn,
uint160 sqrtPriceLimitX96
)public override returns(uint256 amountOut){
bool zeroForOne=tokenIn<tokenOut;
try
getPool(tokenIn,tokenOut,fee).swap
address(this),//address(0)might cause issues with some tokens
zeroForOne,
amountIn.toInt256(),
sqrtPriceLimitX96==0
?(zeroForOne?TickMath.MIN_SQRT_RATIO+1:TickMath.MAX_SQRT_RATIO-1)
:sqrtPriceLimitX96,
abi.encodePacked(tokenIn,fee,tokenOut)
)
{}catch(bytes memory reason){
return parseRevertReason(reason);
}
}
function uniswapV3SwapCallback(
int256 amount0Delta,
int256 amount1Delta,
bytes calldata _data
)external override{
SwapData memory data=abi.decode(_data,(SwapData));
(address tokenIn,address tokenOut,uint24 fee)=data.path.decodeFirstPool();
CallbackValidation.verifyCallback(factory,tokenIn,tokenOut,fee);
(bool isExactInput,uint256 amountToPay)=
amount0Delta>0
?(tokenIn<tokenOut,uint256(amount0Delta))
:(tokenOut<tokenIn,uint256(amount1Delta));
if(isExactInput){
pay(tokenIn,data.payer,msg.sender,amountToPay);
}else{
...
}
}