]> Git Repo - VerusCoin.git/commitdiff
PBaaS identity check
authormiketout <[email protected]>
Fri, 23 Apr 2021 01:04:23 +0000 (18:04 -0700)
committermiketout <[email protected]>
Fri, 23 Apr 2021 01:04:23 +0000 (18:04 -0700)
src/pbaas/identity.cpp
src/rpc/pbaasrpc.cpp

index b4a6230f49c7738f2ebf3754264efab30b1c8eb4..be11a8dfcd0e770736ef6e2c63d8c264c6c78534 100644 (file)
@@ -891,6 +891,10 @@ bool PrecheckIdentityPrimary(const CTransaction &tx, int32_t outNum, CValidation
 
     // compare commitment without regard to case or other textual transformations that are irrelevant to matching
     uint160 parentChain = ConnectedChains.ThisChain().GetID();
+    if (isPBaaS && identity.GetID() == ASSETCHAINS_CHAINID && IsVerusActive())
+    {
+        parentChain.SetNull();
+    }
     if (validReservation && identity.GetID(nameRes.name, parentChain) == identity.GetID())
     {
         return true;
index 7d6915d94564047c301ae7b35b770979c8769706..fb4e0b022d60aefe3653664f318427cd2a66dfd5 100644 (file)
@@ -5267,19 +5267,25 @@ UniValue registernamecommitment(const UniValue& params, bool fHelp)
 
     uint160 parent;
     std::string name = CleanName(uni_get_str(params[0]), parent, true, false);
-    if (parent.IsNull())
+
+    uint160 idID = GetDestinationID(DecodeDestination(name + "@"));
+    if (idID == ASSETCHAINS_CHAINID &&
+        IsVerusActive())
+    {
+        name = VERUS_CHAINNAME;
+    }
+    else
     {
         parent = ASSETCHAINS_CHAINID;
     }
 
     // if either we have an invalid name or an implied parent, that is not valid
-    if (name == "" || !(parent == ASSETCHAINS_CHAINID) || name != uni_get_str(params[0]))
+    if (!(idID == VERUS_CHAINID && IsVerusActive() && parent.IsNull()) &&
+        (name == "" || parent != ASSETCHAINS_CHAINID || name != uni_get_str(params[0])))
     {
         throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid name for commitment. Names must not have leading or trailing spaces and must not include any of the following characters between parentheses (\\/:*?\"<>|@)");
     }
 
-    parent = ConnectedChains.ThisChain().GetID();
-
     CTxDestination dest = DecodeDestination(uni_get_str(params[1]));
     if (dest.which() == COptCCParams::ADDRTYPE_INVALID)
     {
@@ -5298,10 +5304,15 @@ UniValue registernamecommitment(const UniValue& params, bool fHelp)
             throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid referral identity for commitment, must be a currently registered friendly name or i-address");
         }
         referrer = CIdentityID(GetDestinationID(referDest));
-        if (!CIdentity::LookupIdentity(referrer).IsValidUnrevoked())
+        CIdentity referrerIdentity = CIdentity::LookupIdentity(referrer);
+        if (!referrerIdentity.IsValidUnrevoked())
         {
             throw JSONRPCError(RPC_INVALID_PARAMETER, "Referral identity for commitment must be a currently valid, unrevoked friendly name or i-address");
         }
+        if (referrerIdentity.parent != ASSETCHAINS_CHAINID)
+        {
+            throw JSONRPCError(RPC_INVALID_PARAMETER, "Referrals cannot refer to the chain identity or an identity defined on another chain");
+        }
     }
 
     CNameReservation nameRes(name, referrer, GetRandHash());
@@ -5394,6 +5405,17 @@ UniValue registeridentity(const UniValue& params, bool fHelp)
         throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid identity");
     }
 
+    if (IsVerusActive())
+    {
+        CIdentity checkIdentity(newID);
+        checkIdentity.parent.SetNull();
+        if (checkIdentity.GetID() == ASSETCHAINS_CHAINID)
+        {
+            newID.parent.SetNull();
+            parent.SetNull();
+        }
+    }
+
     uint160 newIDID = newID.GetID();
 
     CAmount feeOffer;
@@ -5476,7 +5498,7 @@ UniValue registeridentity(const UniValue& params, bool fHelp)
         throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid commitment salt or referral ID");
     }
 
-    // when creating an ID, the parent is always the current chains, and it is invalid to specify a parent
+    // when creating an ID, the parent is generally the current chains, and it is invalid to specify a parent
     if (newID.parent != parent)
     {
         throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid to specify alternate parent when creating an identity. Parent is determined by the current blockchain.");
This page took 0.040662 seconds and 4 git commands to generate.