Thanks for the answers.
I got some valuable info, I understand that forks are mess, but the situation I was talking about (which I didn't mention in initial post) is that particular coin is doing forks anyway, I mean they require everyone (users/ miners/ exchanges) to update to new version, old version stops working, there is some kind of snapshot of all transactions created and they start from that, old transactions are not included in new blockchain, just wallets/ addresses that held some amount of coins.
the way it works is that you first release the new version with the change the will create the fork and set a time when the fork is going to happen and usually set some criteria for it too like having >95% hashrate support. that time is a certain block because finding new blocks have a certain randomness to it which makes it hard to predict when a certain block is going to be found.
for example if we are now at block 10000 you set the fork to happen at 11000. it is not exactly a "snapshot" it is the same blockchain, you just build on it with new blocks which follow the new rules.
- if it is backward incompatible like hard forks then the old version becomes abandoned (it will still work but it will be another chain if someone decides to build on it.
- if it is backward compatible like soft forks then the old version continues to work.
you don't throw away the old blockchain. that's the whole point of blockchain, to have this immutable public distributed ledger where all the transactions from the start are stored in. if you throw it away then there is no way of verifying where coins came from.
I have also new question, if no one replies I will create new topic, no worries: is it possible to block certain wallet/ address from spending coins?
There are number of wallets that should not be touched for some reason, my thinking is that if everyone updates their client (wallet) software you can blacklist those addresses so miners won't include transactions from these addresses in blocks, is that correct? I'm talking of less than 100 addresses, so I don't think that would "eat" much of processing power, I can think that blocking hundreds of thousands addresses would require some sort of database and heavy modifications to wallet, but with such little number I can't see a problem, am I thinking right? Thanks.
it's just code so yeah it is possible. when a node receives a transaction it checks to see if it is valid. so the function that checks its validity can also have new "IF" clause checking which private key was used to sign it (based on the public key included in the transaction) and
if(IgnoreListOfPubKeys.Contains(GivenPubKey)
reject;
your question however reminds of proof of burn though. you can read about it here
https://en.bitcoin.it/wiki/Proof_of_burnbasically if you want to make some coins unspendable there is a much easier way and that is sending them to an output that can't be spent from. for example using OP_Return outputs. or sending to burn addresses like 1BitcoinEaterAddressDontSendf59kuE