rpc: fix issue for querying txids for p2sh addresses

This commit is contained in:
Braydon Fuller
2016-03-09 17:40:40 -05:00
committed by Braydon Fuller
parent 18ea599a71
commit fcac6bcdc8
4 changed files with 36 additions and 6 deletions

View File

@@ -262,6 +262,23 @@ CTxDestination CBitcoinAddress::Get() const
return CNoDestination();
}
bool CBitcoinAddress::GetIndexKey(uint160& hashBytes, int& type) const
{
if (!IsValid()) {
return false;
} else if (vchVersion == Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS)) {
memcpy(&hashBytes, &vchData[0], 20);
type = 1;
return true;
} else if (vchVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS)) {
memcpy(&hashBytes, &vchData[0], 20);
type = 2;
return true;
}
return false;
}
bool CBitcoinAddress::GetKeyID(CKeyID& keyID) const
{
if (!IsValid() || vchVersion != Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS))

View File

@@ -116,6 +116,7 @@ public:
CTxDestination Get() const;
bool GetKeyID(CKeyID &keyID) const;
bool GetIndexKey(uint160& hashBytes, int& type) const;
bool IsScript() const;
};

View File

@@ -411,18 +411,17 @@ UniValue getaddresstxids(const UniValue& params, bool fHelp)
);
CBitcoinAddress address(params[0].get_str());
if (!address.IsValid())
uint160 hashBytes;
int type = 0;
if (!address.GetIndexKey(hashBytes, type)) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid address");
}
CKeyID keyID;
address.GetKeyID(keyID);
int type = 1; // TODO
std::vector<std::pair<CAddressIndexKey, CAmount> > addressIndex;
LOCK(cs_main);
if (!GetAddressIndex(keyID, type, addressIndex))
if (!GetAddressIndex(hashBytes, type, addressIndex))
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "No information available for address");
UniValue result(UniValue::VARR);