in v0.12 https://github.com/bitcoin/bitcoin/pull/7081 (by @luke-jr) was merged adding `-bytespersigop` (with default of 20).

this is preventing simple bare multisig transactions from being accepted into mempool when the size is < 400 bytes.  
eg; https://gist.github.com/rubensayshi/ac4f617207f7a50559e85d61c05800be

from 1-of-7 and onwards they are accepted because the ratio of bytes:sigops is high enough.  
also having 2 or more inputs will work because it again tips the ratio of bytes:sigops over.

the reason mainly being that `GetLegacySigOpCount` calls `GetSigOpCount` with `fAccurate=false`.

It looks like changing `GetLegacySigOpCount` to use `fAccurate=true` would cause side effects in the few other places (`ConnectBlock`, `CheckBlock`, `CreateNewBlock`) and simply adding `fAccurate` as arg to `GetLegacySigOpCount` would affect the value stored in `CTxMemPoolEntry.sigOpCount` which in turn affects a bunch of other things.

pcoinsTip->HaveCoinsInCache(inv.hash);
        }
    case MSG_BLOCK:
    case MSG_WITNESS_BLOCK:
        return mapBlockIndex.count(inv.hash);
    }
    
    return true;
}
void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParams)
{
    std::deque<CInv>::iterator it = pfrom->vRecvGetData.begin();
    vector<CInv> vNotFound;
    LOCK(cs_main);
    while (it != pfrom->vRecvGetData.end()) {
        
        if (pfrom->nSendSize >= SendBufferSize())
            break;
        const CInv &inv = *it;
        {
            boost::this_thread::interruption_point();
            it++;
            if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK || inv.type == MSG_CMPCT_BLOCK || inv.type == MSG_WITNESS_BLOCK)
            {
                bool send = false;
                BlockMap::iterator mi = mapBlockIndex.find(inv.hash);
                if (mi != mapBlockIndex.end())
                {
                    if (chainActive.Contains(mi->second)) {
                        send = true;