.tools/venv/lib/python3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
  warnings.warn(
'solc --version' running
'solc @openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ @openzeppelin/=node_modules/@openzeppelin/ src/StakingPool.sol --combined-json abi,ast,bin,bin-runtime,srcmap,srcmap-runtime,userdoc,devdoc,hashes --via-ir --optimize --optimize-runs 200 --evm-version cancun --allow-paths .,StakingPool/src' running
Compilation warnings/errors on src/StakingPool.sol:
.tools/venv/lib/python3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
  warnings.warn(
Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.
   --> node_modules/@openzeppelin/contracts/utils/TransientSlot.sol:108:13:
    |
108 |             tstore(slot, value)
    |             ^^^^^^



Detector: incorrect-exp
Math.mulDiv(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#206-277) has bitwise-xor operator ^ instead of the exponentiation operator **: 
	 - inverse = (3 * denominator) ^ 2 (node_modules/@openzeppelin/contracts/utils/math/Math.sol#259)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-exponentiation

Detector: divide-before-multiply
Math.mulDiv(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (node_modules/@openzeppelin/contracts/utils/math/Math.sol#244)
	- inverse = (3 * denominator) ^ 2 (node_modules/@openzeppelin/contracts/utils/math/Math.sol#259)
Math.mulDiv(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (node_modules/@openzeppelin/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (node_modules/@openzeppelin/contracts/utils/math/Math.sol#263)
Math.mulDiv(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (node_modules/@openzeppelin/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (node_modules/@openzeppelin/contracts/utils/math/Math.sol#264)
Math.mulDiv(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (node_modules/@openzeppelin/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (node_modules/@openzeppelin/contracts/utils/math/Math.sol#265)
Math.mulDiv(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (node_modules/@openzeppelin/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (node_modules/@openzeppelin/contracts/utils/math/Math.sol#266)
Math.mulDiv(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (node_modules/@openzeppelin/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (node_modules/@openzeppelin/contracts/utils/math/Math.sol#267)
Math.mulDiv(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (node_modules/@openzeppelin/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (node_modules/@openzeppelin/contracts/utils/math/Math.sol#268)
Math.mulDiv(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- low = low / twos (node_modules/@openzeppelin/contracts/utils/math/Math.sol#247)
	- result = low * inverse (node_modules/@openzeppelin/contracts/utils/math/Math.sol#274)
Math.invMod(uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#317-363) performs a multiplication on the result of a division:
	- quotient = gcd / remainder (node_modules/@openzeppelin/contracts/utils/math/Math.sol#339)
	- (gcd,remainder) = (remainder,gcd - remainder * quotient) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#341-348)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply

Detector: events-maths
StakingPool.notifyReward(uint256) (src/StakingPool.sol#117-127) should emit an event for: 
	- accRewardPerShare += Math.mulDiv(amount,PRECISION,activeSupply) (src/StakingPool.sol#126) 
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-arithmetic

Detector: timestamp
StakingPool.balancesOf(address) (src/StakingPool.sol#154-158) uses timestamp for comparisons
	Dangerous comparisons:
	- a.pending > 0 && currentEpoch() > a.pendingEpoch (src/StakingPool.sol#156)
StakingPool.lockedOf(address) (src/StakingPool.sol#161-170) uses timestamp for comparisons
	Dangerous comparisons:
	- a.pending > 0 && epoch > a.pendingEpoch && epoch < a.pendingEpoch + 2 (src/StakingPool.sol#166)
StakingPool.pendingRewards(address) (src/StakingPool.sol#172-182) uses timestamp for comparisons
	Dangerous comparisons:
	- a.pending > 0 && currentEpoch() > a.pendingEpoch (src/StakingPool.sol#176)
	- rolled = ! (pendingSupply > 0 && pendingEpoch == a.pendingEpoch) (src/StakingPool.sol#178)
StakingPool._roll() (src/StakingPool.sol#187-193) uses timestamp for comparisons
	Dangerous comparisons:
	- pendingSupply > 0 && currentEpoch() > pendingEpoch (src/StakingPool.sol#188)
StakingPool._sync(address) (src/StakingPool.sol#197-214) uses timestamp for comparisons
	Dangerous comparisons:
	- a.pending > 0 && currentEpoch() > a.pendingEpoch (src/StakingPool.sol#201)
	- currentEpoch() < unlock (src/StakingPool.sol#206)
	- currentEpoch() >= a.recentUnlockEpoch (src/StakingPool.sol#207)
StakingPool._lockedActive(StakingPool.Account) (src/StakingPool.sol#216-218) uses timestamp for comparisons
	Dangerous comparisons:
	- currentEpoch() < a.recentUnlockEpoch (src/StakingPool.sol#217)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp

Detector: assembly
SafeERC20._safeTransfer(IERC20,address,uint256,bool) (node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#176-200) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#179-199)
SafeERC20._safeTransferFrom(IERC20,address,address,uint256,bool) (node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#212-244) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#221-243)
SafeERC20._safeApprove(IERC20,address,uint256,bool) (node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#255-279) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#258-278)
Panic.panic(uint256) (node_modules/@openzeppelin/contracts/utils/Panic.sol#50-56) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/Panic.sol#51-55)
TransientSlot.tload(TransientSlot.AddressSlot) (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#97-101) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#98-100)
TransientSlot.tstore(TransientSlot.AddressSlot,address) (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#106-110) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#107-109)
TransientSlot.tload(TransientSlot.BooleanSlot) (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#115-119) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#116-118)
TransientSlot.tstore(TransientSlot.BooleanSlot,bool) (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#124-128) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#125-127)
TransientSlot.tload(TransientSlot.Bytes32Slot) (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#133-137) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#134-136)
TransientSlot.tstore(TransientSlot.Bytes32Slot,bytes32) (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#142-146) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#143-145)
TransientSlot.tload(TransientSlot.Uint256Slot) (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#151-155) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#152-154)
TransientSlot.tstore(TransientSlot.Uint256Slot,uint256) (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#160-164) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#161-163)
TransientSlot.tload(TransientSlot.Int256Slot) (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#169-173) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#170-172)
TransientSlot.tstore(TransientSlot.Int256Slot,int256) (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#178-182) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#179-181)
Math.add512(uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#25-30) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#26-29)
Math.mul512(uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#37-46) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#41-45)
Math.tryMul(uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#73-84) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#76-80)
Math.tryDiv(uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#89-97) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#92-95)
Math.tryMod(uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#102-110) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#105-108)
Math.mulDiv(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#206-277) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#229-236)
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#242-251)
Math.tryModExp(uint256,uint256,uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#411-435) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#413-434)
Math.tryModExp(bytes,bytes,bytes) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#451-473) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#463-472)
Math._zeroBytes(bytes) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#478-490) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#482-484)
Math.log2(uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#619-658) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/Math.sol#655-657)
SafeCast.toUint(bool) (node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol#1157-1161) uses assembly
	- INLINE ASM (node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol#1158-1160)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage

Detector: pragma
5 different versions of Solidity are used:
	- Version constraint >=0.6.2 is used by:
		->=0.6.2 (node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol#4)
	- Version constraint >=0.4.16 is used by:
		->=0.4.16 (node_modules/@openzeppelin/contracts/interfaces/IERC165.sol#4)
		->=0.4.16 (node_modules/@openzeppelin/contracts/interfaces/IERC20.sol#4)
		->=0.4.16 (node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol#4)
		->=0.4.16 (node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol#4)
	- Version constraint ^0.8.20 is used by:
		-^0.8.20 (node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#4)
		-^0.8.20 (node_modules/@openzeppelin/contracts/utils/Panic.sol#4)
		-^0.8.20 (node_modules/@openzeppelin/contracts/utils/math/Math.sol#4)
		-^0.8.20 (node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol#5)
	- Version constraint ^0.8.24 is used by:
		-^0.8.24 (node_modules/@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol#4)
		-^0.8.24 (node_modules/@openzeppelin/contracts/utils/TransientSlot.sol#5)
	- Version constraint 0.8.28 is used by:
		-0.8.28 (src/StakingPool.sol#2)
		-0.8.28 (src/interfaces/IRewardSink.sol#2)
		-0.8.28 (src/lib/Constants.sol#2)
		-0.8.28 (src/lib/Errors.sol#2)
		-0.8.28 (src/lib/Events.sol#2)
		-0.8.28 (src/lib/Governed.sol#2)
		-0.8.28 (src/lib/Types.sol#2)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used

Detector: solc-version
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 (node_modules/@openzeppelin/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 (node_modules/@openzeppelin/contracts/interfaces/IERC165.sol#4)
	- >=0.4.16 (node_modules/@openzeppelin/contracts/interfaces/IERC20.sol#4)
	- >=0.4.16 (node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol#4)
	- >=0.4.16 (node_modules/@openzeppelin/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 (node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#4)
	- ^0.8.20 (node_modules/@openzeppelin/contracts/utils/Panic.sol#4)
	- ^0.8.20 (node_modules/@openzeppelin/contracts/utils/math/Math.sol#4)
	- ^0.8.20 (node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol#5)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity

Detector: too-many-digits
Math.log2(uint256) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#619-658) uses literals with too many digits:
	- r = r | byte(uint256,uint256)(x >> r,0x0000010102020202030303030303030300000000000000000000000000000000) (node_modules/@openzeppelin/contracts/utils/math/Math.sol#656)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits
src/StakingPool.sol analyzed (15 contracts with 100 detectors), 47 result(s) found
