go-algorand
go-algorand copied to clipboard
Optimize redundant proposal generation
Summary
Currently, the agreement service is attempting to create a proposal if a node has participation keys. Once a proposal is created and signed, it attempts to verify the signature on the proposal. If the signature is invalid ( i.e. the node was not elected to make the proposal ), the proposal is dropped.
Scope/Requirements:
The goal of this task is to perform the testing whether we need to make a proposal before attempting to make it. If we don't need to make a proposal, we should quit right away. The testing of whether we'd want to make a proposal should still be executed is a background go-routine, but no attempt to make a proposal should be made. Relays can maintain a pool but shouldn't call generateBlock
Reason for priority
This issue could be part of the performance project that we're working on - and this is where its priority is. Past attempts shown that it gained up to 10% on payment transactions, but it's unknown if this still holds true.
tl;dr: NPNs and relays currently waste CPU trying to create proposals. Stop doing this. Perf enhancement
Proposal generation should be conditional on if your node has online accounts.