Pieces Protocol

First Flight #32
Beginner FriendlyFoundrySolidityNFT
100 EXP
View results
Submission Details
Severity: low
Invalid

Logical Issues

[L-1] TokenDivider:: divideNft

Summary: Logical Issues

The onlyNftOwner modifier is applied twice in the divideNft function

Vulnerability Details

This redundancy increases gas costs unnecessarily and creates confusion during code review.

Impact

Higher gas costs and potential misunderstanding to developer

Tools Used

Manual Code Review

Recommendations

Remove the duplicate onlyNftOwner modifier in the divideNft function

function divideNft(
address nftAddress,
uint256 tokenId,
uint256 amount
)
external
// @audit onlyNftOwner modifier is called twice, it should be called once
- onlyNftOwner(nftAddress, tokenId)
onlyNftOwner(nftAddress, tokenId)
{
if (nftAddress == address(0)) {
revert TokenDivider__NftAddressIsZero();
}
if (amount == 0) {
revert TokenDivider__AmountCantBeZero();
}
ERC20ToGenerateNftFraccion erc20Contract = new ERC20ToGenerateNftFraccion(
string(abi.encodePacked(ERC721(nftAddress).name(), "Fraccion")),
string(abi.encodePacked("F", ERC721(nftAddress).symbol()))
);
erc20Contract.mint(address(this), amount);
address erc20 = address(erc20Contract);
IERC721(nftAddress).safeTransferFrom(
msg.sender,
address(this),
tokenId,
""
);
if (IERC721(nftAddress).ownerOf(tokenId) == msg.sender) {
revert TokenDivider__NftTransferFailed();
}
balances[msg.sender][erc20] = amount;
nftToErc20Info[nftAddress] = ERC20Info({
erc20Address: erc20,
tokenId: tokenId
});
erc20ToMintedAmount[erc20] = amount;
erc20ToNft[erc20] = nftAddress;
emit NftDivided(nftAddress, amount, erc20);
bool transferSuccess = IERC20(erc20).transfer(msg.sender, amount);
if (!transferSuccess) {
revert TokenDivider__TransferFailed();
}
}
Updates

Lead Judging Commences

fishy Lead Judge 8 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.