pull down to refresh

I was researching some obscure Bitcoin historic things, and I noticed that this address shows different values on the 2 different block explorers.
How could this be, since the blockchain is meant to be the same for everyone? Has the node of one of these explorer went bad?
Maybe now is relevant to tell you where I got these addresses from? Weeeel, I initially was looking at this TX
Now things look a bit better, the amounts are the same, but now only the addresses differ. In fact on mempool, it seems we have something that does not look like an adddress.
In fact that is a Public Key. You see a Bitcoin address, itself is also a Public Key with a few extra operations on top, to make it a bit more human readable, and limit errors when passing around.
Another thing that may be less known is that in the very early days of Bitcoin(which is when the TX in question took place), you could send Bitcoins to another node using their IP address. You would get someones IP, and connect to their node, and you node would as for a Public Key. Since these were machines talking with each other they did not need not fancy human addresses.
We can see in the above pic how it looked.
So what ended up happening is that mempool.space is correctly showing and interpreting the Pub Keys as Pub Keys, while blockchain interprets the Pub Keys as addresses, and because of this you will get an address that is valid but it will be another address.
How so? Well what makes an address valid is just the last step, and if the last step is applied to some piece of data(as seen in the royal fork graphical address generator) you will get a valid address. But if you want the "correct" address you must apply these last steps to the correct piece of data.
29 sats \ 1 reply \ @lontivero 9h
Blockchain.com displays an address for a p2pk script.
> let pk = PubKey "048b48e109f432a490522f8d0e9e833443809f65b8aa2558b94c1c15eb0fd3e24f32d58a088a2b0e5e694d05e7b981e5c9750827646eb81debc816c3c667eea5fd";;
val pk: PubKey =
  048b48e109f432a490522f8d0e9e833443809f65b8aa2558b94c1c15eb0fd3e24f32d58a088a2b0e5e694d05e7b981e5c9750827646eb81debc816c3c667eea5fd


> pk.GetAddress(ScriptPubKeyType.Legacy, Network.Main);;
val it: BitcoinAddress =
  1Jhk2DHosaaZx1E4CbnTGcKM7FC88YHYv9
    {Hash = c22eb0572ca07b9db7eff8ae5447f68d17f63535;
     Network = Main;
     ScriptPubKey = OP_DUP OP_HASH160 c22eb0572ca07b9db7eff8ae5447f68d17f63535 OP_EQUALVERIFY OP_CHECKSIG;
     Type = PUBKEY_ADDRESS;}

reply
Yes, indeed.
reply
Wow, what a great summary! Thank you so much.
reply
Interesting...1 Only blockchain.com displays these seemingly hallucinated transactions; neither Mempool nor Blockstream shows anything.

Footnotes

reply
Indeed, however there is some logic to their madness.
In this blog post https://blog.dustintrammell.com/block-286-and-satoshis-coins/ Dustin Trammell signs a message to showcase he has access to the private keys controlling some coins sent to some of those bare PUB_KEYs.
But when he does it in core, Bitcoin Core also uses the addresses.
Even though when making the TX the bare PUB_KEY was used, Bitcoin Core also wants you to convert that to an address and use that.
I was very confused about this myself for a bit.
reply