I'm trying to understand how to validate the first non-coinbase transaction, that is transaction 1 of block 169, as it was validated in the old days.
This transaction has one input, which decoded ScriptSig is exactly:
PUSH (71 bytes: 70 bytes ECDSA signature ANS.1 in DER format and trailing SIGHASH_ALL byte)
This input refers to output 0 of transaction 0 of block 9, which ScriptPubKey is exactly:
PUSH (65 bytes: not-compressed flag byte and 64 public key x and y) OP_CHECKSIG
My question is: in those old days, how did we know that we had to run a P2PKH to validate the transaction? Simply put, did we just concatenate ScriptSig and ScriptPubKey...:
PUSH (71 bytes) PUSH (65 bytes) OP_CHECKSIG
..and run the resulting script (that is: running OP_CHECKSIG as it is coded in EvalScript() in src/interpreter.cpp of the Bitcoin Core), which was supposed to be a P2PKH script, or did we create a more elaborate script from those scripts to validate?
Because nowadays, after some BIPs (witnesses, and so on), the P2PKH script looks more elaborated:
OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
For those like me who are interested in learning about the bitcoin by coding it from scratch and using the first blocks as a data reference, I later found this very good book. You may also find interesting to check the first Bitcoin code here.