As proof, the miner sends h and P. Verification is first done by taking i = h MOD N and checking if G = λP when using the elliptic curve y2 = x3 + i. The second part of the verification is to check that h XOR hash(P) is less than the target difficulty.
This looks pretty symmetric to me. The miner just keeps trying random Ps until verification succeeds,
just as in hashcash.
Only P for i = h MOD N is valid. If another value is used then G != λP. With sufficiently large field F
M there will be an enormous number of random trials needed.
I don't understand your definitions. What exactly is the verifier checking when given h and P?
Is he checking that λP is any point on the curve y
2 = x
3 + i, where i = h MOD N ?
Then where do the points P_i come in, and how is P_i defined?
Yes, λP is a point on the elliptic curve. And the point must fulfill G = λP. (The point G is the point P added to itself λ times, so-called scalar multiplication.) If the miner tries to send another P it will be rejected.
And h is the plain block hash, for example like in Bitcoin with SHA-256d. If h is less than the target, then that's insufficient. It's h XOR hash(P) that must be less than the target. So the exclusive-or combination of the original hash h and the hash for P together must reach below the target difficulty.
The verifier can skip the difficult calculation of P. It's enough for the verifier to calculate G from the P it got from the miner multiplied by λ. That's a much easier calculation than calculating P from λ and G. The miner on the other hand must produce the correct value for P, which is a very difficult calculation.
When the miner uses lots of memory then the points P
i are pre-calculated and put into a list for direct lookup. Each value P
i is calculated by setting x to a predefined constant A in the elliptic curve equation y
2 = x
3 + i. For the particular i, there may be no solution for y with x = A, and then x = A + 1,2,3... and so on is calculated until a solution is found. The solution is (x, y) = G
i. So to get P
i the condition G
i = λP
i is used. There is no direct simple formula that can be used for P so a brute force trial-and-error approach or something similar is needed.
I have used P and P
i interchangeably here. The value i is simply the index position for all the P values.