From 8d40444a898776661a8556bf0aae2aa481618921 Mon Sep 17 00:00:00 2001 From: owen05 Date: Fri, 10 Sep 2021 10:40:37 +0800 Subject: [PATCH] fix --- contracts/NFTPool/impl/BaseFilterV1.sol | 11 +++++------ contracts/NFTPool/impl/ControllerModel.sol | 1 - contracts/NFTPool/impl/FilterAdmin.sol | 2 +- contracts/NFTPool/impl/FilterERC1155V1.sol | 12 ++++++------ contracts/NFTPool/impl/FilterERC721V1.sol | 11 +++++------ contracts/SmartRoute/DODONFTApprove.sol | 6 +++--- 6 files changed, 20 insertions(+), 23 deletions(-) diff --git a/contracts/NFTPool/impl/BaseFilterV1.sol b/contracts/NFTPool/impl/BaseFilterV1.sol index c58f685..b4c528c 100644 --- a/contracts/NFTPool/impl/BaseFilterV1.sol +++ b/contracts/NFTPool/impl/BaseFilterV1.sol @@ -53,7 +53,7 @@ contract BaseFilterV1 is InitializableOwnable, ReentrancyGuard { function isNFTValid(address nftCollectionAddress, uint256 nftId) external view returns (bool) { if(nftCollectionAddress == _NFT_COLLECTION_) { - isNFTIDValid(nftId); + return isNFTIDValid(nftId); } else { return false; } @@ -68,7 +68,7 @@ contract BaseFilterV1 is InitializableOwnable, ReentrancyGuard { } function getAvaliableNFTIn() public view returns(uint256) { - if(_MAX_NFT_AMOUNT_ < _NFT_IDS_.length) { + if(_MAX_NFT_AMOUNT_ <= _NFT_IDS_.length) { return 0; }else { return _MAX_NFT_AMOUNT_ - _NFT_IDS_.length; @@ -76,7 +76,7 @@ contract BaseFilterV1 is InitializableOwnable, ReentrancyGuard { } function getAvaliableNFTOut() public view returns(uint256) { - if(_NFT_IDS_.length < _MIN_NFT_AMOUNT_) { + if(_NFT_IDS_.length <= _MIN_NFT_AMOUNT_) { return 0; }else { return _NFT_IDS_.length - _MIN_NFT_AMOUNT_; @@ -94,7 +94,7 @@ contract BaseFilterV1 is InitializableOwnable, ReentrancyGuard { // ============ Math ============= - function geometricCalc(uint256 a1, uint256 q, uint256 start, uint256 end) internal view returns(uint256) { + function _geometricCalc(uint256 a1, uint256 q, uint256 start, uint256 end) internal view returns(uint256) { //Sn=a1*(q^n-1)/(q-1) //Sn-Sm = a1*(q^n-q^m)/(q-1) @@ -105,7 +105,7 @@ contract BaseFilterV1 is InitializableOwnable, ReentrancyGuard { return a1.mul(qn.sub(qm)).div(q.sub(DecimalMath.ONE)); } - function getRandomOutId() public view returns (uint256 index) { + function _getRandomOutId() public view returns (uint256 index) { uint256 nftAmount = _NFT_IDS_.length; index = uint256(keccak256(abi.encodePacked(tx.origin, blockhash(block.number-1), gasleft()))) % nftAmount; } @@ -113,7 +113,6 @@ contract BaseFilterV1 is InitializableOwnable, ReentrancyGuard { // ================= Ownable ================ - function changeNFTInPrice(uint256 newGsStart, uint256 newCr, bool switchFlag) external { require(msg.sender == IFilterAdmin(_OWNER_)._OWNER_(), "ACCESS_RESTRICTED"); _changeNFTInPrice(newGsStart, newCr, switchFlag); diff --git a/contracts/NFTPool/impl/ControllerModel.sol b/contracts/NFTPool/impl/ControllerModel.sol index 1ef135e..ce398da 100644 --- a/contracts/NFTPool/impl/ControllerModel.sol +++ b/contracts/NFTPool/impl/ControllerModel.sol @@ -9,7 +9,6 @@ pragma solidity 0.6.9; pragma experimental ABIEncoderV2; import {InitializableOwnable} from "../../lib/InitializableOwnable.sol"; -import {IERC20} from "../../intf/IERC20.sol"; import {SafeMath} from "../../lib/SafeMath.sol"; contract ControllerModel is InitializableOwnable { diff --git a/contracts/NFTPool/impl/FilterAdmin.sol b/contracts/NFTPool/impl/FilterAdmin.sol index 161f4a4..603736d 100644 --- a/contracts/NFTPool/impl/FilterAdmin.sol +++ b/contracts/NFTPool/impl/FilterAdmin.sol @@ -101,7 +101,7 @@ contract FilterAdmin is InitializableInternalMintableERC20 { } function changeFee(uint256 newFee) external onlyOwner { - require(newFee <= 1e18, "FEE_TOO_LARGE"); + require(newFee <= DecimalMath.ONE, "FEE_TOO_LARGE"); _FEE_ = newFee; emit ChangeFee(newFee); } diff --git a/contracts/NFTPool/impl/FilterERC1155V1.sol b/contracts/NFTPool/impl/FilterERC1155V1.sol index a244170..dcaf052 100644 --- a/contracts/NFTPool/impl/FilterERC1155V1.sol +++ b/contracts/NFTPool/impl/FilterERC1155V1.sol @@ -6,7 +6,6 @@ pragma solidity 0.6.9; pragma experimental ABIEncoderV2; -import {InitializableOwnable} from "../../lib/InitializableOwnable.sol"; import {SafeMath} from "../../lib/SafeMath.sol"; import {IFilterAdmin} from "../intf/IFilterAdmin.sol"; import {IControllerModel} from "../intf/IControllerModel.sol"; @@ -48,21 +47,21 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 { function queryNFTIn(uint256 NFTInAmount) public view returns (uint256 rawReceive, uint256 received) { require(NFTInAmount <= getAvaliableNFTIn(), "EXCEDD_IN_AMOUNT"); - rawReceive = geometricCalc(_GS_START_IN_, _CR_IN_, _TOTAL_NFT_AMOUNT_, _TOTAL_NFT_AMOUNT_ + NFTInAmount); + rawReceive = _geometricCalc(_GS_START_IN_, _CR_IN_, _TOTAL_NFT_AMOUNT_, _TOTAL_NFT_AMOUNT_ + NFTInAmount); (uint256 poolFee, uint256 mtFee) = IFilterAdmin(_OWNER_).queryChargeMintFee(rawReceive); received = rawReceive.sub(poolFee).sub(mtFee); } function queryNFTTargetOut(uint256 NFTOutAmount) public view returns (uint256 rawPay, uint256 pay) { require(NFTOutAmount <= getAvaliableNFTOut(), "EXCEED_OUT_AMOUNT"); - rawPay = geometricCalc(_GS_START_TARGET_OUT_,_CR_TARGET_OUT_, _TOTAL_NFT_AMOUNT_ - NFTOutAmount, _TOTAL_NFT_AMOUNT_); + rawPay = _geometricCalc(_GS_START_TARGET_OUT_,_CR_TARGET_OUT_, _TOTAL_NFT_AMOUNT_ - NFTOutAmount, _TOTAL_NFT_AMOUNT_); (uint256 poolFee, uint256 mtFee) = IFilterAdmin(_OWNER_).queryChargeBurnFee(rawPay); pay = rawPay.add(poolFee).add(mtFee); } function queryNFTRandomOut(uint256 NFTOutAmount) public view returns (uint256 rawPay, uint256 pay) { require(NFTOutAmount <= getAvaliableNFTOut(), "EXCEED_OUT_AMOUNT"); - rawPay = geometricCalc(_GS_START_RANDOM_OUT_,_CR_RANDOM_OUT_, _TOTAL_NFT_AMOUNT_ - NFTOutAmount, _TOTAL_NFT_AMOUNT_); + rawPay = _geometricCalc(_GS_START_RANDOM_OUT_,_CR_RANDOM_OUT_, _TOTAL_NFT_AMOUNT_ - NFTOutAmount, _TOTAL_NFT_AMOUNT_); (uint256 poolFee, uint256 mtFee) = IFilterAdmin(_OWNER_).queryChargeBurnFee(rawPay); pay = rawPay.add(poolFee).add(mtFee); } @@ -83,6 +82,7 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 { function ERC1155TargetOut(uint256[] memory indexes, uint256[] memory amounts, address to) external preventReentrant returns(uint256 paid) { uint256 totalAmount = 0; for (uint256 i = 0; i < indexes.length; i++) { + totalAmount += amounts[i]; _transferOutERC1155(to, indexes[i], amounts[i]); } (uint256 rawPay, ) = queryNFTTargetOut(totalAmount); @@ -93,7 +93,7 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 { (uint256 rawPay, ) = queryNFTRandomOut(amount); paid = IFilterAdmin(_OWNER_).burnFragFrom(msg.sender, rawPay); for (uint256 i = 0; i < amount; i++) { - _transferOutERC1155(to, getRandomOutId(), 1); + _transferOutERC1155(to, _getRandomOutId(), 1); } } @@ -156,7 +156,7 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 { function _maintainERC1155In(uint256 tokenId) internal returns(uint256 inAmount){ uint256 currentAmount = IERC1155(_NFT_COLLECTION_).balanceOf(address(this), tokenId); inAmount = currentAmount.sub(_NFT_RESERVE_[tokenId]); - if(_NFT_RESERVE_[tokenId]==0 && currentAmount > 0) { + if(_NFT_RESERVE_[tokenId] == 0 && currentAmount > 0) { _NFT_IDS_.push(tokenId); } _NFT_RESERVE_[tokenId] = currentAmount; diff --git a/contracts/NFTPool/impl/FilterERC721V1.sol b/contracts/NFTPool/impl/FilterERC721V1.sol index d661f7c..66ae7d6 100644 --- a/contracts/NFTPool/impl/FilterERC721V1.sol +++ b/contracts/NFTPool/impl/FilterERC721V1.sol @@ -8,7 +8,6 @@ pragma solidity 0.6.9; pragma experimental ABIEncoderV2; -import {InitializableOwnable} from "../../lib/InitializableOwnable.sol"; import {SafeMath} from "../../lib/SafeMath.sol"; import {IFilterAdmin} from "../intf/IFilterAdmin.sol"; import {IControllerModel} from "../intf/IControllerModel.sol"; @@ -49,7 +48,7 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 { function queryNFTIn(uint256 NFTInAmount) public view returns (uint256 rawReceive, uint256 received) { require(NFTInAmount <= getAvaliableNFTIn(), "EXCEDD_IN_AMOUNT"); uint256 nftAmount = _NFT_IDS_.length; - rawReceive = geometricCalc(_GS_START_IN_, _CR_IN_, nftAmount, nftAmount + NFTInAmount); + rawReceive = _geometricCalc(_GS_START_IN_, _CR_IN_, nftAmount, nftAmount + NFTInAmount); (uint256 poolFee, uint256 mtFee) = IFilterAdmin(_OWNER_).queryChargeMintFee(rawReceive); received = rawReceive.sub(poolFee).sub(mtFee); } @@ -57,7 +56,7 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 { function queryNFTTargetOut(uint256 NFTOutAmount) public view returns (uint256 rawPay, uint256 pay) { require(NFTOutAmount <= getAvaliableNFTOut(), "EXCEED_OUT_AMOUNT"); uint256 nftAmount = _NFT_IDS_.length; - rawPay = geometricCalc(_GS_START_TARGET_OUT_,_CR_TARGET_OUT_, nftAmount - NFTOutAmount, nftAmount); + rawPay = _geometricCalc(_GS_START_TARGET_OUT_,_CR_TARGET_OUT_, nftAmount - NFTOutAmount, nftAmount); (uint256 poolFee, uint256 mtFee) = IFilterAdmin(_OWNER_).queryChargeBurnFee(rawPay); pay = rawPay.add(poolFee).add(mtFee); } @@ -65,7 +64,7 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 { function queryNFTRandomOut(uint256 NFTOutAmount) public view returns (uint256 rawPay, uint256 pay) { require(NFTOutAmount <= getAvaliableNFTOut(), "EXCEED_OUT_AMOUNT"); uint256 nftAmount = _NFT_IDS_.length; - rawPay = geometricCalc(_GS_START_RANDOM_OUT_,_CR_RANDOM_OUT_, nftAmount - NFTOutAmount, nftAmount); + rawPay = _geometricCalc(_GS_START_RANDOM_OUT_,_CR_RANDOM_OUT_, nftAmount - NFTOutAmount, nftAmount); (uint256 poolFee, uint256 mtFee) = IFilterAdmin(_OWNER_).queryChargeBurnFee(rawPay); pay = rawPay.add(poolFee).add(mtFee); } @@ -76,7 +75,7 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 { for (uint256 i = 0; i < tokenIds.length; i++) { uint256 tokenId = tokenIds[i]; require(isNFTIDValid(tokenId), "NFT_ID_NOT_SUPPORT"); - require(_NFT_RESERVE_[tokenId] == 0 && IERC721(_NFT_COLLECTION_).ownerOf(tokenId)==address(this), "NFT_NOT_SEND"); + require(_NFT_RESERVE_[tokenId] == 0 && IERC721(_NFT_COLLECTION_).ownerOf(tokenId) == address(this), "NFT_NOT_SEND"); _NFT_IDS_.push(tokenId); _NFT_RESERVE_[tokenId] = 1; } @@ -96,7 +95,7 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 { (uint256 rawPay, ) = queryNFTRandomOut(amount); paid = IFilterAdmin(_OWNER_).burnFragFrom(msg.sender, rawPay); for (uint256 i = 0; i < amount; i++) { - _transferOutERC721(to, getRandomOutId()); + _transferOutERC721(to, _getRandomOutId()); } } diff --git a/contracts/SmartRoute/DODONFTApprove.sol b/contracts/SmartRoute/DODONFTApprove.sol index b291e4a..999d87d 100644 --- a/contracts/SmartRoute/DODONFTApprove.sol +++ b/contracts/SmartRoute/DODONFTApprove.sol @@ -32,7 +32,7 @@ contract DODONFTApprove is InitializableOwnable { modifier notLocked() { require( _TIMELOCK_ <= block.timestamp, - "SetProxy is timelocked" + "AddProxy is timelocked" ); _; } @@ -43,7 +43,7 @@ contract DODONFTApprove is InitializableOwnable { _IS_ALLOWED_PROXY_[proxies[i]] = true; } - function unlockAddProxy(address newDodoProxy) public onlyOwner { + function unlockAddProxy(address newDodoProxy) external onlyOwner { _TIMELOCK_ = block.timestamp + _TIMELOCK_DURATION_; _PENDING_ADD_DODO_PROXY_ = newDodoProxy; } @@ -60,7 +60,7 @@ contract DODONFTApprove is InitializableOwnable { emit AddDODOProxy(_PENDING_ADD_DODO_PROXY_); } - function removeDODOProxy (address oldDodoProxy) public onlyOwner { + function removeDODOProxy (address oldDodoProxy) external onlyOwner { _IS_ALLOWED_PROXY_[oldDodoProxy] = false; }