You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
With multiple rounds per block (2 seconds of consensus time), we've found that the DefaultIssDetector will not process StateSignatureTransaction's for non-boundary rounds, so ISS's are essentially not detected. We will need to change something for this in the PlatformWiring or the DefaultIssDetector. For now we are going to change release/0.60 and main back to 1 round per block (through changing BlockStreamConfig::blockPeriod to 0, falls back to roundsPerBlock).For more context:The key issue is in the PlatformWiring.java file where the wiring is set up:\
The transactionHandlerStateAndRoundOutput is created with a filter that only passes StateAndRound objects with a non-null reservedSignedState:
final OutputWire transactionHandlerStateAndRoundOutput = transactionHandlerWiring
.getOutputWire()
.buildFilter("notNullStateFilter", "state and round", ras -> ras.reservedSignedState() != null)
.buildAdvancedTransformer(new StateAndRoundReserver("postHandler_stateAndRoundReserver"));
This filtered output is then passed through the StateHasher and eventually to the IssDetector:
The problem is that only StateAndRound objects with a non-null reservedSignedState (which are only created for boundary rounds or freeze rounds) are passed to the IssDetector.This means:\
System transactions in non-boundary rounds are not directly passed to the IssDetector through the handleStateAndRound method.\
The IssDetector only sees system transactions from boundary rounds.This will lead to missed ISS detections if a boundary round doesn't contain the system transactions (StateSignatureTransaction) for an ISS round. Which will be almost always given a longer block period.
Proposed Solution
Change the output of the TransactionHandler to be RoutableData with two types of data: StateAndRound as it provides today, and Queue<ScopedSystemTransaction<StateSignatureTransaction>>. If the output is a StateAndRound object, it will be routed exactly as it is today. If it is a queue of signature transactions, it will be routed straight to the IssDetector. Thus, all signature transactions will be routed to the IssDetector either via the StateAndRound record or the queue.
The text was updated successfully, but these errors were encountered:
Problem
With multiple rounds per block (2 seconds of consensus time), we've found that the
DefaultIssDetector
will not processStateSignatureTransaction
's for non-boundary rounds, so ISS's are essentially not detected. We will need to change something for this in thePlatformWiring
or theDefaultIssDetector
. For now we are going to change release/0.60 and main back to 1 round per block (through changingBlockStreamConfig::blockPeriod
to 0, falls back toroundsPerBlock
).For more context:The key issue is in the PlatformWiring.java file where the wiring is set up:\The
transactionHandlerStateAndRoundOutput
is created with a filter that only passesStateAndRound
objects with a non-nullreservedSignedState
:final OutputWire transactionHandlerStateAndRoundOutput = transactionHandlerWiring
.getOutputWire()
.buildFilter("notNullStateFilter", "state and round", ras -> ras.reservedSignedState() != null)
.buildAdvancedTransformer(new StateAndRoundReserver("postHandler_stateAndRoundReserver"));
This filtered output is then passed through the
StateHasher
and eventually to theIssDetector
:hashedStateAndRoundOutputWire.solderTo(issDetectorWiring.getInputWire(IssDetector::handleStateAndRound));
The
DefaultIssDetector.handleStateAndRound()
method processes the system transactions from theStateAndRound
object:issNotifications.addAll(handlePostconsensusSignatures(stateAndRound.systemTransactions()));
The problem is that only
StateAndRound
objects with a non-nullreservedSignedState
(which are only created for boundary rounds or freeze rounds) are passed to theIssDetector
.This means:\IssDetector
through thehandleStateAndRound
method.\IssDetector
only sees system transactions from boundary rounds.This will lead to missed ISS detections if a boundary round doesn't contain the system transactions (StateSignatureTransaction
) for an ISS round. Which will be almost always given a longer block period.Proposed Solution
Change the output of the TransactionHandler to be RoutableData with two types of data:
StateAndRound
as it provides today, andQueue<ScopedSystemTransaction<StateSignatureTransaction>>
. If the output is aStateAndRound
object, it will be routed exactly as it is today. If it is a queue of signature transactions, it will be routed straight to theIssDetector
. Thus, all signature transactions will be routed to the IssDetector either via theStateAndRound
record or the queue.The text was updated successfully, but these errors were encountered: