Currently, the multisig descriptor constructions are limited to 16 keys only possibly because of template parsing reasons. Under p2sh context, such scripts would be invalid anyway because of 520-byte rule, but we can support up to 20 keys for CHECKMULTISIG in witness script context. 


uint256 m_prevouts_single_hash;
    uint256 m_sequences_single_hash;
    uint256 m_outputs_single_hash;
    uint256 m_spent_amounts_single_hash;
    uint256 m_spent_scripts_single_hash;
    
    bool m_bip341_taproot_ready = false;
    
    uint256 hashPrevouts, hashSequence, hashOutputs;
    
    bool m_bip143_segwit_ready = false;
    std::vector<CTxOut> m_spent_outputs;
    
    bool m_spent_outputs_ready = false;
    PrecomputedTransactionData() = default;
    template <class T>
    void Init(const T& tx, std::vector<CTxOut>&& spent_outputs);
    template <class T>
    explicit PrecomputedTransactionData(const T& tx);
};
enum class SigVersion
{
    BASE = 0,        
    WITNESS_V0 = 1,  
    TAPROOT = 2,     
    TAPSCRIPT = 3,   
};
struct ScriptExecutionData
{