質(zhì)押項(xiàng)目算力挖礦DAPP開(kāi)發(fā)運(yùn)營(yíng)版丨質(zhì)押算力挖礦DAPP系統(tǒng)開(kāi)發(fā)成熟技術(shù)及方案
(1)智能合約部署。
部署前,開(kāi)發(fā)智能合約并編譯為二進(jìn)制字節(jié)碼(同時(shí)產(chǎn)生ABI文件);編譯后,將字節(jié)碼等數(shù)據(jù)作為區(qū)塊鏈交易的一部分,發(fā)送至區(qū)塊鏈網(wǎng)絡(luò);發(fā)送后,在共識(shí)算法約束下,共識(shí)節(jié)點(diǎn)完成交易打包、區(qū)塊生成和區(qū)塊上鏈;上鏈后,智能合約綁定特定賬號(hào)(智能合約賬號(hào)),智能合約調(diào)用時(shí)需要使用它。
(2)智能合約調(diào)用。
部署后,將智能合約賬號(hào)和ABI入?yún)?shù)據(jù)作為交易的一部分,發(fā)送至區(qū)塊鏈網(wǎng)絡(luò);發(fā)送后,在共識(shí)算法約束下,共識(shí)節(jié)點(diǎn)完成交易打包、區(qū)塊生成和區(qū)塊上鏈;上鏈后,在業(yè)務(wù)邏輯約束下,智能合約更新數(shù)據(jù),區(qū)塊鏈全局狀態(tài)變更。
uint amount0In=balance0>_reserve0-amount0Out?balance0-(_reserve0-amount0Out):0;
uint amount1In=balance1>_reserve1-amount1Out?balance1-(_reserve1-amount1Out):0;
require(amount0In>0||amount1In>0,'UniswapV2:INSUFFICIENT_INPUT_AMOUNT');
{//scope for reserve{0,1}Adjusted,avoids stack too deep errors
uint balance0Adjusted=balance0.mul(1000).sub(amount0In.mul(3));
uint balance1Adjusted=balance1.mul(1000).sub(amount1In.mul(3));
require(balance0Adjusted.mul(balance1Adjusted)>=uint(_reserve0).mul(_reserve1).mul(1000**2),'UniswapV2:K');
}
_update(balance0,balance1,_reserve0,_reserve1);
emit Swap(msg.sender,amount0In,amount1In,amount0Out,amount1Out,to);
}
//force balances to match reserves
function skim(address to)external lock{
address _token0=token0;//gas savings
address _token1=token1;//gas savings
_safeTransfer(_token0,to,IERC20(_token0).balanceOf(address(this)).sub(reserve0));
_safeTransfer(_token1,to,IERC20(_token1).balanceOf(address(this)).sub(reserve1));
}
//force reserves to match balances
function sync()external lock{
_update(IERC20(token0).balanceOf(address(this)),IERC20(token1).balanceOf(address(this)),reserve0,reserve1);
}
}