08 · No self-destruct
The runtime contains no SELFDESTRUCT. Nothing can remove the code once it is sealed.
The question
Can the contract disappear?
SELFDESTRUCT removes a contract's code and sends its balance somewhere. Since the Cancun upgrade it only fully removes code in the same transaction as creation, but it still sends the balance, and a token whose contract can empty itself is not a token to hold. The instruction has no honest use in a token.
How it decides
The same disassembly as check 06: walk the runtime opcodes, skip PUSH data, set aside the metadata tail.
If SELFDESTRUCT (0xff) occurs as an instruction: fail. The runtime contains SELFDESTRUCT.
Otherwise: pass. No SELFDESTRUCT in the runtime.
Why the metadata matters here
The CBOR block at the end of the bytecode is arbitrary bytes: a hash of the source, a compiler version. It contains 0xff about one time in 256 per byte, which means a naive scan would fail roughly one honest contract in four. The check strips the block before scanning, using the length the compiler writes in the last two bytes and confirming the block starts with a CBOR map header and ipfs or bzzr.
What passes
Any token compiled from Solidity without a selfdestruct call.
What fails
A kill(), destroy(), emergencyExit() or anything else that calls selfdestruct. The name is irrelevant; the opcode is what is looked for.
Known edges
None. Like check 06 it is a pure bytecode check, reproducible by anyone from eth_getCode, and the cheapest kind to prove.