New contract called InfractionCollector (Feel free to rename it, btw!)
For the moment, ownable and upgradeable.
InfractionCollector lives in Polygon, alongside Coordinator and TACoChildApplication
Replace reference to Adjudicator in TACoChildApplication with InfractionCollector
InfractionCollector will have a reference to Coordinator and will have a permissionless method reportDKGInfraction, with parameters a ritual ID and an array of staking provider addresses:
The method will check for unambiguous faults in the given DKG ritual that are attributable to the specific providers.
For example, DKG that timed out due to failure to post transactions during the transcript phase.
Other cases like aggregation mismatches or failures to post aggregations will require more complex verification, so let's start with this, but let's continue to think other faults that can be unambiguously attributed to specific providers.
InfractionCollector
(Feel free to rename it, btw!)InfractionCollector
lives in Polygon, alongsideCoordinator
andTACoChildApplication
Adjudicator
inTACoChildApplication
withInfractionCollector
InfractionCollector
will have a reference toCoordinator
and will have a permissionless methodreportDKGInfraction
, with parameters a ritual ID and an array of staking provider addresses:TACoChildApplication.penalize(stakingProviderAddress)
. See: https://github.com/nucypher/nucypher-contracts/blob/449ec475c433043d53bff2b55eaab91d9d71c60e/contracts/contracts/coordination/TACoChildApplication.sol#L202InfractionCollector
so they can't be reported twice.