The contract tracks confirmations using:
a mapping: s_signatures[txnId][signer]
a counter: s_transactions[txnId].confirmations
The counter is expected to always match the number of true signature entries.
The contract trusts the counter during execution (_executeTransaction) but never re-validates it against the signature mapping. If the counter ever becomes inconsistent (due to future changes, role revocation edge cases, or logic bugs), a transaction may execute with fewer real approvals than intended.
Likelihood:
Occurs when signer roles are revoked after confirmation
Occurs if future code paths mutate confirmations incorrectly
Impact:
Transaction executes with fewer than 3 valid signer approvals
Governance and multisig guarantees weakened
Recalculate confirmations dynamically at execution time OR enforce invariant:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.