As of 23 Oct 2026, Byte Masons - Reliquary has 2 audit reports by 1 security firm on Trustblock; the latest is by CertiK, dated 20 Nov 2022. Those reports list no open critical findings.
Record last updated . It holds audits and findings, contracts and incidents up to Oct 2026. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| Granary v1 | Security firm: CertiK | Date: | Scope: Files named in the report | No open critical findings | Open · skynet.certik.com |
| Bytemasons - Multistrategy Vault | 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 | 2 | 2 | 0 |
| Medium | 0 | 3 | 0 |
| Low | 26 | 0 | 9 |
The permission management system is based on a hierarchical permission set. This set is checked on each required function using a function call to `_atLeastRole()`. However, we found multiple implementations of this function with the same code. #### Contract: `ReaperBaseStrategyV4.sol` ```solidity=195 function _atLeastRole(bytes32 role) internal view { ... } ``` #### Contract: `ReaperVaultV2.sol` ```solidity=658 function _atLeastRole(bytes32 role) internal view { ... } ```
Open the reportThe comment states `This may only be called by governance or the strategist.`, however, the function `setEmergencyExit()` only allows `GUARDIAN` and roles with the higher privilege to call it. The `strategist` won't be able to activate the emergency exit.
Open the reportThe function `withdraw()` and the function `_withdraw()` have the parameters in different orders which may lead to unwanted withdraw operations. The previous functions are defined as: ```solidity=202 function withdraw( uint256 assets, address receiver, address owner ) ``` ```solidity=356 function _withdraw( uint256 _shares, address _owner, address _receiver ) ```
Open the reportThe **require** can be used to check for conditions and throw an exception if the condition is not met. It is better to provide a string message containing details about the error that will be passed back to the caller.
Open the reportDuring contract initialization call to `__ReaperBaseStrategy_init()` the following **multisig** account are given some permissions: ```solidity=75 _grantRole(DEFAULT_ADMIN_ROLE, _multisigRoles[0]); _grantRole(ADMIN, _multisigRoles[1]); _grantRole(GUARDIAN, _multisigRoles[2]); ``` However, the call to `__ReaperBaseStrategy_init()` may be reverted if the length of `_multisigRoles` is less than 3.
Open the reportDuring the contract upgrade process, a function call is done to `clearUpgradeCooldown()` to flag the current upgrade process as finished. This function will set a future upgrade proposal time as follows: ```solidity=174 upgradeProposalTime = block.timestamp + (ONE_YEAR * 100); ``` In this way, the developers make sure that the next upgrade proposal time is set for the next 100 years in the future. However, this could be improved using a constant factor.
Open the reportThe auditing team would like to confirm with the team that the logic operations made over `availableCapital()` and `_liquidateAllPositions()` are correctly designed including edge cases in which: * `availableCapital()` returns zero; * `availableCapital()` returns negative values, and hence calling `_harvestCore(-availableCapital)` when no emergency exit is set; * On emergency exit set, verify that `amountFreed < debt`and `amountFreed > debt` work as expected when `debt` might be zero; * On emergency exit set, verify that when `amountFreed == debt` the `roi` value becomes zero and the `repayment` is set to `debt` for reporting.
Open the reportThe value `2**256 - 1` defined in function `maxDeposit()` can be declared as constant.
Open the reportThe linked variables assigned in the constructor can be declared as `immutable`. Immutable state variables can be assigned during contract creation but will remain constant throughout the lifetime of a deployed contract. A big advantage of immutable variables is that reading them is significantly cheaper than reading from regular state variables since they will not be stored in storage.
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="byte-masons-reliquary"></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