I'm 100% sure oclvanityminer is searching for patterns belonging to only a single public key at once, and this implies the multiplicative method (if I understand correctly). Still, I don't know if it is actually using that method.
There have been a lot of questions lately about additive vs. multiplicative, and how they work in oclvanitygen/oclvanityminer. I'll try to answer them.
Oclvanityminer uses the additive method:
- Generate a random partial private key
- Calculate the associated partial public key
- Add the base public key to the partial public key to get the test public key
- Generate a large batch (~1M) of sequential addresses by successively adding the generator point to the test public key, and converting the points to addresses
- If a match is found, report the partial private key plus the number of times the test public key was incremented. Otherwise, repeat the previous step
Sequential public keys in this scheme are generated by successively adding the generator point to the test public key. In the multiplicative method, we would skip adding the base public key to the test key at the start, and use the base public key as the increment instead of the generator point.
If anyone really wants to use the multiplicative method instead, it's possible to modify oclvanityminer to do this by changing maybe 5-10 lines of code. The performance difference would be negligible.
As far as I can gather, your method is much faster than
the method proposed by BurtW. You only do EC point addition (and hashing) in the CL kernel, right? BurtW's proposal looks like it includes public key generation in the kernel/loop, which would involve point multiplication (this is slow).
Could you elaborate on what you mean by "successively adding the generator point to the test public key" (step 4)? If "test public key" refers to the key generated in step 3, then repeatedly adding this key to the generator point of the curve would just yield the same point (and address). I assume "test public key" refers to one of the keys in the large batch of sequential public addresses (points)?
How do you create the sequential addresses? So you just use the secp256k1 curve equation to isolate
y, and then add 1, 2, 3, 4, etc. to the "test public key"'s x coordinate, and calculate y from this equation (using the secp256k1 parameters)?
And increment x once for each time you want a new sequential point?
You are correct that oclvanityminer will search for addresses belonging to a single public key at a time. I'm not sure how additive vs. multiplicative makes a difference in the ability to concurrently search for patterns using different base public keys. For that matter, I'm not quite sure how to efficiently search for multiple patterns with different base public keys in the first place.
It doesn't make a difference. To the best of this forums knowledge - as far as I can see - this requires non-trivial changes to the protocol, one being that the clients who want a vanity address calculated in the same batch as other client's addresses would need to submit their private key to the vanity miner upon request.