mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-14 12:43:40 +02:00
Merge feee029d29 into merged_master (Elements PR ElementsProject/elements#1020)
Messy merge conflicts because this PR backported some ad-hoc stuff from upstream while keeping a few things that upstream deleted. Hopefully reviewing is easier than doing this in the first place, since ultimately all I did was delete code from one side or another of the conflicts. (Ok, I also changed some boost optional stuff to std::optional, and had to patch up a test file for test framework changes.) When reviewing the detailed crypto, bear in mind that taptweaks, like all hashes are the kind of crypto that cannot be subtly wrong -- it will either fail very hard or be correct. And we have independent implementations in C++ and Python that cross-check each other, si it's unlikely to be the former.
This commit is contained in:
commit
6387aaf765
17 changed files with 1795 additions and 48 deletions
|
|
@ -147,6 +147,45 @@ std::string GetOpName(opcodetype opcode)
|
|||
// Opcode added by BIP 342 (Tapscript)
|
||||
case OP_CHECKSIGADD : return "OP_CHECKSIGADD";
|
||||
|
||||
// Elements Tapscript opcodes
|
||||
case OP_SHA256INITIALIZE : return "OP_SHA256INITIALIZE";
|
||||
case OP_SHA256UPDATE : return "OP_SHA256UPDATE";
|
||||
case OP_SHA256FINALIZE : return "OP_SHA256FINALIZE";
|
||||
case OP_INSPECTINPUTOUTPOINT : return "OP_INSPECTINPUTOUTPOINT";
|
||||
case OP_INSPECTINPUTASSET : return "OP_INSPECTINPUTASSET";
|
||||
case OP_INSPECTINPUTVALUE : return "OP_INSPECTINPUTVALUE";
|
||||
case OP_INSPECTINPUTSCRIPTPUBKEY : return "OP_INSPECTINPUTSCRIPTPUBKEY";
|
||||
case OP_INSPECTINPUTSEQUENCE : return "OP_INSPECTINPUTSEQUENCE";
|
||||
case OP_INSPECTINPUTISSUANCE : return "OP_INSPECTINPUTISSUANCE";
|
||||
case OP_PUSHCURRENTINPUTINDEX : return "OP_PUSHCURRENTINPUTINDEX";
|
||||
case OP_INSPECTOUTPUTASSET : return "OP_INSPECTOUTPUTASSET";
|
||||
case OP_INSPECTOUTPUTVALUE : return "OP_INSPECTOUTPUTVALUE";
|
||||
case OP_INSPECTOUTPUTNONCE : return "OP_INSPECTOUTPUTNONCE";
|
||||
case OP_INSPECTOUTPUTSCRIPTPUBKEY : return "OP_INSPECTOUTPUTSCRIPTPUBKEY";
|
||||
case OP_INSPECTVERSION : return "OP_INSPECTVERSION";
|
||||
case OP_INSPECTLOCKTIME : return "OP_INSPECTLOCKTIME";
|
||||
case OP_INSPECTNUMINPUTS : return "OP_INSPECTNUMINPUTS";
|
||||
case OP_INSPECTNUMOUTPUTS : return "OP_INSPECTNUMOUTPUTS";
|
||||
case OP_TXWEIGHT : return "OP_TXWEIGHT";
|
||||
|
||||
// 64 bit LE arithmetic opcodes
|
||||
case OP_ADD64 : return "OP_ADD64";
|
||||
case OP_SUB64 : return "OP_SUB64";
|
||||
case OP_MUL64 : return "OP_MUL64";
|
||||
case OP_DIV64 : return "OP_DIV64";
|
||||
case OP_NEG64 : return "OP_NEG64";
|
||||
case OP_LESSTHAN64 : return "OP_LESSTHAN64";
|
||||
case OP_LESSTHANOREQUAL64 : return "OP_LESSTHANOREQUAL64";
|
||||
case OP_GREATERTHAN64 : return "OP_GREATERTHAN64";
|
||||
case OP_GREATERTHANOREQUAL64 : return "OP_GREATERTHANOREQUAL64";
|
||||
case OP_SCRIPTNUMTOLE64 : return "OP_SCRIPTNUMTOLE64";
|
||||
case OP_LE64TOSCRIPTNUM : return "OP_LE64TOSCRIPTNUM";
|
||||
case OP_LE32TOLE64 : return "OP_LE32TOLE64";
|
||||
|
||||
// Crypto opcodes
|
||||
case OP_ECMULSCALARVERIFY : return "OP_ECMULSCALARVERIFY";
|
||||
case OP_TWEAKVERIFY : return "OP_TWEAKVERIFY";
|
||||
|
||||
case OP_INVALIDOPCODE : return "OP_INVALIDOPCODE";
|
||||
|
||||
default:
|
||||
|
|
@ -415,6 +454,7 @@ bool IsOpSuccess(const opcodetype& opcode)
|
|||
return opcode == 80 || opcode == 98 || (opcode >= 137 && opcode <= 138) ||
|
||||
// ELEMENTS: Don't mark OP_INVERT , OP_AND, OP_OR, OP_XOR. OP_LSHIFT, OP_RSHIFT as success
|
||||
(opcode >= 141 && opcode <= 142) || (opcode >= 149 && opcode <= 151) ||
|
||||
// ELEMENTS: Exclude OP_DETERMINISTICRANDOM, OP_CHECKSIGFROMSTACK(VERIFY), OP_SUBSTRLAZY
|
||||
(opcode >= 187 && opcode <= 191) || (opcode >= 196 && opcode <= 254);
|
||||
// ELEMENTS: Exclude OP_DETERMINISTICRANDOM(192), OP_CHECKSIGFROMSTACK(VERIFY)(192-193), OP_SUBSTRLAZY(195)
|
||||
// ELEMENTS: Tapscript extension from OP_SHA256INITIALIZE(196) till OP_TWEAKVERIFY(228)
|
||||
(opcode >= 187 && opcode <= 191) || (opcode >= 229 && opcode <= 254);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue