mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-27 11:43:26 -03:00
script: move CheckMinimalPush from interpreter to script.h
It is used by Miniscript.
This commit is contained in:
parent
31ec6ae92a
commit
f4e289f384
4 changed files with 27 additions and 27 deletions
|
@ -225,31 +225,6 @@ bool static CheckPubKeyEncoding(const valtype &vchPubKey, unsigned int flags, co
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheckMinimalPush(const valtype& data, opcodetype opcode) {
|
|
||||||
// Excludes OP_1NEGATE, OP_1-16 since they are by definition minimal
|
|
||||||
assert(0 <= opcode && opcode <= OP_PUSHDATA4);
|
|
||||||
if (data.size() == 0) {
|
|
||||||
// Should have used OP_0.
|
|
||||||
return opcode == OP_0;
|
|
||||||
} else if (data.size() == 1 && data[0] >= 1 && data[0] <= 16) {
|
|
||||||
// Should have used OP_1 .. OP_16.
|
|
||||||
return false;
|
|
||||||
} else if (data.size() == 1 && data[0] == 0x81) {
|
|
||||||
// Should have used OP_1NEGATE.
|
|
||||||
return false;
|
|
||||||
} else if (data.size() <= 75) {
|
|
||||||
// Must have used a direct push (opcode indicating number of bytes pushed + those bytes).
|
|
||||||
return opcode == data.size();
|
|
||||||
} else if (data.size() <= 255) {
|
|
||||||
// Must have used OP_PUSHDATA.
|
|
||||||
return opcode == OP_PUSHDATA1;
|
|
||||||
} else if (data.size() <= 65535) {
|
|
||||||
// Must have used OP_PUSHDATA2.
|
|
||||||
return opcode == OP_PUSHDATA2;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int FindAndDelete(CScript& script, const CScript& b)
|
int FindAndDelete(CScript& script, const CScript& b)
|
||||||
{
|
{
|
||||||
int nFound = 0;
|
int nFound = 0;
|
||||||
|
|
|
@ -344,8 +344,6 @@ bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const C
|
||||||
|
|
||||||
size_t CountWitnessSigOps(const CScript& scriptSig, const CScript& scriptPubKey, const CScriptWitness* witness, unsigned int flags);
|
size_t CountWitnessSigOps(const CScript& scriptSig, const CScript& scriptPubKey, const CScriptWitness* witness, unsigned int flags);
|
||||||
|
|
||||||
bool CheckMinimalPush(const std::vector<unsigned char>& data, opcodetype opcode);
|
|
||||||
|
|
||||||
int FindAndDelete(CScript& script, const CScript& b);
|
int FindAndDelete(CScript& script, const CScript& b);
|
||||||
|
|
||||||
#endif // BITCOIN_SCRIPT_INTERPRETER_H
|
#endif // BITCOIN_SCRIPT_INTERPRETER_H
|
||||||
|
|
|
@ -339,3 +339,28 @@ bool IsOpSuccess(const opcodetype& opcode)
|
||||||
(opcode >= 141 && opcode <= 142) || (opcode >= 149 && opcode <= 153) ||
|
(opcode >= 141 && opcode <= 142) || (opcode >= 149 && opcode <= 153) ||
|
||||||
(opcode >= 187 && opcode <= 254);
|
(opcode >= 187 && opcode <= 254);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CheckMinimalPush(const std::vector<unsigned char>& data, opcodetype opcode) {
|
||||||
|
// Excludes OP_1NEGATE, OP_1-16 since they are by definition minimal
|
||||||
|
assert(0 <= opcode && opcode <= OP_PUSHDATA4);
|
||||||
|
if (data.size() == 0) {
|
||||||
|
// Should have used OP_0.
|
||||||
|
return opcode == OP_0;
|
||||||
|
} else if (data.size() == 1 && data[0] >= 1 && data[0] <= 16) {
|
||||||
|
// Should have used OP_1 .. OP_16.
|
||||||
|
return false;
|
||||||
|
} else if (data.size() == 1 && data[0] == 0x81) {
|
||||||
|
// Should have used OP_1NEGATE.
|
||||||
|
return false;
|
||||||
|
} else if (data.size() <= 75) {
|
||||||
|
// Must have used a direct push (opcode indicating number of bytes pushed + those bytes).
|
||||||
|
return opcode == data.size();
|
||||||
|
} else if (data.size() <= 255) {
|
||||||
|
// Must have used OP_PUSHDATA.
|
||||||
|
return opcode == OP_PUSHDATA1;
|
||||||
|
} else if (data.size() <= 65535) {
|
||||||
|
// Must have used OP_PUSHDATA2.
|
||||||
|
return opcode == OP_PUSHDATA2;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -576,4 +576,6 @@ struct CScriptWitness
|
||||||
/** Test for OP_SUCCESSx opcodes as defined by BIP342. */
|
/** Test for OP_SUCCESSx opcodes as defined by BIP342. */
|
||||||
bool IsOpSuccess(const opcodetype& opcode);
|
bool IsOpSuccess(const opcodetype& opcode);
|
||||||
|
|
||||||
|
bool CheckMinimalPush(const std::vector<unsigned char>& data, opcodetype opcode);
|
||||||
|
|
||||||
#endif // BITCOIN_SCRIPT_SCRIPT_H
|
#endif // BITCOIN_SCRIPT_SCRIPT_H
|
||||||
|
|
Loading…
Add table
Reference in a new issue