#payment #bitcoin #public-key #receiving #wallet #sending #silent

silentpayments

A library for adding BIP352: Silent Payments support to wallets

2 releases

0.1.1 Mar 17, 2024
0.1.0 Mar 15, 2024

#4 in #silent

Download history 274/week @ 2024-03-12 38/week @ 2024-03-19 2/week @ 2024-03-26 28/week @ 2024-04-02

83 downloads per month

MIT license

47KB
841 lines

Silent Payments

A rust implementation of BIP352: Silent Payments.

About

Warning: both this crate and BIP352 are still quite new. Review this library carefully before using it with mainnet funds.

This library supports creating and sending to silent payment addresses, building on secp256k1 PublicKey and SecretKey structs for the interface. In the future, the library will probably be expanded to rely on structs from rust-bitcoin as well.

The library is split up in two parts: sending and receiving.

Sending

For sending to a silent payment address, you can call the sender::generate_recipient_pubkeys function. This function takes a list of silent payment recipients, as well as a partial_secret.

The partial_secret represents the sum of all input private keys multiplied with the input hash. To compute the partial_secret, the utils::sending::compute_partial_secret function can be used, although this requires exposing secret data to this library. Other methods for calculating the partial_secret will be added later.

Recipient

For receiving silent payments, we use the receiving::Receiver struct. This Receiver struct implements a scan_transaction function that can be used to scan an incoming transaction for newly received payments.

The library also supports labels. One label, the change label, is included by default. You can optionally add additional labels before scanning by using the add_label function.

Examples

We will soon add an examples folder that contains some simple sending and receiving examples. In the meantime, you can look at tests/vector_tests.rs to see how sending and receiving works in more detail.

We are also working on a wallet that implements sending and receiving. This might also be a useful resource to get a more accurate idea on how the library can be integrated with wallets.

Tests

The tests/resources folder contains a copy of the test vectors as of February 7th 2024.

You can test the code using the test vectors by running cargo test.

Dependencies

~7.5MB
~95K SLoC