Browse Source

cryptocondition transaction is standard too

pull/4/head
Scott Sadler 6 years ago
parent
commit
a99ca25a5a
  1. 23
      src/script/script.cpp
  2. 2
      src/script/script.h
  3. 7
      src/script/standard.cpp
  4. 1
      src/script/standard.h

23
src/script/script.cpp

@ -223,6 +223,29 @@ bool CScript::IsPayToScriptHash() const
this->at(22) == OP_EQUAL);
}
bool CScript::IsPayToCryptoCondition() const
{
const_iterator pc = this->begin();
vector<unsigned char> data;
int i;
while (pc < this->end())
{
opcodetype opcode;
if (!this->GetOp(pc, opcode, data))
return 0;
if (0 == i)
if (opcode != OP_PUSHDATA1)
return 0;
if (1 == i)
if (opcode != OP_CHECKCRYPTOCONDITION)
return 0;
if (i > 1)
return 0;
i++;
}
return 1;
}
bool CScript::IsPushOnly() const
{
const_iterator pc = begin();

2
src/script/script.h

@ -176,6 +176,7 @@ enum opcodetype
OP_PUBKEYS = 0xfb,
OP_PUBKEYHASH = 0xfd,
OP_PUBKEY = 0xfe,
OP_CRYPTOCONDITION = 0xfc,
OP_INVALIDOPCODE = 0xff,
};
@ -563,6 +564,7 @@ public:
unsigned int GetSigOpCount(const CScript& scriptSig) const;
bool IsPayToScriptHash() const;
bool IsPayToCryptoCondition() const;
/** Called by IsStandardTx and P2SH/BIP62 VerifyScript (which makes it consensus-critical). */
bool IsPushOnly() const;

7
src/script/standard.cpp

@ -68,6 +68,13 @@ bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector<vector<unsi
return true;
}
// Shortcut for pay-to-crypto-condition
if (scriptPubKey.IsPayToCryptoCondition()) {
typeRet = TX_CRYPTOCONDITION;
//vSolutionsRet.push_back("hello there");
return true;
}
// Scan templates
const CScript& script1 = scriptPubKey;
BOOST_FOREACH(const PAIRTYPE(txnouttype, CScript)& tplate, mTemplates)

1
src/script/standard.h

@ -65,6 +65,7 @@ enum txnouttype
TX_PUBKEYHASH,
TX_SCRIPTHASH,
TX_MULTISIG,
TX_CRYPTOCONDITION,
TX_NULL_DATA,
};

Loading…
Cancel
Save