fork of radicle with Git LFS support, backed by IPFS
Go to file
Alexis Sellier 2f07b76fcb
Switch to our own DAG representation for COBs
We're using petgraph to encode an operation based CRDT (each graph node
is an operation) as a DAG, and one of the important things to ensure
is that the final state is not influenced by the order of concurrent
operations. In this case a concurrent operation would mean two potential
graph traversal orders, as there's no direct edge between the two
concurrent ops. This is essential a "partial order" of operations.

To be able to test this, we'd want some kind of control over how
neighbors are iterated over I guess, when there's more than one possible
sort order. Say we have a graph like this:

             ┌────────b◄─────┐
             ▼               │
             a               d
             ▲               │
             └────────c◄─────┘

There are two possible topological traverse orders: [a, b, c, d] and [a,
c, b, d]. Having a way to go through these different orders would
be super handy.

One option would be to allow random order traversal. This would allow us
to test all orders by running the test enough times to likely test all
permutations.

Since petgraph doesn't support this, we implement our own simple DAG in
`radicle-dag`, which implements random-order topological orders.

For now, we don't make explicit use of these improvements, we simply
replace the underlying graph with our own.
2022-12-28 13:34:17 +01:00
.github/workflows Upgrade Rust to 1.66 2022-12-15 20:55:26 +01:00
.nix nix: update sources for rust-1.66 2022-12-19 13:03:15 +00:00
radicle Improvements to keystore 2022-12-27 13:43:16 +01:00
radicle-cli Improvements to keystore 2022-12-27 13:43:16 +01:00
radicle-cob Switch to our own DAG representation for COBs 2022-12-28 13:34:17 +01:00
radicle-crdt Make `Transaction` generic, move to `store` 2022-12-13 10:16:18 +01:00
radicle-crypto crypto: Fix an 'unused import' warning 2022-12-27 17:31:30 +01:00
radicle-dag Switch to our own DAG representation for COBs 2022-12-28 13:34:17 +01:00
radicle-httpd httpd: Use `TraceLayer` on uppermost router 2022-12-26 15:56:21 +01:00
radicle-node Upgrade Rust to 1.66 2022-12-15 20:55:26 +01:00
radicle-remote-helper Upgrade Rust to 1.66 2022-12-15 20:55:26 +01:00
radicle-ssh Update to Rust 1.65 2022-11-05 12:47:26 +01:00
radicle-tools Improvements to keystore 2022-12-27 13:43:16 +01:00
.dockerignore Dockerize services 2022-12-14 17:15:40 +01:00
.gitignore Initial commit 2022-09-13 10:13:13 +02:00
CONTRIBUTING.md Add licenses and contributor information 2022-11-16 12:26:12 +01:00
Cargo.lock Switch to our own DAG representation for COBs 2022-12-28 13:34:17 +01:00
Cargo.toml Switch to our own DAG representation for COBs 2022-12-28 13:34:17 +01:00
DCO Add licenses and contributor information 2022-11-16 12:26:12 +01:00
LICENSE-APACHE Add licenses and contributor information 2022-11-16 12:26:12 +01:00
LICENSE-MIT Add licenses and contributor information 2022-11-16 12:26:12 +01:00
README.md Add placeholder README 2022-10-14 13:19:28 +02:00
build.rs httpd: implement `git` fetch-only server 2022-10-19 11:36:16 +02:00
docker-compose.yml Build container images for deployment 2022-12-14 17:15:40 +01:00
rust-toolchain Upgrade Rust to 1.66 2022-12-15 20:55:26 +01:00

README.md

❤️🪵

Radicle Heartwood Protocol & Stack