2 unstable releases

0.2.0 Dec 8, 2022
0.1.0 Dec 6, 2022

#94 in #privacy

Download history 47/week @ 2024-02-21 30/week @ 2024-02-28 2/week @ 2024-03-06 12/week @ 2024-03-13

91 downloads per month

MIT license

21KB
382 lines

Private Payments CLI Tool

A command line tool to work with the Private Payments stealth address system for Bitcoin.

  • Generate recipient payment codes
  • Create sender notification payloads
  • Decode notifications to reveal stealth addresses

Installation

From Crates.io:

cargo install privpay
privpay -h

For local development

git clone https://github.com/private-payments/privpay-cli.git
cd privpay-cli
cargo build

Example

Recreating the example from BIP351:

# Generate Bob's Payment Code
$ privpay receiver code -t p2pkh -t p2wpkh
# <enter ff for seed hex>
pay1qqpsxq4730l4yre4lt3588eyt3f2lwggtfalvtgfns04a8smzkn7yys6xv2gs8

# Alice notifying Bob and deriving the first stealth address
$ privpay sender notify -r 0 -t p2wpkh pay1qqpsxq4730l4yre4lt3588eyt3f2lwggtfalvtgfns04a8smzkn7yys6xv2gs8
# <enter fe for seed hex>
OP_RETURN OP_PUSHBYTES_40 505049cb55bb02e3217349724307eed5514b53b1f53f0802672a9913d9bbb76afecc86be23f46401
0: bc1qw7ld5h9tj2ruwxqvetznjfq9g5jyp0gjhrs30w

# Bob deriving same stealth address
privpay receiver decode -P 6a28505049cb55bb02e3217349724307eed5514b53b1f53f0802672a9913d9bbb76afecc86be23f46401
# <enter ff for seed hex>
0: bc1qw7ld5h9tj2ruwxqvetznjfq9g5jyp0gjhrs30w 03e669bd1705691a080840b07d76713d040934a37f2e8dde2fe02f5d3286a49219 L1fJmsaHyM96XrpHs765ueXfmv1V7TiNgWJHS8ZsTgfVFvLd1TcU

JSON Output

Running the previous example with the --json output flag produces more detailed output.

Generate Bob's Payment Code

$ privpay receiver code --json -t p2pkh -t p2wpkh
# <enter ff for seed hex>
{
  "payment_code": "pay1qqpsxq4730l4yre4lt3588eyt3f2lwggtfalvtgfns04a8smzkn7yys6xv2gs8",
  "account": 0,
  "bip32_path": "m/351'/0'/0'",
  "address_types": [
    "p2wpkh",
    "p2pkh"
  ]
}

Alice notifying Bob and deriving the first stealth address

$ privpay sender notify --json -r 0 -t p2wpkh pay1qqpsxq4730l4yre4lt3588eyt3f2lwggtfalvtgfns04a8smzkn7yys6xv2gs8
# <enter fe for seed hex>
{
  "receiver": {
    "payment_code": "pay1qqpsxq4730l4yre4lt3588eyt3f2lwggtfalvtgfns04a8smzkn7yys6xv2gs8",
    "index": 0
  },
  "sender": {
    "account": 0,
    "bip32_path": "m/351'/0'/0'"
  },
  "notification": {
    "scriptpubkey": "6a28505049cb55bb02e3217349724307eed5514b53b1f53f0802672a9913d9bbb76afecc86be23f46401",
    "payload": "505049cb55bb02e3217349724307eed5514b53b1f53f0802672a9913d9bbb76afecc86be23f46401",
    "asm": "OP_RETURN OP_PUSHBYTES_40 505049cb55bb02e3217349724307eed5514b53b1f53f0802672a9913d9bbb76afecc86be23f46401"
  },
  "addresses": [
    {
      "address": "bc1qw7ld5h9tj2ruwxqvetznjfq9g5jyp0gjhrs30w",
      "index": 0
    }
  ]
}

Bob deriving same stealth address

privpay receiver decode --json -P 6a28505049cb55bb02e3217349724307eed5514b53b1f53f0802672a9913d9bbb76afecc86be23f46401
# <enter ff for seed hex>
{
  "receiver": {
    "payment_code": "pay1qqpqxq4730l4yre4lt3588eyt3f2lwggtfalvtgfns04a8smzkn7yys66cs29t",
    "account": 0,
    "bip32_path": "m/351'/0'/0'"
  },
  "notification": {
    "scriptpubkey": "6a28505049cb55bb02e3217349724307eed5514b53b1f53f0802672a9913d9bbb76afecc86be23f46401",
    "payload": "505049cb55bb02e3217349724307eed5514b53b1f53f0802672a9913d9bbb76afecc86be23f46401",
    "asm": "OP_RETURN OP_PUSHBYTES_40 505049cb55bb02e3217349724307eed5514b53b1f53f0802672a9913d9bbb76afecc86be23f46401"
  },
  "addresses": [
    {
      "address": "bc1qw7ld5h9tj2ruwxqvetznjfq9g5jyp0gjhrs30w",
      "index": 0,
      "public_key": "03e669bd1705691a080840b07d76713d040934a37f2e8dde2fe02f5d3286a49219",
      "private_key": "L1fJmsaHyM96XrpHs765ueXfmv1V7TiNgWJHS8ZsTgfVFvLd1TcU"
    }
  ]
}

Dependencies

~8–18MB
~174K SLoC