This week, with some major hurdles now behind us, including membership implementation, handover consensus alllmost merged and the squashing of the memory spiking bugs that were plaguing the testnets, we thought it would be good to have a look at what we’ve achieved and what is still left to do.
General progress
DBC integration continues to go well. We’ve more client side improvements in place, and the start of some POC node-side DBC storage also on the go. Plus a messaging PR in the works to link all it all up.
The Handover consensus work is mostly there, which provides more consensus backed logic to section splits and elder elections (we’re seeing sporadic issues on CI so digging in there now). But the handover code, coupled with some changes tying DKG to specific generations, seems to have improved section startup quite a bit, which is great.
We’ve continued some ongoing refactoring work, organising the safe_network
repo, and we’ve started looking at what “light” nodes look like, and what a node running bare “network system” code looks like. The reason for this was to help debugging by having a mode modular system where we could, for example, turn off data
and only run dbc
code, or turn it off altogether. Our testing there was encouraging - with data turned off, nodes were topping out at around ~45mb memory, and we’ve happily had ~90 running on one machine with several section splits .
Progress report
Section membership
This is what allows elders to keep control over the adults in their section.
Progress: Now integrated into the network code
Todo: We’re still looking into distributed key generation (DKG), the mechanism by which elders reach agreement on the new section key, to see if there are perhaps other routes here which could remove the requirement for consensus altogether.
Data handling / handover
Redistributing chunks when an adult goes offline, and gracefully handling splits.
Progress: Mostly done but we’re still seeing some failures due to DKG not working as we’d like
Todo: Fix DKG issues; Caching on elders
Messages and memory spikes
Aside from inter-elder communications, most messaging is handled by anti-entropy (we reply with missing information so a node can update and retry its message if needs be, eliminating the need to cache messages), and qp2p.
Progress: Messaging spikes fixed
Todo: Optimising AE
Liveness testing
Regularly testing that nodes are online, and taking action if they are not. This has been expanded to penalise nodes not only for dropping chunks, but also for dropping connections and being behind in terms of network knowledge, so we should hopefully catch more dysfunctional nodes earlier, and increase the network health overall.
Progress: First pass: Completed!
Todo: Improve dysfunctional handling through proptesting.
Name Resolution System and domain names
NRS maps are multimaps (registers under the hood) that contain the mapping of all the subnames to Urls for a specific topname. Each topname has its own multimap.
Progress: API has been updated
Todo: Still deciding what to store as entries in the NRS map. The current (key - value) mapping is “subname” → Url, but for a better UX might be helpful to store the topname along with the subname as key in the map, like: “subname.topname” → Url. On the backburner for now
Monitoring / visualisation
ELK stack allows us to monitor and visualise the performance of all nodes in a testnet.
Progress: Completed. Closed testing underway (and already showing benefits, we caught this bug because we could clearly see one node spinning its wheels.
Todo: Shore up the deployment of ELK nodes and surrounding security so we can open this up to the community.
DBCs
DBCs are the mechanism by which transactions are made on the network.
Progress: Now being integrated into the network
Todo: DBC messaging; implement ordered DAG for auditing purposes; testing on testnet/live network. Implement data payment flows.
Wallet
The wallet is the user interface for carrying out transactions.
Progress: First and basic implementation of wallet reissue API and CLI commands completed
Todo: More work needed to get it production-ready; test with DBCs on the network
Payment to farmers
Adults and elders will be paid for their services by the network. There are some designs on the table, but they await the implementation of DBCs.
Progress: Basic design ideas
Todo: Implementation and testing when other elements allow
Users paying for storage
Similarly, we have some designs in place but await DBCs. Current thinking is for clients to use DBCs to pay for storage upfront, with the elders quoting a price to sign the names of those chunks, making them valid network data. Mutable data will need to be treated differently.
Progress: Design ideas
Todo: Implementation, testing, UX testing
Front end / UX
We have revealed some wireframes and designs for authentication / UX over the last few months, but obviously, those are the icing on the cake, and the cake’s not baked yet.
Progress: Basic look and feel, user authentication, lost credentials strategies, and other designs are done
Todo: Backburner for the moment; implementation when other elements ready, user testing
Governance
Foundation is being set up in Switzerland as a governing body separate from MaidSafe.
Progress: Going smoothly so far; authorities have requested documentation
Todo: Finish refreshed white papers; further discussions over details
Documentation
White papers covering the project from different angles, technical documentation.
Progress: New white papers on Token Distribution, Network Design, Token Design and Project Governance in draft form
Todo: Finish white papers; NRS docs, DBCs, etc
Licensing changes
License the core network under GPL3 with non-safe network crates being licensed under MIT/BDS so as not to limit client apps that can be built on it.
Progress: done, though automation could be in place
Todo: automate licensing management
eMaid
Community effort to optionally allow conversion of Omni Maid to ERC20 Maid.
Progress: Completed!
Useful Links
Feel free to reply below with links to translations of this dev update and moderators will add them here:
Russian ; German ; Spanish ; French; Bulgarian
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!