Skip to content

Make commit-reveal mandatory #1957

@ppolewicz

Description

@ppolewicz

Not using commit-reveal allows weight copiers to operate and take a portion of dividends meant to go to holders and validators running the infrastructure.

Commit-reveal has a long history now. sn12 deployed CRv1 and has shown that it can kick weight copiers out, then CRv2 was deployed mostly to remove numerous issues with CRv1 implementation, but it was hard to use it. CRv3 was born to make it easier to use, but there have been security issues and finally now that CRv4 resolved them, we can see that the weight copiers largely gave up on subnets where commit-reveal is enabled.

The problem is that many subnets still don't use commit-reveal and it really is time to... disable the support for weight copying.

I propose the following changes:

  1. Change the default value of commit_reveal for new subnets to Enabled
  2. Make 1 the minimum for commit_reveal_interval
  3. In a migration for all subnets which currently have commit_reveal_interval set to 0, change it to 1
  4. In a migration for all subnets which currently have commit_reveal set to Disabled, change it to Enabled
  5. Make commit_reveal hyperparameter sudo only
  6. Remove support for CRv3 (breaking compatibility with bittensor python sdk < 9.9.0, but CRv3 is as secure as set_weights(), so...)

Schedule

Points 1, 2, 3, 4 to be done on 2025-08-25
Point 5 (and 4 repeated) to be done on 2025-09-01
Point 6 to be done on 2025-09-08

Why not remove set_weights() entirely

If drand ever breaks, we'd prefer to be temporarily vulnerable to weight copying, than not being able to set weights at all.

What about miner feedback?

After the last round of updates, the concealment period can be less than a minute (reveal happens 4ish blocks after epoch). So in CRv4 it's not really a problem anymore (unlike CRv1, CRv2, CRv3).

What about cooperative validation?

The concealment period is 4 blocks or so, so not a problem, but if you need to motivate validators to find a new leader quickly, use Yuma 3 + Liquid alpha 2.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions