Browse Source

Fixed keva op.

0.16.3-insta
Jianping Wu 6 years ago
parent
commit
7d75d17f04
  1. 16
      src/script/keva.cpp
  2. 29
      src/script/keva.h

16
src/script/keva.cpp

@ -10,15 +10,16 @@ CKevaScript::CKevaScript (const CScript& script) @@ -10,15 +10,16 @@ CKevaScript::CKevaScript (const CScript& script)
: op(OP_NOP), address(script)
{
opcodetype nameOp;
CScript::const_iterator pc = script.begin ();
if (!script.GetOp (pc, nameOp))
CScript::const_iterator pc = script.begin();
if (!script.GetOp(pc, nameOp)) {
return;
}
opcodetype opcode;
while (true) {
valtype vch;
if (!script.GetOp (pc, opcode, vch)) {
if (!script.GetOp(pc, opcode, vch)) {
return;
}
if (opcode == OP_DROP || opcode == OP_2DROP || opcode == OP_NOP) {
@ -33,9 +34,10 @@ CKevaScript::CKevaScript (const CScript& script) @@ -33,9 +34,10 @@ CKevaScript::CKevaScript (const CScript& script)
// Move the pc to after any DROP or NOP.
while (opcode == OP_DROP || opcode == OP_2DROP || opcode == OP_NOP) {
if (!script.GetOp (pc, opcode))
if (!script.GetOp(pc, opcode)) {
break;
}
}
pc--;
/* Now, we have the args and the operation. Check if we have indeed
@ -43,13 +45,13 @@ CKevaScript::CKevaScript (const CScript& script) @@ -43,13 +45,13 @@ CKevaScript::CKevaScript (const CScript& script)
op and address members, if everything is valid. */
switch (nameOp) {
case OP_KEVA_PUT:
if (args.size () != 1) {
if (args.size() != 3) {
return;
}
break;
case OP_KEVA_NAMESPACE:
if (args.size () != 1) {
if (args.size() != 3) {
return;
}
break;
@ -59,7 +61,7 @@ CKevaScript::CKevaScript (const CScript& script) @@ -59,7 +61,7 @@ CKevaScript::CKevaScript (const CScript& script)
}
op = nameOp;
address = CScript (pc, script.end ());
address = CScript(pc, script.end());
}
CScript

29
src/script/keva.h

@ -7,8 +7,6 @@ @@ -7,8 +7,6 @@
#include <script/script.h>
typedef std::vector<unsigned char> valtype;
class uint160;
/**
@ -36,7 +34,7 @@ public: @@ -36,7 +34,7 @@ public:
* Default constructor. This enables us to declare a variable
* and initialise it later via assignment.
*/
inline CKevaScript ()
inline CKevaScript()
: op(OP_NOP)
{}
@ -45,14 +43,13 @@ public: @@ -45,14 +43,13 @@ public:
* the member variables representing the "picked apart" name script.
* @param script The ordinary script to parse.
*/
explicit CKevaScript (const CScript& script);
explicit CKevaScript(const CScript& script);
/**
* Return whether this is a (valid) name script.
* @return True iff this is a name operation.
*/
inline bool
isKevaOp () const
inline bool isKevaOp() const
{
switch (op) {
case OP_KEVA_PUT:
@ -136,16 +133,15 @@ public: @@ -136,16 +133,15 @@ public:
}
/**
* Return the name operation value. This call is only valid for
* OP_KEVA_PUT.
* @return The name operation's value.
* Return namespace's display name. This call is only valid for
* OP_KEVA_NAMESPACE.
* @return The namespace's display name.
*/
inline const valtype& getOpNamespaceValue() const
inline const valtype& getOpNamespaceDisplayName() const
{
switch (op) {
case OP_KEVA_PUT:
// args[1] is namespace
return args[2];
case OP_KEVA_NAMESPACE:
return args[1];
default:
assert (false);
@ -161,10 +157,7 @@ public: @@ -161,10 +157,7 @@ public:
{
switch (op) {
case OP_KEVA_PUT:
return args[0];
case OP_KEVA_NAMESPACE:
return args[0];
return args[1];
default:
assert(false);
@ -180,7 +173,7 @@ public: @@ -180,7 +173,7 @@ public:
{
switch (op) {
case OP_KEVA_PUT:
// args[1] is namespace
// args[0] is namespace, args[1] is key
return args[2];
default:

Loading…
Cancel
Save