During protocol deployment, ownership of decentralized_stable_coin.vy is transferred to dsc_engine.vy. However, dsc_engine.vy contains no functions to call set_minter or transfer_ownership on the DSC token. As a result, administrative control over the stablecoin is permanently locked inside the engine, preventing any future upgrades, minter role assignments, or governance interventions.
In script/deploy_dsc.py:
The deployer configures dsc_engine as an authorized minter, and immediately surrenders ownership to dsce.address.
In src/decentralized_stable_coin.vy:
Only the owner (which is now dsce.address) can invoke set_minter or transfer_ownership.
However, inspecting src/dsc_engine.vy reveals that no functions exist to interact with DSC's administrative functions:
There is no set_minter wrapper.
There is no transfer_ownership wrapper.
There is no arbitrary call or execution gateway.
Once deployed, no other entity (such as a governance DAO, a multisig treasury, a Peg Stability Module (PSM), or an upgraded V2 engine) can ever be granted minting rights. Furthermore, if dsc_engine is found to have a critical vulnerability, the stablecoin cannot be migrated to a patched contract without re-deploying a new token and completely abandoning the old token.
Architectural Deadlock: The protocol cannot perform system upgrades or migrate to a new engine.
Permanent Loss of Governance: The deployer and DAO permanently forfeit the ability to manage token permissions or add complementary modules (e.g. Flash Minting, PSM).
Verified in tests/unit/test_poc_audit.py::test_poc_permanent_dsc_ownership_lock:
Moccasin v0.4.4
Titanoboa v0.2.8
Pytest
Do not transfer DSC ownership to the engine contract. Instead, retain DSC ownership in a multi-signature wallet or governance Timelock contract, and only grant the minter role to dsc_engine:
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.