專案簡介
The target of this audit is the private code repository of AsyncVault Contracts of R25. The AsyncVault contracts are an upgradeable tokenized asset vault system of R25. AsyncVault follows an asynchronous redemption model, where deposits mint time-locked shares and redemptions proceed through a request-based flow that is settled after maturity, with withdrawal fulfillment handled through a separate queue component. Across this module, deposited assets are forwarded to a custodian address, withdrawals are funded by a separate payer account through the queue, and vault instances are created and tracked by the factory.
Please refer to the report for the detailed audit scope.
Our audit methodology employs automated vulnerability scans, manual verification, and business logic analysis to uncover potential security issues coupled with gas and code quality optimization recommendations.
In summary, we did not find any critical issues within the audited codebase. However, we have identified some non-critical issues that should be addressed. Additionally, we have put forth recommendations and notes that should be taken into consideration. It is important to note that the scope of our audit was strictly limited to the specific code versions mentioned in the report. Any updates made subsequent to our review would require a re-evaluation.
關鍵發現
我們在該智能合約中共發現 6 個潛在問題,另有 9 條建議與 9 條說明,明細如下:
| ID | Severity | Description | Status |
|---|---|---|---|
| 1 | Low | Potential gas griefing attacks | Confirmed |
| 2 | Low | Lack of check on assetsAfterFee in function batchRedeem() |
Confirmed |
| 3 | Low | Potential gas griefing in function batchAutoRenew() |
Confirmed |
| 4 | Low | Incorrect implementation of ERC-4626 maximum limit functions | Partially Fixed |
| 5 | Low | Incompatibility with the ERC-7540 standard | Partially Fixed |
| 6 | Low | Lack of check on maturityPeriod |
Fixed |
| 7 | - | Add an upper-bound check in setMaxFluctuationBps() |
Confirmed |
| 8 | - | Fix storage gap size | Confirmed |
| 9 | - | Add input validation in function createAsyncVault() |
Confirmed |
| 10 | - | Emit events before deleting request data | Fixed |
| 11 | - | Revise the incorrect parameters | Confirmed |
| 12 | - | Use different boundary conditions for cancellation and renewal | Confirmed |
| 13 | - | Revise incorrect annotations | Confirmed |
| 14 | - | Grant required WithdrawQueue roles during deployment |
Confirmed |
| 15 | - | Add a minimum check on redeemNoticePeriod |
Confirmed |
| 16 | - | Token assumption | - |
| 17 | - | Inconsistency among vault logic due to implementation updates | - |
| 18 | - | Deviations from the EIP-4626 standard | - |
| 19 | - | Centralized withdrawal mechanism | - |
| 20 | - | Ensure the correctness and timeliness of Oracle reports | - |
| 21 | - | Unused controller field |
- |
| 22 | - | Share token transfer restriction | - |
| 23 | - | Potential centralization risks | - |
| 24 | - | Off-chain NAV treatment of pending redemption shares | - |
更多細節見審計報告。