fix
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user