integration test for complex aux condition
This commit is contained in:
@@ -3,11 +3,22 @@
|
||||
#include "script/interpreter.h"
|
||||
|
||||
|
||||
int CryptoConditionChecker::CheckAuxCondition(const CC *cond) const {
|
||||
int TransactionSignatureChecker::CheckAuxCondition(const CC *cond) const {
|
||||
|
||||
// Check that condition is equal to fulfillment
|
||||
if (0 == strcmp((const char*)cond->method, "equals")) {
|
||||
return (cond->conditionAuxLength == cond->fulfillmentAuxLength) &&
|
||||
(0 == memcmp(cond->conditionAux, cond->fulfillmentAux, cond->conditionAuxLength));
|
||||
}
|
||||
|
||||
// Check that pubKeyScript specified in fulfillment is OP_RETURN
|
||||
if (0 == strcmp((const char*)cond->method, "inputIsReturn")) {
|
||||
if (cond->fulfillmentAuxLength != 1) return 0;
|
||||
int n = (int) cond->fulfillmentAux[0];
|
||||
if (n >= txTo->vout.size()) return 0;
|
||||
uint8_t *ptr = (uint8_t *)txTo->vout[n].scriptPubKey.data();
|
||||
return ptr[0] == OP_RETURN;
|
||||
}
|
||||
printf("no defined behaviour for method:%s\n", cond->method);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1158,7 +1158,7 @@ extern "C"
|
||||
}
|
||||
|
||||
static int komodoCCAux(CC *cond, void *checker) {
|
||||
return ((CryptoConditionChecker*)checker)->CheckAuxCondition(cond);
|
||||
return ((TransactionSignatureChecker*)checker)->CheckAuxCondition(cond);
|
||||
}
|
||||
|
||||
bool TransactionSignatureChecker::CheckCryptoCondition(const CC *cond, const std::vector<unsigned char>& condBin, const CScript& scriptCode) const
|
||||
|
||||
@@ -125,6 +125,7 @@ public:
|
||||
bool CheckSig(const std::vector<unsigned char>& scriptSig, const std::vector<unsigned char>& vchPubKey, const CScript& scriptCode) const;
|
||||
bool CheckLockTime(const CScriptNum& nLockTime) const;
|
||||
bool CheckCryptoCondition(const CC *cond, const std::vector<unsigned char>& condBin, const CScript& scriptCode) const;
|
||||
int CheckAuxCondition(const CC *cond) const;
|
||||
};
|
||||
|
||||
class MutableTransactionSignatureChecker : public TransactionSignatureChecker
|
||||
@@ -139,10 +140,4 @@ public:
|
||||
bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript& script, unsigned int flags, const BaseSignatureChecker& checker, ScriptError* error = NULL);
|
||||
bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, unsigned int flags, const BaseSignatureChecker& checker, ScriptError* error = NULL);
|
||||
|
||||
class CryptoConditionChecker : public TransactionSignatureChecker
|
||||
{
|
||||
public:
|
||||
int CheckAuxCondition(const CC *cond) const;
|
||||
};
|
||||
|
||||
#endif // BITCOIN_SCRIPT_INTERPRETER_H
|
||||
|
||||
Reference in New Issue
Block a user