mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-14 12:43:40 +02:00
Merge d492dc1cda into merged_master (Bitcoin PR bitcoin/bitcoin#24147)
This commit is contained in:
commit
94e058d3b7
12 changed files with 2419 additions and 30 deletions
|
|
@ -458,3 +458,28 @@ bool IsOpSuccess(const opcodetype& opcode)
|
|||
// ELEMENTS: Tapscript extension from OP_SHA256INITIALIZE(196) till OP_TWEAKVERIFY(228)
|
||||
(opcode >= 187 && opcode <= 191) || (opcode >= 229 && 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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue