Fixed keva_delete.

This commit is contained in:
Jianping Wu 2018-12-11 23:04:51 -08:00
parent df20cfc6d2
commit f6b074a81c
2 changed files with 16 additions and 11 deletions

View File

@ -359,11 +359,6 @@ CheckKevaTransaction (const CTransaction& tx, unsigned nHeight,
if (!nameOpIn.isAnyUpdate() && !nameOpIn.isNamespaceRegistration()) {
return state.Invalid(error("CheckKevaTransaction: KEVA_DELETE with prev input that is no update"));
}
CKevaData data;
const bool hasKey = view.GetName(nameSpace, nameOpOut.getOpKey(), data);
if (!hasKey) {
return state.Invalid(error("CheckKevaTransaction: no key to delete"));
}
}
return true;
}
@ -410,7 +405,10 @@ void ApplyKevaTransaction(const CTransaction& tx, unsigned nHeight,
CKevaData data;
if (op.isDelete()) {
view.DeleteName(nameSpace, key);
CKevaData oldData;
if (view.GetName(nameSpace, key, oldData)) {
view.DeleteName(nameSpace, key);
}
} else {
data.fromScript(nHeight, COutPoint(tx.GetHash(), i), op);
view.SetName(nameSpace, key, data, false);

View File

@ -327,18 +327,25 @@ UniValue keva_delete(const JSONRPCRequest& request)
throw JSONRPCError (RPC_INVALID_PARAMETER, "the key is too long");
}
bool hasKey = false;
CKevaData data;
{
LOCK2(cs_main, mempool.cs);
if (!pcoinsTip->GetName(nameSpace, key, data)) {
std::vector<std::tuple<valtype, valtype, valtype, uint256>> unconfirmedKeyValueList;
valtype val;
if (!mempool.getUnconfirmedKeyValue(nameSpace, key, val) || val.size() == 0) {
throw JSONRPCError (RPC_TRANSACTION_ERROR, "key not found");
std::vector<std::tuple<valtype, valtype, valtype, uint256>> unconfirmedKeyValueList;
valtype val;
if (mempool.getUnconfirmedKeyValue(nameSpace, key, val)) {
if (val.size() > 0) {
hasKey = true;
}
} else if (pcoinsTip->GetName(nameSpace, key, data)) {
hasKey = true;
}
}
if (!hasKey) {
throw JSONRPCError (RPC_TRANSACTION_ERROR, "key not found");
}
EnsureWalletIsUnlocked(pwallet);
COutput output;