In the very early blocks, I think Satoshi may have used P2PK instead of P2PKH, so there was no address at all. The bitcoin payment was made directly to the public key itself instead of the hash of the public key.

Thank you very much! That is what I had read. Very interesting. (side/speculation, but why would Satoshi do that?)

Because they hadn't implemented the idea of hashing the public key into an address yet?

I understand the 04, 03, 02 prefix on the Public Key, but after that I get lost.

A public key is a point on a curve, represented with coordinates as (X,Y).

If it is uncompressed, then the X and Y values are stuck together (concatenated) and prefixed with 04

If it is compressed, then the Y value is thrown out (since it can be computed from the X value) and the 02 or 03 prefix are used to make sure you get the correct Y value.

So, some early blocks the mining reward did not go to an address, but was awarded to a public key?

Yes. However, if you know the formula for computing an address from a public key, then you can represent that public key as an address when you display it (even if it isn't actually stored in the blockchain in it's hashed form). This is what most of the block explorer websites do. So, if you look at a block explorer (such as blockchain.info) you'll see an address. If you look at the raw transaction in the block, you'll see the public key.

Do we know a block with the mining reward going directly to a public key? If so, could you share it with? Thanks!

Sure. Block 170 has BOTH the block reward and the payment to Hal as payments directly to the public key.

If you look at the bottom of these pages where it says "Output Scripts":

https://blockchain.info/tx/b1fea52486ce0c62bb442b530a3f0132b826c74e473d1f2c220bfa78111c5082https://blockchain.info/tx/f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16You'll see a long string of characters starting with 04 (that's the public key) and then an OP_CHECKSIG (indicating that the signature should be checked against that public key directly).

On the other hand if you look at the "Output Scripts" of a more recent transaction such as this one:

https://blockchain.info/tx/f7bd17e421a20a9387fde36d17106a52cb6eaebf8621e8bfdae1f42c4956aea6You'll see:

OP_DUP OP_HASH160 long_string_of_characters OP_EQUALVERIFY OP_CHECKSIG

Indicating that the value stored is the hash of the public key and that the public key should be supplied, hashed, and verified against the given string before verifying the signature.