How is Blockchair.com broken if the transactions actually exist? See:
At blockchain level we don't have addresses, we have scripts. Block explorers (wallets, etc.) take those scripts and convert them to their corresponding address. In case of SegWit output scripts they have to take the witness program and witness version and encode them using Bech32 encoding. But when witness version is 0 they should use Bech32 (BIP-173) and when version is 1 and more they should use Bech32m (BIP-350).
Blockchair is taking the program and version and encodes them using Bech32 which is wrong and should be rejected if given to any wallet software for payment (there is a flaw in BIP173 encoding that affects programs with unfixed lengths).
How? It would be really cool if you can transfer this dust and explain in details how you did it!
I won't be able to do it because such transactions are considered non-standard by majority of bitcoin nodes so they will never reach a miner.
@achow101 posted a good example which is spending Taproot outputs before it activates without providing any signature or witness. This is most probably created and mined by a miner (another indication is the 0 fee).
The way it works is due to forward compatibility. The current clients have to be able to ignore verification of future versions so that any future witness version doesn't need a hard fork. So the existing nodes simply skip verification of witness versions above what they understand (which is currently 1).
This little "else" expression simply returns true for any witness program currently bigger than 1 or version 1 programs that are not 32 bytes or if you wrap it in a P2SH script.
https://github.com/bitcoin/bitcoin/blob/65b49f60a4cf521889297b2006f66efa11d769c5/src/script/interpreter.cpp#L1959-L1965 } else {
if (flags & SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM) {
return set_error(serror, SCRIPT_ERR_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM);
}
// Other version/size/p2sh combinations return true for future softfork compatibility
return true;
}
You can also see the standard flag that rejects the transactions from mempool (but not from blocks) as non-standard.