-
Notifications
You must be signed in to change notification settings - Fork 86
Open
Description
Problem
With the merging of #1691 there is now no way to prove commit a precommitment that includes deal ids. This means there is now an extra big footgun in builtin actors where an SP can
- Seal a sector with deals
- Precommit including the deal ids by mistake
- Wait more than a day + old 900 epoch finality (max precommit lookback)
- Realize there's no way to provecommit this precommitment with deal ids on chain prove_commit_sectors3 will just fail because it doesn't deal with precommits with deal ids.
- Never be able to pre commit this again because we are past precommit lookback
- All sealing cost is wasted
In practice people probably don't run into this since lotus-miner and curio are updated to handle this properly. But its a bad footgun to carry around with us. Before the latest change you could always gather together 3 extra sectors and then prove commit aggregate them (which unlike prove_commit_sectors3 did not require no deal ids on chain).
Solution
We should
- Assert deal_ids are empty and immediately fail on precomit. It would be even better to change the message format but thats too much of a pain requiring rolling a whole new method etc.
- Remove all deal checking /weight calculation code from precommit and therefore all of miner actor. Here are some things that can go
- Remove this with an assertion that deal_ids must be empty otherwise the whole method fails.
- Remove this
- Remove this
- Remove this method
- Remove usage of the verification return
- Remove checking between market actor computed unsealed cid and declared. Note that with no deal ids this is now always checked against commps of piece manifests during prove commit here with call originating here:
- Remove VerifyDealsForActivation from market actor entirely. We should triple check that there are no external callers but I am 95% sure there is nothing else.
This will be a substantial cleanup to the precommit flow and the mental model of what is going on with commd declaration vs computation during pre and prove commit.
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
📌 Triage