I apologize for the confusion. Here's a concise and accurate explanation:
### Sender’s Action
1. **Recipient's XPub**: The sender has the recipient’s XPub.
2. **Random Nonce `r`**: The sender generates a random nonce `r`.
3. **Ephemeral Public Key `R`**: The sender computes `R = r * G` (where `G` is the generator point on the elliptic curve).
4. **Shared Secret**: The sender computes the shared secret `S`:
\[
S = H(r * XPUB)
\]
5. **Unique Address**: The sender generates a unique address:
\[
A = H(XPUB + S)
\]
6. **Transaction**: The sender sends Bitcoin to address `A` and includes `R` in the transaction output script (not in metadata, but as part of the output).
### Recipient’s Detection
1. **Retrieve `R`**: The recipient retrieves `R` from the transaction output.
2. **Compute Shared Secret `S`**: Using their private key `xprv`, the recipient computes:
\[
S' = H(xprv * R)
\]
3. **Derive Address `A'`**: The recipient uses their XPub and the shared secret to derive the potential address:
\[
A' = H(XPUB + S')
\]
4. **Match Check**: The recipient’s wallet compares `A'` with the addresses in the transaction outputs.
5. **Recognition**: When a match is found, the recipient identifies the transaction as theirs and can use their private key to spend the funds.
### Example
1. **Sender’s Process**:
- Recipient’s XPub: `XPUB123`.
- Random nonce `r`: 456.
- Ephemeral public key: `R = 456 * G`.
- Shared secret: `S = H(456 * XPUB123)`.
- Unique address: `A = H(XPUB123 + S)`.
- Transaction: Sends Bitcoin to `A` and includes `R` in the transaction output script.
2. **Recipient’s Process**:
- Retrieve `R` from the transaction output script.
- Compute shared secret: `S' = H(xprv * R)`.
- Derive potential address: `A' = H(XPUB123 + S')`.
- Compare `A'` with transaction outputs.
The recipient’s wallet performs these steps to detect the transaction and identify it as theirs, without needing to know the nonce `r`.
OK…