tb1qhudhq5jad3wa26unkzmt0llg4r0wt4euhpwxg7
I wonder, how you got that address. But whatever is there, it can lead you to something unspendable. Also, I wonder, which version of the library was used, and what was the result of each step in-between. Because I got a different address with that code, and I wonder, how you came up with that specific values.
No sigScript allowed when spending... hm.
Of course. You need a valid public key. Which means, that if some Script was used, and it is not a valid public key, then it is unspendable. Or rather: unlikely to be spent. Because mathematically speaking, it could be spendable, if you could bruteforce the whole address as a vanity address. But it would mean that RIPEMD-160 is no longer safe. Which means, that it is practically unspendable, unless some public key is behind it, and that "list of bytes" was treated as a seed in some different versions of the library.
How do I create a witness program for a dumb script for which there is no known public and private key?
It is very easy. Just feed it with random bytes, that are not the hash of something, and you will have a random, unspendable address.
Is it even possible?
Of course. The address tb1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq0l98cr is also "unlikely to be spent", as long as RIPEMD-160 is safe.
But most importantly, there are two more important questions:
1. Why don't you test things on regtest first? In that case, it is possible to make mistakes, and then never broadcast those blocks. Which means, you can just start Bitcoin Core, run it in regtest mode, and test any scripts on your local computer, to check, if something is spendable or not.
2. Why don't you use Bitcoin Core to calculate proper addresses? It is easy, and it will always give you the right one (unless you force it to generate something unspendable). For example:
decodescript 7551
{
"asm": "OP_DROP 1",
"desc": "raw(7551)#udtt52c3",
"type": "nonstandard",
"p2sh": "2NBgCqkaw8r7s15pamKLogvWurSTFVVf1Kf",
"segwit": {
"asm": "0 33198a9bfef674ebddb9ffaa52928017b8472791e54c609cb95f278ac6b1e349",
"desc": "addr(tb1qxvvc4xl77e6whhdel7499y5qz7uywfu3u4xxp89etunc4343udys6xzc00)#xqwha8gw",
"hex": "002033198a9bfef674ebddb9ffaa52928017b8472791e54c609cb95f278ac6b1e349",
"address": "tb1qxvvc4xl77e6whhdel7499y5qz7uywfu3u4xxp89etunc4343udys6xzc00",
"type": "witness_v0_scripthash",
"p2sh-segwit": "2MyMyxQoFC6bLVWfRh3H6qVQGrUfHo6Mv4F"
}
}
Edit: Also, I recommend reading about Taproot. Because then, it is possible to create some TapScript, and spend by key, if it turns out to be unspendable by TapScript.