Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Network architecture #9

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open

Network architecture #9

wants to merge 3 commits into from

Conversation

tg-x
Copy link

@tg-x tg-x commented Jul 3, 2024

A brief introduction to the network architecture of Anoma.

It's a brief, high-level overview, leaving more details to the upcoming ART report.

Github-rendered post

@tg-x tg-x force-pushed the tg-x/network-architecture branch from 5e69a2b to 9ee85d2 Compare July 3, 2024 16:56
@tg-x tg-x requested a review from 0xapriori July 3, 2024 17:03
@tg-x tg-x force-pushed the tg-x/network-architecture branch from 9ee85d2 to 5810b68 Compare July 3, 2024 17:16
Copy link
Collaborator

@0xapriori 0xapriori left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall I think this is a wonderful post. See the comments mostly asking for

  • more details on specific terms/concepts
  • diagrams

- *Anycast*: messages sent to any known member of a domain.

## Network architecture

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here would be an excellent place to add a diagram that matches the text below.


## Node architecture

The system is based on the *actor model*,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a sentence explaining what the actor model is and why it is important?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say inspired by instead of based on, because we are tweaking things

also---as added benefit---we may hope that reader 's take on the actor model is possibly different w/o causing issues

This article serves as a brief introduction and high-level overview of the network architecture.

## Node architecture

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Diagram would be great to add here to help the reader understand.


## Domains

The network consists of sovereign domains that enable pluralistic interoperability.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain briefly what you mean by pluralistic interoperability.

A domain may be instantiated as one or more overlay networks that may or may not be inter-connected,
depending on the protocols run in the domain.
This allows both single-instance domains,
as well as [grassroots](https://arxiv.org/abs/2301.04391) domains
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe a brief compare contrast b/w grassroots domains and single domains beyond what is stated would be helpful

@tg-x
Copy link
Author

tg-x commented Jul 4, 2024

Added diagrams

@tg-x tg-x force-pushed the tg-x/network-architecture branch from 5810b68 to 3b36a5d Compare July 4, 2024 19:54
@0xapriori 0xapriori self-requested a review July 5, 2024 05:11
@0xapriori
Copy link
Collaborator

0xapriori commented Jul 5, 2024

Your diagrams are fantastic! Thank you for expanding on the flagged comments,

the only thing to add in the conclusion would be to say Anoma somewhere. Instead of "The Network architecture", use "Anoma's network architecture" or something to that effect.

Copy link

@heindel heindel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The present draft presents the relevant topics in a succinct way. Extremely useful for me, ʙᴜᴛ ...

... I wonder whether the post could be restructured, to follow the following pattern:

  • the question: how to get messages from A to B?
  • a first try / highest level of abstraction (nodes and links / overlay network)
  • a second try / putting in some detail (intra-node communication)
  • what we actually do (inter-node communication)
  • what we have not told you (e.g. domains, actor model, etc. here)

conclusion

  • seemingly simple question,
  • complexity builds up, and we haven't even touched
    • incentives
    • QoS
    • whatever you are doing research on when not writing posts

A different way to reorganize that comes to mind: think of how you would want to explain this to a first year student at university, and then scratch out all the details that you don't need and add a running example

excerpt: A brief introduction to the network architecture of Anoma.
---

## Introduction
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why should reader read this?

Is it cool, new, amazing, ... (I know, but reader doesn't ...


## Node architecture

The system is based on the *actor model*,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say inspired by instead of based on, because we are tweaking things

also---as added benefit---we may hope that reader 's take on the actor model is possibly different w/o causing issues


Each node has a cryptographic identity that uniquely identifies it in the network.
A node consists of a collection of running engines.
Local engines communicate with each other directly,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

directly
→ unencrypted message passing

or do you mean

directly
→ directly (in principle via shared memory)

not sure how to avoid the idea that we suddenly do not do message passing any more

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

both, though in this context it refers to direct messages between local engines,
and thus not via the router/transport engines


- *Unicast*: direct messages between two engines.
- *Multicast*: few-to-many messages sent to a publish-subscribe topic and delivered to all subscribers.
- *Anycast*: messages sent to any known member of a domain.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

domain is not explained before


<figure>

```mermaid
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in this figure,
ideally we would have two types of edges

  • links/connections/direct acquaintances
  • message hops

sth. like this
image

https://excalidraw.com/#json=qcijAZi3QPhjvbSiTntcl,yxzrxo8AKJKJ-E9gJS4_3w

## Network Architecture

The network consists of nodes that may communicate with each other directly,
and participate in any number of domains.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

... and also time to explain domains

## Domains

The network consists of sovereign domains.
A domain is a sub-network with its own *cryptographic identity*.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nodes also have crypto ids

  • what's the difference?
  • what are the commonalities

@0xapriori 0xapriori marked this pull request as ready for review July 14, 2024 03:59
@cwgoes
Copy link
Collaborator

cwgoes commented Jul 30, 2024

... I wonder whether the post could be restructured, to follow the following pattern:
the question: how to get messages from A to B?
a first try / highest level of abstraction (nodes and links / overlay network)
a second try / putting in some detail (intra-node communication)
what we actually do (inter-node communication)
what we have not told you (e.g. domains, actor model, etc. here)

I like this frame a lot - @tg-x wdyt / do you think you could organize the content like this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants