Nethermind Privacy Engineering team's implementation of private payments for the Stellar network
See the code[!WARNING] This project is a Work in progress (WIP). It is intended to serve as a reference implementation of privacy pools for Stellar. The code has not yet been audited and should not be used in production environments with real assets as of now. The security hardening work is planned. Expect breaking changes and necessity to clear your local storage for the demo app/cli until the first stable release.
A privacy-preserving payment system for the Stellar network using zero-knowledge proofs. This implementation enables users to deposit, transfer, and withdraw tokens while maintaining transaction privacy through Groth16 proofs.
The system incorporates Association Set Provider (ASPs) as a control mechanism to provide illicit activity safeguards through association sets. ASPs maintain membership and non-membership Merkle trees that allow proving whether specific deposits are part of approved or blocked sets, enabling pool operators to enforce administrative controls without compromising user privacy.
Learn more in the blogpost.
The demo application consists on three main parts:
The Frontend includes the user-facing part and an example of an ASP admin page which will be separated according to roles in the main application.
The demo app demonstrates integration of the Stellar Private Payments JS/TS SDK.
This is the administrative control panel for managing the Association Set Provider (ASP) membership trees. It allows you to:
This provides illicit activity safeguards while maintaining user privacy. The ASP membership trees work with the zero-knowledge proofs to prove that deposits either belong to approved accounts or don't belong to blocked accounts—without compromising privacy.
The main transaction circuit proves:
none = unrestricted; allowlist, blocklist, or allowlist-blocklist)The spp command-line tool can be installed with a single command:
curl -fsSL https://nethermindeth.github.io/stellar-private-payments/install.sh | sh
This downloads the release binary for your platform (Linux/macOS, x86_64/aarch64),
verifies its checksum, installs spp to ~/.local/bin, and provisions the runtime
data dir (circuits, policy proving keys, license/notice texts). Then run spp --help.
The Stellar CLI is required. Install it separately with the official command:
curl -fsSL https://github.com/stellar/stellar-cli/raw/main/install.sh | sh
To install a specific release
curl -fsSL https://nethermindeth.github.io/stellar-private-payments/install.sh | sh -s -- --version v0.1.0
or the latest prerelease
curl -fsSL https://nethermindeth.github.io/stellar-private-payments/install.sh | sh -s -- --pre
CLI demonstrates integration of the Stellar Private Payments Rust SDK.
As a work-in-progress, this implementation has several limitations to be resolved in the nearest future:
The content published here may have been refined/augmented by the use of large language models (LLM), computer programs designed to comprehend and generate human language. However, any output refined/generated with the assistance of such programs has been reviewed, edited and revised by Nethermind.
This repository contains source code provided under a mixed license structure (Apache 2.0 and GPLv3).
Most of the source code is licensed under the Apache License, Version 2.0. See LICENSE for details.
The exception is tools/circuit-compiler which is licensed separately under the GNU General Public License v3.0 (it links iden3 Circom). See tools/circuit-compiler/LICENSE for details.
The dist/ directory and its contents (including compiled WebAssembly circuits, keys, and bundled JavaScript) are generated artifacts produced by the build process. They are not checked into this repository.
If you compile, build, or deploy this project (e.g., hosting the dist/ folder on a web server), you become the distributor of those binary artifacts. It is your responsibility to:
LICENSE and NOTICE files in your deployment directory.The maintainers of this repository provide the source code "as is" and assume no responsibility for the downstream builds or deployments.
Please check the issues.
If you're an external contributor, please check the issues with the label contributors-friendly.
See also Contributing.
Rust
71.2%
JavaScript
16.6%
Shell
6.1%
Circom
2.9%
HTML
2.9%
Nethermind Privacy Engineering team's implementation of private payments for the Stellar network
See the code[!WARNING] This project is a Work in progress (WIP). It is intended to serve as a reference implementation of privacy pools for Stellar. The code has not yet been audited and should not be used in production environments with real assets as of now. The security hardening work is planned. Expect breaking changes and necessity to clear your local storage for the demo app/cli until the first stable release.
A privacy-preserving payment system for the Stellar network using zero-knowledge proofs. This implementation enables users to deposit, transfer, and withdraw tokens while maintaining transaction privacy through Groth16 proofs.
The system incorporates Association Set Provider (ASPs) as a control mechanism to provide illicit activity safeguards through association sets. ASPs maintain membership and non-membership Merkle trees that allow proving whether specific deposits are part of approved or blocked sets, enabling pool operators to enforce administrative controls without compromising user privacy.
Learn more in the blogpost.
The demo application consists on three main parts:
The Frontend includes the user-facing part and an example of an ASP admin page which will be separated according to roles in the main application.
The demo app demonstrates integration of the Stellar Private Payments JS/TS SDK.
This is the administrative control panel for managing the Association Set Provider (ASP) membership trees. It allows you to:
This provides illicit activity safeguards while maintaining user privacy. The ASP membership trees work with the zero-knowledge proofs to prove that deposits either belong to approved accounts or don't belong to blocked accounts—without compromising privacy.
The main transaction circuit proves:
none = unrestricted; allowlist, blocklist, or allowlist-blocklist)The spp command-line tool can be installed with a single command:
curl -fsSL https://nethermindeth.github.io/stellar-private-payments/install.sh | sh
This downloads the release binary for your platform (Linux/macOS, x86_64/aarch64),
verifies its checksum, installs spp to ~/.local/bin, and provisions the runtime
data dir (circuits, policy proving keys, license/notice texts). Then run spp --help.
The Stellar CLI is required. Install it separately with the official command:
curl -fsSL https://github.com/stellar/stellar-cli/raw/main/install.sh | sh
To install a specific release
curl -fsSL https://nethermindeth.github.io/stellar-private-payments/install.sh | sh -s -- --version v0.1.0
or the latest prerelease
curl -fsSL https://nethermindeth.github.io/stellar-private-payments/install.sh | sh -s -- --pre
CLI demonstrates integration of the Stellar Private Payments Rust SDK.
As a work-in-progress, this implementation has several limitations to be resolved in the nearest future:
The content published here may have been refined/augmented by the use of large language models (LLM), computer programs designed to comprehend and generate human language. However, any output refined/generated with the assistance of such programs has been reviewed, edited and revised by Nethermind.
This repository contains source code provided under a mixed license structure (Apache 2.0 and GPLv3).
Most of the source code is licensed under the Apache License, Version 2.0. See LICENSE for details.
The exception is tools/circuit-compiler which is licensed separately under the GNU General Public License v3.0 (it links iden3 Circom). See tools/circuit-compiler/LICENSE for details.
The dist/ directory and its contents (including compiled WebAssembly circuits, keys, and bundled JavaScript) are generated artifacts produced by the build process. They are not checked into this repository.
If you compile, build, or deploy this project (e.g., hosting the dist/ folder on a web server), you become the distributor of those binary artifacts. It is your responsibility to:
LICENSE and NOTICE files in your deployment directory.The maintainers of this repository provide the source code "as is" and assume no responsibility for the downstream builds or deployments.
Please check the issues.
If you're an external contributor, please check the issues with the label contributors-friendly.
See also Contributing.
Rust
71.2%
JavaScript
16.6%
Shell
6.1%
Circom
2.9%
HTML
2.9%