Pay to pubkey – P2PK
Getting ready for a new type of Nostr zaps
This Nutshell release introduces a new token lock type called Pay-to-Pubkey or P2PK. This allows you to create ecash tokens that can only be spent by their designated recipient. A token locked with P2PK can be posted online without any third party being able to spend it.
Using P2PK
- The receiver generates a public key lock via
cashu lock
. - The sender locks tokens to this public key via
cashu send <amount> --lock <P2PK_lock>
. - The receiver then receives the tokens via
cashu receive <locked_token>
.
Background
In an upcoming upgrade we will also add DLEQ proofs (PR) which allow anyone to check the validity of the mint's signature on a token without having to contact the mint.
These two features combined, P2PK and DLEQ proofs, allow for a very interesting use case: publicly verifiable payments to a pubkey in the form of ecash. As soon as the ecash is publicly posted, the transaction can be viewed as complete: The token can evidently be spent only by the intended recipient, and the validity of its signature can be verified client-side. In such a case, the recipient of this ecash can remain fully offline but be confident that they received a transaction.
It gets even more interesting: This ecash can be attached to anything.... including as a reply to a Nostr note! TBD
The P2PK feature also includes a new timelock
feature that allows you to release a token from its lock after a certain time has passed. After the timelock is passed, the token can either be spent by everyone
Note: This feature is still experimental and some parts are incomplete. Things to add are multisignature spending paths and signature flags that can commit to the outputs of a transaction as well.
NUT updates
- NUT-09: wallet can now show mint information with
cashu info -m
(#262) - NUT-07: Mint responds with token proof's pending state #277
Other changes
- Wallet: Ability to configure a HTTP proxy (#269)
- Fix corner case for fee reserve output calculation (#260 and #261)
Full Changelog: 0.12.1...0.12.3