Script is necessary for bitcoin to work as a network that apps and new type of transactions can be build upon .
1. If it is necessary, then why it is not included in the whitepaper?
2. You won't believe how many things can be coded with public keys only. Imagine that if you have a Schnorr signature, then you can
add and multiply 256-bit numbers. This is enough to implement a lot of conditions.
3. There is no need to include Script in the first version. It can be added later if needed, exactly in the same way as Taproot was added: you can spend by P2PK, or spend by P2SH, and wrap all of that in a single address type. This is how Taproot works: you never know, if there is some huge Ordinal behind some P2TR address, or if there is just a public key, and nothing else. The same could happen with P2PK back then, there were no technical difficulties in implementing that.
I can't get into the techinical details as i'm not educated in this .
This is the problem. As Garlo Nicon mentioned above, "you cannot beat something with nothing". So, if you don't know, how to write some code, then ask someone, who thinks like you, to do that. Or join some existing team. Because the best thing is when you figure out, that your ideas are already implemented, because then no additional work is needed, and you can just support the right team.
But , you can understand that at that time HDD's and broadband speed were not the same as today .
Then, I have another question: why Satoshi didn't make it gradually? Why it was not "double the size of the block every halving" or any other "gradually increase the size of the block"? Today, we even have BIPs for that! If people around 2017 thought about it before implementing Segwit, then why Satoshi didn't code it in that way, and just made it constant?
Bitcoin isn't currently practical for very small micropayments.
How do you define "very small"? Is it millisatoshi in Lightning Network, that is never enforced on-chain? Or is it microsatoshi, nanosatoshi, or even smaller unit? Been there, done that. I had some channels with a friend, when we used CPU mining (with Merged Mining) to pay each other the smallest amount we could, proportional to the amount of satoshis in the coinbase transaction, scaled down to the minimal difficulty we produced. So yes, you can send someone a millisatoshi, or even smaller unit, as long as both clients support that feature. But of course, it doesn't change the fact that to enforce it on-chain, you need to pay quite high on-chain fee. Which is why testnet, or some separate network, fits better for such purposes, because then you can use zero satoshis to have any on-chain representation, and to actually push your millisatoshis on-chain (or wrap them into a multisig, and enforce on-chain by using a proper Script).
Also note that you don't need LN to enforce such things. The minimal fees for routing any transaction is something you can change in your node settings. You can accept free transactions into your mempool, but then be prepared to deal with spam somehow. Guess what: even today, there are still transactions flying around, with fees below one satoshi per virtual byte. They are usually used by mining pools, but you can build anything on top of that, if you have two nodes, which accepts more transactions than usual. But of course, to enforce microtransactions on-chain, you need some computing power, similar to what centralized mining pools already have. Or, if you don't want that, then you can send a lot of cheap transactions, and then batch them, and broadcast into official network. If you use a proper Script, you can do that without any trust, see
2P-ECDSA and Homomorphic Encryption for more details.
the road for hard forks open . If satoshi was against it , he wouldn't post such a thing , but would propose something in a backwards compatible way .
This is quite simple: Satoshi could do some hard-fork then, because the network was small enough. In fact, the current version is not fully compatible with the first version, because there were some minor changes here and there, for example some P2P messages were changed to include checksum, and the longest chain rule was changed into the heaviest chain rule in a hard-fork way.
But even if you assume that Satoshi was pro-hard-fork, then I have another question: do you think that Satoshi would do some hard-fork today, and ignore the miners? I don't think so. Even if we have Segwit and Taproot, then still, cleaning it up doesn't mean ignoring the miners, or reverting the chain. What happened, is already set in stone. So, you can change the code to disable Segwit or Taproot, but you cannot overwrite the history. But good luck creating a proposal to roll-back those soft-forks, and make those coins spendable by anyone. It will simply not happen.
Script is necessary for bitcoin to work as a network that apps and new type of transactions can be build upon .
Technically, you can start with P2PK, and add a Script later. There are no technical problems with that approach, and also, in this case you end up with a single address type, which is P2PK, and this could be good for privacy, because then you don't know, if something is a public key, or a Script, until it is spent. And also, in this case, users can try non-standard scripts, without risking their money, because then they can always spend by public key, if their Script will turn out to be non-standard or unspendable.
Also states " There are other things we can do if necessary" . What he meant by that ? Who knows .
It means "if fees will not be sufficient, then we can do something else to limit it further". If you think I just made it up from the thin air, then you can go to the link, and read the whole context. Also, again, as Garlo Nicon said, "you cannot beat something with nothing", which means if you think that my interpretation is wrong, then what is yours? Because your answer "I don't know" will not push us any further.
He doesn't explicitly states that using OP_pushdata4 is forbidden like you make it look like .
It is "forbidden" beyond 32 MiB, because he coded it in that way. And 32 MiB takes more than two bytes, which means you need at least four bytes, to handle it correctly. But guess what: he put 32 MiB as the limit, not 4 GiB.
And to put it another way , if he didn't want it he wouldn't have added it to OP's .
You cannot handle 32 MiB with three bytes. It is 0x02000000. It needs at least four bytes.
I also have another question: if you think that Satoshi didn't care about the size, then why he introduced VarInt to compress things? Why he stored difficulty by using four bytes, instead of using 32 bytes to store the target explicitly, with arbitrary precision?