nftPool out fix

This commit is contained in:
owen05
2021-09-27 15:11:03 +08:00
parent 5af15a4eff
commit 15675bf5f2
7 changed files with 33 additions and 80 deletions

View File

@@ -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;

View File

@@ -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 =============

View File

@@ -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 =============

View File

@@ -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,

View File

@@ -149,14 +149,14 @@ describe("ERC1155-NFTPool", () => {
assert.equal(beforeAmount, 2)
//maker targetout
var tx = await logGas(ctx.DODONFTPoolProxy.methods.erc1155TargetOut(
filter,
var tx = await logGas(filterInstance.methods.ERC1155TargetOut(
[0, 1, 3],
[2, 1, 1],
maker,
MAX_UINT256,
), ctx.sendParam(maker), "Erc1155TargetOut");
var paid = tx.events['Erc1155TargetOut'].returnValues['paid']
var paid = tx.events['TargetOutOrder'].returnValues['paidAmount']
assert.equal(paid, "3673527453990000000");
var maxNftOutAmount = await filterInstance.methods.getAvaliableNFTOutAmount().call();
@@ -176,13 +176,13 @@ describe("ERC1155-NFTPool", () => {
var filterInstance = contracts.getContractWithAddress(contracts.FILTER_ERC1155_V1, filter);
//maker randomOut
var tx = await logGas(ctx.DODONFTPoolProxy.methods.erc1155RandomOut(
filter,
var tx = await logGas(filterInstance.methods.ERC1155RandomOut(
3,
maker,
MAX_UINT256,
), ctx.sendParam(maker), "Erc1155RandomOut");
var paid = tx.events['Erc1155RandomOut'].returnValues['paid']
var paid = tx.events['RandomOutOrder'].returnValues['paidAmount']
assert.equal(paid, "1302665521995000000");
var maxNftOutAmount = await filterInstance.methods.getAvaliableNFTOutAmount().call();

View File

@@ -164,13 +164,13 @@ describe("ERC721-NFTPool", () => {
assert.equal(beforeOwner, filter)
//maker targetout
var tx = await logGas(ctx.DODONFTPoolProxy.methods.erc721TargetOut(
filter,
var tx = await logGas(filterInstance.methods.ERC721TargetOut(
[0, 1, 3],
maker,
MAX_UINT256,
), ctx.sendParam(maker), "Erc721TargetOut");
var paid = tx.events['Erc721TargetOut'].returnValues['paid']
var paid = tx.events['TargetOutOrder'].returnValues['paidAmount']
assert.equal(paid, "4412151000000000000");
@@ -193,13 +193,13 @@ describe("ERC721-NFTPool", () => {
var filterInstance = contracts.getContractWithAddress(contracts.FILTER_ERC721_V1, filter);
//maker randomOut
var tx = await logGas(ctx.DODONFTPoolProxy.methods.erc721RandomOut(
filter,
var tx = await logGas(filterInstance.methods.ERC721RandomOut(
3,
maker,
MAX_UINT256,
), ctx.sendParam(maker), "Erc721RandomOut");
var paid = tx.events['Erc721RandomOut'].returnValues['paid']
var paid = tx.events['RandomOutOrder'].returnValues['paidAmount']
assert.equal(paid, "2206075500000000000");
var maxNftOutAmount = await filterInstance.methods.getAvaliableNFTOutAmount().call();

View File

@@ -1,5 +1,5 @@
#!/bin/bash
truffle compile --all
# truffle compile --all
if [ "$1"x = "proxy-dpp"x ]
then