Summary
Here are some of the main things to highlight since the last dev update:
- We have finished with the changes in Routing required to expose an
async
API, with only some minor issues left to be fixed before we consider this task done. - The remove parsec PR has been raised, with work ongoing to resolve failing CI tests.
- We’re changing to Title Case for the Safe Network (as opposed to SAFE Network).
CRDT
safe-fs
This week focus has returned to the filesystem layer that will integrate the tree CRDT with FUSE. A solution was implemented and tested that encodes both a replica_id and inode identifier into a single 64 bit unsigned integer used by the FUSE API. This solution requires fewer lookups and less code than the original design. Details
We also performed some tests of filename conflicts between replicas. In the Tree CRDT, a filename is just metadata and can be duplicated. But in a filesystem, it’s not OK to have two directory entries with the same name. For now, we are going with a resolution strategy that the last-writer gets to keep the original filename, and any loser is renamed to <filename>.conflict.<replica_id>
. Details
Lastly, work has begun to implement the filesystem layer in Rust + Fuse. For now we are using the polyfuse library, but that could change. As this work progresses, it will finally be possible to mount and write to a crdt_tree based local filesystem, which has been our Phase 1 goal.
Safe Client Libs and quic-p2p
Safe Transfers Project plan
Safe Client Libs Project plan
Safe Vault Project plan
We’ve started the documentation effort for Safe Client Libs, progressing with Rust doctests (documentation that is verified by the compiler and can be tested as part of CI) for large parts of the API there. While SCL itself will still not be wholly stable until we get quic-p2p fully updated in there, this does give us some guarantees for the code which we’re now using for CI once more. There have also been some other code quality issues fixed, plus some refactoring afoot there too.
We’ve been making a few improvements to the quic-p2p async API which will allow us to re-use streams to exchange multiple messages between peers. This removes the need to create a new stream for every request-response pair. The consumer of the API can hold on to the streams as long as they need to and gracefully shut it down when they are done. We have also started migrating the unit tests to use the new API for continuous testing and integration.
Alongside this, we’ve also begun upgrading the rest of our repositories to use async quic-p2p, consequently making them async as well. BLS-DKG is the repo under the microscope right now - we’ve started updating it to async, fitting it flush with the new quic-p2p APIs and features.
Routing
Adam made great progress on the parsec removal (plus relocation refactoring) work before going on leave at the end of last week, with the in-progress remove parsec PR raised. There are some failing tests, due to the huge scope of the refactoring, which need to be resolved before it would be considered ready to fully review and merge.
With Adam on leave this week, Qi picked up the task of resolving these failing tests, raising a WIP remove parsec PR for rebasing and resolving the issues found. At this point the unit tests are successfully passing, with Qi now tackling failing integration tests. The progress is steady, and we hope to see those CI gradually re-appearing for this critical refactoring work.
We’ve also finished with the changes in Routing required to expose an async
API, having the message handling logic now fully integrated with the new API and the new internal async
design. We are now trying to fix some minor issues which will be the last thing required to consider this task done. During this refactoring, and thanks to the async
migration, we’ve seen some other areas of improvement which we are keeping out of the scope for now, e.g. breaking up some modules into smaller ones that encapsulate their responsibilities.
We’re changing to Title Case for the Safe Network
As most of you will know, the Network’s name is an acronym formed from the phrase: Secure Access For Everyone. For the most part, when referring to the Network, you’ll have seen that in upper case, as the SAFE Network.
But in other areas you’ll see it in Title case, for example Safecoin, or MaidSafe.
There are no hard and fast rules on how acronyms are supposed to be used, and we’ve never standardised anything until now, but we’ve made the call to start using title case, and embrace writing it as the Safe Network. We hope you will too.
It may seem trivial, but there are a few reasons why we think it’s worth doing:
- Safe Network, and Safe, is much more ergonomic. Using the all-caps acronym doesn’t work in many circumstances, as it becomes less readable, and less understandable. E.g. #SAFENetwork vs #SafeNetwork, SAFEID vs SafeID.
- The meaning of the acronym is built into the definition of the word itself; We can still explain it is an acronym when we need to, but we aren’t sacrificing the ergonomics for general use.
- The word safe embodies the project too, which is good. And it’s “Safe Network”, written as it is pronounced, that we want to stick.
- We’re in a techie world which suffers under an abundance of acronyms and initialisms, and it can make things almost impenetrable at times. So if we don’t need to surface the acronym, we shouldn’t.
- We actually already use it this way in many places: Safecoin, MaidSafe, SafeID, repo names etc. It would be nice not to have this weird mix.
So happy Safe Networking folks! Your shift key will thank you.
Useful Links
Feel free to reply below with links to translations of this dev update and moderators will add them here:
As an open source project, we’re always looking for feedback, comments and community contributions - so don’t be shy, join in and let’s create the Safe Network together!