distributed-lab / distributed-lab/private-multisig

Rotation keys not cleaned up on participant removal.

Open
#3 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
TypeScript
Stars
23
Forks
2
PR merge metrics
No merged PRs in 30d

Description

### Project version

0.0.0

### What happened?

When participants are removed via [_removeParticipants()](https://github.com/distributed-lab/private-multisig/blob/0a15062edc8c24447b470ca096c779df84937c08/contracts/ZKMultisig.sol#L341-L365), their rotation keys remain in the Cartesian Merkle Tree and the cumulativeRotationKey is not updated to subtract the corresponding rotation key. This allows removed participants to potentially use stale rotation keys in edge cases or causes incorrect encryption key computation for future proposals.

### Minimal reproduction steps

if you Initialize multisig with participants A, B, C\n2. Execute proposal to remove participant A\n3. Observe that A's rotation key remains in CMT and cumulativeRotationKey\n4. On next proposal, encryption key computation uses stale rotation key data.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start in contracts/ZKMultisig.sol at _removeParticipants(), especially the linked lines, and trace how the Cartesian Merkle Tree and cumulativeRotationKey are updated during participant removal. Reproduce the A, B, C removal scenario, then verify that A’s rotation key is removed and the cumulativeRotationKey is adjusted so later proposal encryption does not use stale data.

Written by the indexing model from the issue text.

Assessment

Tech stack
solidity
Domain
blockchain
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.