Protocol Labs Research
About
People
Research
Outreach
Blog
2021.5.18 / Blog
CryptoComputeLab announces proofs release versions 7.0.0 and 7.0.1

The Proofs Team is pleased to announce the recent release of version 7.0.0 of the proofs library. The most notable improvement is that we’ve replaced the old gpu code with the new gpu2 code. The new gpu2 code is a pure OpenCL implementation of the tree building in the PreCommit2 phase of sealing. This was an optional feature in proofs 6.1.0 that had to be manually enabled – but now it’s the default out of the box! The community feedback on this feature has been overwhelmingly positive, and enabling this by default was a natural fit.

We also took steps to improve the Unsealing code. The Unseal code paths worked properly but were not optimized for memory usage. It turns out that there were some simple changes we could make to heavily reduce the amount of RAM required during the unseal, even though RAM usage spikes are still somewhat present. Previously, when an Unseal operation was started, a large portion of RAM was allocated and reserved for the entire process, so avoiding that step and only using what is needed will help memory usage quite a bit.

We also improved the repo’s CI runtime. Re-organizing and splitting up the tests resulted in reduced test runtimes – some were cut nearly in half. While this is primarily significant for the development team, it’s certainly worth noting!

In the proofs tooling package, we have command line tools that use a library (dialoguer) to make the output look nicer and simplify user inputs. To our surprise, one of the dependencies (zeroize) of the library we used for this purpose was yanked (revoked from public repositories), so we were forced to update to using a later version of dialoguer in order to resolve proof compilation failures. Fortunately this problem was resolved quickly, but we wanted to make a note of it here to reflect the activity of this release development cycle.

Since the previous proofs release (v6.1.0), our code was generating build warnings about deprecated methods used around spin locking and compare-and-swap calls, so those methods have been updated. Release v6.1.0 updated the rust toolchain to the latest stable version 1.51.0, and with that update came a number of other warnings and errors related to language standard improvements. We’re happy to say that most, if not all, of the warnings have since been addressed in the v7.x release series!

One major issue that came up during this development cycle is the GPU support in the FFI library (the go to rust bridge code). It was our intention to enable GPU support by default, but a bug found in the FFI build process disabled GPU support unless it was explicitly enabled. This caused Window PoSt to be much slower than expected, as it was being computed on the CPU instead of the GPU. We addressed this by always enabling GPU support unless explicitly disabled by the end user when building FFI. We also addressed a related issue: the pre-built binaries uploaded for those that chose to not build FFI from source also had GPU support disabled; this has now been remedied.

Lastly, Proofs Version 7.0.1 addresses a build regression for the ARM/aarch64 platform and also adds support for the Apple M1 platform! In order to help treat aarch64 as a continued first class target, we’ve added CI testing to our proofs repo, and a couple of developers acquired M1 powered machines for ongoing development and testing.

For the full list of changes and links to all the pertinent details of this release, click here.

CryptoComputeLab"
We at CryptoComputeLab welcome further discussion of our research topics, and we're always on the lookout for opportunities to answer questions and develop collaborations. Please reach out via email ([email protected]) to start the conversation! If you’re interested in working with us on issues at the intersection of cryptography, high-performance computing, and programming language design, please contribute to the Open Problems in our Research Repo and check out our Open Positions.