There is a "bitfield" in a stealth address that you can use to scan transactions without having to do a multiply.
I am not sure about what you mean with your terminology, I call "Stealth Address" what the receiver share, and "public address" the standard bitcoin address the sender will send funds to.
The problem is not to send funds to different public addresses coming from the same stealth address (which is useless)
But to send to different public address coming from different stealth address. (2 differents stealth receiver in the same transaction)
I don't see how the specification can change to support that since all data in the OP_RETURN is needed.
I didn't say anything about coming from the same stealth address. I'm specifically talking about a sendmany.
Because the bait must be small to prevent deanonymization, and so there would still be a large amount of DH overhead if the transaction contained multiple nonces, plus doubling the size of the marginal txout data.
The bloom bait should be in separate pushes in a single OP_RETURN, the addr_index patch to Bitcoin core was setup to index separate push operations for this sort of reason. So there should be one 33 byte public point in the push, and 1 to N bait.
This is compatible with CoinJoin too— the participants just share a random value.
If I understand you correctly, in dark wallet terminology, it means that we would have only one Ephem Key (what you call the public point) shared between all receiver, and the bait is for scanning purpose of the receiver.
no, because you need sharding for different stealth address prefixes which is computed based on the metadata output. each output needs its own metadata.
genjix, if I understand what gmaxwell is saying is that we would have 33 bytes for the EphemKey, and use the rest for one prefix per destination.
So we would have one metadata for several destination.
But one question I have : currently, to calculate the prefix, you hash the OP_RETURN data in one hash 256, and the scanner will check if the first resulting bytes match the bitfield.
Why doing that ?
Why not having the prefix as a seperate push in the OP_RETURN, and the scanners will just check if these match their bitfield ?