I love all Constantinople opcode EIPs, but find the documentation of them quite lacking. The EIPs give us a general overview about what these EIPs should do, but do not cover edge cases. For example, what should an extcodehash
return on a contract which is selfdestructed on the same transaction? It returns the hash of the code which was there before
it was selfdestructed. Of course, this might have to do with internal (and previous) logic which has to do with extcodesize
where it returns the code size of the original code, even if it was selfdestructed in the same transaction.
A better example is CREATE2. In CREATE2 you are allowed to selfdestruct a contract and create a new one (which might even have different initial storage or different runtime code). This is not very intuitive to me.
These arguments might all be battled by choices which have been made by the Ethereum spec beforehand, such as: contracts are only allowed to be created on addresses with nonce zero and which do not have actual code there. But still, we can see a spreadsheet with a lot of test cases for Constantinople (state tests), but there is no documentation there about /why/ (in human terms) these tests should do exactly that.
This thread is mainly to raise the point that I think that documentation of the low level Ethereum protocol should be better - or it is a thread to call out to me if I lack the skills of finding the actual documentation where those are listed! =)