onflow / onflow/flow-go

[LN Decentralization E] [Ingest] Access Nodes multi-cast transactions to target cluster

Open
#8,136 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Preserve
Dominant language
Go
Stars
575
Forks
217
Avg merge
4d 20h
Merged PRs (30d)
9

Description

Context

Currently Access Nodes send transactions to Collection nodes (1) via GRPC and (2) not consistently to the cluster responsible for the transaction. The use of GRPC is an undesirable historical artifact, which should be replaced by LibP2P communication. Access nodes know which cluster is responsible for the transaction, so they should send the transaction to that cluster directly, and should use multicast to replicate the transaction among several members of the cluster.

See https://github.com/onflow/flow-go/issues/8073#issuecomment-3503808550 for additional context.

Definition of Done

(Please complete each of the following in separate PRs)

  • Remove GRPC server and corresponding engine and startup flags from Collection Node
  • Update Access Node to multicast transactions to Collection Nodes in the responsible cluster
    • Access nodes use the reference block to find the responsible cluster, and multicast to a subset of that cluster
    • The "replication factor" flag and option should be moved from Collection node to access node
    • We may need to update the message type allow-list to allow ANs to send transactions to LNs over LibP2P
    • Some progress has been completed in jord/8073-tx-ingest-audit
  • Update Collection Nodes to reject transactions their cluster is not responsible for
    • Some progress has been completed in jord/8073-tx-ingest-audit
General Permissionless Guidelines
  • Update documentation if necessary, resolve any BFT-related TODOs (eg. for origin validation)
    • If already BFT resilient, ensure documentation exists explaining why
  • Ensure error paths indicating malicious inputs trigger a notification (see HotStuff as example), consumer of notification should log using LoggingTagSuspicious for now.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with cmd/collection/main.go for the replication factor option and network/message/authorization.go for the message allow-list. Review the progress in jord/8073-tx-ingest-audit and the ingestion path at engine/consensus/ingestion/core.go, including origin validation. Done means separate changes remove Collection Node gRPC handling, multicast transactions from Access Nodes to the responsible cluster, and reject transactions for other clusters, with required documentation and notifications.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
blockchain, distributed-systems, networking
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.