diff --git a/src/addresstype.h b/src/addresstype.h index 155508a131..9b0083f7c4 100644 --- a/src/addresstype.h +++ b/src/addresstype.h @@ -17,6 +17,7 @@ enum struct AddressType , sparkMint = 11 , sparksMint = 12 , sparkSpend = 13 + , payToExchangeAddress = 14 }; namespace zerocoin { namespace utils { diff --git a/src/base58.cpp b/src/base58.cpp index 005eed6d35..7044503063 100644 --- a/src/base58.cpp +++ b/src/base58.cpp @@ -297,6 +297,10 @@ bool CBitcoinAddress::GetIndexKey(uint160& hashBytes, AddressType & type) const memcpy(&hashBytes, &vchData[0], 20); type = AddressType::payToPubKeyHash; return true; + } else if (vchVersion == Params().Base58Prefix(CChainParams::EXCHANGE_PUBKEY_ADDRESS)) { + memcpy(&hashBytes, &vchData[0], 20); + type = AddressType::payToExchangeAddress; + return true; } else if (vchVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS)) { memcpy(&hashBytes, &vchData[0], 20); type = AddressType::payToScriptHash; diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index f10aba2e66..bafb94b712 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -566,7 +566,7 @@ bool getAddressFromIndex(AddressType const & type, const uint160 &hash, std::str { if (type == AddressType::payToScriptHash) { address = CBitcoinAddress(CScriptID(hash)).ToString(); - } else if (type == AddressType::payToPubKeyHash) { + } else if (type == AddressType::payToPubKeyHash || type == AddressType::payToExchangeAddress) { address = CBitcoinAddress(CKeyID(hash)).ToString(); } else { return false; diff --git a/src/txdb.cpp b/src/txdb.cpp index 32066e7328..f3bb39f43a 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -504,6 +504,9 @@ std::pair classifyAddress(txnouttype type, std::vector(addresses.front().begin(), addresses.front().end())); + } else if(type == TX_EXCHANGEADDRESS) { + result.first = AddressType::payToExchangeAddress; + result.second = uint160(std::vector(addresses.front().begin(), addresses.front().end())); } return result; } diff --git a/src/txmempool.cpp b/src/txmempool.cpp index a21edd2f3f..2d3c92cc07 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -677,6 +677,12 @@ void CTxMemPool::addAddressIndex(const CTxMemPoolEntry &entry, const CCoinsViewC CMempoolAddressDelta delta(entry.GetTime(), prevout.nValue * -1, input.prevout.hash, input.prevout.n); mapAddress.insert(std::make_pair(key, delta)); inserted.push_back(key); + } else if (prevout.scriptPubKey.IsPayToExchangeAddress()) { + std::vector hashBytes(prevout.scriptPubKey.begin()+3, prevout.scriptPubKey.begin()+23); + CMempoolAddressDeltaKey key(AddressType::payToExchangeAddress, uint160(hashBytes), txhash, j, 1); + CMempoolAddressDelta delta(entry.GetTime(), prevout.nValue * -1, input.prevout.hash, input.prevout.n); + mapAddress.insert(std::make_pair(key, delta)); + inserted.push_back(key); } } @@ -693,6 +699,12 @@ void CTxMemPool::addAddressIndex(const CTxMemPoolEntry &entry, const CCoinsViewC CMempoolAddressDeltaKey key(AddressType::payToPubKeyHash, uint160(hashBytes), txhash, k, 0); mapAddress.insert(std::make_pair(key, CMempoolAddressDelta(entry.GetTime(), out.nValue))); inserted.push_back(key); + } else if (out.scriptPubKey.IsPayToExchangeAddress()) { + std::vector hashBytes(out.scriptPubKey.begin()+3, out.scriptPubKey.begin()+23); + std::pair ret; + CMempoolAddressDeltaKey key(AddressType::payToExchangeAddress, uint160(hashBytes), txhash, k, 0); + mapAddress.insert(std::make_pair(key, CMempoolAddressDelta(entry.GetTime(), out.nValue))); + inserted.push_back(key); } } @@ -753,6 +765,9 @@ void CTxMemPool::addSpentIndex(const CTxMemPoolEntry &entry, const CCoinsViewCac } else if (prevout.scriptPubKey.IsPayToPublicKeyHash()) { addressHash = uint160(std::vector (prevout.scriptPubKey.begin()+3, prevout.scriptPubKey.begin()+23)); addressType = AddressType::payToPubKeyHash; + } else if (prevout.scriptPubKey.IsPayToExchangeAddress()) { + addressHash = uint160(std::vector (prevout.scriptPubKey.begin()+3, prevout.scriptPubKey.begin()+23)); + addressType = AddressType::payToExchangeAddress; } else { addressHash.SetNull(); addressType = AddressType::unknown;