Your contract can receive Ether in buyOrder
; however, if someone sends Ether directly via a plain transfer (.transfer()
, .send()
, or sendTransaction
from outside), the contract will reject it since there is no receive()
or fallback()
function. This is mostly an operational/usability note rather than a direct security vulnerability.
Any direct or accidental transfer of Ether outside buyOrder
will revert.
If you want to allow direct deposits of Ether, implement a simple receive()
function that reverts or logs the deposit to prevent confusion.
Repeated onlyNftOwner(nftAddress, tokenId)
: In divideNft
, you have the same modifier repeated: onlyNftOwner(nftAddress, tokenId) onlyNftOwner(nftAddress, tokenId)
. This is likely a typo or redundant.
Use of _
in Constructors: Ownable(msg.sender)
in the constructor is valid, but ensure that it is not overshadowed if you use a newer version of OpenZeppelin’s Ownable.
Checks-Effects-Interactions: Throughout the contract, ensure all external calls (transfers, .call{value: ...}
, etc.) are placed after state modifications to reduce re-entrancy risk.
Zero Price Sell Orders: The code does not revert if price == 0
. Be sure that is intended. Otherwise, you can put a minimum floor or revert if price == 0
.
Documentation: Thoroughly document how fees are calculated and how fraction owners must approve
the contract prior to calling transferErcTokens
.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.