Submitted by Ward, also found by klau5, atoko, MSaptarshi, _thanos1, LogBytes, 0xAleko, c4whitehat, Autosaida, lrivo, TECHFUND-inc, dic0de, Tigerfrake, zhaojohnson, gajiknownnothing, Abdessamed, UAARRR, oxwhite, p0wd3r, ZanyBonzy, PetarTolev, kodyvim, samuraii77, Mahi_Vasisth, jesjupyter, 0xcontrol, persik228, blackVul, peanuts, Matin, zarkk01, zeroProtocol, yaioxy, avoloder, 0xDarko, ABAIKUNANBAEV, 0xAkira, boraichodrunkenmaster, Bac0nj, anonymousjoe, Stoicov, JustUzair, aldarion, _karanel, Shubham, unnamed, 0xjarix, King_, 0xlemon, ak1, Trident-Audits, MKVsentry, kingnull, dontonka, shui, nervouspika, VulnViper, Chad0, 0xDemon, binary, Yunaci, mgf15, sl1, pep7siup, cryptomoon, yixxas, 4B, kutugu, dimah7, BajagaSec, korok, ast3ros, kartik_giri_47538, dobrevaleri, rekxor, dyoff, 0x0bserver, 0xAadi, Pataroff, Xcrypt, LonelyWolfDemon, Shahil_Hussain, arman, hail_the_lord, bhavya0911, ArsenLupin, KupiaSec, Ryonen, hl_, ilchovski, Stefanov, ke1caM, dimulski, ZdravkoHr, and Kalogerone
https://github.com/code-423n4/2024-07-traitforge/blob/main/contracts/TraitForgeNft/TraitForgeNft.sol#L19
https://github.com/code-423n4/2024-07-traitforge/blob/main/contracts/NukeFund/NukeFund.sol#L11
https://github.com/code-423n4/2024-07-traitforge/blob/main/contracts/EntropyGenerator/EntropyGenerator.sol#L9
https://github.com/code-423n4/2024-07-traitforge/blob/main/contracts/EntityTrading/EntityTrading.sol#L11
https://github.com/code-423n4/2024-07-traitforge/blob/main/contracts/DevFund/DevFund.sol#L9
https://github.com/code-423n4/2024-07-traitforge/blob/main/contracts/EntityForging/EntityForging.sol#L10
All in-scope contracts of TraitForge inherit from the Pausable contract of OpenZeppelin, a feature designed to allow the pausing and unpausing of contract functionalities in emergency situations or for maintenance. However, (parent) contracts do not expose the _pause() and _unpause() functions and the Pausable contract contains only internal pausing/unpausing functions.
As a result, despite inheriting the pausability feature, administrators are unable to utilize these critical controls to pause or resume the contracts operations when needed, potentially leading to issues during periods requiring immediate intervention.
Pause and unpause functions of the Pausable contract:
All in-scope contracts inherit Pausable but do not expose it. An example is EntityTrading.sol, which explicitly tries to use the pausing functionality, as can be seen with the whenNotPaused modifier used in several functions.
Foundry
To leverage the full capabilities of the Pausable inheritance and enhance the contracts operational security and flexibility, it is recommended to expose the pause and unpause functions in the parent contracts. These should be accessible by the contract owner or other authorized roles, ensuring they can respond effectively to operational needs or emergencies:
Library
TForge1 (TraitForge) confirmed
