Omniscia Steadefi Audit
LendingPool Static Analysis Findings
LendingPool Static Analysis Findings
LPL-01S: Inexistent Visibility Specifier
| Type | Severity | Location |
|---|---|---|
| Code Style | ![]() | LendingPool.sol:L22 |
Description:
The linked variable has no visibility specifier explicitly set.
Example:
22ILendingPoolConfig lendingPoolConfig;Recommendation:
We advise one to be set so to avoid potential compilation discrepancies in the future as the current behaviour is for the compiler to assign one automatically which may deviate between pragma versions.
Alleviation (4325253d6de0ea91c1e9fb9e01d2e7e98f3d83a9):
A public visibility specifier has been introduced to the referenced variable, addressing this exhibit's concerns.
LPL-02S: Literal Equality of bool Variables
| Type | Severity | Location |
|---|---|---|
| Gas Optimization | ![]() | LendingPool.sol:L175, L188, L212, L414, L424 |
Description:
The linked bool comparisons are performed between variables and bool literals.
Example:
175require(borrowers[msg.sender].approved == true, "Borrower not approved");Recommendation:
We advise each bool variable to be utilized directly either in its negated (!) or original form.
Alleviation (4325253d6d):
Of the referenced boolean equality comparisons all but the second one have been replaced by the bool values being compared themselves, rendering this exhibit partially alleviated.
Alleviation (7c9b2b09db):
The final remaining bool literal comparison has been updated as well, rendering this exhibit fully alleviated.
LPL-03S: Inexistent Sanitization of Input Addresses
| Type | Severity | Location |
|---|---|---|
| Input Sanitization | ![]() | LendingPool.sol:L76-L90 |
Description:
The linked function(s) accept address arguments yet do not properly sanitize them.
Impact:
The presence of zero-value addresses, especially in constructor implementations, can cause the contract to be permanently inoperable. These checks are advised as zero-value inputs are a common side-effect of off-chain software related bugs.
Example:
76constructor(77 string memory _name,78 string memory _symbol,79 address _asset,80 bool _isNativeAsset,81 uint256 _protocolFee,82 ILendingPoolConfig _lendingPoolConfig,83 address _treasury84 ) ERC20(_name, _symbol) {85 asset = _asset;86 isNativeAsset = _isNativeAsset;87 protocolFee = _protocolFee;88 lendingPoolConfig = _lendingPoolConfig;89 treasury = _treasury;90}Recommendation:
We advise some basic sanitization to be put in place by ensuring that each address specified is non-zero.
Alleviation (4325253d6de0ea91c1e9fb9e01d2e7e98f3d83a9):
The constructor of the LendingPool implementation adequately sanitizes its address input arguments in the latest implementation, ensuring that the contract cannot be misconfigured during its deployment.
LPL-04S: Potential Lock of Native Assets
| Type | Severity | Location |
|---|---|---|
| Language Specific | ![]() | LendingPool.sol:L486 |
Description:
The linked receive / fallback function performs no sanitization as to its caller and no function within the contract expects funds to have been received directly by the contract.
Impact:
Any native funds accidentally sent to the contract may be forever locked.
Example:
486receive() external payable {}Recommendation:
We advise the code to properly prohibit accidental native assets from being permanently locked in the contract by introducing a require check restricting the msg.sender to the contract(s) expected to transfer assets to the system (i.e. in case of a wrapped native version of an asset, only the WXXX contract address should be allowed). Alternatively, if the contract is not expected to receive native assets directly the function should be removed in its entirety.
Alleviation (4325253d6de0ea91c1e9fb9e01d2e7e98f3d83a9):
The receive function was updated to only accept native funds when the pool has been set to isNativeAsset mode, ensuring that funds cannot be locked within it when the pool's token is an EIP-20 asset. As a result, we consider this exhibit adequately alleviated.

