Quantstamp reviewed Volatility Technologies Ltd on 22 Nov 2023: 13 findings, 0 critical; 7 marked fixed, 6 open.
Report hosted on certificate.quantstamp.com.
Trustblock does not review code.
Statuses are the security firm’s own, from its report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 0 | 0 |
| Medium | 0 | 0 | 0 |
| Low | 6 | 0 | 7 |
In `_depositToPoolA()` and `_depositToPoolB()`, `size` is added to the total deposits mapping, but the actual amount of token transferred to the contract may be less than `size` if the token supports fee-on-transfer or is a rebasing token.
The following functions take arrays as their arguments but do not validate their lengths, allowing an empty array passed to them to cause the function to emit an event without carrying out the function's intended logic: - `PriceFeed.store()` - `PriceFeed.setInvalid()` - `MultiLot.invite()`
The function `store()` doesn't check that `_tokenIds` doesn't contain duplicate strings. This may result in erroneously emitting an event with two prices for the same token string. While this might not be a security concern, other projects might encounter issues if they depend on the events emitted.
It is important to validate inputs, even if they only come from trusted addresses, to avoid human error. Specifically, in the following functions arguments of type `address` may be initialized with value `0x0`: 1. `MultiLot.constructor()`: needs to check that the address of `_priceFeed`, `_trustedForwarded` and each of the collateral tokens is not `address(0)`. 2. `MultiLot.setPriceFeed()`: needs to check that the address of `_priceFeed` is not `address(0)`. 3. `MultiLot.createLot()`: needs to validate that the duration is not too high. Consider adding an upper limit. 4. `PriceFeed.setInvalid()`: needs to validate that the token exists. Otherwise, the function could be (in)validating an id that is not used yet, leading to unexpected behavior. 5. `MultiLot.createLot()`: needs to validate that `_tokenA` and values in `_tokenBChoices` are non-empty strings .
The function `PriceFeed.store()` could overwrite the price for a given token and timestamp if the function is called within the same minute of the last call.
The `AccessControl` contract inherited by `PriceFeed` has a `renounceRole()` function, allowing role holders to renounce their roles and leave the contract without accounts holding those roles, which may render the contract irreversibly unusable. Similarly, the `MultiLot` contract is `Ownable` and the `renounceOwnership()` function can be used to leave the contract without an owner.
Every Solidity file specifies in the header a version number of the format `pragma solidity (^)0.8.*`. The caret (`^`) before the version number implies an unlocked pragma, meaning that the compiler will use the specified version _and above_, hence the term "unlocked".
The report names a repository or files. Open the report to see its scope.
Repository and files the report names (3)
236 projects reviewed · 332 reports · latest Oct 2026
See Quantstamp’s auditsSomething 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