A selective address is similar to an implicit account (tz*), but all the transfers it receives are queued up for approval.
- Every pending transfer has an expiry, after which it is sent to a return address (or possibly burned)
- Every pending transfer needs to be claimed by the owner of the selective address. Doing so requires sending a “claim or reject” operation and would involve solving a moderately hard proof-of-work (or a VDF) problem.
- Claimed transfer get added to the balance of the selective address, rejected transfers get sent back
to the return address (or are possibly burned).
- Pending transfers may or may not count towards baking, to be discussed…
Wait, but why?
Why would you need the extra step? In short, because you may not always want to accept attempted payments to you. You might want to only accept payments from friends or sources you trust for instance.
Why the proof-of-work? To make it very clear and very unambiguous that taking possession of the pending payment is an active step.
Can’t a smart contract do this?
Yes, you can implement those today as a smart contract, and it’s definitely the first step to take to try this out!
However, if this becomes useful to many people it may be a good idea to put this at the protocol level.