nftPool out fix
This commit is contained in:
@@ -51,7 +51,7 @@ contract BaseFilterV1 is InitializableOwnable, ReentrancyGuard {
|
|||||||
// GS -> Geometric sequence
|
// GS -> Geometric sequence
|
||||||
// CR -> Common Ratio
|
// CR -> Common Ratio
|
||||||
|
|
||||||
//For Deposit NFT INto Pool
|
//For Deposit NFT IN to Pool
|
||||||
uint256 public _GS_START_IN_;
|
uint256 public _GS_START_IN_;
|
||||||
uint256 public _CR_IN_;
|
uint256 public _CR_IN_;
|
||||||
bool public _NFT_IN_TOGGLE_ = false;
|
bool public _NFT_IN_TOGGLE_ = false;
|
||||||
|
|||||||
@@ -81,7 +81,8 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 {
|
|||||||
function ERC1155TargetOut(
|
function ERC1155TargetOut(
|
||||||
uint256[] memory tokenIds,
|
uint256[] memory tokenIds,
|
||||||
uint256[] memory amounts,
|
uint256[] memory amounts,
|
||||||
address to
|
address to,
|
||||||
|
uint256 maxBurnAmount
|
||||||
) external preventReentrant returns (uint256 paid) {
|
) external preventReentrant returns (uint256 paid) {
|
||||||
require(tokenIds.length == amounts.length, "PARAM_INVALID");
|
require(tokenIds.length == amounts.length, "PARAM_INVALID");
|
||||||
uint256 avaliableNFTOutAmount = getAvaliableNFTOutAmount();
|
uint256 avaliableNFTOutAmount = getAvaliableNFTOutAmount();
|
||||||
@@ -95,18 +96,21 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 {
|
|||||||
}
|
}
|
||||||
require(totalAmount <= avaliableNFTOutAmount, "EXCEED_OUT_AMOUNT");
|
require(totalAmount <= avaliableNFTOutAmount, "EXCEED_OUT_AMOUNT");
|
||||||
(uint256 rawPay, ) = _queryNFTTargetOut(originTotalNftAmount - totalAmount, originTotalNftAmount);
|
(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
|
external
|
||||||
preventReentrant
|
preventReentrant
|
||||||
returns (uint256 paid)
|
returns (uint256 paid)
|
||||||
{
|
{
|
||||||
(uint256 rawPay, ) = queryNFTRandomOut(amount);
|
(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++) {
|
for (uint256 i = 0; i < amount; i++) {
|
||||||
uint256 randomNum = _getRandomNum() % _TOTAL_NFT_AMOUNT_;
|
uint256 randomNum = _getRandomNum() % _TOTAL_NFT_AMOUNT_;
|
||||||
uint256 sum;
|
uint256 sum;
|
||||||
@@ -121,7 +125,7 @@ contract FilterERC1155V1 is IERC1155Receiver, BaseFilterV1 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
emit RandomOutOrder(to, paid);
|
emit RandomOutOrder(msg.sender, paid);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============ Transfer =============
|
// ============ Transfer =============
|
||||||
|
|||||||
@@ -85,13 +85,15 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 {
|
|||||||
emit NftInOrder(to, received);
|
emit NftInOrder(to, received);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ERC721TargetOut(uint256[] memory tokenIds, address to)
|
function ERC721TargetOut(uint256[] memory tokenIds, address to, uint256 maxBurnAmount)
|
||||||
external
|
external
|
||||||
preventReentrant
|
preventReentrant
|
||||||
returns (uint256 paid)
|
returns (uint256 paid)
|
||||||
{
|
{
|
||||||
(uint256 rawPay, ) = queryNFTTargetOut(tokenIds.length);
|
(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++) {
|
for (uint256 i = 0; i < tokenIds.length; i++) {
|
||||||
_transferOutERC721(to, tokenIds[i]);
|
_transferOutERC721(to, tokenIds[i]);
|
||||||
|
|
||||||
@@ -99,16 +101,17 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 {
|
|||||||
}
|
}
|
||||||
_TOTAL_NFT_AMOUNT_ = _NFT_IDS_.length;
|
_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
|
external
|
||||||
preventReentrant
|
preventReentrant
|
||||||
returns (uint256 paid)
|
returns (uint256 paid)
|
||||||
{
|
{
|
||||||
(uint256 rawPay, ) = queryNFTRandomOut(amount);
|
(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++) {
|
for (uint256 i = 0; i < amount; i++) {
|
||||||
uint256 index = _getRandomNum() % _NFT_IDS_.length;
|
uint256 index = _getRandomNum() % _NFT_IDS_.length;
|
||||||
uint256 tokenId = _NFT_IDS_[index];
|
uint256 tokenId = _NFT_IDS_[index];
|
||||||
@@ -117,7 +120,7 @@ contract FilterERC721V1 is IERC721Receiver, BaseFilterV1 {
|
|||||||
}
|
}
|
||||||
_TOTAL_NFT_AMOUNT_ = _NFT_IDS_.length;
|
_TOTAL_NFT_AMOUNT_ = _NFT_IDS_.length;
|
||||||
|
|
||||||
emit RandomOutOrder(to, paid);
|
emit RandomOutOrder(msg.sender, paid);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============ Transfer =============
|
// ============ Transfer =============
|
||||||
|
|||||||
@@ -35,10 +35,6 @@ contract DODONFTPoolProxy is InitializableOwnable, ReentrancyGuard {
|
|||||||
event SetFilterTemplate(uint256 idx, address filterTemplate);
|
event SetFilterTemplate(uint256 idx, address filterTemplate);
|
||||||
event Erc721In(address filter, address to, uint256 received);
|
event Erc721In(address filter, address to, uint256 received);
|
||||||
event Erc1155In(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 CreateLiteNFTPool(address newFilterAdmin, address filterAdminOwner);
|
||||||
event CreateNFTPool(address newFilterAdmin, address filterAdminOwner, address filter);
|
event CreateNFTPool(address newFilterAdmin, address filterAdminOwner, address filter);
|
||||||
@@ -83,30 +79,6 @@ contract DODONFTPoolProxy is InitializableOwnable, ReentrancyGuard {
|
|||||||
emit Erc721In(filter, to, received);
|
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 ===================
|
// ================== ERC1155 In and Out ===================
|
||||||
function erc1155In(
|
function erc1155In(
|
||||||
address filter,
|
address filter,
|
||||||
@@ -126,32 +98,6 @@ contract DODONFTPoolProxy is InitializableOwnable, ReentrancyGuard {
|
|||||||
emit Erc1155In(filter, to, received);
|
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 ===================
|
// ================== Create NFTPool ===================
|
||||||
function createLiteNFTPool(
|
function createLiteNFTPool(
|
||||||
address filterAdminOwner,
|
address filterAdminOwner,
|
||||||
|
|||||||
@@ -149,14 +149,14 @@ describe("ERC1155-NFTPool", () => {
|
|||||||
assert.equal(beforeAmount, 2)
|
assert.equal(beforeAmount, 2)
|
||||||
|
|
||||||
//maker targetout
|
//maker targetout
|
||||||
var tx = await logGas(ctx.DODONFTPoolProxy.methods.erc1155TargetOut(
|
var tx = await logGas(filterInstance.methods.ERC1155TargetOut(
|
||||||
filter,
|
|
||||||
[0, 1, 3],
|
[0, 1, 3],
|
||||||
[2, 1, 1],
|
[2, 1, 1],
|
||||||
|
maker,
|
||||||
MAX_UINT256,
|
MAX_UINT256,
|
||||||
), ctx.sendParam(maker), "Erc1155TargetOut");
|
), ctx.sendParam(maker), "Erc1155TargetOut");
|
||||||
|
|
||||||
var paid = tx.events['Erc1155TargetOut'].returnValues['paid']
|
var paid = tx.events['TargetOutOrder'].returnValues['paidAmount']
|
||||||
assert.equal(paid, "3673527453990000000");
|
assert.equal(paid, "3673527453990000000");
|
||||||
|
|
||||||
var maxNftOutAmount = await filterInstance.methods.getAvaliableNFTOutAmount().call();
|
var maxNftOutAmount = await filterInstance.methods.getAvaliableNFTOutAmount().call();
|
||||||
@@ -176,13 +176,13 @@ describe("ERC1155-NFTPool", () => {
|
|||||||
var filterInstance = contracts.getContractWithAddress(contracts.FILTER_ERC1155_V1, filter);
|
var filterInstance = contracts.getContractWithAddress(contracts.FILTER_ERC1155_V1, filter);
|
||||||
|
|
||||||
//maker randomOut
|
//maker randomOut
|
||||||
var tx = await logGas(ctx.DODONFTPoolProxy.methods.erc1155RandomOut(
|
var tx = await logGas(filterInstance.methods.ERC1155RandomOut(
|
||||||
filter,
|
|
||||||
3,
|
3,
|
||||||
|
maker,
|
||||||
MAX_UINT256,
|
MAX_UINT256,
|
||||||
), ctx.sendParam(maker), "Erc1155RandomOut");
|
), ctx.sendParam(maker), "Erc1155RandomOut");
|
||||||
|
|
||||||
var paid = tx.events['Erc1155RandomOut'].returnValues['paid']
|
var paid = tx.events['RandomOutOrder'].returnValues['paidAmount']
|
||||||
assert.equal(paid, "1302665521995000000");
|
assert.equal(paid, "1302665521995000000");
|
||||||
|
|
||||||
var maxNftOutAmount = await filterInstance.methods.getAvaliableNFTOutAmount().call();
|
var maxNftOutAmount = await filterInstance.methods.getAvaliableNFTOutAmount().call();
|
||||||
|
|||||||
@@ -164,13 +164,13 @@ describe("ERC721-NFTPool", () => {
|
|||||||
assert.equal(beforeOwner, filter)
|
assert.equal(beforeOwner, filter)
|
||||||
|
|
||||||
//maker targetout
|
//maker targetout
|
||||||
var tx = await logGas(ctx.DODONFTPoolProxy.methods.erc721TargetOut(
|
var tx = await logGas(filterInstance.methods.ERC721TargetOut(
|
||||||
filter,
|
|
||||||
[0, 1, 3],
|
[0, 1, 3],
|
||||||
|
maker,
|
||||||
MAX_UINT256,
|
MAX_UINT256,
|
||||||
), ctx.sendParam(maker), "Erc721TargetOut");
|
), ctx.sendParam(maker), "Erc721TargetOut");
|
||||||
|
|
||||||
var paid = tx.events['Erc721TargetOut'].returnValues['paid']
|
var paid = tx.events['TargetOutOrder'].returnValues['paidAmount']
|
||||||
|
|
||||||
assert.equal(paid, "4412151000000000000");
|
assert.equal(paid, "4412151000000000000");
|
||||||
|
|
||||||
@@ -193,13 +193,13 @@ describe("ERC721-NFTPool", () => {
|
|||||||
var filterInstance = contracts.getContractWithAddress(contracts.FILTER_ERC721_V1, filter);
|
var filterInstance = contracts.getContractWithAddress(contracts.FILTER_ERC721_V1, filter);
|
||||||
|
|
||||||
//maker randomOut
|
//maker randomOut
|
||||||
var tx = await logGas(ctx.DODONFTPoolProxy.methods.erc721RandomOut(
|
var tx = await logGas(filterInstance.methods.ERC721RandomOut(
|
||||||
filter,
|
|
||||||
3,
|
3,
|
||||||
|
maker,
|
||||||
MAX_UINT256,
|
MAX_UINT256,
|
||||||
), ctx.sendParam(maker), "Erc721RandomOut");
|
), ctx.sendParam(maker), "Erc721RandomOut");
|
||||||
|
|
||||||
var paid = tx.events['Erc721RandomOut'].returnValues['paid']
|
var paid = tx.events['RandomOutOrder'].returnValues['paidAmount']
|
||||||
assert.equal(paid, "2206075500000000000");
|
assert.equal(paid, "2206075500000000000");
|
||||||
|
|
||||||
var maxNftOutAmount = await filterInstance.methods.getAvaliableNFTOutAmount().call();
|
var maxNftOutAmount = await filterInstance.methods.getAvaliableNFTOutAmount().call();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
truffle compile --all
|
# truffle compile --all
|
||||||
|
|
||||||
if [ "$1"x = "proxy-dpp"x ]
|
if [ "$1"x = "proxy-dpp"x ]
|
||||||
then
|
then
|
||||||
|
|||||||
Reference in New Issue
Block a user