nftPool out fix
This commit is contained in:
@@ -51,7 +51,7 @@ contract BaseFilterV1 is InitializableOwnable, ReentrancyGuard {
|
||||
// GS -> Geometric sequence
|
||||
// CR -> Common Ratio
|
||||
|
||||
//For Deposit NFT INto Pool
|
||||
//For Deposit NFT IN to Pool
|
||||
uint256 public _GS_START_IN_;
|
||||
uint256 public _CR_IN_;
|
||||
bool public _NFT_IN_TOGGLE_ = false;
|
||||
|
||||
@@ -81,7 +81,8 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 {
|
||||
function ERC1155TargetOut(
|
||||
uint256[] memory tokenIds,
|
||||
uint256[] memory amounts,
|
||||
address to
|
||||
address to,
|
||||
uint256 maxBurnAmount
|
||||
) external preventReentrant returns (uint256 paid) {
|
||||
require(tokenIds.length == amounts.length, "PARAM_INVALID");
|
||||
uint256 avaliableNFTOutAmount = getAvaliableNFTOutAmount();
|
||||
@@ -95,18 +96,21 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 {
|
||||
}
|
||||
require(totalAmount <= avaliableNFTOutAmount, "EXCEED_OUT_AMOUNT");
|
||||
(uint256 rawPay, ) = _queryNFTTargetOut(originTotalNftAmount - totalAmount, originTotalNftAmount);
|
||||
paid = IFilterAdmin(_OWNER_).burnFragFrom(to, rawPay);
|
||||
paid = IFilterAdmin(_OWNER_).burnFragFrom(msg.sender, rawPay);
|
||||
require(paid <= maxBurnAmount, "BURN_AMOUNT_EXCEED");
|
||||
|
||||
emit TargetOutOrder(to, paid);
|
||||
emit TargetOutOrder(msg.sender, paid);
|
||||
}
|
||||
|
||||
function ERC1155RandomOut(uint256 amount, address to)
|
||||
function ERC1155RandomOut(uint256 amount, address to, uint256 maxBurnAmount)
|
||||
external
|
||||
preventReentrant
|
||||
returns (uint256 paid)
|
||||
{
|
||||
(uint256 rawPay, ) = queryNFTRandomOut(amount);
|
||||
paid = IFilterAdmin(_OWNER_).burnFragFrom(to, rawPay);
|
||||
paid = IFilterAdmin(_OWNER_).burnFragFrom(msg.sender, rawPay);
|
||||
require(paid <= maxBurnAmount, "BURN_AMOUNT_EXCEED");
|
||||
|
||||
for (uint256 i = 0; i < amount; i++) {
|
||||
uint256 randomNum = _getRandomNum() % _TOTAL_NFT_AMOUNT_;
|
||||
uint256 sum;
|
||||
@@ -121,7 +125,7 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 {
|
||||
}
|
||||
}
|
||||
|
||||
emit RandomOutOrder(to, paid);
|
||||
emit RandomOutOrder(msg.sender, paid);
|
||||
}
|
||||
|
||||
// ============ Transfer =============
|
||||
|
||||
@@ -85,13 +85,15 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 {
|
||||
emit NftInOrder(to, received);
|
||||
}
|
||||
|
||||
function ERC721TargetOut(uint256[] memory tokenIds, address to)
|
||||
function ERC721TargetOut(uint256[] memory tokenIds, address to, uint256 maxBurnAmount)
|
||||
external
|
||||
preventReentrant
|
||||
returns (uint256 paid)
|
||||
{
|
||||
(uint256 rawPay, ) = queryNFTTargetOut(tokenIds.length);
|
||||
paid = IFilterAdmin(_OWNER_).burnFragFrom(to, rawPay);
|
||||
paid = IFilterAdmin(_OWNER_).burnFragFrom(msg.sender, rawPay);
|
||||
require(paid <= maxBurnAmount, "BURN_AMOUNT_EXCEED");
|
||||
|
||||
for (uint256 i = 0; i < tokenIds.length; i++) {
|
||||
_transferOutERC721(to, tokenIds[i]);
|
||||
|
||||
@@ -99,16 +101,17 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 {
|
||||
}
|
||||
_TOTAL_NFT_AMOUNT_ = _NFT_IDS_.length;
|
||||
|
||||
emit TargetOutOrder(to, paid);
|
||||
emit TargetOutOrder(msg.sender, paid);
|
||||
}
|
||||
|
||||
function ERC721RandomOut(uint256 amount, address to)
|
||||
function ERC721RandomOut(uint256 amount, address to, uint256 maxBurnAmount)
|
||||
external
|
||||
preventReentrant
|
||||
returns (uint256 paid)
|
||||
{
|
||||
(uint256 rawPay, ) = queryNFTRandomOut(amount);
|
||||
paid = IFilterAdmin(_OWNER_).burnFragFrom(to, rawPay);
|
||||
paid = IFilterAdmin(_OWNER_).burnFragFrom(msg.sender, rawPay);
|
||||
require(paid <= maxBurnAmount, "BURN_AMOUNT_EXCEED");
|
||||
for (uint256 i = 0; i < amount; i++) {
|
||||
uint256 index = _getRandomNum() % _NFT_IDS_.length;
|
||||
uint256 tokenId = _NFT_IDS_[index];
|
||||
@@ -117,7 +120,7 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 {
|
||||
}
|
||||
_TOTAL_NFT_AMOUNT_ = _NFT_IDS_.length;
|
||||
|
||||
emit RandomOutOrder(to, paid);
|
||||
emit RandomOutOrder(msg.sender, paid);
|
||||
}
|
||||
|
||||
// ============ Transfer =============
|
||||
|
||||
@@ -35,10 +35,6 @@ contract DODONFTPoolProxy is InitializableOwnable, ReentrancyGuard {
|
||||
event SetFilterTemplate(uint256 idx, address filterTemplate);
|
||||
event Erc721In(address filter, address to, uint256 received);
|
||||
event Erc1155In(address filter, address to, uint256 received);
|
||||
event Erc721TargetOut(address filter, address to, uint256 paid);
|
||||
event Erc1155TargetOut(address filter, address to, uint256 paid);
|
||||
event Erc721RandomOut(address filter, address to, uint256 paid);
|
||||
event Erc1155RandomOut(address filter, address to, uint256 paid);
|
||||
|
||||
event CreateLiteNFTPool(address newFilterAdmin, address filterAdminOwner);
|
||||
event CreateNFTPool(address newFilterAdmin, address filterAdminOwner, address filter);
|
||||
@@ -83,30 +79,6 @@ contract DODONFTPoolProxy is InitializableOwnable, ReentrancyGuard {
|
||||
emit Erc721In(filter, to, received);
|
||||
}
|
||||
|
||||
function erc721TargetOut(
|
||||
address filter,
|
||||
uint256[] memory tokenIds,
|
||||
// address to,
|
||||
uint256 maxBurnAmount
|
||||
) external {
|
||||
uint256 paid = IFilter(filter).ERC721TargetOut(tokenIds, msg.sender);
|
||||
require(paid <= maxBurnAmount, "BURN_AMOUNT_EXCEED");
|
||||
|
||||
emit Erc721TargetOut(filter, msg.sender, paid);
|
||||
}
|
||||
|
||||
function erc721RandomOut(
|
||||
address filter,
|
||||
uint256 amount,
|
||||
// address to,
|
||||
uint256 maxBurnAmount
|
||||
) external {
|
||||
uint256 paid = IFilter(filter).ERC721RandomOut(amount, msg.sender);
|
||||
require(paid <= maxBurnAmount, "BURN_AMOUNT_EXCEED");
|
||||
|
||||
emit Erc721RandomOut(filter, msg.sender, paid);
|
||||
}
|
||||
|
||||
// ================== ERC1155 In and Out ===================
|
||||
function erc1155In(
|
||||
address filter,
|
||||
@@ -126,32 +98,6 @@ contract DODONFTPoolProxy is InitializableOwnable, ReentrancyGuard {
|
||||
emit Erc1155In(filter, to, received);
|
||||
}
|
||||
|
||||
function erc1155TargetOut(
|
||||
address filter,
|
||||
uint256[] memory tokenIds,
|
||||
uint256[] memory amounts,
|
||||
// address to,
|
||||
uint256 maxBurnAmount
|
||||
) external {
|
||||
uint256 paid = IFilter(filter).ERC1155TargetOut(tokenIds, amounts, msg.sender);
|
||||
require(paid <= maxBurnAmount, "BURN_AMOUNT_EXCEED");
|
||||
|
||||
emit Erc1155TargetOut(filter, msg.sender, paid);
|
||||
}
|
||||
|
||||
function erc1155RandomOut(
|
||||
address filter,
|
||||
uint256 amount,
|
||||
// address to,
|
||||
uint256 maxBurnAmount
|
||||
) external {
|
||||
uint256 paid = IFilter(filter).ERC1155RandomOut(amount, msg.sender);
|
||||
require(paid <= maxBurnAmount, "BURN_AMOUNT_EXCEED");
|
||||
|
||||
emit Erc1155RandomOut(filter, msg.sender, paid);
|
||||
}
|
||||
|
||||
|
||||
// ================== Create NFTPool ===================
|
||||
function createLiteNFTPool(
|
||||
address filterAdminOwner,
|
||||
|
||||
Reference in New Issue
Block a user