# Deterministic Build

Reproducible [or deterministic] builds are a set of software development practices that create an independently-verifiable path from source to binary code. ~ ReproducibleBuilds.org

This guide describes how to reproduce Wasabi's builds.


# 1. Assert Correct Environment

In order to reproduce Wasabi's builds you need Git, Windows 10 and .NET Core 3.1 SDK.

# 2. Reproduce Builds

git clone https://github.com/zkSNACKs/WalletWasabi.git
cd WalletWasabi/WalletWasabi.Packager/
git checkout {hash of the release} // This works from 1.1.3 release, https://github.com/zkSNACKs/WalletWasabi/releases
dotnet restore
dotnet build
dotnet run -- --onlybinaries

This will build our binaries for Windows, macOS and Linux from source code and open them in a file explorer for you.

# 3. Verify Builds

You can compare your built binaries with the binaries distributed on the Wasabi website. In order to end-to-end verify all the downloaded packages you need a Windows, a Linux, and a macOS machine.

# Windows

After you installed Wasabi from the .msi package downloaded from the website, it will be in C:\Program Files\WasabiWallet folder. You can compare it with your build:

cd WalletWasabi.Gui\bin\dist
git diff --no-index win7-x64 "C:\Program Files\WasabiWallet"

# Linux & macOS

You can use the Windows Subsystem for Linux to verify all the packages in one go. Install the .deb package and extract the tar.gz and .dmg packages, then compare them with your build.

After installing Windows Subsystem for Linux, just type wsl in explorer where your downloaded and built packages are located.

# .deb

sudo dpkg -i Wasabi-1.1.11.1.deb
git diff --no-index linux-x64/ /usr/local/bin/wasabiwallet/

# .tar.gz

tar -pxzf WasabiLinux-1.1.11.1.tar.gz
git diff --no-index linux-x64/ WasabiLinux-1.1.11.1

# .dmg

You will need to install 7z (or something else) to extract the .dmg: sudo apt install p7zip-full

7z x Wasabi-1.1.11.1.dmg -oWasabiOsx
git diff --no-index osx-x64/ WasabiOsx/Wasabi\ Wallet.App/Contents/MacOS/