-
Notifications
You must be signed in to change notification settings - Fork 8
Description
Hi Ginger Wallet team 👋,
We at WalletScrutiny.com performed an independent reproducibility verification of Ginger Wallet Desktop v2.0.21. Thank you for making the source code fully available and for adopting strong reproducibility-friendly practices in the project configuration.
Unfortunately, our builds did not match the official release binaries. Below is a detailed breakdown of what we found, along with some suggestions on how we can work together to close the gap.
🔧 Verification Summary
- App Name: Ginger Wallet Desktop
- Version Tested: v2.0.21 (
e524d22035) - Official Release: Ginger-2.0.21-linux-x64.zip
- Official SHA256:
fa149b5382e4237a3405752e19584a93c5ee4475e8d1be2fb3f0ed1096e293c0 - Build Environment: Docker container, Ubuntu 22.04, .NET SDK 8.0.100
- Method: Deterministic build (
dotnet build -c Release --no-restore) and SHA256 comparison of assemblies
📦 Assemblies Compared
| Assembly | Our Build SHA256 | Official SHA256 | Status |
|---|---|---|---|
| WalletWasabi.Fluent.Desktop.dll | 5c54ba7ceb001bbc82d656568d7978b9bdc2dd99893be7017605fa6e4adbbd34 |
008a4972ac58e953dcf28d4ac86828eca6559937c0bcc0ec021341b9da138582 |
❌ |
| WalletWasabi.dll | 002724119a43c32252647188693b4c5607fcf228b77dc20d72610a548e930e1c |
276179c0a21a03387e47ab387cf5511934f05a25439a6484c296c95a3bf02c4e |
❌ |
| GingerCommon.dll | 01f9ed9bc5670a1ee5a7fde96cee95f375b9d93321f545187598a19f8892fcc1 |
7ee83b9b5fb4fc928b672634038d93d19481c1011c1ecec23e41b0587671f305 |
❌ |
🔍 Observations
✅ Strong Points
- Deterministic build settings enabled (
Deterministic=true,DebugType=none,DebugSymbols=false). - SDK pinned (
8.0.100) viaglobal.json. - Centralized package management and lock files in place.
- Package sources explicitly cleared and defined (
nuget.org+ Avalonia feed). - Path mapping configured to normalize builds.
❌ Where Divergence Appears
- Assembly versions differ (
1.0.0.0vs2.0.21.0) unless parameters are injected. - Even after injecting version parameters, hashes still diverge by ±1KB–100KB.
WalletWasabi.csprojembeds aCommitHashvalue that may vary between CI and local builds.TargetLatestRuntimePatch=truecould introduce runtime-level variation.- Prebuilt binaries (Tor, bitcoind, HWI) are bundled directly—unclear if these are deterministically sourced.
💡 Recommendations
To enable full reproducibility verification, it would help the community if you could:
- Document the official build process
- Exact
dotnet publish/dotnet buildcommands (includingAssemblyVersion,FileVersion,InformationalVersion,CommitHashparameters). - Whether
dotnet publishwith RIDs, trimming, or ReadyToRun is used. - Post-build steps (signing, zipping, stripping).
- Exact
- Provide environment details
- The Docker image or VM used for official builds.
- Confirm whether SDK 8.0.100 patch levels and runtime patching affect outputs.
- Clarify bundled binaries
- Provenance of Tor, bitcoind, and HWI binaries.
- Ideally link to deterministic upstream builds or provide reproducible instructions.
- Consider a CI reproducibility check
- Add a GitHub Action that rebuilds from source and compares to the official release artifacts.
- This would allow independent parties to confirm reproducibility automatically.
🤝 Invitation
We appreciate the great work already done to make Ginger Wallet reproducible-friendly. With a little more transparency about the official build process, we’re confident this can be fully reproducible.
Would you be open to:
- Sharing the exact build scripts/parameters used in your release pipeline?
- Clarifying the origin of the bundled binaries?
- Working with us on a reproducible build attestation?
This would let us mark Ginger Wallet as ✅ Reproducible on WalletScrutiny instead of ❌ Non-Reproducible.
Thanks for your time and for all the work you’re doing on privacy-preserving Bitcoin wallets! 🙏
Daniel (WalletScrutiny)
https://walletscrutiny.com