algorand / algorand/go-algorand

Optimize redundant proposal generation

Open
#590 0 comments 0 reactions 1 assignee Claimed by @nullun View on GitHub
Medium Priority Performance Team Carbon-11
Dominant language
Go
Stars
1.4k
Forks
537
Avg merge
1d 7h
Merged PRs (30d)
18

Description

## 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.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.