# exit 255 # stdout # stderr 'forge clean' running (wd: /tmp/audits/2026-03-intuition) 'forge config --json' running 'forge build --build-info src/protocol/emissions/TrustBonding.sol' running (wd: /tmp/audits/2026-03-intuition) INFO:Detectors: Detector: divide-before-multiply VotingEscrow._checkpoint(address,LockedBalance,LockedBalance) (src/external/curve/VotingEscrow.sol#184-318) performs a multiplication on the result of a division: - t_i = (last_checkpoint / WEEK) * WEEK (src/external/curve/VotingEscrow.sol#236) VotingEscrow._create_lock(uint256,uint256) (src/external/curve/VotingEscrow.sol#384-395) performs a multiplication on the result of a division: - unlock_time = (_unlock_time / WEEK) * WEEK (src/external/curve/VotingEscrow.sol#390) VotingEscrow._increase_unlock_time(uint256) (src/external/curve/VotingEscrow.sol#426-436) performs a multiplication on the result of a division: - unlock_time = (_unlock_time / WEEK) * WEEK (src/external/curve/VotingEscrow.sol#428) VotingEscrow._supply_at(Point,uint256) (src/external/curve/VotingEscrow.sol#704-727) performs a multiplication on the result of a division: - t_i = (last_point.ts / WEEK) * WEEK (src/external/curve/VotingEscrow.sol#706) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply INFO:Detectors: Detector: erc20-interface ISatelliteEmissionsController (src/interfaces/ISatelliteEmissionsController.sol#12-160) has incorrect ERC20 function interface:ISatelliteEmissionsController.transfer(address,uint256) (src/interfaces/ISatelliteEmissionsController.sol#97) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface INFO:Detectors: Detector: incorrect-equality VotingEscrow._checkpoint(address,LockedBalance,LockedBalance) (src/external/curve/VotingEscrow.sol#184-318) uses a dangerous strict equality: - t_i == block.timestamp (src/external/curve/VotingEscrow.sol#262) TrustBonding._getPersonalUtilizationRatio(address,uint256) (src/protocol/emissions/TrustBonding.sol#494-545) uses a dangerous strict equality: - _userEligibleRewardsForEpoch(_account,_epoch - 1) == 0 (src/protocol/emissions/TrustBonding.sol#528) TrustBonding._previousEpoch() (src/protocol/emissions/TrustBonding.sol#652-655) uses a dangerous strict equality: - curr == 0 (src/protocol/emissions/TrustBonding.sol#654) VotingEscrow._supply_at(Point,uint256) (src/external/curve/VotingEscrow.sol#704-727) uses a dangerous strict equality: - t_i == t (src/external/curve/VotingEscrow.sol#716) TrustBonding._userEligibleRewardsForEpoch(address,uint256) (src/protocol/emissions/TrustBonding.sol#475-492) uses a dangerous strict equality: - userBalance == 0 || totalBalance == 0 (src/protocol/emissions/TrustBonding.sol#487) TrustBonding.claimRewards(address) (src/protocol/emissions/TrustBonding.sol#348-393) uses a dangerous strict equality: - currentEpochLocal == 0 (src/protocol/emissions/TrustBonding.sol#356) TrustBonding.claimRewards(address) (src/protocol/emissions/TrustBonding.sol#348-393) uses a dangerous strict equality: - rawUserRewards == 0 (src/protocol/emissions/TrustBonding.sol#365) TrustBonding.claimRewards(address) (src/protocol/emissions/TrustBonding.sol#348-393) uses a dangerous strict equality: - userRewards == 0 (src/protocol/emissions/TrustBonding.sol#376) TrustBonding.getSystemApy() (src/protocol/emissions/TrustBonding.sol#305-317) uses a dangerous strict equality: - _supply == 0 (src/protocol/emissions/TrustBonding.sol#307) TrustBonding.getUserApy(address) (src/protocol/emissions/TrustBonding.sol#257-271) uses a dangerous strict equality: - userRewards == 0 || locked <= 0 (src/protocol/emissions/TrustBonding.sol#263) TrustBonding.getUserCurrentClaimableRewards(address) (src/protocol/emissions/TrustBonding.sol#274-291) uses a dangerous strict equality: - _currEpoch == 0 (src/protocol/emissions/TrustBonding.sol#277) TrustBonding.getUserRewardsForEpoch(address,uint256) (src/protocol/emissions/TrustBonding.sol#294-302) uses a dangerous strict equality: - _currEpoch == 0 || epoch > _currEpoch (src/protocol/emissions/TrustBonding.sol#296) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities INFO:Detectors: Detector: uninitialized-local TrustBonding.getUserInfo(address).personalUtilization (src/protocol/emissions/TrustBonding.sol#238) is a local variable never initialized VotingEscrow._deposit_for(address,uint256,uint256,LockedBalance,VotingEscrow.DepositType).old_locked (src/external/curve/VotingEscrow.sol#339) is a local variable never initialized TrustBonding.getUserInfo(address).userRewards (src/protocol/emissions/TrustBonding.sol#237) is a local variable never initialized VotingEscrow._checkpoint(address,LockedBalance,LockedBalance).u_old (src/external/curve/VotingEscrow.sol#185) is a local variable never initialized VotingEscrow._checkpoint(address,LockedBalance,LockedBalance).u_new (src/external/curve/VotingEscrow.sol#186) is a local variable never initialized Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-local-variables INFO:Detectors: Detector: shadowing-local TrustBonding.epochTimestampEnd(uint256).epoch (src/protocol/emissions/TrustBonding.sol#159) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding.emissionsForEpoch(uint256).epoch (src/protocol/emissions/TrustBonding.sol#179) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding.totalBondedBalanceAtEpochEnd(uint256).epoch (src/protocol/emissions/TrustBonding.sol#194) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding.userBondedBalanceAtEpochEnd(address,uint256).epoch (src/protocol/emissions/TrustBonding.sol#203) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding.userEligibleRewardsForEpoch(address,uint256).epoch (src/protocol/emissions/TrustBonding.sol#216) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding.hasClaimedRewardsForEpoch(address,uint256).epoch (src/protocol/emissions/TrustBonding.sol#221) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding.getSystemUtilizationRatio(uint256).epoch (src/protocol/emissions/TrustBonding.sol#226) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding.getPersonalUtilizationRatio(address,uint256).epoch (src/protocol/emissions/TrustBonding.sol#231) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding.getUserApy(address).locked (src/protocol/emissions/TrustBonding.sol#261) shadows: - VotingEscrow.locked (src/external/curve/VotingEscrow.sol#83) (state variable) TrustBonding.getUserRewardsForEpoch(address,uint256).epoch (src/protocol/emissions/TrustBonding.sol#294) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding.getUnclaimedRewardsForEpoch(uint256).epoch (src/protocol/emissions/TrustBonding.sol#320) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding._epochTimestampEnd(uint256).epoch (src/protocol/emissions/TrustBonding.sol#446) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding._emissionsForEpoch(uint256).epoch (src/protocol/emissions/TrustBonding.sol#454) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding._hasClaimedRewardsForEpoch(address,uint256).epoch (src/protocol/emissions/TrustBonding.sol#471) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) TrustBonding._userEligibleRewardsForEpoch(address,uint256).epoch (src/protocol/emissions/TrustBonding.sol#475) shadows: - VotingEscrow.epoch (src/external/curve/VotingEscrow.sol#85) (state variable) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#local-variable-shadowing INFO:Detectors: Detector: missing-zero-check VotingEscrow.changeController(address)._newController (src/external/curve/VotingEscrow.sol#772) lacks a zero-check on : - controller = _newController (src/external/curve/VotingEscrow.sol#774) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation INFO:Detectors: Detector: timestamp VotingEscrow._checkpoint(address,LockedBalance,LockedBalance) (src/external/curve/VotingEscrow.sol#184-318) uses timestamp for comparisons Dangerous comparisons: - old_locked.end > block.timestamp && old_locked.amount > 0 (src/external/curve/VotingEscrow.sol#194) - new_locked.end > block.timestamp && new_locked.amount > 0 (src/external/curve/VotingEscrow.sol#198) - block.timestamp > last_point.ts (src/external/curve/VotingEscrow.sol#229) - t_i > block.timestamp (src/external/curve/VotingEscrow.sol#242) - last_point.bias < 0 (src/external/curve/VotingEscrow.sol#249) - last_point.slope < 0 (src/external/curve/VotingEscrow.sol#253) - t_i == block.timestamp (src/external/curve/VotingEscrow.sol#262) - last_point.slope < 0 (src/external/curve/VotingEscrow.sol#278) - last_point.bias < 0 (src/external/curve/VotingEscrow.sol#281) - old_locked.end > block.timestamp (src/external/curve/VotingEscrow.sol#293) - new_locked.end > block.timestamp (src/external/curve/VotingEscrow.sol#302) VotingEscrow.deposit_for(address,uint256) (src/external/curve/VotingEscrow.sol#372-379) uses timestamp for comparisons Dangerous comparisons: - require(bool,string)(_locked.end > block.timestamp,Cannot add to expired lock. Withdraw) (src/external/curve/VotingEscrow.sol#377) VotingEscrow._create_lock(uint256,uint256) (src/external/curve/VotingEscrow.sol#384-395) uses timestamp for comparisons Dangerous comparisons: - require(bool,string)(unlock_time >= block.timestamp + MINTIME,Voting lock must be at least MINTIME) (src/external/curve/VotingEscrow.sol#391) - require(bool,string)(unlock_time <= block.timestamp + MAXTIME,Voting lock can be 2 years max) (src/external/curve/VotingEscrow.sol#392) VotingEscrow._increase_amount(uint256) (src/external/curve/VotingEscrow.sol#410-418) uses timestamp for comparisons Dangerous comparisons: - require(bool,string)(_locked.end > block.timestamp,Cannot add to expired lock. Withdraw) (src/external/curve/VotingEscrow.sol#415) VotingEscrow._increase_unlock_time(uint256) (src/external/curve/VotingEscrow.sol#426-436) uses timestamp for comparisons Dangerous comparisons: - require(bool,string)(_locked.end > block.timestamp,Lock expired) (src/external/curve/VotingEscrow.sol#430) - require(bool,string)(unlock_time <= block.timestamp + MAXTIME,Voting lock can be 2 years max) (src/external/curve/VotingEscrow.sol#433) VotingEscrow._withdraw() (src/external/curve/VotingEscrow.sol#462-483) uses timestamp for comparisons Dangerous comparisons: - require(bool,string)(block.timestamp >= _locked.end,The lock didn't expire) (src/external/curve/VotingEscrow.sol#467) VotingEscrow._find_block_epoch(uint256,uint256) (src/external/curve/VotingEscrow.sol#513-530) uses timestamp for comparisons Dangerous comparisons: - point_history[_mid].blk <= _block (src/external/curve/VotingEscrow.sol#523) VotingEscrow._find_timestamp_epoch(uint256,uint256) (src/external/curve/VotingEscrow.sol#544-576) uses timestamp for comparisons Dangerous comparisons: - _ts < point_history[0].ts (src/external/curve/VotingEscrow.sol#551) - _ts >= point_history[max_epoch].ts (src/external/curve/VotingEscrow.sol#556) - point_history[_mid].ts <= _ts (src/external/curve/VotingEscrow.sol#569) VotingEscrow._find_user_timestamp_epoch(address,uint256,uint256) (src/external/curve/VotingEscrow.sol#590-623) uses timestamp for comparisons Dangerous comparisons: - _ts < user_point_history[addr][0].ts (src/external/curve/VotingEscrow.sol#597) - _ts >= user_point_history[addr][max_epoch].ts (src/external/curve/VotingEscrow.sol#602) - user_point_history[addr][_mid].ts <= _ts (src/external/curve/VotingEscrow.sol#616) VotingEscrow._balanceOf(address,uint256) (src/external/curve/VotingEscrow.sol#630-638) uses timestamp for comparisons Dangerous comparisons: - point.bias < 0 (src/external/curve/VotingEscrow.sol#634) VotingEscrow.balanceOfAt(address,uint256) (src/external/curve/VotingEscrow.sol#653-698) uses timestamp for comparisons Dangerous comparisons: - d_block != 0 (src/external/curve/VotingEscrow.sol#688) - upoint.bias >= 0 (src/external/curve/VotingEscrow.sol#693) VotingEscrow._supply_at(Point,uint256) (src/external/curve/VotingEscrow.sol#704-727) uses timestamp for comparisons Dangerous comparisons: - t_i > t (src/external/curve/VotingEscrow.sol#710) - t_i == t (src/external/curve/VotingEscrow.sol#716) - last_point.bias < 0 (src/external/curve/VotingEscrow.sol#723) VotingEscrow.totalSupplyAt(uint256) (src/external/curve/VotingEscrow.sol#749-769) uses timestamp for comparisons Dangerous comparisons: - point.blk != point_next.blk (src/external/curve/VotingEscrow.sol#759) - point.blk != block.number (src/external/curve/VotingEscrow.sol#763) TrustBonding.totalBondedBalanceAtEpochEnd(uint256) (src/protocol/emissions/TrustBonding.sol#194-200) uses timestamp for comparisons Dangerous comparisons: - epoch > currentEpoch() (src/protocol/emissions/TrustBonding.sol#195) TrustBonding.userBondedBalanceAtEpochEnd(address,uint256) (src/protocol/emissions/TrustBonding.sol#203-213) uses timestamp for comparisons Dangerous comparisons: - epoch > currentEpoch() (src/protocol/emissions/TrustBonding.sol#208) TrustBonding.getUserInfo(address) (src/protocol/emissions/TrustBonding.sol#235-254) uses timestamp for comparisons Dangerous comparisons: - _currEpoch > 0 (src/protocol/emissions/TrustBonding.sol#240) TrustBonding.getUserApy(address) (src/protocol/emissions/TrustBonding.sol#257-271) uses timestamp for comparisons Dangerous comparisons: - userRewards == 0 || locked <= 0 (src/protocol/emissions/TrustBonding.sol#263) TrustBonding.getUserCurrentClaimableRewards(address) (src/protocol/emissions/TrustBonding.sol#274-291) uses timestamp for comparisons Dangerous comparisons: - _currEpoch == 0 (src/protocol/emissions/TrustBonding.sol#277) - userEligibleReward <= userClaimedReward (src/protocol/emissions/TrustBonding.sol#286) TrustBonding.getUserRewardsForEpoch(address,uint256) (src/protocol/emissions/TrustBonding.sol#294-302) uses timestamp for comparisons Dangerous comparisons: - _currEpoch == 0 || epoch > _currEpoch (src/protocol/emissions/TrustBonding.sol#296) TrustBonding.getSystemApy() (src/protocol/emissions/TrustBonding.sol#305-317) uses timestamp for comparisons Dangerous comparisons: - _supply == 0 (src/protocol/emissions/TrustBonding.sol#307) TrustBonding.getUnclaimedRewardsForEpoch(uint256) (src/protocol/emissions/TrustBonding.sol#320-341) uses timestamp for comparisons Dangerous comparisons: - currentEpochLocal < 2 (src/protocol/emissions/TrustBonding.sol#324) - epoch > currentEpochLocal - 2 (src/protocol/emissions/TrustBonding.sol#331) TrustBonding.claimRewards(address) (src/protocol/emissions/TrustBonding.sol#348-393) uses timestamp for comparisons Dangerous comparisons: - currentEpochLocal == 0 (src/protocol/emissions/TrustBonding.sol#356) - rawUserRewards == 0 (src/protocol/emissions/TrustBonding.sol#365) - userRewards == 0 (src/protocol/emissions/TrustBonding.sol#376) TrustBonding._emissionsForEpoch(uint256) (src/protocol/emissions/TrustBonding.sol#454-469) uses timestamp for comparisons Dangerous comparisons: - epoch > currentEpoch() (src/protocol/emissions/TrustBonding.sol#455) - epoch < 2 (src/protocol/emissions/TrustBonding.sol#461) TrustBonding._userEligibleRewardsForEpoch(address,uint256) (src/protocol/emissions/TrustBonding.sol#475-492) uses timestamp for comparisons Dangerous comparisons: - epoch > currentEpoch() (src/protocol/emissions/TrustBonding.sol#480) - userBalance == 0 || totalBalance == 0 (src/protocol/emissions/TrustBonding.sol#487) TrustBonding._getPersonalUtilizationRatio(address,uint256) (src/protocol/emissions/TrustBonding.sol#494-545) uses timestamp for comparisons Dangerous comparisons: - _epoch > currentEpoch() (src/protocol/emissions/TrustBonding.sol#500) - _epoch < 2 (src/protocol/emissions/TrustBonding.sol#505) - rawUtilizationDelta <= 0 (src/protocol/emissions/TrustBonding.sol#516) - _userEligibleRewardsForEpoch(_account,_epoch - 1) == 0 (src/protocol/emissions/TrustBonding.sol#528) - userUtilizationDelta >= userUtilizationTarget (src/protocol/emissions/TrustBonding.sol#537) TrustBonding._getSystemUtilizationRatio(uint256) (src/protocol/emissions/TrustBonding.sol#547-584) uses timestamp for comparisons Dangerous comparisons: - _epoch > currentEpoch() (src/protocol/emissions/TrustBonding.sol#549) - _epoch < 2 (src/protocol/emissions/TrustBonding.sol#554) - rawUtilizationDelta <= 0 (src/protocol/emissions/TrustBonding.sol#566) - utilizationDelta >= utilizationTarget (src/protocol/emissions/TrustBonding.sol#577) TrustBonding._previousEpoch() (src/protocol/emissions/TrustBonding.sol#652-655) uses timestamp for comparisons Dangerous comparisons: - curr == 0 (src/protocol/emissions/TrustBonding.sol#654) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp INFO:Detectors: Detector: assembly SafeERC20._safeTransfer(IERC20,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#176-200) uses assembly - INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#179-199) SafeERC20._safeTransferFrom(IERC20,address,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#212-244) uses assembly - INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#221-243) SafeERC20._safeApprove(IERC20,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#255-279) uses assembly - INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#258-278) AccessControlUpgradeable._getAccessControlStorage() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#68-72) uses assembly - INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#69-71) Initializable._getInitializableStorage() (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#232-237) uses assembly - INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#234-236) PausableUpgradeable._getPausableStorage() (lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol#27-31) uses assembly - INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol#28-30) ReentrancyGuardUpgradeable._getReentrancyGuardStorage() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#49-53) uses assembly - INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#50-52) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage INFO:Detectors: Detector: pragma 5 different versions of Solidity are used: - Version constraint >=0.8.4 is used by: ->=0.8.4 (lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4) - Version constraint >=0.6.2 is used by: ->=0.6.2 (lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol#4) - Version constraint >=0.4.16 is used by: ->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol#4) ->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol#4) ->=0.4.16 (lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4) ->=0.4.16 (lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4) - Version constraint ^0.8.20 is used by: -^0.8.20 (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#4) -^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4) -^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4) -^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4) -^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol#4) -^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#4) -^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4) - Version constraint 0.8.29 is used by: -0.8.29 (src/external/curve/VotingEscrow.sol#2) -0.8.29 (src/interfaces/ICoreEmissionsController.sol#2) -0.8.29 (src/interfaces/IMetaLayer.sol#2) -0.8.29 (src/interfaces/IMultiVault.sol#2) -0.8.29 (src/interfaces/IMultiVaultCore.sol#2) -0.8.29 (src/interfaces/ISatelliteEmissionsController.sol#2) -0.8.29 (src/interfaces/ITrustBonding.sol#2) -0.8.29 (src/protocol/emissions/MetaERC20Dispatcher.sol#2) -0.8.29 (src/protocol/emissions/TrustBonding.sol#2) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used INFO:Detectors: Detector: cyclomatic-complexity VotingEscrow._checkpoint(address,LockedBalance,LockedBalance) (src/external/curve/VotingEscrow.sol#184-318) has a high cyclomatic complexity (21). Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#cyclomatic-complexity INFO:Detectors: Detector: dead-code MetaERC20Dispatcher.__MetaERC20Dispatcher_init(address,uint32,uint256,FinalityState) (src/protocol/emissions/MetaERC20Dispatcher.sol#46-59) is never used and should be removed MetaERC20Dispatcher._bridgeTokensViaERC20(address,uint32,bytes32,uint256,uint256,FinalityState) (src/protocol/emissions/MetaERC20Dispatcher.sol#117-130) is never used and should be removed MetaERC20Dispatcher._bridgeTokensViaNativeToken(address,uint32,bytes32,uint256,uint256,FinalityState) (src/protocol/emissions/MetaERC20Dispatcher.sol#140-157) is never used and should be removed MetaERC20Dispatcher._setFinalityState(FinalityState) (src/protocol/emissions/MetaERC20Dispatcher.sol#94-97) is never used and should be removed MetaERC20Dispatcher._setMessageGasCost(uint256) (src/protocol/emissions/MetaERC20Dispatcher.sol#89-92) is never used and should be removed MetaERC20Dispatcher._setMetaERC20SpokeOrHub(address) (src/protocol/emissions/MetaERC20Dispatcher.sol#104-110) is never used and should be removed MetaERC20Dispatcher._setRecipientDomain(uint32) (src/protocol/emissions/MetaERC20Dispatcher.sol#99-102) is never used and should be removed Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code INFO:Detectors: Detector: solc-version Version constraint >=0.8.4 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - FullInlinerNonExpressionSplitArgumentEvaluationOrder - MissingSideEffectsOnSelectorAccess - AbiReencodingHeadOverflowWithStaticArrayCleanup - DirtyBytesArrayToStorage - DataLocationChangeInInternalOverride - NestedCalldataArrayAbiReencodingSizeValidation - SignedImmutables. It is used by: - >=0.8.4 (lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4) Version constraint >=0.6.2 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - MissingSideEffectsOnSelectorAccess - AbiReencodingHeadOverflowWithStaticArrayCleanup - DirtyBytesArrayToStorage - NestedCalldataArrayAbiReencodingSizeValidation - ABIDecodeTwoDimensionalArrayMemory - KeccakCaching - EmptyByteArrayCopy - DynamicArrayCleanup - MissingEscapingInFormatting - ArraySliceDynamicallyEncodedBaseType - ImplicitConstructorCallvalueCheck - TupleAssignmentMultiStackSlotComponents - MemoryArrayCreationOverflow. It is used by: - >=0.6.2 (lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol#4) Version constraint >=0.4.16 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - DirtyBytesArrayToStorage - ABIDecodeTwoDimensionalArrayMemory - KeccakCaching - EmptyByteArrayCopy - DynamicArrayCleanup - ImplicitConstructorCallvalueCheck - TupleAssignmentMultiStackSlotComponents - MemoryArrayCreationOverflow - privateCanBeOverridden - SignedArrayStorageCopy - ABIEncoderV2StorageArrayWithMultiSlotElement - DynamicConstructorArgumentsClippedABIV2 - UninitializedFunctionPointerInConstructor_0.4.x - IncorrectEventSignatureInLibraries_0.4.x - ExpExponentCleanup - NestedArrayFunctionCallDecoder - ZeroFunctionSelector. It is used by: - >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol#4) - >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol#4) - >=0.4.16 (lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4) - >=0.4.16 (lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4) Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - VerbatimInvalidDeduplication - FullInlinerNonExpressionSplitArgumentEvaluationOrder - MissingSideEffectsOnSelectorAccess. It is used by: - ^0.8.20 (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#4) - ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4) - ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4) - ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4) - ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol#4) - ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#4) - ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity INFO:Detectors: Detector: missing-inheritance MetaERC20Dispatcher (src/protocol/emissions/MetaERC20Dispatcher.sol#6-158) should inherit from IIGP (src/interfaces/IMetaLayer.sol#35-37) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-inheritance INFO:Detectors: Detector: naming-convention Function AccessControlUpgradeable.__AccessControl_init() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#83-84) is not in mixedCase Function AccessControlUpgradeable.__AccessControl_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#86-87) is not in mixedCase Constant AccessControlUpgradeable.AccessControlStorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#66) is not in UPPER_CASE_WITH_UNDERSCORES Function ContextUpgradeable.__Context_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#18-19) is not in mixedCase Function ContextUpgradeable.__Context_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#21-22) is not in mixedCase Function PausableUpgradeable.__Pausable_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol#77-78) is not in mixedCase Function PausableUpgradeable.__Pausable_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol#80-81) is not in mixedCase Constant PausableUpgradeable.PausableStorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol#25) is not in UPPER_CASE_WITH_UNDERSCORES Function ReentrancyGuardUpgradeable.__ReentrancyGuard_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#60-62) is not in mixedCase Function ReentrancyGuardUpgradeable.__ReentrancyGuard_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#64-67) is not in mixedCase Constant ReentrancyGuardUpgradeable.ReentrancyGuardStorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#47) is not in UPPER_CASE_WITH_UNDERSCORES Function ERC165Upgradeable.__ERC165_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#22-23) is not in mixedCase Function ERC165Upgradeable.__ERC165_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#25-26) is not in mixedCase Function VotingEscrow.__VotingEscrow_init(address,address,uint256) (src/external/curve/VotingEscrow.sol#108-126) is not in mixedCase Parameter VotingEscrow.__VotingEscrow_init(address,address,uint256)._admin (src/external/curve/VotingEscrow.sol#108) is not in mixedCase Parameter VotingEscrow.__VotingEscrow_init(address,address,uint256).token_addr (src/external/curve/VotingEscrow.sol#108) is not in mixedCase Parameter VotingEscrow.__VotingEscrow_init(address,address,uint256).min_time (src/external/curve/VotingEscrow.sol#108) is not in mixedCase Function VotingEscrow.add_to_whitelist(address) (src/external/curve/VotingEscrow.sol#142-144) is not in mixedCase Function VotingEscrow.remove_from_whitelist(address) (src/external/curve/VotingEscrow.sol#148-150) is not in mixedCase Function VotingEscrow.get_last_user_slope(address) (src/external/curve/VotingEscrow.sol#160-163) is not in mixedCase Function VotingEscrow.user_point_history__ts(address,uint256) (src/external/curve/VotingEscrow.sol#169-171) is not in mixedCase Parameter VotingEscrow.user_point_history__ts(address,uint256)._addr (src/external/curve/VotingEscrow.sol#169) is not in mixedCase Parameter VotingEscrow.user_point_history__ts(address,uint256)._idx (src/external/curve/VotingEscrow.sol#169) is not in mixedCase Function VotingEscrow.locked__end(address) (src/external/curve/VotingEscrow.sol#176-178) is not in mixedCase Parameter VotingEscrow.locked__end(address)._addr (src/external/curve/VotingEscrow.sol#176) is not in mixedCase Function VotingEscrow._deposit_for(address,uint256,uint256,LockedBalance,VotingEscrow.DepositType) (src/external/curve/VotingEscrow.sol#326-360) is not in mixedCase Parameter VotingEscrow._deposit_for(address,uint256,uint256,LockedBalance,VotingEscrow.DepositType)._addr (src/external/curve/VotingEscrow.sol#327) is not in mixedCase Parameter VotingEscrow._deposit_for(address,uint256,uint256,LockedBalance,VotingEscrow.DepositType)._value (src/external/curve/VotingEscrow.sol#328) is not in mixedCase Parameter VotingEscrow._deposit_for(address,uint256,uint256,LockedBalance,VotingEscrow.DepositType).unlock_time (src/external/curve/VotingEscrow.sol#329) is not in mixedCase Parameter VotingEscrow._deposit_for(address,uint256,uint256,LockedBalance,VotingEscrow.DepositType).locked_balance (src/external/curve/VotingEscrow.sol#330) is not in mixedCase Parameter VotingEscrow._deposit_for(address,uint256,uint256,LockedBalance,VotingEscrow.DepositType).deposit_type (src/external/curve/VotingEscrow.sol#331) is not in mixedCase Function VotingEscrow.deposit_for(address,uint256) (src/external/curve/VotingEscrow.sol#372-379) is not in mixedCase Parameter VotingEscrow.deposit_for(address,uint256)._addr (src/external/curve/VotingEscrow.sol#372) is not in mixedCase Parameter VotingEscrow.deposit_for(address,uint256)._value (src/external/curve/VotingEscrow.sol#372) is not in mixedCase Function VotingEscrow._create_lock(uint256,uint256) (src/external/curve/VotingEscrow.sol#384-395) is not in mixedCase Parameter VotingEscrow._create_lock(uint256,uint256)._value (src/external/curve/VotingEscrow.sol#384) is not in mixedCase Parameter VotingEscrow._create_lock(uint256,uint256)._unlock_time (src/external/curve/VotingEscrow.sol#384) is not in mixedCase Function VotingEscrow.create_lock(uint256,uint256) (src/external/curve/VotingEscrow.sol#400-402) is not in mixedCase Parameter VotingEscrow.create_lock(uint256,uint256)._value (src/external/curve/VotingEscrow.sol#400) is not in mixedCase Parameter VotingEscrow.create_lock(uint256,uint256)._unlock_time (src/external/curve/VotingEscrow.sol#400) is not in mixedCase Function VotingEscrow.increase_amount(uint256) (src/external/curve/VotingEscrow.sol#406-408) is not in mixedCase Parameter VotingEscrow.increase_amount(uint256)._value (src/external/curve/VotingEscrow.sol#406) is not in mixedCase Function VotingEscrow._increase_amount(uint256) (src/external/curve/VotingEscrow.sol#410-418) is not in mixedCase Parameter VotingEscrow._increase_amount(uint256)._value (src/external/curve/VotingEscrow.sol#410) is not in mixedCase Function VotingEscrow.increase_unlock_time(uint256) (src/external/curve/VotingEscrow.sol#422-424) is not in mixedCase Parameter VotingEscrow.increase_unlock_time(uint256)._unlock_time (src/external/curve/VotingEscrow.sol#422) is not in mixedCase Function VotingEscrow._increase_unlock_time(uint256) (src/external/curve/VotingEscrow.sol#426-436) is not in mixedCase Parameter VotingEscrow._increase_unlock_time(uint256)._unlock_time (src/external/curve/VotingEscrow.sol#426) is not in mixedCase Function VotingEscrow.increase_amount_and_time(uint256,uint256) (src/external/curve/VotingEscrow.sol#440-458) is not in mixedCase Parameter VotingEscrow.increase_amount_and_time(uint256,uint256)._value (src/external/curve/VotingEscrow.sol#441) is not in mixedCase Parameter VotingEscrow.increase_amount_and_time(uint256,uint256)._unlock_time (src/external/curve/VotingEscrow.sol#442) is not in mixedCase Function VotingEscrow.withdraw_and_create_lock(uint256,uint256) (src/external/curve/VotingEscrow.sol#492-503) is not in mixedCase Parameter VotingEscrow.withdraw_and_create_lock(uint256,uint256)._value (src/external/curve/VotingEscrow.sol#493) is not in mixedCase Parameter VotingEscrow.withdraw_and_create_lock(uint256,uint256)._unlock_time (src/external/curve/VotingEscrow.sol#494) is not in mixedCase Function VotingEscrow._find_block_epoch(uint256,uint256) (src/external/curve/VotingEscrow.sol#513-530) is not in mixedCase Parameter VotingEscrow._find_block_epoch(uint256,uint256)._block (src/external/curve/VotingEscrow.sol#513) is not in mixedCase Parameter VotingEscrow._find_block_epoch(uint256,uint256).max_epoch (src/external/curve/VotingEscrow.sol#513) is not in mixedCase Function VotingEscrow._find_timestamp_epoch(uint256,uint256) (src/external/curve/VotingEscrow.sol#544-576) is not in mixedCase Parameter VotingEscrow._find_timestamp_epoch(uint256,uint256)._ts (src/external/curve/VotingEscrow.sol#544) is not in mixedCase Parameter VotingEscrow._find_timestamp_epoch(uint256,uint256).max_epoch (src/external/curve/VotingEscrow.sol#544) is not in mixedCase Function VotingEscrow._find_user_timestamp_epoch(address,uint256,uint256) (src/external/curve/VotingEscrow.sol#590-623) is not in mixedCase Parameter VotingEscrow._find_user_timestamp_epoch(address,uint256,uint256)._ts (src/external/curve/VotingEscrow.sol#590) is not in mixedCase Parameter VotingEscrow._find_user_timestamp_epoch(address,uint256,uint256).max_epoch (src/external/curve/VotingEscrow.sol#590) is not in mixedCase Parameter VotingEscrow.balanceOfAtT(address,uint256)._t (src/external/curve/VotingEscrow.sol#640) is not in mixedCase Parameter VotingEscrow.balanceOfAt(address,uint256)._block (src/external/curve/VotingEscrow.sol#653) is not in mixedCase Function VotingEscrow._supply_at(Point,uint256) (src/external/curve/VotingEscrow.sol#704-727) is not in mixedCase Parameter VotingEscrow.totalSupplyAt(uint256)._block (src/external/curve/VotingEscrow.sol#749) is not in mixedCase Parameter VotingEscrow.changeController(address)._newController (src/external/curve/VotingEscrow.sol#772) is not in mixedCase Constant VotingEscrow.iMAXTIME (src/external/curve/VotingEscrow.sol#75) is not in UPPER_CASE_WITH_UNDERSCORES Variable VotingEscrow.MINTIME (src/external/curve/VotingEscrow.sol#78) is not in mixedCase Variable VotingEscrow.point_history (src/external/curve/VotingEscrow.sol#86) is not in mixedCase Variable VotingEscrow.user_point_history (src/external/curve/VotingEscrow.sol#87) is not in mixedCase Variable VotingEscrow.user_point_epoch (src/external/curve/VotingEscrow.sol#88) is not in mixedCase Variable VotingEscrow.slope_changes (src/external/curve/VotingEscrow.sol#89) is not in mixedCase Variable VotingEscrow.contracts_whitelist (src/external/curve/VotingEscrow.sol#102) is not in mixedCase Variable VotingEscrow.__gap (src/external/curve/VotingEscrow.sol#105) is not in mixedCase Function MetaERC20Dispatcher.__MetaERC20Dispatcher_init(address,uint32,uint256,FinalityState) (src/protocol/emissions/MetaERC20Dispatcher.sol#46-59) is not in mixedCase Variable MetaERC20Dispatcher.__gap (src/protocol/emissions/MetaERC20Dispatcher.sol#22) is not in mixedCase Parameter TrustBonding.initialize(address,address,address,uint256,address,uint256,uint256)._owner (src/protocol/emissions/TrustBonding.sol#117) is not in mixedCase Parameter TrustBonding.initialize(address,address,address,uint256,address,uint256,uint256)._timelock (src/protocol/emissions/TrustBonding.sol#118) is not in mixedCase Parameter TrustBonding.initialize(address,address,address,uint256,address,uint256,uint256)._trustToken (src/protocol/emissions/TrustBonding.sol#119) is not in mixedCase Parameter TrustBonding.initialize(address,address,address,uint256,address,uint256,uint256)._epochLength (src/protocol/emissions/TrustBonding.sol#120) is not in mixedCase Parameter TrustBonding.initialize(address,address,address,uint256,address,uint256,uint256)._satelliteEmissionsController (src/protocol/emissions/TrustBonding.sol#121) is not in mixedCase Parameter TrustBonding.initialize(address,address,address,uint256,address,uint256,uint256)._systemUtilizationLowerBound (src/protocol/emissions/TrustBonding.sol#122) is not in mixedCase Parameter TrustBonding.initialize(address,address,address,uint256,address,uint256,uint256)._personalUtilizationLowerBound (src/protocol/emissions/TrustBonding.sol#123) is not in mixedCase Parameter TrustBonding.setMultiVault(address)._multiVault (src/protocol/emissions/TrustBonding.sol#410) is not in mixedCase Parameter TrustBonding.setTimelock(address)._timelock (src/protocol/emissions/TrustBonding.sol#415) is not in mixedCase Parameter TrustBonding.updateSatelliteEmissionsController(address)._satelliteEmissionsController (src/protocol/emissions/TrustBonding.sol#420) is not in mixedCase Variable TrustBonding.__gap (src/protocol/emissions/TrustBonding.sol#90) is not in mixedCase Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions INFO:Detectors: Detector: unindexed-event-address Event PausableUpgradeable.Paused(address) (lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol#36) has address parameters but no indexed parameters Event PausableUpgradeable.Unpaused(address) (lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol#41) has address parameters but no indexed parameters Event VotingEscrow.TokenSet(address) (src/external/curve/VotingEscrow.sol#65) has address parameters but no indexed parameters Event MetaERC20Dispatcher.MetaERC20SpokeOrHubUpdated(address) (src/protocol/emissions/MetaERC20Dispatcher.sol#34) has address parameters but no indexed parameters Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-event-address-parameters INFO:Detectors: Detector: unused-state MetaERC20Dispatcher.__gap (src/protocol/emissions/MetaERC20Dispatcher.sol#22) is never used in MetaERC20Dispatcher (src/protocol/emissions/MetaERC20Dispatcher.sol#6-158) TrustBonding.__gap (src/protocol/emissions/TrustBonding.sol#90) is never used in TrustBonding (src/protocol/emissions/TrustBonding.sol#42-656) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable INFO:Slither:src/protocol/emissions/TrustBonding.sol analyzed (22 contracts with 101 detectors), 181 result(s) found