Omniscia vfat Audit
SickleMultisig Code Style Findings
SickleMultisig Code Style Findings
SMG-01C: Inefficient Evaluation of Atomic Signer Operation
| Type | Severity | Location |
|---|---|---|
| Gas Optimization | ![]() | SickleMultisig.sol: • I-1: L367, L369 • I-2: L375, L378 |
Description:
The SickleMultisig::_addSigner and SickleMultisig::_removeSigner functions will inefficiently invoke the SickleMultisig::isSigner function to evaluate whether the EnumerableSet operation would succeed (i.e. the addition and removal of an element respectively).
Example:
367if (isSigner(signer)) revert SignerAlreadyAdded();368
369_signers.add(signer);Recommendation:
We advise the return value of each EnumerableSet operation to be utilized instead, optimizing each function's gas cost.
Alleviation (6ab7af3bb495b817ffec469255ea679b1813eecb):
The referenced signer inclusion and removal operations have been optimized as advised.
SMG-02C: Inefficient Layout of Storage
| Type | Severity | Location |
|---|---|---|
| Gas Optimization | ![]() | SickleMultisig.sol:L22-L24 |
Description:
The Transaction data entry will contain three distinct bool entries to evaluate the state a transaction is in which is inefficient.
Example:
18struct Transaction {19 // Calls to be executed in the transaction20 Proposal proposal;21 // Transaction state22 bool exists;23 bool executed;24 bool cancelled;25 // Settings nonce that the transaction was created with26 uint256 settingsNonce;27 // Signing state28 uint256 signatures;29 mapping(address => bool) signed;30}Recommendation:
We advise a single uint256 entry to be utilized instead whose states are represented via constant declarations, optimizing the gas cost involved in validating a transaction.
To note, this update would be compatible with the existing storage layout of the system.
Alleviation (6ab7af3bb495b817ffec469255ea679b1813eecb):
The code was updated to utilize a single enum instead which incurs a slightly higher gas overhead than uint256 representations yet achieves the same purpose.
As such, we consider the original gas inefficiency addressed.
