As of 14 Oct 2026, Apeiron has 3 audit reports by 1 security firm on Trustblock; the latest is by CertiK, dated 4 Nov 2022. Those reports list no open critical findings.
Record last updated . It holds audits and findings, contracts and incidents up to Oct 2026. Statuses are the security firms’ own. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| Apeiron - Sanctuary Contract | Security firm: CertiK | Date: | Scope: Files named in the report | No open critical findings | Open · skynet.certik.com |
| ApeIron - Token Contract | Security firm: CertiK | Date: | Scope: Files named in the report | 2 open critical findings | Open · skynet.certik.com |
| ApeIron - Audit 3 | Security firm: CertiK | Date: | Scope: Files named in the report | No open critical findings | Open · skynet.certik.com |
Statuses are the security firm’s own, from each report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 6 | 0 |
| Medium | 0 | 0 | 2 |
| Low | 1 | 0 | 10 |
The blacklist feature is designed to prevent the blacklisted users from listing NFT/ERC1155 tokens by validating the following **require** statement. ```solidity require( !blacklist.blacklistedNFT(msg.sender, address(_nftAddress), _nftId), "Nft is blacklisted" ); ``` However, this feature can be bypassed by using the `transferFrom()` function defined in `ERC721.sol` and `ERC1155.sol`. The blacklisted user could transfer NFT/ERC1155 tokens to another account and use that account to list NFTs instead.
Open the reportIf a NFT/ERC1155 token is blacklisted *after* being listed, then an uninformed user can still successfully purchase the blacklisted token.
Open the reportThe return value of the transfer()/transferFrom() call is not checked. ```solidity=163 token.transferFrom(buyer, address(this), price); ``` --- ```solidity=231 IERC20(tokenAddress).transfer(wallet, amount); ``` --- ```solidity=256 aprsToken.transferFrom(userAddress, address(this), _aprsPrice); ``` --- ```solidity=259 animaToken.transferFrom( userAddress, address(this), _animaPrice ); ``` --- ```solidity=632 IERC20(tokenAddress).transfer(wallet, amount); ```
Open the reportBoolean constants can be used directly and do not need to be compared to `true` or `false`.
Open the reportThe constant `ANY_TOKEN_ID` is equal to the max `uint256` value. Throughout the contract, `ANY_TOKEN_ID` is used to represent blacklisting *ALL* IDs for an NFT/ERC1155 address for a specific user. However, if a user genuinely owns the ID equal to the max `uint256` value of an NFT/ERC1155 address and that ID is blacklisted by `Blacklist.sol`, then the function `blacklistedNFT()` would mistakenly blacklist all the users other token IDs from also being listed on `MarketPlace.sol` and `MarketPlace1155.sol`. Therefore, blacklisting the ID equal to the max `uint256` value would also incorrectly blacklist all the other IDs for a user.
Open the reportThere should always be events emitted in the sensitive functions that are controlled by centralization roles.
Open the reportIn the current implementation, `platformFeePercent` can be set as much as 2^256-1. This can lead to a revert in functions `buyAuctionItem()` and `buyItem()` if `platformFeePercent` is set to be greater than `10000` because the logic during the `sellerRecieve` calculation attempts to subtract `platformFeePercent` from `percentMaxValue` (A constant set to value `10000`). ```solidity function buyItem(...){ ... uint256 sellerReceive = (targetPrice * (percentMaxValue - platformFeePercent)) / percentMaxValue; ... } ``` This situation will automatically revert due to arithmetic underflow in Solidity Versions `^0.8.0`. As a consequence, a revert in the functions `buyAuctionItem()` and `buyItem()` will prevent users from purchasing any listed NFT/ERC1155 tokens.
Open the reportAddresses should be checked before assignment or external call to make sure they are not zero addresses. --- `_payoutWalletAddress` in contract `MarketPlace.sol` is not zero-checked before being used. ```solidity=200 payoutWalletAddress = _payoutWalletAddress; ``` --- `_payoutWalletAddress` in contract `MarketPlace1155.sol` is not zero-checked before being used. ```solidity=230 payoutWalletAddress = _payoutWalletAddress; ```
Open the reportThe return value of an external call is not stored in a local or state variable. In both linked locations the function `allowance()` is called, but its return value is never utilized. --- In contract `MarketPlace.sol`: ```solidity=214 token.allowance(msg.sender, address(this)); ``` --- In contract `MarketPlace1155.sol`: ```solidity=244 token.allowance(msg.sender, address(this)); ```
Open the reportThe linked statement compares a `uint256` variable to be less than or equal to 0. Since a unsigned integer cannot be less than 0, it is unnecessary to check if the variable is less than 0.
Open the reportThe return value of the `transfer()`/`transferFrom()` calls is not checked. --- In contract `MarketPlace.sol`: ```solidity=368 token.transferFrom(msg.sender, listedItem.seller, sellerReceive); ``` ```solidity=369 token.transferFrom( msg.sender, payoutWalletAddress, payoutWalletReceive ); ``` --- In contract `MarketPlace1155.sol`: ```solidity=373 token.transferFrom(msg.sender, listedItem.seller, sellerReceive); ``` ```solidity=374 token.transferFrom( msg.sender, payoutWalletAddress, payoutWalletReceive ); ```
Open the reportIn contract `MarketPlace1155.sol`, the functions `listItem()` and `buyItem()` does not check if the amount of ERC1155 tokens being listed/purchased is greater than 0. A user may accidentally attempt to purchase 0 ERC1155 token in exchange for a non-zero amount of ERC20 tokens.
Open the reportThe reports name a repository or files. Open a report to see its scope.
Is this your project? Show this record on your own website. The label states what the record holds, links to this page and updates by itself. It is free and needs no sign-in.
Automatic: the three strongest facts of this project’s own record (its last audit and two more), highlighted. They update with the record. Picking a fact turns Automatic off.
<head><script src="https://widget.trustblock.run/project-widget.min.js" defer></script></head><body><divdata-tb-project-widgetdata-tb-project-slug="apeiron"></div></body>
Paste the code where the label should appear. It uses no API credit and updates by itself.
Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.
Tell us