cryptocondition transaction is standard too

This commit is contained in:
Scott Sadler
2018-02-17 02:03:34 -03:00
parent a01d0f5672
commit a99ca25a5a
4 changed files with 33 additions and 0 deletions

View File

@@ -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();

View File

@@ -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;

View File

@@ -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)

View File

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