From 15675bf5f274ce00ed43e69eacde28400ae1f441 Mon Sep 17 00:00:00 2001 From: owen05 Date: Mon, 27 Sep 2021 15:11:03 +0800 Subject: [PATCH] nftPool out fix --- contracts/NFTPool/impl/BaseFilterV1.sol | 2 +- contracts/NFTPool/impl/FilterERC1155V1.sol | 16 +++--- contracts/NFTPool/impl/FilterERC721V1.sol | 15 +++--- .../SmartRoute/proxies/DODONFTPoolProxy.sol | 54 ------------------- test/NFTPool/erc1155NftPool.test.ts | 12 ++--- test/NFTPool/erc721NftPool.test.ts | 12 ++--- truffle-test.sh | 2 +- 7 files changed, 33 insertions(+), 80 deletions(-) diff --git a/contracts/NFTPool/impl/BaseFilterV1.sol b/contracts/NFTPool/impl/BaseFilterV1.sol index a2385df..c003f11 100644 --- a/contracts/NFTPool/impl/BaseFilterV1.sol +++ b/contracts/NFTPool/impl/BaseFilterV1.sol @@ -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; diff --git a/contracts/NFTPool/impl/FilterERC1155V1.sol b/contracts/NFTPool/impl/FilterERC1155V1.sol index 13f974c..642026c 100644 --- a/contracts/NFTPool/impl/FilterERC1155V1.sol +++ b/contracts/NFTPool/impl/FilterERC1155V1.sol @@ -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 ============= diff --git a/contracts/NFTPool/impl/FilterERC721V1.sol b/contracts/NFTPool/impl/FilterERC721V1.sol index d08089a..894bc71 100644 --- a/contracts/NFTPool/impl/FilterERC721V1.sol +++ b/contracts/NFTPool/impl/FilterERC721V1.sol @@ -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 ============= diff --git a/contracts/SmartRoute/proxies/DODONFTPoolProxy.sol b/contracts/SmartRoute/proxies/DODONFTPoolProxy.sol index 9d822de..c19cbaf 100644 --- a/contracts/SmartRoute/proxies/DODONFTPoolProxy.sol +++ b/contracts/SmartRoute/proxies/DODONFTPoolProxy.sol @@ -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, diff --git a/test/NFTPool/erc1155NftPool.test.ts b/test/NFTPool/erc1155NftPool.test.ts index b0fb6ad..1320dc3 100644 --- a/test/NFTPool/erc1155NftPool.test.ts +++ b/test/NFTPool/erc1155NftPool.test.ts @@ -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(); diff --git a/test/NFTPool/erc721NftPool.test.ts b/test/NFTPool/erc721NftPool.test.ts index 74244e7..f5dbc32 100644 --- a/test/NFTPool/erc721NftPool.test.ts +++ b/test/NFTPool/erc721NftPool.test.ts @@ -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(); diff --git a/truffle-test.sh b/truffle-test.sh index 4df5dc4..ab848ec 100644 --- a/truffle-test.sh +++ b/truffle-test.sh @@ -1,5 +1,5 @@ #!/bin/bash -truffle compile --all +# truffle compile --all if [ "$1"x = "proxy-dpp"x ] then