fix
This commit is contained in:
@@ -99,57 +99,54 @@ contract BaseFilterV1 is InitializableOwnable, ReentrancyGuard {
|
||||
public
|
||||
view
|
||||
returns (
|
||||
uint256 received,
|
||||
uint256 poolFee,
|
||||
uint256 mtFee
|
||||
uint256 rawReceive,
|
||||
uint256 received
|
||||
)
|
||||
{
|
||||
require(NFTInAmount <= getAvaliableNFTIn(), "EXCEDD_IN_AMOUNT");
|
||||
require(NFTInAmount <= getAvaliableNFTInAmount(), "EXCEDD_IN_AMOUNT");
|
||||
rawReceive = _geometricCalc(
|
||||
_GS_START_IN_,
|
||||
_CR_IN_,
|
||||
_TOTAL_NFT_AMOUNT_,
|
||||
_TOTAL_NFT_AMOUNT_ + NFTInAmount
|
||||
);
|
||||
(poolFee, mtFee, received) = IFilterAdmin(_OWNER_).queryChargeMintFee(rawReceive);
|
||||
(,, received) = IFilterAdmin(_OWNER_).queryMintFee(rawReceive);
|
||||
}
|
||||
|
||||
function queryNFTTargetOut(uint256 NFTOutAmount)
|
||||
public
|
||||
view
|
||||
returns (
|
||||
uint256 paid,
|
||||
uint256 poolFee,
|
||||
uint256 mtFee
|
||||
uint256 rawPay,
|
||||
uint256 pay
|
||||
)
|
||||
{
|
||||
require(NFTOutAmount <= getAvaliableNFTOut(), "EXCEED_OUT_AMOUNT");
|
||||
require(NFTOutAmount <= getAvaliableNFTOutAmount(), "EXCEED_OUT_AMOUNT");
|
||||
rawPay = _geometricCalc(
|
||||
_GS_START_TARGET_OUT_,
|
||||
_CR_TARGET_OUT_,
|
||||
_TOTAL_NFT_AMOUNT_ - NFTOutAmount,
|
||||
_TOTAL_NFT_AMOUNT_
|
||||
);
|
||||
(poolFee, mtFee, paid) = IFilterAdmin(_OWNER_).queryChargeBurnFee(rawPay);
|
||||
(,, pay) = IFilterAdmin(_OWNER_).queryBurnFee(rawPay);
|
||||
}
|
||||
|
||||
function queryNFTRandomOut(uint256 NFTOutAmount)
|
||||
public
|
||||
view
|
||||
returns (
|
||||
uint256 paid,
|
||||
uint256 poolFee,
|
||||
uint256 mtFee
|
||||
uint256 rawPay,
|
||||
uint256 pay
|
||||
)
|
||||
{
|
||||
require(NFTOutAmount <= getAvaliableNFTOut(), "EXCEED_OUT_AMOUNT");
|
||||
require(NFTOutAmount <= getAvaliableNFTOutAmount(), "EXCEED_OUT_AMOUNT");
|
||||
rawPay = _geometricCalc(
|
||||
_GS_START_RANDOM_OUT_,
|
||||
_CR_RANDOM_OUT_,
|
||||
_TOTAL_NFT_AMOUNT_ - NFTOutAmount,
|
||||
_TOTAL_NFT_AMOUNT_
|
||||
);
|
||||
(poolFee, mtFee, paid) = IFilterAdmin(_OWNER_).queryChargeBurnFee(rawPay);
|
||||
(,, pay) = IFilterAdmin(_OWNER_).queryBurnFee(rawPay);
|
||||
}
|
||||
|
||||
// ============ Math =============
|
||||
@@ -161,7 +158,7 @@ contract BaseFilterV1 is InitializableOwnable, ReentrancyGuard {
|
||||
uint256 end
|
||||
) internal view returns (uint256) {
|
||||
if (q == DecimalMath.ONE) {
|
||||
return end.sub(start).ml(a1);
|
||||
return end.sub(start).mul(a1);
|
||||
}
|
||||
//Sn=a1*(q^n-1)/(q-1)
|
||||
//Sn-Sm = a1*(q^n-q^m)/(q-1)
|
||||
|
||||
@@ -60,20 +60,20 @@ contract Controller is InitializableOwnable {
|
||||
function getMintFeeRate(address filterAdminAddr) external view returns (uint256) {
|
||||
FilterAdminFeeRateInfo memory filterAdminFeeRateInfo = filterAdminFeeRates[filterAdminAddr];
|
||||
|
||||
if (filterAdminFeeRateInfo.isSet) {
|
||||
if (filterAdminFeeRateInfo.isOpen) {
|
||||
return filterAdminFeeRateInfo.nftInFeeRate;
|
||||
} else {
|
||||
return _GLOBAL_NFT_IN_FEERate_;
|
||||
return _GLOBAL_NFT_IN_FEE_RATE_;
|
||||
}
|
||||
}
|
||||
|
||||
function getBurnFeeRate(address filterAdminAddr) external view returns (uint256) {
|
||||
FilterAdminFeeInfo memory filterAdminFeeInfo = filterAdminFees[filterAdminAddr];
|
||||
FilterAdminFeeRateInfo memory filterAdminFeeInfo = filterAdminFeeRates[filterAdminAddr];
|
||||
|
||||
if (filterAdminFeeInfo.isSet) {
|
||||
return filterAdminFeeInfo.nftOutFee;
|
||||
if (filterAdminFeeInfo.isOpen) {
|
||||
return filterAdminFeeInfo.nftOutFeeRate;
|
||||
} else {
|
||||
return _GLOBAL_NFT_OUT_FEE_;
|
||||
return _GLOBAL_NFT_OUT_FEE_RATE_;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ contract FilterAdmin is InitializableInternalMintableERC20 {
|
||||
if (mtFee > 0) _mint(_MAINTAINER_, mtFee);
|
||||
|
||||
_mint(to, received);
|
||||
return received
|
||||
return received;
|
||||
}
|
||||
|
||||
function burnFragFrom(address from, uint256 rawAmount) external returns (uint256) {
|
||||
@@ -79,7 +79,7 @@ contract FilterAdmin is InitializableInternalMintableERC20 {
|
||||
uint256 afterChargedAmount
|
||||
)
|
||||
{
|
||||
uint256 mtFeeRate = IController(_CONTROLLER_).getMintFee(address(this));
|
||||
uint256 mtFeeRate = IController(_CONTROLLER_).getMintFeeRate(address(this));
|
||||
poolFee = DecimalMath.mulFloor(rawAmount, _FEE_RATE_);
|
||||
mtFee = DecimalMath.mulFloor(rawAmount, mtFeeRate);
|
||||
afterChargedAmount = rawAmount.sub(poolFee).sub(mtFee);
|
||||
@@ -93,14 +93,14 @@ contract FilterAdmin is InitializableInternalMintableERC20 {
|
||||
uint256 afterChargedAmount
|
||||
)
|
||||
{
|
||||
uint256 mtFeeRate = IController(_CONTROLLER_).getBurnFee(address(this));
|
||||
uint256 mtFeeRate = IController(_CONTROLLER_).getBurnFeeRate(address(this));
|
||||
poolFee = DecimalMath.mulFloor(rawAmount, _FEE_RATE_);
|
||||
mtFee = DecimalMath.mulFloor(rawAmount, mtFeeRate);
|
||||
afterChargedAmount = rawAmount.add(poolFee).add(mtFee);
|
||||
}
|
||||
|
||||
function isRegisteredFilter(address filter) public view returns (bool) {
|
||||
return _FILTER_REGISTRY_[i];
|
||||
return _FILTER_REGISTRY_[filter];
|
||||
}
|
||||
|
||||
function getFilters() public view returns (address[] memory) {
|
||||
|
||||
@@ -8,7 +8,7 @@ pragma experimental ABIEncoderV2;
|
||||
|
||||
import {SafeMath} from "../../lib/SafeMath.sol";
|
||||
import {IFilterAdmin} from "../intf/IFilterAdmin.sol";
|
||||
import {IControllerModel} from "../intf/IControllerModel.sol";
|
||||
import {IController} from "../intf/IController.sol";
|
||||
import {IERC1155} from "../../intf/IERC1155.sol";
|
||||
import {IERC1155Receiver} from "../../intf/IERC1155Receiver.sol";
|
||||
import {DecimalMath} from "../../lib/DecimalMath.sol";
|
||||
@@ -32,7 +32,7 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 {
|
||||
_changeNFTRandomInPrice(priceRules[2], priceRules[3], toggles[1]);
|
||||
_changeNFTTargetOutPrice(priceRules[4], priceRules[5], toggles[2]);
|
||||
|
||||
_changeNFTAmount(numParams[2], numParams[3]);
|
||||
_changeNFTAmountRange(numParams[2], numParams[3]);
|
||||
|
||||
_changeTokenIdRange(numParams[0], numParams[1]);
|
||||
for (uint256 i = 0; i < spreadIds.length; i++) {
|
||||
@@ -79,12 +79,12 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 {
|
||||
(uint256 rawPay, ) = queryNFTRandomOut(amount);
|
||||
paid = IFilterAdmin(_OWNER_).burnFragFrom(msg.sender, rawPay);
|
||||
for (uint256 i = 0; i < amount; i++) {
|
||||
uint256 randomNum = _getRandomOutId() % _TOTAL_NFT_AMOUNT_;
|
||||
uint256 randomNum = _getRandomNum() % _TOTAL_NFT_AMOUNT_;
|
||||
uint256 sum;
|
||||
for (uint256 j = 0; j < _NFT_IDS_.length; j++) {
|
||||
sum += _NFT_RESERVE_[_NFT_IDS_[j]];
|
||||
if (sum >= randomNum) {
|
||||
_transferOutERC1155(to, _NFT_IDS_[j], 1);
|
||||
_transferOutERC1155(to, j, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ pragma experimental ABIEncoderV2;
|
||||
|
||||
import {SafeMath} from "../../lib/SafeMath.sol";
|
||||
import {IFilterAdmin} from "../intf/IFilterAdmin.sol";
|
||||
import {IControllerModel} from "../intf/IControllerModel.sol";
|
||||
import {IController} from "../intf/IController.sol";
|
||||
import {IERC721} from "../../intf/IERC721.sol";
|
||||
import {IERC721Receiver} from "../../intf/IERC721Receiver.sol";
|
||||
import {DecimalMath} from "../../lib/DecimalMath.sol";
|
||||
@@ -35,7 +35,7 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 {
|
||||
_changeNFTRandomInPrice(priceRules[2], priceRules[3], toggles[1]);
|
||||
_changeNFTTargetOutPrice(priceRules[4], priceRules[5], toggles[2]);
|
||||
|
||||
_changeNFTAmount(numParams[2], numParams[3]);
|
||||
_changeNFTAmountRange(numParams[2], numParams[3]);
|
||||
|
||||
_changeTokenIdRange(numParams[0], numParams[1]);
|
||||
for (uint256 i = 0; i < spreadIds.length; i++) {
|
||||
|
||||
Reference in New Issue
Block a user