Omniscia LimeChain Audit

Router Manual Review Findings

Router Manual Review Findings

ROU-01M: Potentially Restrictive Diamond Implementation

TypeSeverityLocation
Language SpecificMinorRouter.sol:L34

Description:

The Router contract contains a single fallback function that is not payable, thus preventing the Router from ever defining a payable function.

Example:

contracts/Router.sol
34fallback() external {
35 LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
36 address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;
37 require(facet != address(0), "Diamond: Function does not exist");
38 assembly {
39 calldatacopy(0, 0, calldatasize())
40 let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
41 returndatacopy(0, 0, returndatasize())
42 switch result
43 case 0 {
44 revert(0, returndatasize())
45 }
46 default {
47 return(0, returndatasize())
48 }
49 }
50}

Recommendation:

We advise this trait to be assessed and if deemed desired to be documented in the codebase to ensure that it remains that way.

Alleviation:

The fallback function now properly boasts the payable built-in modifier, thereby no longer restricting the flexibility of the underlying implementations.