Stepn/Jogger跑鞋NFT质押铸造合成挖矿项目系统开发方案设计/案例解析/源码程序
那智能合约到底是什么呢?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 uniswapV3SwapCallback(
int256 amount0Delta,
int256 amount1Delta,
bytes memory path
)external view override{
require(amount0Delta>0||amount1Delta>0);//swaps entirely within 0-liquidity regions are not supported
(address tokenIn,address tokenOut,uint24 fee)=path.decodeFirstPool();
CallbackValidation.verifyCallback(factory,tokenIn,tokenOut,fee);
(bool isExactInput,uint256 amountToPay,uint256 amountReceived)=
amount0Delta>0
?(tokenIn<tokenOut,uint256(amount0Delta),uint256(-amount1Delta))
:(tokenOut<tokenIn,uint256(amount1Delta),uint256(-amount0Delta));
if(isExactInput){
assembly{//这里代码需要将结果保存在内存中
let ptr:=mload(0x40)//0x40是solidity定义的free memory pointer
mstore(ptr,amountReceived)//将结果保存起来
revert(ptr,32)//revert掉交易,并将内存中的数据作为revert data
}
}else{
//if the cache has been populated,ensure that the full output amount has been received
if(amountOutCached!=0)require(amountReceived==amountOutCached);
assembly{
let ptr:=mload(0x40)
mstore(ptr,amountToPay)
revert(ptr,32)
}
}
}