23 releases (13 breaking)

0.25.0 Jan 24, 2024
0.24.0 Jan 3, 2024
0.23.0 Dec 13, 2023
0.21.0 Oct 12, 2023
0.14.0-rc.0 Jul 29, 2021

#1717 in Magic Beans

Download history 62/week @ 2023-11-02 241/week @ 2023-11-09 120/week @ 2023-11-16 63/week @ 2023-11-23 95/week @ 2023-11-30 85/week @ 2023-12-07 100/week @ 2023-12-14 80/week @ 2023-12-21 100/week @ 2023-12-28 54/week @ 2024-01-04 95/week @ 2024-01-11 110/week @ 2024-01-18 130/week @ 2024-01-25 224/week @ 2024-02-01 221/week @ 2024-02-08 623/week @ 2024-02-15

1,226 downloads per month
Used in 6 crates

MPL-2.0 license

1MB
1.5K SLoC

Phoenix Core

Phoenix is an anonymity-preserving zero-knowledge proof-powered transaction model formalized and developed by Dusk Network.

General

Although somewhat based on the UTXO model utilized in the Zcash protocol, Phoenix is uniquely capable to enable privacy-preserving smart contract by allowing confidential spending of public output (gas and coinbase transactions).

Unlike Zcash, in which transactions can be potentially linked [1][2], Phoenix guarantees transaction unlinkability through combining the so-called "obfuscated notes" (i.e. outputs containing encrypted values) with "transparent notes" (i.e. outputs containing plain values) into a single Merkle Tree.

All the transactions utilize one-time keys. It is totally up to the user how he wants to manage his secret key: he could have one or many secret keys for many unspent outputs. The inner Diffie-Hellman key exchange randomness mechanism guarantees the note public key will not repeat for the same spender public key, which causes the identification of the spender to be unfeasible.

For further details, check out the technical paper to be published soon.

Concepts

Zero-knowledge

Phoenix uses zero-knowledge proofs to guarantee:

  • Transaction balance consistency
  • Prevent double-spending attacks
  • Prove the ownership of unspent outputs

The set of unspent outputs is a union of obfuscated and transparent note sets. Both notes share a similar structure aside from the obfuscated containing encrypted values and transparent notes containing plain values.

The owner of a note can share his/her View Key, allowing a third-party (e.g. a wallet provider) to detect the outputs belonging to the owner as well as the value of the encrypted in the note, in case of an obfuscated note.

The spending of a note can be done only via a Secret Key, known only to the owner of the note.

Dependencies

~6.5MB
~139K SLoC