And then, imagine you have some working code, which works fine with public keys and signatures. Imagine there is no Script.
I wish there wasn't. Script is pretty much a programming language. Why a payment system would require its own programming language to help construct transactions is kind of something i don't think most people even stop t think about. They just think there is a transaction and dont realize they are actually using a little computer program that may have a template but had to be filled in with particular data relevant to their bitcoin. Imagine that, every single bitcoin transaction has to repeat that same computer program even though in many cases the only thing that changes in that program is the data. The program itself is not changing. But it still has to be stored all of it every single transaction. how inefficient is that?
OP_DUP OP_HASH160 <script> OP_EQUALVERIFY OP_CHECKSIGnone of that changes just the <script> part but EVERYTHING has to be stored every single time. waste of disc space. just an example of the inefficiencies at play with bitcoin...