- I did not use VOUTE's system because the address size would be up to 32x as large (32x128-bit coords=4096 bits vs just 128)
- Fortunately, they represented PIE in a weird way that was much more pragmatic than the real thing
- VOUTE's version of PIE is not isometric, and their distance metrics would not work on the original PIE
- But their version is easier to encode and more practical in resource constrained systems like the ESP32
4. Track a tree state 1-byte checksum of the elected root's ID
- Address buffer holds previous address to maintain routability across tree state transitions
- Sounds good enough in theory that I implemented it, but it will require experimentation to prove utility and tune
- The child takes the parent's address with an appended coordinate.
- Coordinates at a level in a sub-tree should be unique; parents just count up.
Example: root with empty coords; its children have two unique coords held in the
first nibble of the address; their children have additional unique coords within
their levels in their subtrees; etc. Dotted lines are non-tree connectivity.
Greedy routing requires only local data -- it does not require the full network
graph to find a path as long as a path exists.
The basis for the distance metric is the common prefix length between two addresses.
It is the number of preceeding coordinates that are identical.
dTree tends to prefer routing through nodes close to the tree root while dCPL may
prefer longer routest hat avoid the tree root, instead forwarding to nodes in the
same sub-tree.
The coordinates used for calculation are slightly different.
Example taken directly from the VOUTE paper demonstrating how the two routing
metrics behave. Also used in unit tests.
As is the tradition of those who have come before, we have to discuss the core
turbo encabulator that makes the whole project run.
Just kidding. But we will discuss encapsulation a bit.
The enacapsulation is conceptually simple: a Package intended for an Application
contains the App's ID and a checksum, then it gets encapsulated in a Packet or
Sequence of Packets from which it is reconstructed for delivery to the locally
running Application. Applications can encapsulate Packages for other Apps; a real
example of this is how Ping and DebugApp can send Packages encapsulated by Gossip.
All packets share a header, but the rest of the packet is determined according
to the schema identified in the header. There are over twenty schemas right now
for ESP-NOW and RYLR-998, and more can be made for additional interfaces.
All packets share a header, but the rest of the packet is determined according
to the schema identified in the header. The idea was to have flexibility during
development; we can trim the useless ones in the future if necessary.
- Beacon currently transmits locally-running App IDs but is intended to transmit public keys
- Gossip is used by both Ping and DebugApp
- Pin can use Gossip or routed mode
1. Modem sleep feature includes an intersection algorithm to ensure that a
receiving node is awake before the data is sent. This requires further testing
and dev work.
2. Implemented the micropython wrapper for TweetNaCl's ed25519 operations, but
it was far too slow, ~1 second to create or verify a signature. TweetNaCl is
optimized for compact code rather than performance.