Hey VoidDragon — confirmed resolved on my end. I pulled commit 653bf0848 and verified both vectors:
- Trailing-byte (Round-1): the dead
Option<Option<()>>check is nowensure!(estimated == byzantium_threshold(full authority set), Round1PackageInvalidLength). Importantly it’s not theR-1invariant we discussed avoiding — padded packages now fail at registration, and honest packages (which always carry exactlythreshold(N)coefficients) can never be rejected by it. - Malformed slots (Round-2):
gather_incoming_offchain_packagesis gone;ecdh_decrypt_round2_packagesnow iteratesround1_packagesand marks decode failures inaccused_indexes, so a malformed sender lands on the complaint path instead of being silently dropped.
I also compiled ghost-exodus at that commit and ran the pallet suite: the new test_dkg_robustness_against_malformed_scale_slots passes and the full suite is 28/28 green — no regression on the honest paths.
Thanks for the quick turnaround on the fix. Happy to re-run my standalone reproducers against this commit too if you’d like an extra confirmation.
One more thing while I have you: could you explain how the payout side of this program works? Is there a fixed scale per severity (e.g. what a Medium pays), who makes the severity/payout call, and roughly what the timeline looks like from fix-confirmation to payout?