Partnerfy is a desktop application for creating and managing Simplicity covenant-based contracts on Liquid Testnet. It provides workflows for working with multisig contracts (P2MS) and covenant-enforced vouchers.
It won 3rd place in SatsHack III.
Partnerfy is a Dioxus desktop application (Rust) that enables you to:
- Generate and compile Simplicity source files for 2-of-3 multisig contracts
- Create covenant-based contract addresses on Liquid Testnet
- Fund contracts via the Liquid Testnet faucet
- Build, sign, and broadcast spending transactions
- Work with covenants that enforce specific output structures (voucher workflow)
The application communicates with Elements (Liquid) via RPC and integrates SimplicityHL and hal-simplicity for covenant creation and validation.
Partnerfy implements a covenant system where:
- Voucher UTXOs are locked under Simplicity covenants
- When a participant spends a voucher:
- Outputs must pay to approved partner addresses, the promoter (refund path), or a 2-of-m multisig
- Any change output returning to the participant is automatically locked again by the same covenant
- The covenant repeats recursively for all descendant outputs, ensuring funds remain within the system
| Role | Description |
|---|---|
| Promoter | Deploys the Simplicity covenant, funds voucher pool, distributes voucher UTXOs |
| Participant | Receives vouchers, redeems them at partner locations, inherits covenant on change |
| Partner | Accepts redemption transactions, validates them, and receives funds |
| Layer | Function | Tools |
|---|---|---|
| Frontend/UI | Desktop application UI | Dioxus |
| Logic/Core | RPC management, transaction assembly, Simplicity witness handling | Rust, elements crate |
| Node | On-chain communication | elementsd (Liquid Testnet) |
| Covenant Tooling | Build, compile, and inspect Simplicity covenants | SimplicityHL, hal-simplicity |
Partnerfy/
├── partnerfy_app/ # Main application (Dioxus desktop app)
│ ├── src/ # Source code
│ │ ├── app_core/ # Core business logic (RPC, transaction building, witness handling)
│ │ ├── views/ # UI components (landing, P2MS, voucher workflows)
│ │ └── components/ # Reusable UI components
│ ├── assets/ # Static assets (CSS, images)
│ └── Cargo.toml # Rust dependencies
├── p2ms.simf # Simplicity source for 2-of-3 multisig
├── cov_p2ms.simf # Simplicity source for covenant-based voucher
├── elements.conf.example # Elements node configuration template
├── WORKFLOW.md # Detailed workflow documentation
└── INSTRUCTIONS.md # Technical implementation details
For detailed setup, build, and run instructions, see the Application README.
- Rust (latest stable)
- Dioxus CLI (
cargo install dioxus-cli) - Elements Core (
elementsd,elements-cli) - SimplicityHL Compiler (
simc) - hal-simplicity (specific branch:
2025-10/pset-signer)
- Setup Elements node (see
elements.conf.example) - Start elementsd on Liquid Testnet
- Build and run:
cd partnerfy_app cargo run --release
Create a 2-of-3 multisig contract where funds require 2 out of 3 signatures to spend.
Steps:
- Generate P2MS Simplicity source file
- Compile Simplicity source
- Create contract address
- Fund contract via faucet
- Create spending PSET
- Sign and finalize transaction
- Broadcast transaction
Create a covenant-enforced voucher where change outputs automatically inherit the covenant.
Steps:
- Generate voucher Simplicity source file (with covenant)
- Compile and create contract address
- Fund contract via faucet
- Create spending PSET (must create exactly 3 outputs: payment, recursive covenant, fee)
- Sign and finalize (covenant verifies structure)
- Broadcast transaction
- Application README - Detailed setup, build, run, and test instructions
- WORKFLOW.md - Complete workflow analysis and command sequences
- INSTRUCTIONS.md - Technical implementation details
- Liquid Testnet Faucet: https://liquidtestnet.com/faucet
- Liquid Testnet Explorer: https://blockstream.info/liquidtestnet
- Elements Core: https://github.com/ElementsProject/elements
- SimplicityHL: https://github.com/ElementsProject/simplicity
- hal-simplicity: https://github.com/Blockstream/hal-simplicity
- Dioxus: https://dioxuslabs.com
- Always test on Liquid Testnet first
- Store private keys securely (encrypt locally, never share)
- Validate witness correctness before broadcasting
- Verify covenant structure for voucher contracts
- Keep transaction logs for off-chain records