Just spent some time trying to apply the patch from 0.14 to 0.15, no luck (because no competence).
But here are some things that I forgot and remembered today as I was digging through repos and issues:
- CP doesn’t cache addrindex transactions - https://github.com/CounterpartyXCP/counterparty-lib/pull/525 (background)
 - Sometimes transactions cannot be found in addrindex - https://github.com/CounterpartyXCP/counterparty-lib/blob/v9.54.0/counterpartylib/lib/blocks.py#L1208
 
Bitcoin Core and addrindex related stuff:
- One of good reasons to use an external index (txindex and addrindex) is that addrindex share Bitcoin Core cache space [1]. Now that the indexes are large, it’s a challenge to cache them without adjusting these parameters. See issue.
 - Scripts to report on transaction history and ending balance for a Bitcoin address: https://github.com/weex/addrindex-balance. addrindex doesn’t have this functionality.
 - v0.15: GetCoins (which is causing me problems) was removed - https://github.com/bitcoin/bitcoin/commit/629d75faac84bc0a00533d01dd291a4e6394a51f
 - v0.15: GetCoins method was replaced with ModifyCoins - https://github.com/bitcoin/bitcoin/commit/f28aec014edd29cfc669cf1c3f795c0f1e2ae7e2 (in [3], this causes problem because GetCoins is gone)
 
If anybody wants to try:
- Difference between Bitcoin Core 0.13 and addrindex 0.13.0: https://github.com/bitcoin/bitcoin/compare/0.13...btcdrak:addrindex-0.13
 - Difference between Bitcoin Core 0.14 and addrindex 0.14.2: https://github.com/bitcoin/bitcoin/compare/0.14...btcdrak:addrindex-0.14 (this isn’t a good comparison, I should compare addrindex 0.14.2 vs. Core 0.14.2, but…)
 - Difference between Bitcoin Core 0.15 and addrindex 0.14: https://github.com/bitcoin/bitcoin/compare/0.15...btcdrak:addrindex-0.14
 - Compared to 0.14, in 0.15 some parts moved to validation.cpp, some to transaction.cpp.
 - In some places you need to make slight modifications to the code, e.g. 
GetBoolArgbecomesgArgs.GetBoolArg(validation.cpp) andparams.size()becomesrequest.params.size()(rpc/rawtransaction.cpp) - I had a problem transplanting https://github.com/btcdrak/bitcoin/blob/addrindex-0.14/src/validation.cpp#L1995 to 0.15 - I added 
#include <boost/foreach.hpp>to the file (https://answers.ros.org/question/202155/when-i-use-the-code-copy-from-rosbag-tutorialsthere-some-wrong/) but it didn’t help. - I can’t get past [3]
 
[1]
nBlockTreeDBCache = std::min(nBlockTreeDBCache, ((GetBoolArg("-txindex", DEFAULT_TXINDEX) && GetBoolArg("-addrindex", DEFAULT_ADDRINDEX)) ? nMaxBlockDBAndTxIndexCache : nMaxBlockDBCache) << 20);
nTotalCache -= nBlockTreeDBCache;
int64_t nCoinDBCache = std::min(nTotalCache / 2, (nTotalCache / 4) + (1 << 23)); // use 25%-50% of the remainder for disk cache
nCoinDBCache = std::min(nCoinDBCache, nMaxCoinsDBCache << 20); // cap total coins db cache
nTotalCache -= nCoinDBCache;
nCoinCacheUsage = nTotalCache; // the rest goes to in-memory cache
[2]
    UniValue result(UniValue::VARR);
    while (it != setpos.end() && nCount--) {
        //std::string CTransactionRef tx;
        CTransactionRef tx;
        uint256 hashBlock;
        //if (!ReadTransaction(tx, *it, hashBlock))
        //    throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Cannot read transaction from disk");
        CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
        ssTx << tx;
        std::string strHex = HexStr(ssTx.begin(), ssTx.end());
        // strHex = HexStr(ssTx.begin(), ssTx.end());
        if (fVerbose) {
            UniValue object(UniValue::VOBJ);
            TxToJSON(*tx, hashBlock, object);
            object.push_back(Pair("hex", strHex));
            result.push_back(object);
        } else {
            result.push_back(strHex);
        }
        it++;
    }
[3 ]
Edit: I am down just to this error (but who knows what other errors are to follow).
validation.cpp: In function ‘bool ConnectBlock(const CBlock&, CValidationState&, CBlockIndex*, CCoinsViewCache&, const CChainParams&, bool)’:
validation.cpp:1878:21: error: ‘CCoins’ was not declared in this scope
                     CCoins coins;
                     ^
validation.cpp:1879:26: error: ‘class CCoinsViewCache’ has no member named ‘GetCoins’
                     view.GetCoins(txin.prevout.hash, coins);
                          ^
validation.cpp:1879:54: error: ‘coins’ was not declared in this scope
                     view.GetCoins(txin.prevout.hash, coins);
                                                      ^
  CXX      libbitcoin_common_a-coins.o
In file included from ./script/script.h:11:0,
                 from primitives/transaction.h:11,
                 from coins.h:9,
                 from validation.h:14,
                 from validation.cpp:6:
./serialize.h: In instantiation of ‘void Unserialize(Stream&, T&) [with Stream = CAutoFile; T = CTransaction]’:
streams.h:553:22:   required from ‘CAutoFile& CAutoFile::operator>>(T&) [with T = CTransaction]’
validation.cpp:968:17:   required from here
./serialize.h:544:5: error: ‘class CTransaction’ has no member named ‘Unserialize’
     a.Unserialize(is);
     ^