This week we’re finalising the introduction of range-based searching into the code base. This is a vital intervention as it gives us protection against Sybil attacks.
That sort of attack goes as follows: Knowing the address of a chunk of data or a spend attempt, a well-resourced attacker can obtain nodes close to that address. Once it controls the five (say) closest nodes, in classic Kademlia it can then deny access to the data and possibly orchestrate double spends.
With range-based searching, instead of just asking the closest five nodes for the data, we expand the search to ask nodes up to a certain distance away. Remember that each node has a completely different view of the network so we are opening up a huge number of routes to the data. By this means, we can be sure to cover the entire search space and find the data. Once we find it we can also put data to nodes that should have it but apparently don’t, and if they continue to misbehave, shun them. Because all data on Autonomi is signed and self-validating this process can be very quick, and add to the resiliency of the network. This range-based searching code will be making its way into main soon.
The current release candidate 2024.09.13 features a lot of work from @anselme including a refactor of the Spend data type to make it lighter and simpler; redesign of the entire transaction system reducing the code size and complexity by an order or magnitude; rework the internals of Transfer and CashNote; and removal of obsolete code. Plus, there’s reduced replication range to reduce base traffic for replication and improvements to fetching of registers, among other gains.
Thanks @loziniak for the issue asking about a possibly redundant method. If the team doesn’t get back to you soon, give us a nudge.
General progress
@mazzi and @jimcollinson released a new version of the Node Launchpad (v0.3.13). This fixes the 0: storage mountpoint
error — an important bug squash.
They’ve also been working on the next update, which will add the the ability to select connection protocol and choose custom ports for port-forwarding.
You can get your hands dirty and test it for us before it’s official release next week. The more eyes on the better.
@mazzi also opened a PR with some additional styling tweaks. He also worked on a hotfix for the launchpad with @chriso and debugged the Discord-bot.
On the topic of Discord, @rusty.spork reports that things are better on the nano earnings front, but not perfect. The Discord community continues to grow, with Wave 3 surpassing 500 members. Another positive sign is the steady increase in nodes, which now exceed 53k. Some users are reporting a PID process was not found
error with Launchpad and safenode-manager
, which we are investigating.
As well as the work on the transactions, @anselme has been focused on registers, namely how we gracefully handle the register storage size limit in order to manage files and folders.
On network launching and testing, @chriso has been incorporating the latest fixes into the release candidate, including fixing a storage mount issue, improved management of external addresses for better connectivity on roaming connections, and more, as mentioned above. Among other issues @shu has been implementing some metrics regarding the health of uploaders.
@qi_ma has been optimising the store cost algorithm as well as looking into the auditor to speed up its tracking of transactions. He also raised a PR regarding pricing refactoring.
@mick.vandjike has also been working in this area, focusing on transaction verification logic.
@joshuef is putting the finishing touches to our range-based searching algorithm (see above). He also put in a PR that enables node-side encryption by default.
Finally, @bzee and Ermine have been working on WASM, getting a test connection to work. Networking works great, as libp2p
has websocket support (required for WASM), but there are a few places where our code contains file paths, which will need to be changed or worked around. Benno is also continuing to document the API.