silentpayments: add light client API - #1912
Conversation
…zation Co-authored-by: josibake <josibake@protonmail.com>
Best reviewed with `--ignore-all-space` (or `-w` for short).
This is preparatory for introducing the light client API function in the next commit. To keep the current call-site which only creates a single output pubkey (in `_sender_create_outputs`) as-is, a corresponding wrapper function calls the new function with one spend pubkey. No behaviour or API change in this commit yet. Best reviewed with `--ignore-all-space` (or `-w` for short).
Add function for creating k=0 outputs for multiple spend public keys. These keys can then be checked for existance against the UTXO set/blockchain. If a match is found, the client needs to download the full transaction and rescan with `_scan_outputs`. Co-authored-by: josibake <josibake@protonmail.com>
Co-authored-by: josibake <josibake@protonmail.com>
TODO: also test with 65-byte sized prevout_summary serializations
c337dd6 to
0b1cde3
Compare
|
Rebased on master (adapting to the |
|
Tested ACK 0b1cde3 Exercised the new light client API against real chain data rather than constructed inputs: the 33-byte tweak a BlindBit Oracle v2 serves for a real 50,000 sat silent payment in mainnet block 965085, paid to a throwaway wallet whose scan key is published. Step 3: the 33-byte serialization is byte-identical to the deployed BlindBit wire format, so an index server can hand its bytes straight to Tested with: |
This PR extends the
silentpaymentsmodule with API functions forprevouts_summary(de)serialization and output public key (k=0) creation, intended to be used by tweak indexers and light clients. Note that this functionality was originally introduced in the take 3 PR (#1698), but was then later intentionally removed again in take 4 (#1765, recently merged and released), in order to reduce the scope and lower the review burden.The following 3 API functions are added:
secp256k1_silentpayments_recipient_prevouts_summary_serialize: given a prevouts_summary object, create the corresponding 33-bytes or 65-bytes serializationsecp256k1_silentpayments_recipient_prevouts_summary_parse: given a 33-byte or 65-byte prevouts_summary representation, create the corresponding prevouts_summary objectsecp256k1_silentpayments_recipient_create_output_pubkeys: given a prevouts_summary object, a recipients scan secret key and a list of spend public keys, create a list of corresponding x-only output public keys (one for each spend public key, each derived with k=0).Tests, benchmarks and the example are extended accordingly.