Browse Source

Used Base64 with N prefix for namespace.

cn
Jianping Wu 6 years ago
parent
commit
56693daa32
  1. 22
      src/wallet/rpckeva.cpp

22
src/wallet/rpckeva.cpp

@ -21,6 +21,8 @@
#include <univalue.h> #include <univalue.h>
const unsigned char NAMESPACE_PREFIX = 0x35; // N
/* ************************************************************************** */ /* ************************************************************************** */
@ -72,11 +74,12 @@ UniValue keva_namespace(const JSONRPCRequest& request)
// The namespace name is: Hash160(Hash160(keyId) || displayName) // The namespace name is: Hash160(Hash160(keyId) || displayName)
valtype toHash = ToByteVector(Hash160(ToByteVector(keyId))); valtype toHash = ToByteVector(Hash160(ToByteVector(keyId)));
toHash.insert(toHash.end(), displayName.begin(), displayName.end()); toHash.insert(toHash.end(), displayName.begin(), displayName.end());
const uint160 namespaceHashVal = Hash160(toHash); valtype namespaceHashVal = ToByteVector(Hash160(toHash));
const std::string namespaceHash = EncodeBase64(namespaceHashVal.begin(), namespaceHashVal.size()); namespaceHashVal.insert(namespaceHashVal.begin(), NAMESPACE_PREFIX); // Append N
const std::string namespaceHash = EncodeBase64(ValtypeToString(namespaceHashVal));
const CScript addrName = GetScriptForDestination(keyId); const CScript addrName = GetScriptForDestination(keyId);
const CScript newScript = CKevaScript::buildKevaNamespace(addrName, ValtypeFromString(namespaceHash), displayName); const CScript newScript = CKevaScript::buildKevaNamespace(addrName, namespaceHashVal, displayName);
CCoinControl coinControl; CCoinControl coinControl;
CWalletTx wtx; CWalletTx wtx;
@ -121,7 +124,7 @@ UniValue keva_list_namespaces(const JSONRPCRequest& request)
ObserveSafeMode (); ObserveSafeMode ();
std::map<valtype, std::string> mapObjects; std::map<std::string, std::string> mapObjects;
{ {
LOCK2 (cs_main, pwallet->cs_wallet); LOCK2 (cs_main, pwallet->cs_wallet);
for (const auto& item : pwallet->mapWallet) for (const auto& item : pwallet->mapWallet)
@ -154,7 +157,8 @@ UniValue keva_list_namespaces(const JSONRPCRequest& request)
continue; continue;
} }
const valtype& nameSpace = kevaOp.getOpNamespace(); const valtype nameSpace = kevaOp.getOpNamespace();
const std::string nameSpaceStr = EncodeBase64(ValtypeToString(nameSpace));
const CBlockIndex* pindex; const CBlockIndex* pindex;
const int depth = tx.GetDepthInMainChain(pindex); const int depth = tx.GetDepthInMainChain(pindex);
if (depth <= 0) { if (depth <= 0) {
@ -165,14 +169,14 @@ UniValue keva_list_namespaces(const JSONRPCRequest& request)
CKevaData data; CKevaData data;
if (mine && pcoinsTip->GetNamespace(nameSpace, data)) { if (mine && pcoinsTip->GetNamespace(nameSpace, data)) {
std::string displayName = ValtypeToString(data.getValue()); std::string displayName = ValtypeToString(data.getValue());
mapObjects[nameSpace] = displayName; mapObjects[nameSpaceStr] = displayName;
} }
} }
} }
UniValue res(UniValue::VARR); UniValue res(UniValue::VARR);
for (const auto& item : mapObjects) { for (const auto& item : mapObjects) {
res.push_back(ValtypeToString(item.first) + " : " + item.second); res.push_back(item.first + " : " + item.second);
} }
return res; return res;
@ -209,7 +213,7 @@ UniValue keva_put(const JSONRPCRequest& request)
ObserveSafeMode (); ObserveSafeMode ();
const std::string namespaceStr = request.params[0].get_str (); const std::string namespaceStr = request.params[0].get_str ();
const valtype nameSpace = ValtypeFromString (namespaceStr); const valtype nameSpace = ValtypeFromString(DecodeBase64(namespaceStr));
if (nameSpace.size () > MAX_NAMESPACE_LENGTH) if (nameSpace.size () > MAX_NAMESPACE_LENGTH)
throw JSONRPCError (RPC_INVALID_PARAMETER, "the namespace is too long"); throw JSONRPCError (RPC_INVALID_PARAMETER, "the namespace is too long");
@ -303,7 +307,7 @@ UniValue keva_get(const JSONRPCRequest& request)
ObserveSafeMode (); ObserveSafeMode ();
const std::string namespaceStr = request.params[0].get_str (); const std::string namespaceStr = request.params[0].get_str ();
const valtype nameSpace = ValtypeFromString (namespaceStr); const valtype nameSpace = ValtypeFromString(DecodeBase64(namespaceStr));
if (nameSpace.size () > MAX_NAMESPACE_LENGTH) if (nameSpace.size () > MAX_NAMESPACE_LENGTH)
throw JSONRPCError (RPC_INVALID_PARAMETER, "the namespace is too long"); throw JSONRPCError (RPC_INVALID_PARAMETER, "the namespace is too long");

Loading…
Cancel
Save