Verifying submitted Window PoSts is expensive, and that cost can drastically increase when network congestion causes the gas base fee to rise. To address this, Filecoin Improvement Proposal FIP-0010 enables node operators to optimistically accept Window PoSts on-chain without verification, allowing them to be disputed later by off-chain-verifiers.
Window PoSt messages are necessary for ongoing maintenance of storage power. Verifying the submitted proofs is expensive, and when the gas base fee rises due to congestion, these messages become even more costly. For miners with mostly empty partitions, this cost can exceed their expected rewards from maintaining power. We need to ensure that these messages are cheap for miners, even when specifying a very high gas fee cap.
The Filecoin Improvement Proposal 0010 (FIP0010) allows miners to optimistically accept Window Proof of Spacetime proofs (Windows PoSt) on-chain without verification, allowing them to be disputed later by off-chain verifiers. Any Lotus node may dispute any on-chain storage proofs submitted in the past 1800 epochs (~15h) by invoking
When a dispute successfully refutes an optimistically accepted Window PoSt, the miner is fined one invalid proof fee (IPF) per active sector in the partition at the moment when said miner submitted the proof, plus a flat fee of 20 FIL. All incorrectly proved sectors are marked faulty, and the address that submitted the dispute is awarded a fixed
Penalties and rewards
The penalty for submitting an invalid Window PoSt and the reward for submitting a valid dispute are both subject to change. At the time of writing, those values are:
|Invalid proof fee (IPF)||(5.51 * the expected block reward per sector in 24 hours) + 20 FIL|
|Valid dispute reward||4 FIL|
Run the disputer
You can run the disputer by using the
chain disputer command within Lotus. The following examples were run on a local devnet.
Fully sync a Lotus node.
chain disputerfunction with the following options, following by the
The maximum amount of
FILthat you are willing to spend for a
The address you want to send the messages from. If an address is not specified, Lotus will use the default address.
lotus chain disputer --max-fee 1 --from t3r25povzrwpomqlwtxtt25ou76galexvgr3ucgvvtwxiwy2gtqltlzshmtdyz4ys7mt5phoouedengajltbka start > checking sync status > Worker: 101; Base: 0; Target: 0 (diff: 0) > State: <unknown: 0>; Current Epoch: 0; Todo: 0 > Validated 4 messages (1 per second)
The disputer will continue to verify submitted WinPoSts. To end the disputer press
> Exit by user > setting up window post disputer > 2021-02-22T17:44:11.362-0500 ERROR rpc firstname.lastname@example.org/client.go:392 got rpc message with cancelled context: context canceled > ERROR: Notify stream was invalid
You can safely ignore any stream errors when exiting the disputer.
You can manually send a specific dispute message using the
dispute command. This feature has a very narrow use-case and is for advanced users only. To perform a manual dispute run
lotus chain disputer dispute [minerAddress] [index] [postIndex], where:
|The miner id that submitted the proof you want to dispute. The same address is also the recipient of the message|
|The deadline index of the proof you want to dispute for the miner.|
|The post snapshot index.|