Just wondering if there're taproot burn addresses? (addresses that no one has private keys)
Of course there are. However, if you want to burn coins, you can just use OP_RETURN, then it will be dropped by pruning nodes.
Some examples:
bc1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpqqenm - address with "zero" key, always unspendable, even before Taproot activation, because of zero on top of the stack
bc1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqs5pgpxg - address with "x=1" key, trap address that is extremely hard to reach, but in theory it could be possible, if you can spend coins from 020000000000000000000000000000000000000000000000000000000000000001 public key
bc1ppppppppppppppppppppppppppppppppppppppppppppppppppppqrpj4rw - address with many "p" letters, "x=0842108421084210842108421084210842108421084210842108421084210842", invalid public key
bc1pvjudeuvjudeuvjudeuvjudeuvjudeuvjudeuvjudeuvjudeuvjuqn5x0sv - burn address with my nickname, also invalid public key, because 0264b8dcf192e373c64b8dcf192e373c64b8dcf192e373c64b8dcf192e373c64b8 is invalid
Edit:
If so how can I generate them and is it possible to generate vanity ones?
Each Taproot address has the same Script: "5120", and then you can put any 32 bytes you want. If it will be some correctly encoded x-value of your public key, then those coins could be unlocked. If not, then it will be some trap address (hard to reach public key) or burn address (unspendable, invalid public key).
To decode those addresses, just use Bitcoin Core, even offline without any chain, if you want. Then, put "decodescript 5120" in the console window, and add hex-encoded 32 bytes you want to decode. It could be anything, for example 0xbadc0ded, repeated eight times:
decodescript 5120badc0dedbadc0dedbadc0dedbadc0dedbadc0dedbadc0dedbadc0dedbadc0ded
{
"asm": "1 badc0dedbadc0dedbadc0dedbadc0dedbadc0dedbadc0dedbadc0dedbadc0ded",
"desc": "addr(bc1phtwqmmd6msx7mwkuphkm4hqdakadcr0dhtwqmmd6msx7mwkuphksrqz6ct)#dy9h0w9z",
"address": "bc1phtwqmmd6msx7mwkuphkm4hqdakadcr0dhtwqmmd6msx7mwkuphksrqz6ct",
"type": "witness_v1_taproot"
}
And then, you can check if your public key is reachable or not:
importpubkey "02badc0dedbadc0dedbadc0dedbadc0dedbadc0dedbadc0dedbadc0dedbadc0ded" "badc0ded"
Pubkey is not a valid public key (code -5)
Then you know that such address is unspendable. But for example you can see that x=1 address is potentially spendable, but hard to break:
importpubkey "020000000000000000000000000000000000000000000000000000000000000001" "one"
null