diff --git a/.changeset/tall-actors-sell.md b/.changeset/tall-actors-sell.md new file mode 100644 index 00000000..1982e585 --- /dev/null +++ b/.changeset/tall-actors-sell.md @@ -0,0 +1,5 @@ +--- +'@bitauth/libauth': minor +--- + +Speculatively implement P2S, OP_EVAL, and OP_POW diff --git a/src/lib/engine/types/template-types.ts b/src/lib/engine/types/template-types.ts index 2484e2af..bd285b92 100644 --- a/src/lib/engine/types/template-types.ts +++ b/src/lib/engine/types/template-types.ts @@ -841,6 +841,8 @@ export type WalletTemplateScriptLocking = WalletTemplateScript & { * The presence of the `lockingType` property indicates that this script is a * locking script. It must be present on any script referenced by the * `unlocks` property of another script. + * + * TODO: migrate `standard` -> `p2s` */ lockingType: 'p2sh20' | 'p2sh32' | 'standard'; }; diff --git a/src/lib/language/language-utils.ts b/src/lib/language/language-utils.ts index e62473f1..f29f08e8 100644 --- a/src/lib/language/language-utils.ts +++ b/src/lib/language/language-utils.ts @@ -651,7 +651,8 @@ export const extractEvaluationSamples = < * outer evaluation appear before their parent sample (which uses their result). */ export const extractEvaluationSamplesRecursive = < - ProgramState extends AuthenticationProgramStateMinimum, + ProgramState extends AuthenticationProgramStateControlStack & + AuthenticationProgramStateMinimum, >({ /** * The range of the script node that was evaluated to produce the `trace` @@ -670,6 +671,8 @@ export const extractEvaluationSamplesRecursive = < nodes: ScriptReductionTraceScriptNode['script']; trace: ProgramState[]; }): SampleExtractionResult => { + const statesNotProducedByOpEval = (state: ProgramState) => + !state.controlStack.some((item) => typeof item === 'object'); const extractEvaluations = ( node: ScriptReductionTraceChildNode, depth = 1, @@ -690,7 +693,9 @@ export const extractEvaluationSamplesRecursive = < ], [], ); - const traceWithoutUnlockingPhase = node.trace.slice(1); + const traceWithoutUnlockingPhase = node.trace + .slice(1) + .filter(statesNotProducedByOpEval); const evaluationBeginToken = '$('; const evaluationEndToken = ')'; const extracted = extractEvaluationSamples({ @@ -711,7 +716,7 @@ export const extractEvaluationSamplesRecursive = < const { samples, unmatchedStates } = extractEvaluationSamples({ evaluationRange, nodes, - trace, + trace: trace.filter(statesNotProducedByOpEval), }); const childSamples = nodes.reduce[]>( @@ -825,6 +830,7 @@ export const extractUnexecutedRanges = < return containedRangesExcluded; }; +const oneBelowHash160 = 19; /** * Given a stack, return a summary of the stack's contents, encoding valid VM * numbers as numbers, and all other stack items as hex literals. @@ -833,7 +839,9 @@ export const extractUnexecutedRanges = < */ export const summarizeStack = (stack: Uint8Array[]) => stack.map((item) => { - const asNumber = vmNumberToBigInt(item); + const asNumber = vmNumberToBigInt(item, { + maximumVmNumberByteLength: oneBelowHash160, + }); return `0x${binToHex(item)}${ typeof asNumber === 'string' ? '' : `(${asNumber.toString()})` }`; @@ -879,8 +887,7 @@ export const summarizeDebugTrace = < ...(nextState.error === undefined ? {} : { error: nextState.error }), - execute: - state.controlStack[state.controlStack.length - 1] !== false, + execute: state.controlStack.every((item) => item !== false), instruction: 'instruction' in state ? state.instruction diff --git a/src/lib/vm/instruction-sets/bch/2023/bch-2023-consensus.ts b/src/lib/vm/instruction-sets/bch/2023/bch-2023-consensus.ts index 0d175f46..34d01010 100644 --- a/src/lib/vm/instruction-sets/bch/2023/bch-2023-consensus.ts +++ b/src/lib/vm/instruction-sets/bch/2023/bch-2023-consensus.ts @@ -17,7 +17,6 @@ export const ConsensusBch2023 = { * A.K.A. `MAX_SCRIPT_SIZE` */ maximumBytecodeLength: 10000, - maximumCommitmentLength: 40, /** * A.K.A. `MAX_CONSENSUS_VERSION` */ @@ -40,6 +39,10 @@ export const ConsensusBch2023 = { * A.K.A. `MAX_SCRIPT_ELEMENT_SIZE` */ maximumStackItemLength: 520, + /** + * When set to `-1`, only BCH_2023_05 standard patterns are accepted. + */ + maximumStandardLockingBytecodeLength: -1, /** * A.K.A. `MAX_STANDARD_TX_SIZE` */ @@ -48,6 +51,7 @@ export const ConsensusBch2023 = { * A.K.A. `MAX_TX_IN_SCRIPT_SIG_SIZE` */ maximumStandardUnlockingBytecodeLength: 1650, + maximumTokenCommitmentLength: 40, /** * A.K.A. `MAX_TX_SIZE` */ diff --git a/src/lib/vm/instruction-sets/bch/2023/bch-2023-instruction-set.ts b/src/lib/vm/instruction-sets/bch/2023/bch-2023-instruction-set.ts index 2957c3a3..690e2f79 100644 --- a/src/lib/vm/instruction-sets/bch/2023/bch-2023-instruction-set.ts +++ b/src/lib/vm/instruction-sets/bch/2023/bch-2023-instruction-set.ts @@ -911,10 +911,20 @@ export const createInstructionSetBch2023 = < // eslint-disable-next-line functional/no-loop-statements for (const [index, output] of sourceOutputs.entries()) { - if (!isStandardUtxoBytecode(output.lockingBytecode)) { + if (consensus.maximumStandardLockingBytecodeLength === -1) { + if (!isStandardUtxoBytecode(output.lockingBytecode)) { + return formatError( + AuthenticationErrorCommon.verifyStandardFailedNonstandardSourceOutput, + `Source output ${index} is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).`, + ); + } + } else if ( + output.lockingBytecode.length > + consensus.maximumStandardLockingBytecodeLength + ) { return formatError( AuthenticationErrorCommon.verifyStandardFailedNonstandardSourceOutput, - `Source output ${index} is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).`, + `Source output ${index} is non-standard: locking bytecode length of ${output.lockingBytecode.length} exceeds the maximum standard locking bytecode length of ${consensus.maximumStandardLockingBytecodeLength}.`, ); } } @@ -923,21 +933,32 @@ export const createInstructionSetBch2023 = < let totalArbitraryDataBytes = 0; // eslint-disable-next-line functional/no-loop-statements for (const [index, output] of transaction.outputs.entries()) { - if (!isStandardOutputBytecode(output.lockingBytecode)) { - return formatError( - AuthenticationErrorCommon.verifyStandardFailedNonstandardOutput, - `Transaction output ${index} is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).`, - ); - } - // eslint-disable-next-line functional/no-conditional-statements - if (isArbitraryDataOutput(output.lockingBytecode)) { - // eslint-disable-next-line functional/no-expression-statements - totalArbitraryDataBytes += output.lockingBytecode.length + 1; + if (consensus.maximumStandardLockingBytecodeLength === -1) { + if (!isStandardOutputBytecode(output.lockingBytecode)) { + return formatError( + AuthenticationErrorCommon.verifyStandardFailedNonstandardOutput, + `Transaction output ${index} is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).`, + ); + } + } else if ( + output.lockingBytecode.length > + consensus.maximumStandardLockingBytecodeLength + ) { + // eslint-disable-next-line functional/no-conditional-statements + if (isArbitraryDataOutput(output.lockingBytecode)) { + // eslint-disable-next-line functional/no-expression-statements + totalArbitraryDataBytes += output.lockingBytecode.length + 1; + } else { + return formatError( + AuthenticationErrorCommon.verifyStandardFailedNonstandardOutput, + `Transaction output ${index} is non-standard: locking bytecode length of ${output.lockingBytecode.length} exceeds the maximum standard locking bytecode length of ${consensus.maximumStandardLockingBytecodeLength} and does not match the standard arbitrary data pattern (OP_RETURN).`, + ); + } } if (isDustOutput(output)) { return formatError( AuthenticationErrorCommon.verifyStandardFailedDustOutput, - ` Transaction output ${index} must have a value of at least ${getDustThreshold( + `Transaction output ${index} must have a value of at least ${getDustThreshold( output, )} satoshis. Current value: ${output.valueSatoshis}`, ); @@ -973,6 +994,9 @@ export const createInstructionSetBch2023 = < const tokenValidationResult = verifyTransactionTokens( transaction, sourceOutputs, + { + maximumTokenCommitmentLength: consensus.maximumTokenCommitmentLength, + }, ); if (tokenValidationResult !== true) { return tokenValidationResult; diff --git a/src/lib/vm/instruction-sets/bch/2023/bch-2023-tokens.ts b/src/lib/vm/instruction-sets/bch/2023/bch-2023-tokens.ts index f62af237..50da860c 100644 --- a/src/lib/vm/instruction-sets/bch/2023/bch-2023-tokens.ts +++ b/src/lib/vm/instruction-sets/bch/2023/bch-2023-tokens.ts @@ -177,19 +177,17 @@ export const extractTransactionOutputTokenData = ( export const verifyTransactionTokens = ( transaction: Transaction, sourceOutputs: Output[], + { maximumTokenCommitmentLength }: { maximumTokenCommitmentLength: number }, ) => { const excessiveCommitment = [...sourceOutputs, ...transaction.outputs].find( (output) => output.token?.nft?.commitment !== undefined && - output.token.nft.commitment.length > - ConsensusBch2023.maximumCommitmentLength, + output.token.nft.commitment.length > maximumTokenCommitmentLength, ); if (excessiveCommitment !== undefined) { return formatError( AuthenticationErrorCommon.tokenValidationExcessiveCommitmentLength, - `A token commitment exceeds the consensus limit of ${ - ConsensusBch2023.maximumCommitmentLength - } bytes. Excessive token commitment length: ${ + `A token commitment exceeds the consensus limit of ${maximumTokenCommitmentLength} bytes. Excessive token commitment length: ${ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion excessiveCommitment.token!.nft!.commitment.length }`, diff --git a/src/lib/vm/instruction-sets/bch/2026/bch-2026-consensus.ts b/src/lib/vm/instruction-sets/bch/2026/bch-2026-consensus.ts index ecab58de..116bb1f9 100644 --- a/src/lib/vm/instruction-sets/bch/2026/bch-2026-consensus.ts +++ b/src/lib/vm/instruction-sets/bch/2026/bch-2026-consensus.ts @@ -4,7 +4,10 @@ import { ConsensusBch2025 } from '../2025/bch-2025-consensus.js'; * Consensus setting overrides for the `BCH_SPEC` instruction set. */ // eslint-disable-next-line @typescript-eslint/naming-convention -export const ConsensusBch2026Overrides = {}; +export const ConsensusBch2026Overrides = { + maximumStandardLockingBytecodeLength: 201, + maximumTokenCommitmentLength: 80, +}; /** * Consensus settings for the `BCH_SPEC` instruction set. diff --git a/src/lib/vm/instruction-sets/bch/2026/bch-2026-descriptions.ts b/src/lib/vm/instruction-sets/bch/2026/bch-2026-descriptions.ts new file mode 100644 index 00000000..35bad09a --- /dev/null +++ b/src/lib/vm/instruction-sets/bch/2026/bch-2026-descriptions.ts @@ -0,0 +1,20 @@ +import { OpcodeDescriptionsBch2023 } from '../2023/bch-2023-descriptions.js'; + +/** + * Descriptions for the opcodes added to the `BCH_2026_05` instruction set + * beyond those present in `BCH_2025_05`. + */ +export enum OpcodeDescriptionsBch2026Additions { + OP_EVAL = 'Pop the top item from the stack as bytecode. Preserve the active bytecode at the top of the control stack, then evaluate the bytecode as if it were the active bytecode (without modifying the stack, alternate stack, or other evaluation context). When the evaluation is complete, restore the original bytecode and continue evaluation after the OP_EVAL instruction. If the bytecode is malformed, error.', + OP_BEGIN = 'Push the current instruction pointer index to the control stack as an integer (to be read by OP_UNTIL).', + OP_UNTIL = 'Pop the top item from the control stack (if the control value is not an integer, error). Add the difference between the control value and the current instruction pointer index to the repeated bytes counter, if the sum of the repeated bytes counter and the active bytecode length is greater than the maximum bytecode length, error. Pop the top item from the stack, if the value is not truthy, move the instruction pointer to the control value (and re-evaluate the OP_BEGIN).', +} + +/** + * Descriptions for the `BCH_SPEC` instruction set. + */ +// eslint-disable-next-line @typescript-eslint/naming-convention +export const OpcodeDescriptionsBch2026 = { + ...OpcodeDescriptionsBch2023, + ...OpcodeDescriptionsBch2026Additions, +}; diff --git a/src/lib/vm/instruction-sets/bch/2026/bch-2026-errors.ts b/src/lib/vm/instruction-sets/bch/2026/bch-2026-errors.ts index 0ad8e714..1b771138 100644 --- a/src/lib/vm/instruction-sets/bch/2026/bch-2026-errors.ts +++ b/src/lib/vm/instruction-sets/bch/2026/bch-2026-errors.ts @@ -4,6 +4,7 @@ export enum AuthenticationErrorBch2026Additions { unexpectedUntil = 'Encountered an OP_UNTIL that is not following a matching OP_BEGIN.', unexpectedUntilMissingEndIf = 'Encountered an OP_UNTIL before the previous OP_IF was closed by an OP_ENDIF.', excessiveLooping = 'Program attempted an OP_UNTIL operation that would exceed the limit of repeated bytes.', + malformedEval = 'Program attempted to OP_EVAL malformed bytecode.', } /** diff --git a/src/lib/vm/instruction-sets/bch/2026/bch-2026-eval.ts b/src/lib/vm/instruction-sets/bch/2026/bch-2026-eval.ts new file mode 100644 index 00000000..d82a6788 --- /dev/null +++ b/src/lib/vm/instruction-sets/bch/2026/bch-2026-eval.ts @@ -0,0 +1,49 @@ +import type { + AuthenticationInstructionMalformed, + AuthenticationProgramStateBch2026, +} from '../../../../lib.js'; +import { + applyError, + authenticationInstructionsAreMalformed, + decodeAuthenticationInstructions, + disassembleAuthenticationInstructionMalformed, + executionIsActive, + pushToControlStack, + useOneStackItem, +} from '../../common/common.js'; + +import { AuthenticationErrorBch2026 } from './bch-2026-errors.js'; +import { OpcodesBch2026 } from './bch-2026-opcodes.js'; + +export const opEval = ( + state: State, +) => { + if (executionIsActive(state)) { + return useOneStackItem(state, (nextState, [item]) => { + const newInstructions = decodeAuthenticationInstructions(item); + + if (authenticationInstructionsAreMalformed(newInstructions)) { + return applyError( + nextState, + AuthenticationErrorBch2026.malformedEval, + `Malformed instruction: ${disassembleAuthenticationInstructionMalformed( + OpcodesBch2026, + newInstructions[ + newInstructions.length - 1 + ] as AuthenticationInstructionMalformed, + )}.`, + ); + } + + const manuallyAdvance = 1; + const finalState = pushToControlStack(nextState, { + instructions: nextState.instructions, + ip: nextState.ip + manuallyAdvance, + }); + finalState.ip = 0 - manuallyAdvance; // eslint-disable-line functional/no-expression-statements, functional/immutable-data + finalState.instructions = newInstructions; // eslint-disable-line functional/no-expression-statements, functional/immutable-data + return finalState; + }); + } + return state; +}; diff --git a/src/lib/vm/instruction-sets/bch/2026/bch-2026-instruction-set.ts b/src/lib/vm/instruction-sets/bch/2026/bch-2026-instruction-set.ts index 2b2fce8e..53dc36c1 100644 --- a/src/lib/vm/instruction-sets/bch/2026/bch-2026-instruction-set.ts +++ b/src/lib/vm/instruction-sets/bch/2026/bch-2026-instruction-set.ts @@ -6,6 +6,7 @@ import { } from '../../../../crypto/crypto.js'; import type { AuthenticationProgramBch, + AuthenticationProgramStackFrame, InstructionSet, ResolvedTransactionBch, Ripemd160, @@ -17,6 +18,7 @@ import { createInstructionSetBch2025 } from '../2025/bch-2025-instruction-set.js import { opBegin, opUntil } from '../2026/bch-2026-loops.js'; import { ConsensusBch2026 } from './bch-2026-consensus.js'; +import { opEval } from './bch-2026-eval.js'; import { OpcodesBch2026 } from './bch-2026-opcodes.js'; import type { AuthenticationProgramStateBch2026 } from './bch-2026-types.js'; /** @@ -80,6 +82,22 @@ export const createInstructionSetBch2026 = < }); return { ...instructionSet, + /* eslint-disable functional/no-loop-statements, functional/immutable-data, functional/no-expression-statements */ + continue: (state) => { + if (state.error !== undefined) return false; + while ( + state.ip >= state.instructions.length && + state.controlStack.length > 0 && + typeof state.controlStack[state.controlStack.length - 1] === 'object' + ) { + const { instructions, ip } = + state.controlStack.pop() as AuthenticationProgramStackFrame; + state.ip = ip; + state.instructions = instructions; + } + return state.ip < state.instructions.length; + }, + /* eslint-enable functional/no-loop-statements, functional/immutable-data, functional/no-expression-statements */ initialize: (program) => ({ ...instructionSet.initialize?.(program), @@ -87,6 +105,7 @@ export const createInstructionSetBch2026 = < }) as Partial as Partial, operations: { ...instructionSet.operations, + [OpcodesBch2026.OP_EVAL]: opEval, [OpcodesBch2026.OP_BEGIN]: opBegin, [OpcodesBch2026.OP_UNTIL]: opUntil, }, diff --git a/src/lib/vm/instruction-sets/bch/2026/bch-2026-loops.ts b/src/lib/vm/instruction-sets/bch/2026/bch-2026-loops.ts index cacbcb5f..0e193c02 100644 --- a/src/lib/vm/instruction-sets/bch/2026/bch-2026-loops.ts +++ b/src/lib/vm/instruction-sets/bch/2026/bch-2026-loops.ts @@ -8,7 +8,8 @@ import { stackItemIsTruthy, useOneStackItem, } from '../../common/common.js'; -import { AuthenticationErrorBchSpec } from '../spec/bch-spec-errors.js'; + +import { AuthenticationErrorBch2026 } from './bch-2026-errors.js'; const enum Constants { markInactiveOpBegin = -1, @@ -27,14 +28,14 @@ export const opUntil = ( // eslint-disable-next-line functional/immutable-data const controlValue = state.controlStack.pop(); if (typeof controlValue !== 'number') { - return applyError(state, AuthenticationErrorBchSpec.unexpectedUntil); + return applyError(state, AuthenticationErrorBch2026.unexpectedUntil); } if (!executionIsActive(state)) { return controlValue === Constants.markInactiveOpBegin ? state : applyError( state, - AuthenticationErrorBchSpec.unexpectedUntilMissingEndIf, + AuthenticationErrorBch2026.unexpectedUntilMissingEndIf, ); } @@ -51,7 +52,7 @@ export const opUntil = ( ) { return applyError( state, - AuthenticationErrorBchSpec.excessiveLooping, + AuthenticationErrorBch2026.excessiveLooping, `Repeated bytes: ${state.repeatedBytes}; active bytecode length: ${activeBytecodeLength}`, ); } diff --git a/src/lib/vm/instruction-sets/bch/2026/bch-2026-opcodes.ts b/src/lib/vm/instruction-sets/bch/2026/bch-2026-opcodes.ts index 3f5dc020..afb794d9 100644 --- a/src/lib/vm/instruction-sets/bch/2026/bch-2026-opcodes.ts +++ b/src/lib/vm/instruction-sets/bch/2026/bch-2026-opcodes.ts @@ -5,6 +5,7 @@ import { OpcodesBch2023 } from '../2023/bch-2023-opcodes.js'; * `BCH_2023_05`. */ export enum OpcodesBch2026Additions { + OP_EVAL = 0x62, OP_BEGIN = 0x65, OP_UNTIL = 0x66, } diff --git a/src/lib/vm/instruction-sets/bch/spec/bch-spec-descriptions.ts b/src/lib/vm/instruction-sets/bch/spec/bch-spec-descriptions.ts index 245f42c7..c9a5208b 100644 --- a/src/lib/vm/instruction-sets/bch/spec/bch-spec-descriptions.ts +++ b/src/lib/vm/instruction-sets/bch/spec/bch-spec-descriptions.ts @@ -1,12 +1,11 @@ -import { OpcodeDescriptionsBch2023 } from '../2023/bch-2023-descriptions.js'; +import { OpcodeDescriptionsBch2026 } from '../2026/bch-2026-descriptions.js'; /** * Descriptions for the opcodes added to the `BCH_SPEC` instruction set beyond - * those present in `BCH_2025_05`. + * those present in `BCH_2026_05`. */ export enum OpcodeDescriptionsBchSpecAdditions { - OP_BEGIN = 'Push the current instruction pointer index to the control stack as an integer (to be read by OP_UNTIL).', - OP_UNTIL = 'Pop the top item from the control stack (if the control value is not an integer, error). Add the difference between the control value and the current instruction pointer index to the repeated bytes counter, if the sum of the repeated bytes counter and the active bytecode length is greater than the maximum bytecode length, error. Pop the top item from the stack, if the value is not truthy, move the instruction pointer to the control value (and re-evaluate the OP_BEGIN).', + OP_POW = 'Pop the top item from the stack as an exponent (VM Number) and the next as a base (VM Number). Raise the base to the power of the exponent and push the result to the stack.', } /** @@ -14,6 +13,6 @@ export enum OpcodeDescriptionsBchSpecAdditions { */ // eslint-disable-next-line @typescript-eslint/naming-convention export const OpcodeDescriptionsBchSpec = { - ...OpcodeDescriptionsBch2023, + ...OpcodeDescriptionsBch2026, ...OpcodeDescriptionsBchSpecAdditions, }; diff --git a/src/lib/vm/instruction-sets/bch/spec/bch-spec-errors.ts b/src/lib/vm/instruction-sets/bch/spec/bch-spec-errors.ts index 10ea4a0e..414a6112 100644 --- a/src/lib/vm/instruction-sets/bch/spec/bch-spec-errors.ts +++ b/src/lib/vm/instruction-sets/bch/spec/bch-spec-errors.ts @@ -1,6 +1,8 @@ import { AuthenticationErrorBch2026 } from '../2026/bch-2026-errors.js'; -export enum AuthenticationErrorBchSpecAdditions {} +export enum AuthenticationErrorBchSpecAdditions { + excessiveOperationCostOpPow = 'Program attempted an OP_POW operation that would have exceed the operation cost density limit.', +} /** * Errors for the `BCH_SPEC` instruction set. diff --git a/src/lib/vm/instruction-sets/bch/spec/bch-spec-instruction-set.ts b/src/lib/vm/instruction-sets/bch/spec/bch-spec-instruction-set.ts index f938a822..5f8f800a 100644 --- a/src/lib/vm/instruction-sets/bch/spec/bch-spec-instruction-set.ts +++ b/src/lib/vm/instruction-sets/bch/spec/bch-spec-instruction-set.ts @@ -14,9 +14,15 @@ import type { Sha1, Sha256, } from '../../../../lib.js'; +import { + conditionallyEvaluate, + incrementOperationCount, +} from '../../common/common.js'; import { createInstructionSetBch2026 } from '../2026/bch-2026-instruction-set.js'; import { ConsensusBchSpec } from './bch-spec-consensus.js'; +import { OpcodesBchSpec } from './bch-spec-opcodes.js'; +import { createOpPow } from './bch-spec-pow.js'; /** * create an instance of the `BCH_SPEC` virtual machine instruction set, an @@ -97,5 +103,13 @@ export const createInstructionSetBchSpec = < } return nextState; }, + operations: { + ...instructionSet.operations, + [OpcodesBchSpec.OP_POW]: incrementOperationCount( + conditionallyEvaluate( + createOpPow(consensus), + ), + ), + }, }; }; diff --git a/src/lib/vm/instruction-sets/bch/spec/bch-spec-opcodes.ts b/src/lib/vm/instruction-sets/bch/spec/bch-spec-opcodes.ts index 7d8b2cb0..492ea882 100644 --- a/src/lib/vm/instruction-sets/bch/spec/bch-spec-opcodes.ts +++ b/src/lib/vm/instruction-sets/bch/spec/bch-spec-opcodes.ts @@ -4,7 +4,9 @@ import { OpcodesBch2026 } from '../2026/bch-2026-opcodes.js'; * The opcodes added to the `BCH_SPEC` instruction set beyond those present in * `BCH_2026_05`. */ -export enum OpcodesBchSpecAdditions {} +export enum OpcodesBchSpecAdditions { + OP_POW = 0x8d, +} /** * The `BCH_SPEC` instruction set. diff --git a/src/lib/vm/instruction-sets/bch/spec/bch-spec-pow.ts b/src/lib/vm/instruction-sets/bch/spec/bch-spec-pow.ts new file mode 100644 index 00000000..32fde0aa --- /dev/null +++ b/src/lib/vm/instruction-sets/bch/spec/bch-spec-pow.ts @@ -0,0 +1,63 @@ +import type { + AuthenticationProgramStateError, + AuthenticationProgramStateResourceLimits, + AuthenticationProgramStateStack, +} from '../../../../lib.js'; +import { + applyError, + ConsensusCommon, + numericOperationBinary, + vmNumberToBigInt, +} from '../../common/common.js'; + +import { AuthenticationErrorBchSpec } from './bch-spec-errors.js'; + +const enum Constants { + lastTwoItems = -2, + bitsPerByte = 8, +} + +export const createOpPow = + < + State extends AuthenticationProgramStateError & + AuthenticationProgramStateResourceLimits & + AuthenticationProgramStateStack, + >({ + maximumVmNumberByteLength = ConsensusCommon.maximumVmNumberByteLength as number, + } = {}) => + (state: State) => { + const [base, maybeExponent] = state.stack.slice(Constants.lastTwoItems); + const baseLength = base?.length ?? 0; + const exponent = maybeExponent ?? new Uint8Array(0); + + const exponentValue = vmNumberToBigInt(exponent, { + maximumVmNumberByteLength: 8, + }); + if (typeof exponentValue !== 'bigint') { + return applyError( + state, + AuthenticationErrorBchSpec.invalidVmNumber, + `Attempted an OP_POW operation with an invalid exponent. ${exponentValue}`, + ); + } + // eslint-disable-next-line functional/no-expression-statements, functional/immutable-data + state.metrics.arithmeticCost += + baseLength * baseLength * Constants.bitsPerByte * Number(exponentValue); + + if ( + state.metrics.operationCost + state.metrics.arithmeticCost > + state.metrics.maximumOperationCost + ) { + return applyError( + state, + AuthenticationErrorBchSpec.excessiveOperationCostOpPow, + `Maximum operation cost: ${state.metrics.maximumOperationCost} (density control length: ${state.metrics.densityControlLength}); minimum operation cost following operation: ${state.metrics.operationCost} (excludes costs following rejected OP_POW).`, + ); + } + return numericOperationBinary(([a, b]) => a ** b, { + hasEncodingCost: true, + maximumVmNumberByteLength, + })(state); + }; + +export const opPow = createOpPow(); diff --git a/src/lib/vm/instruction-sets/common/flow-control.ts b/src/lib/vm/instruction-sets/common/flow-control.ts index 11bcf15c..00421965 100644 --- a/src/lib/vm/instruction-sets/common/flow-control.ts +++ b/src/lib/vm/instruction-sets/common/flow-control.ts @@ -1,4 +1,5 @@ import type { + AuthenticationProgramStackFrame, AuthenticationProgramStateControlStack, AuthenticationProgramStateError, AuthenticationProgramStateStack, @@ -39,7 +40,7 @@ export const pushToControlStack = < State extends AuthenticationProgramStateControlStack, >( state: State, - value: boolean | number, + value: AuthenticationProgramStackFrame | boolean | number, ) => { // eslint-disable-next-line functional/no-expression-statements, functional/immutable-data state.controlStack.push(value); diff --git a/src/lib/vm/vm-types.ts b/src/lib/vm/vm-types.ts index b23941cf..d7ce692f 100644 --- a/src/lib/vm/vm-types.ts +++ b/src/lib/vm/vm-types.ts @@ -4,7 +4,7 @@ import type { TransactionCommon, } from '../lib.js'; -export type AuthenticationProgramStateMinimum = { +export type AuthenticationProgramStackFrame = { /** * The full list of instructions to be evaluated by the virtual machine. */ @@ -15,19 +15,22 @@ export type AuthenticationProgramStateMinimum = { * `instructions` (`ip === instructions.length`), evaluation is complete. */ ip: number; +}; - /** - * An object containing metrics that persist and accumulate over all phases of - * evaluating an input – unlocking, locking and (for P2SH) redeem bytecode. - */ - metrics: { +export type AuthenticationProgramStateMinimum = + AuthenticationProgramStackFrame & { /** - * A count of instructions evaluated over the course of verifying - * the input, included unexecuted instructions. + * An object containing metrics that persist and accumulate over all phases of + * evaluating an input – unlocking, locking and (for P2SH) redeem bytecode. */ - evaluatedInstructionCount: number; + metrics: { + /** + * A count of instructions evaluated over the course of verifying + * the input, included unexecuted instructions. + */ + evaluatedInstructionCount: number; + }; }; -}; export type AuthenticationProgramStateStack = { /** @@ -54,11 +57,12 @@ export type AuthenticationProgramStateAlternateStack = { }; export type AuthenticationProgramStateControlStack< - ItemType = boolean | number, + ItemType = AuthenticationProgramStackFrame | boolean | number, > = { /** - * An array of boolean values representing the current execution status of the - * program. This allows the state to track nested conditional branches. + * An array representing the current execution status of the program. This + * allows the state to track nested conditional branches, loops, and + * evaluation operations (`OP_EVAL`). * * The `OP_IF` and `OP_NOTIF` operations push a new boolean onto the * `controlStack`, `OP_ELSE` flips the top boolean, and `OP_ENDIF` removes diff --git a/src/lib/vmb-tests/bch-vmb-test-utils.ts b/src/lib/vmb-tests/bch-vmb-test-utils.ts index 1f14b867..ecb71bf6 100644 --- a/src/lib/vmb-tests/bch-vmb-test-utils.ts +++ b/src/lib/vmb-tests/bch-vmb-test-utils.ts @@ -30,8 +30,11 @@ const vmVersionsBch = [ '2026', 'spec', 'chip_bigint', + 'chip_eval', 'chip_limits', 'chip_loops', + 'chip_p2s', + 'chip_pow', 'chip_zce', 'chip_txv5', /* For error reporting in combinatorial test generation: */ 'unknown', @@ -106,12 +109,6 @@ export const vmbTestDefinitionDefaultBehaviorBch: TestSetOverrideLabelBch[] = [ * and looking up the result in {@link supportedTestSetOverridesBch}. */ const testSetOverrideListBch = [ - ['chip_bigint_invalid'], - ['chip_bigint'], - ['chip_bigint', 'nonstandard'], - ['chip_bigint', 'nonstandard', 'nop2sh_invalid'], - ['chip_bigint', 'nonstandard', 'p2sh_invalid'], - ['chip_bigint', 'nop2sh_invalid'], ['2023_invalid'], ['2023_invalid', '2025_nonstandard', 'p2sh_ignore'], ['2023_invalid', 'nop2sh_ignore'], @@ -121,8 +118,22 @@ const testSetOverrideListBch = [ ['2023_invalid', 'p2sh_ignore'], ['2023_invalid', 'p2sh_invalid'], ['2023_p2sh_invalid'], + ['chip_bigint_invalid'], + ['chip_bigint'], + ['chip_bigint', 'nonstandard'], + ['chip_bigint', 'nonstandard', 'nop2sh_invalid'], + ['chip_bigint', 'nonstandard', 'p2sh_invalid'], + ['chip_bigint', 'nop2sh_invalid'], + ['chip_eval'], + ['chip_eval', '2026_nop2sh_nonstandard'], + ['chip_eval_invalid'], ['chip_loops_invalid'], ['chip_loops'], + ['chip_p2s'], + ['chip_p2s', 'nop2sh_standard', 'p2sh_ignore'], + ['chip_p2s_invalid'], + ['chip_pow'], + ['chip_pow_invalid'], ['invalid', '2023_nonstandard'], ['invalid', '2023_nonstandard', 'p2sh_ignore'], ['invalid', '2025_nonstandard', 'p2sh_ignore'], @@ -367,15 +378,137 @@ export const supportedTestSetOverridesBch: { sets: ['chip_bigint_invalid', '2023_invalid', '2025_invalid'], }, ], + chip_eval: [ + { + mode: 'nonP2SH', + sets: ['chip_eval_standard', '2025_invalid', '2026_standard'], + }, + { + mode: 'P2SH20', + sets: ['chip_eval_standard', '2025_invalid', '2026_standard'], + }, + { + mode: 'P2SH32', + sets: ['chip_eval_standard', '2025_invalid', '2026_standard'], + }, + ], + 'chip_eval,2026_nop2sh_nonstandard': [ + { + mode: 'nonP2SH', + sets: ['chip_eval_nonstandard', '2025_invalid', '2026_nonstandard'], + }, + { + mode: 'P2SH20', + sets: ['chip_eval_standard', '2025_invalid', '2026_standard'], + }, + { + mode: 'P2SH32', + sets: ['chip_eval_standard', '2025_invalid', '2026_standard'], + }, + ], + chip_eval_invalid: [ + { + mode: 'nonP2SH', + sets: ['chip_eval_invalid', '2025_invalid', '2026_invalid'], + }, + { + mode: 'P2SH20', + sets: ['chip_eval_invalid', '2025_invalid', '2026_invalid'], + }, + { + mode: 'P2SH32', + sets: ['chip_eval_invalid', '2025_invalid', '2026_invalid'], + }, + ], chip_loops: [ - { mode: 'nonP2SH', sets: ['chip_loops_nonstandard'] }, - { mode: 'P2SH20', sets: ['chip_loops_standard'] }, - { mode: 'P2SH32', sets: ['chip_loops_standard'] }, + { + mode: 'nonP2SH', + sets: ['chip_loops_standard', '2025_invalid', '2026_standard'], + }, + { + mode: 'P2SH20', + sets: ['chip_loops_standard', '2025_invalid', '2026_standard'], + }, + { + mode: 'P2SH32', + sets: ['chip_loops_standard', '2025_invalid', '2026_standard'], + }, ], chip_loops_invalid: [ - { mode: 'nonP2SH', sets: ['chip_loops_invalid'] }, - { mode: 'P2SH20', sets: ['chip_loops_invalid'] }, - { mode: 'P2SH32', sets: ['chip_loops_invalid'] }, + { + mode: 'nonP2SH', + sets: ['chip_loops_invalid', '2025_invalid', '2026_invalid'], + }, + { + mode: 'P2SH20', + sets: ['chip_loops_invalid', '2025_invalid', '2026_invalid'], + }, + { + mode: 'P2SH32', + sets: ['chip_loops_invalid', '2025_invalid', '2026_invalid'], + }, + ], + chip_p2s: [ + { + mode: 'nonP2SH', + sets: ['chip_p2s_standard', '2025_invalid', '2026_standard'], + }, + { + mode: 'P2SH20', + sets: ['chip_p2s_standard', '2025_invalid', '2026_standard'], + }, + { + mode: 'P2SH32', + sets: ['chip_p2s_standard', '2025_invalid', '2026_standard'], + }, + ], + 'chip_p2s,nop2sh_standard,p2sh_ignore': [ + { + mode: 'nonP2SH', + sets: ['chip_p2s_standard', '2025_invalid', '2026_standard'], + }, + ], + chip_p2s_invalid: [ + { + mode: 'nonP2SH', + sets: ['chip_p2s_invalid', '2025_invalid', '2026_invalid'], + }, + { + mode: 'P2SH20', + sets: ['chip_p2s_invalid', '2025_invalid', '2026_invalid'], + }, + { + mode: 'P2SH32', + sets: ['chip_p2s_invalid', '2025_invalid', '2026_invalid'], + }, + ], + chip_pow: [ + { + mode: 'nonP2SH', + sets: ['chip_pow_standard'], + }, + { + mode: 'P2SH20', + sets: ['chip_pow_standard'], + }, + { + mode: 'P2SH32', + sets: ['chip_pow_standard'], + }, + ], + chip_pow_invalid: [ + { + mode: 'nonP2SH', + sets: ['chip_pow_invalid'], + }, + { + mode: 'P2SH20', + sets: ['chip_pow_invalid'], + }, + { + mode: 'P2SH32', + sets: ['chip_pow_invalid'], + }, ], invalid: [ { mode: 'nonP2SH', sets: ['2023_invalid', '2025_invalid', '2026_invalid'] }, diff --git a/src/lib/vmb-tests/bchn/bchn-error-map.spec.helper.ts b/src/lib/vmb-tests/bchn/bchn-error-map.spec.helper.ts index 4f6c6f1e..97232077 100644 --- a/src/lib/vmb-tests/bchn/bchn-error-map.spec.helper.ts +++ b/src/lib/vmb-tests/bchn/bchn-error-map.spec.helper.ts @@ -58,6 +58,7 @@ export const libauthErrorPrefixToBchnErrorStandard: { invalidVmNumber: 'mandatory-script-verify-flag-failed (Number encoding must be minimal)', locktimeDisabled: '', + malformedEval: '', malformedLockingBytecode: '', malformedP2shBytecode: '', malformedPush: '', @@ -179,6 +180,7 @@ export const libauthErrorPrefixToBchnErrorNonstandard: { invalidVmNumber: 'mandatory-script-verify-flag-failed (Number encoding must be minimal)', locktimeDisabled: '', + malformedEval: '', malformedLockingBytecode: '', malformedP2shBytecode: '', malformedPush: '', diff --git a/src/lib/vmb-tests/bchn/libauth_expected_test_metrics.json b/src/lib/vmb-tests/bchn/libauth_expected_test_metrics.json index a4b3c11c..dbae8dbf 100644 --- a/src/lib/vmb-tests/bchn/libauth_expected_test_metrics.json +++ b/src/lib/vmb-tests/bchn/libauth_expected_test_metrics.json @@ -896,6 +896,7 @@ ["2023","29gpwn","N","N",[[0,27257,null,6,null,1,null],[1,710,null,0,null,0,null]]], ["2023","29p7ya","S","S",[[0,27257,null,6,null,1,3],[1,683,null,2,null,0,1]]], ["2023","29rtj9","S","S",[[0,27257,null,6,null,1,3],[1,1170,null,2,null,0,1]]], +["2023","29tp9l","S","S",[[0,81122,null,27,null,3,6]]], ["2023","29wnch","S","S",[[0,27257,null,6,null,1,3],[1,27416,null,3,null,1,3]]], ["2023","2a4mj2","N","N",[[0,27257,null,6,null,1,null],[1,789,null,2,null,0,null]]], ["2023","2a6cfn","S","S",[[0,1235,null,2,null,0,1]]], @@ -2265,6 +2266,7 @@ ["2023","8cft2k","S","S",[[0,27257,null,6,null,1,3],[1,54639,null,15,null,2,6]]], ["2023","8cgyuv","S","S",[[0,27257,null,6,null,1,3],[1,1330,null,3,null,0,2]]], ["2023","8cn37l","S","S",[[0,27257,null,6,null,1,3],[1,110560,null,23,null,4,12]]], +["2023","8cn9y6","S","S",[[0,81141,null,27,null,3,6]]], ["2023","8cvh9v","S","S",[[0,27257,null,6,null,1,3],[1,1497,null,5,null,0,2]]], ["2023","8cws5r","N","N",[[0,27257,null,6,null,1,null],[1,107760,null,16,null,4,null]]], ["2023","8d4fl3","S","S",[[0,27257,null,6,null,1,3],[1,989,null,2,null,0,1]]], @@ -8920,6 +8922,7 @@ ["2025","29rpuf","N","N",[[0,27257,112800,6,493,1,null],[1,13406,3324000,66,14542,0,null]]], ["2025","29rtj9","S","S",[[0,28025,112800,6,70,1,3],[1,1426,50400,2,31,0,1]]], ["2025","29sesh","N","N",[[0,27257,112800,6,493,1,null],[1,27293,7007200,138,30656,0,null]]], +["2025","29tp9l","S","S",[[0,84578,192000,27,120,3,6]]], ["2025","29wnch","S","S",[[0,28025,112800,6,70,1,3],[1,27800,120800,3,75,1,3]]], ["2025","29wuvt","S","S",[[0,28025,112800,6,70,1,3],[1,4353,508800,11,318,0,15]]], ["2025","2a0y7r","N","N",[[0,27257,112800,6,493,1,null],[1,1269,84800,0,371,0,null]]], @@ -11843,6 +11846,7 @@ ["2025","8cgyuv","S","S",[[0,28025,112800,6,70,1,3],[1,1714,64800,3,40,0,2]]], ["2025","8cj4xz","S","S",[[0,28025,112800,6,70,1,3],[1,1750,455200,2,284,0,13]]], ["2025","8cn37l","S","S",[[0,28025,112800,6,70,1,3],[1,113504,428000,23,267,4,12]]], +["2025","8cn9y6","S","S",[[0,84597,208000,27,130,3,6]]], ["2025","8ctpct","N","N",[[0,27257,112800,6,493,1,null],[1,575,33600,0,147,0,null]]], ["2025","8cukwk","S","S",[[0,28025,112800,6,70,1,3],[1,50787,544800,2,340,0,16]]], ["2025","8cvh9v","S","S",[[0,28025,112800,6,70,1,3],[1,2137,55200,5,34,0,2]]], diff --git a/src/lib/vmb-tests/generate-vmb-tests.spec.helper.ts b/src/lib/vmb-tests/generate-vmb-tests.spec.helper.ts index 8eb8677d..fc5ed2d1 100644 --- a/src/lib/vmb-tests/generate-vmb-tests.spec.helper.ts +++ b/src/lib/vmb-tests/generate-vmb-tests.spec.helper.ts @@ -45,7 +45,8 @@ import { Bench } from 'tinybench'; * skipped (e.g. test sets that aren't ready to publish and excluded * by `.gitignore`). */ -const skipDirectoryPrefixes = ['bch_chip', 'bch_2026']; +const skipDirectoryPrefixes: string[] = []; +// const skipDirectoryPrefixes = ['bch_chip', 'bch_2026']; // eslint-disable-next-line functional/no-let let warnedOnce = false; diff --git a/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.nonstandard_limits.json b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.nonstandard_limits.json new file mode 100644 index 00000000..acac08f5 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.nonstandard_limits.json @@ -0,0 +1,4 @@ +{ +"3agzq4":[43,34400,0,"OP_EVAL: Works (nonP2SH)"], +"0ehr72":[45,36000,0,"OP_EVAL: Can be nested (nonP2SH)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.nonstandard_results.json b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.nonstandard_results.json new file mode 100644 index 00000000..2b48109d --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.nonstandard_results.json @@ -0,0 +1,4 @@ +{ +"3agzq4":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"0ehr72":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.nonstandard_stats.csv b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.nonstandard_stats.csv new file mode 100644 index 00000000..9b107934 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.nonstandard_stats.csv @@ -0,0 +1,3 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +3agzq4,"OP_EVAL: Works (nonP2SH)",213,45,2,1,43,34400,0,1,0,150,0,2,1,0 +0ehr72,"OP_EVAL: Can be nested (nonP2SH)",215,45,2,1,45,36000,0,1,0,157,0,2,3,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.standard_limits.json b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.standard_limits.json new file mode 100644 index 00000000..acac08f5 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.standard_limits.json @@ -0,0 +1,4 @@ +{ +"3agzq4":[43,34400,0,"OP_EVAL: Works (nonP2SH)"], +"0ehr72":[45,36000,0,"OP_EVAL: Can be nested (nonP2SH)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.standard_results.json b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.standard_results.json new file mode 100644 index 00000000..bd0b6969 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.standard_results.json @@ -0,0 +1,4 @@ +{ +"3agzq4":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"0ehr72":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN)." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.standard_stats.csv b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.standard_stats.csv new file mode 100644 index 00000000..c03f8d2a --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.standard_stats.csv @@ -0,0 +1,3 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +3agzq4,"OP_EVAL: Works (nonP2SH)",213,45,2,1,43,34400,0,1,0,21,0,2,1,0 +0ehr72,"OP_EVAL: Can be nested (nonP2SH)",215,45,2,1,45,36000,0,1,0,22,0,2,3,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.vmb_tests.json b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.vmb_tests.json new file mode 100644 index 00000000..261a867b --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_nonstandard/chip.eval.vmb_tests.json @@ -0,0 +1,2 @@ +[["3agzq4","OP_EVAL: Works (nonP2SH)","< OP_1 >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000020151000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000162",1], +["0ehr72","OP_EVAL: Can be nested (nonP2SH)","< < OP_1 OP_EVAL > >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000403025162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000162",1]] \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.nonstandard_limits.json b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.nonstandard_limits.json new file mode 100644 index 00000000..0fbc645b --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.nonstandard_limits.json @@ -0,0 +1,6 @@ +{ +"upu678":[45,36000,0,"OP_EVAL: Works (P2SH20)"], +"wg3zzk":[45,36000,0,"OP_EVAL: Works (P2SH32)"], +"32pq0g":[47,37600,0,"OP_EVAL: Can be nested (P2SH20)"], +"mtedjn":[47,37600,0,"OP_EVAL: Can be nested (P2SH32)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.nonstandard_results.json b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.nonstandard_results.json new file mode 100644 index 00000000..f276d8e5 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.nonstandard_results.json @@ -0,0 +1,6 @@ +{ +"upu678":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"wg3zzk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"32pq0g":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"mtedjn":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.nonstandard_stats.csv b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.nonstandard_stats.csv new file mode 100644 index 00000000..629e3f17 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.nonstandard_stats.csv @@ -0,0 +1,5 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +upu678,"OP_EVAL: Works (P2SH20)",215,67,2,1,45,36000,0,1,0,157,2,6,43,0 +wg3zzk,"OP_EVAL: Works (P2SH32)",215,79,2,1,45,36000,0,1,0,157,2,6,67,0 +32pq0g,"OP_EVAL: Can be nested (P2SH20)",217,67,2,1,47,37600,0,1,0,164,2,6,45,0 +mtedjn,"OP_EVAL: Can be nested (P2SH32)",217,79,2,1,47,37600,0,1,0,164,2,6,69,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.standard_limits.json b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.standard_limits.json new file mode 100644 index 00000000..0fbc645b --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.standard_limits.json @@ -0,0 +1,6 @@ +{ +"upu678":[45,36000,0,"OP_EVAL: Works (P2SH20)"], +"wg3zzk":[45,36000,0,"OP_EVAL: Works (P2SH32)"], +"32pq0g":[47,37600,0,"OP_EVAL: Can be nested (P2SH20)"], +"mtedjn":[47,37600,0,"OP_EVAL: Can be nested (P2SH32)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.standard_results.json b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.standard_results.json new file mode 100644 index 00000000..f276d8e5 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.standard_results.json @@ -0,0 +1,6 @@ +{ +"upu678":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"wg3zzk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"32pq0g":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"mtedjn":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.standard_stats.csv b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.standard_stats.csv new file mode 100644 index 00000000..34802d8c --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.standard_stats.csv @@ -0,0 +1,5 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +upu678,"OP_EVAL: Works (P2SH20)",215,67,2,1,45,36000,0,1,0,22,2,6,43,0 +wg3zzk,"OP_EVAL: Works (P2SH32)",215,79,2,1,45,36000,0,1,0,22,2,6,67,0 +32pq0g,"OP_EVAL: Can be nested (P2SH20)",217,67,2,1,47,37600,0,1,0,23,2,6,45,0 +mtedjn,"OP_EVAL: Can be nested (P2SH32)",217,79,2,1,47,37600,0,1,0,23,2,6,69,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.vmb_tests.json b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.vmb_tests.json new file mode 100644 index 00000000..84bc59e6 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.eval.vmb_tests.json @@ -0,0 +1,4 @@ +[["upu678","OP_EVAL: Works (P2SH20)","< OP_1 >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000401510162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9140f4d7845db968f2a81b530b6f3c1d6246d4c7e0187",1], +["wg3zzk","OP_EVAL: Works (P2SH32)","< OP_1 >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000401510162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2039361160903c6695c6804b7157c7bd10013e9ba89b1f954243bc8e3990b08db987",1], +["32pq0g","OP_EVAL: Can be nested (P2SH20)","< < OP_1 OP_EVAL > >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006030251620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9140f4d7845db968f2a81b530b6f3c1d6246d4c7e0187",1], +["mtedjn","OP_EVAL: Can be nested (P2SH32)","< < OP_1 OP_EVAL > >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006030251620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2039361160903c6695c6804b7157c7bd10013e9ba89b1f954243bc8e3990b08db987",1]] \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.nonstandard_limits.json b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.nonstandard_limits.json new file mode 100644 index 00000000..e891dd22 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.nonstandard_limits.json @@ -0,0 +1,4 @@ +{ +"nlslve":[259,207200,0,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures (nonP2SH)"], +"20d42l":[240,192000,0,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures (nonP2SH)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.nonstandard_results.json b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.nonstandard_results.json new file mode 100644 index 00000000..339fc51a --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.nonstandard_results.json @@ -0,0 +1,4 @@ +{ +"nlslve":true, +"20d42l":true +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.nonstandard_stats.csv b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.nonstandard_stats.csv new file mode 100644 index 00000000..281cf2b0 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.nonstandard_stats.csv @@ -0,0 +1,3 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +nlslve,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures (nonP2SH)",565,297,1,0,259,207200,0,6,3,906,27,10,412,0 +20d42l,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures (nonP2SH)",546,297,1,0,240,192000,0,6,3,840,27,10,394,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.standard_limits.json b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.standard_limits.json new file mode 100644 index 00000000..e891dd22 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.standard_limits.json @@ -0,0 +1,4 @@ +{ +"nlslve":[259,207200,0,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures (nonP2SH)"], +"20d42l":[240,192000,0,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures (nonP2SH)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.standard_results.json b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.standard_results.json new file mode 100644 index 00000000..339fc51a --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.standard_results.json @@ -0,0 +1,4 @@ +{ +"nlslve":true, +"20d42l":true +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.standard_stats.csv b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.standard_stats.csv new file mode 100644 index 00000000..1a38c7a1 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.standard_stats.csv @@ -0,0 +1,3 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +nlslve,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures (nonP2SH)",565,297,1,0,259,207200,0,6,3,129,27,10,412,0 +20d42l,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures (nonP2SH)",546,297,1,0,240,192000,0,6,3,120,27,10,394,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.vmb_tests.json b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.vmb_tests.json new file mode 100644 index 00000000..663c181b --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2023_standard/chip.p2s.vmb_tests.json @@ -0,0 +1,2 @@ +[["nlslve","Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures (nonP2SH)","<0> ","<3> <0x04a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f> <0x04c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53> <0x0469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f> OP_3 OP_CHECKMULTISIG","0200000001010000000000000000000000000000000000000000000000000000000000000000000000da0047304402205581d7a2c9d277282ccc919d677185cca3d29820b2d4f74213bc8cac462628cf02201af4e5c4ea5ee5184259d8f5229bbf7343c2fc552caef096f45c16b2b3e983f861483045022100beb9e62dfc13a0c0060354873ed2aa5cd9faa3b09b3256ae3e1fb185f1179a8a022031ff2da6a88d375f7f8bcd7d60500f65095f3fe152be0ff07c91109221d6c8eb614730440220422ed4136db06f007549f19601e23937af3d808c799ad89986680552f7c36a9d022056d0b0a1e97e25b8bc40ffb846ccc44559d752e1dbc8201689fd404cf838fab36100000000013405000000000000fd1d01ef04030201000000000000000000000000000000000000000000000000040302017228ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae00000000","016a07000000000000fd1d01ef04030201000000000000000000000000000000000000000000000000040302017228ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae"], +["20d42l","Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures (nonP2SH)","<0b111> ","<3> <0x04a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f> <0x04c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53> <0x0469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f> OP_3 OP_CHECKMULTISIG","0200000001010000000000000000000000000000000000000000000000000000000000000000000000c75741fd1923149494b7fb1234bc77c219d08765b152eb17c2ba3d7efcb3b705faa46f2383c5da4d426e86f836a772669915896674beafe75b5ebaa2bc0fc1c8a7bc56614105b978b29c6cffc3f59b25b390549908324662f0b59e3d39b55c91c4035f6c1569146fdfeae1e8ef7fe471f49d38a50bbc58bc568834a425f1eb3ca773a9e7206141be0bc9365ae24f805c70e8c2bac75164fd7c4032c04e8590155b16cbd7fdd3e4e74f20f867c0264aaea9fd982b66325c76593b46f817d478c86ae0a140df6d846100000000013405000000000000fd1d01ef04030201000000000000000000000000000000000000000000000000040302017228ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae00000000","016a07000000000000fd1d01ef04030201000000000000000000000000000000000000000000000000040302017228ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae"]] \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.nonstandard_limits.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.nonstandard_limits.json new file mode 100644 index 00000000..7845e8d6 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.nonstandard_limits.json @@ -0,0 +1,59 @@ +{ +"3agzq4":[43,34400,201,"OP_EVAL: Works (nonP2SH)"], +"upu678":[45,36000,771,"OP_EVAL: Works (P2SH20)"], +"wg3zzk":[45,36000,795,"OP_EVAL: Works (P2SH32)"], +"wh2rs3":[41,32800,100,"OP_EVAL: Requires a stack item (nonP2SH)"], +"d6xj3f":[44,35200,671,"OP_EVAL: Requires a stack item (P2SH20)"], +"rxuqyk":[44,35200,695,"OP_EVAL: Requires a stack item (P2SH32)"], +"lxatqx":[45,36000,203,"OP_EVAL: Can be nested (nonP2SH)"], +"mj3peu":[47,37600,773,"OP_EVAL: Can be nested (P2SH20)"], +"sa46fz":[47,37600,797,"OP_EVAL: Can be nested (P2SH32)"], +"9wmek7":[47,37600,205,"OP_EVAL: Can be nested (2x) (nonP2SH)"], +"4aw04y":[49,39200,775,"OP_EVAL: Can be nested (2x) (P2SH20)"], +"eqrq96":[49,39200,799,"OP_EVAL: Can be nested (2x) (P2SH32)"], +"kfpjqk":[305,244000,461,"OP_EVAL: Can be nested (99x) (nonP2SH)"], +"98wkgz":[307,245600,1031,"OP_EVAL: Can be nested (99x) (P2SH20)"], +"zywwcx":[307,245600,1055,"OP_EVAL: Can be nested (99x) (P2SH32)"], +"05fpsr":[309,247200,465,"OP_EVAL: Control stack limited to depth of 100 (nonP2SH)"], +"4xfv3c":[311,248800,1035,"OP_EVAL: Control stack limited to depth of 100 (P2SH20)"], +"c8frkn":[311,248800,1059,"OP_EVAL: Control stack limited to depth of 100 (P2SH32)"], +"g3u8du":[41,32800,685,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (nonP2SH)"], +"4cvzpw":[335,268000,1801,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (P2SH20)"], +"9782kk":[335,268000,1825,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (P2SH32)"], +"ekqyxw":[41,32800,687,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (nonP2SH)"], +"sqwlkq":[337,269600,1805,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (P2SH20)"], +"ltlhp7":[337,269600,1829,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (P2SH32)"], +"unhdgg":[47,37600,205,"OP_EVAL: ((2 2 +)) 4 = (nonP2SH)"], +"k0n4m0":[51,40800,777,"OP_EVAL: ((2 2 +)) 4 = (P2SH20)"], +"htr8ly":[51,40800,801,"OP_EVAL: ((2 2 +)) 4 = (P2SH32)"], +"e4e5a7":[47,37600,205,"OP_EVAL: ((2 2 -)) 0 = (nonP2SH)"], +"hruz2c":[51,40800,777,"OP_EVAL: ((2 2 -)) 0 = (P2SH20)"], +"3k85wh":[51,40800,801,"OP_EVAL: ((2 2 -)) 0 = (P2SH32)"], +"dhrw4u":[47,37600,205,"OP_EVAL: ((2 2 +)) 0 = (reject) (nonP2SH)"], +"amgzuk":[51,40800,777,"OP_EVAL: ((2 2 +)) 0 = (reject) (P2SH20)"], +"wwf9t6":[51,40800,801,"OP_EVAL: ((2 2 +)) 0 = (reject) (P2SH32)"], +"8w6fdn":[47,37600,205,"OP_EVAL: ((2 2 -)) 4 = (reject) (nonP2SH)"], +"d7dnrq":[51,40800,777,"OP_EVAL: ((2 2 -)) 4 = (reject) (P2SH20)"], +"yq3l9q":[51,40800,801,"OP_EVAL: ((2 2 -)) 4 = (reject) (P2SH32)"], +"f752ye":[47,37600,205,"OP_EVAL: ((2) 2 +) 4 = (nonP2SH)"], +"p7k9r4":[51,40800,777,"OP_EVAL: ((2) 2 +) 4 = (P2SH20)"], +"8wlyc3":[51,40800,801,"OP_EVAL: ((2) 2 +) 4 = (P2SH32)"], +"5wkj9m":[47,37600,205,"OP_EVAL: (2 (2) +) 4 = (nonP2SH)"], +"nk8gar":[51,40800,777,"OP_EVAL: (2 (2) +) 4 = (P2SH20)"], +"djxgdg":[51,40800,801,"OP_EVAL: (2 (2) +) 4 = (P2SH32)"], +"g9yna7":[47,37600,205,"OP_EVAL: (2 2 (+)) 4 = (nonP2SH)"], +"sn7vfm":[51,40800,777,"OP_EVAL: (2 2 (+)) 4 = (P2SH20)"], +"tretgr":[51,40800,801,"OP_EVAL: (2 2 (+)) 4 = (P2SH32)"], +"a5ysvz":[47,37600,205,"OP_EVAL: (2 2 (+)) 4 (=) (nonP2SH)"], +"tu46ks":[53,42400,779,"OP_EVAL: (2 2 (+)) 4 (=) (P2SH20)"], +"3wzem7":[53,42400,803,"OP_EVAL: (2 2 (+)) 4 (=) (P2SH32)"], +"3nh97u":[43,34400,406,"OP_EVAL: Concatenated instructions (nonP2SH)"], +"x862er":[51,40800,982,"OP_EVAL: Concatenated instructions (P2SH20)"], +"t0w3wf":[51,40800,1006,"OP_EVAL: Concatenated instructions (P2SH32)"], +"mehmuj":[44,35200,202,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (nonP2SH)"], +"fmcfv5":[47,37600,773,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (P2SH20)"], +"za04h4":[47,37600,797,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (P2SH32)"], +"x2h6mx":[42,33600,615,"OP_EVAL: Fibonacci to 13 (nonP2SH)"], +"qjd6nk":[64,51200,1205,"OP_EVAL: Fibonacci to 13 (P2SH20)"], +"vcrwzq":[64,51200,1229,"OP_EVAL: Fibonacci to 13 (P2SH32)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.nonstandard_results.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.nonstandard_results.json new file mode 100644 index 00000000..87ef5407 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.nonstandard_results.json @@ -0,0 +1,59 @@ +{ +"3agzq4":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"upu678":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"wg3zzk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"wh2rs3":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"d6xj3f":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"rxuqyk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"lxatqx":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"mj3peu":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"sa46fz":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"9wmek7":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"4aw04y":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"eqrq96":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"kfpjqk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"98wkgz":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"zywwcx":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"05fpsr":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"4xfv3c":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"c8frkn":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"g3u8du":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"4cvzpw":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"9782kk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"ekqyxw":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"sqwlkq":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"ltlhp7":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"unhdgg":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"k0n4m0":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"htr8ly":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"e4e5a7":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"hruz2c":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"3k85wh":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"dhrw4u":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"amgzuk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"wwf9t6":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"8w6fdn":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"d7dnrq":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"yq3l9q":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"f752ye":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"p7k9r4":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"8wlyc3":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"5wkj9m":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"nk8gar":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"djxgdg":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"g9yna7":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"sn7vfm":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"tretgr":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"a5ysvz":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"tu46ks":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"3wzem7":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"3nh97u":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"x862er":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"t0w3wf":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"mehmuj":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"fmcfv5":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"za04h4":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"x2h6mx":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"qjd6nk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"vcrwzq":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.nonstandard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.nonstandard_stats.csv new file mode 100644 index 00000000..c3224456 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.nonstandard_stats.csv @@ -0,0 +1,58 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +3agzq4,"OP_EVAL: Works (nonP2SH)",213,45,2,1,43,34400,201,1,0,150,0,2,1,0 +upu678,"OP_EVAL: Works (P2SH20)",215,67,2,1,45,36000,771,1,0,157,2,6,43,0 +wg3zzk,"OP_EVAL: Works (P2SH32)",215,79,2,1,45,36000,795,1,0,157,2,6,67,0 +wh2rs3,"OP_EVAL: Requires a stack item (nonP2SH)",211,46,2,1,41,32800,100,1,0,143,0,1,0,0 +d6xj3f,"OP_EVAL: Requires a stack item (P2SH20)",214,67,2,1,44,35200,671,1,0,154,2,5,43,0 +rxuqyk,"OP_EVAL: Requires a stack item (P2SH32)",214,79,2,1,44,35200,695,1,0,154,2,5,67,0 +lxatqx,"OP_EVAL: Can be nested (nonP2SH)",215,45,2,1,45,36000,203,1,0,157,0,2,3,0 +mj3peu,"OP_EVAL: Can be nested (P2SH20)",217,67,2,1,47,37600,773,1,0,164,2,6,45,0 +sa46fz,"OP_EVAL: Can be nested (P2SH32)",217,79,2,1,47,37600,797,1,0,164,2,6,69,0 +9wmek7,"OP_EVAL: Can be nested (2x) (nonP2SH)",217,45,2,1,47,37600,205,1,0,164,0,2,5,0 +4aw04y,"OP_EVAL: Can be nested (2x) (P2SH20)",219,67,2,1,49,39200,775,1,0,171,2,6,47,0 +eqrq96,"OP_EVAL: Can be nested (2x) (P2SH32)",219,79,2,1,49,39200,799,1,0,171,2,6,71,0 +kfpjqk,"OP_EVAL: Can be nested (99x) (nonP2SH)",477,45,2,1,305,244000,461,7,0,1067,0,2,261,0 +98wkgz,"OP_EVAL: Can be nested (99x) (P2SH20)",479,67,2,1,307,245600,1031,7,0,1074,2,6,303,0 +zywwcx,"OP_EVAL: Can be nested (99x) (P2SH32)",479,79,2,1,307,245600,1055,7,0,1074,2,6,327,0 +05fpsr,"OP_EVAL: Control stack limited to depth of 100 (nonP2SH)",481,45,2,1,309,247200,465,7,0,1081,0,2,265,0 +4xfv3c,"OP_EVAL: Control stack limited to depth of 100 (P2SH20)",483,67,2,1,311,248800,1035,7,0,1088,2,6,307,0 +c8frkn,"OP_EVAL: Control stack limited to depth of 100 (P2SH32)",483,79,2,1,311,248800,1059,7,0,1088,2,6,331,0 +g3u8du,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (nonP2SH)",211,337,2,1,41,32800,685,1,0,143,0,4,285,0 +4cvzpw,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (P2SH20)",507,67,2,1,335,268000,1801,8,0,1172,6,8,617,0 +9782kk,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (P2SH32)",507,79,2,1,335,268000,1825,8,0,1172,6,8,641,0 +ekqyxw,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (nonP2SH)",211,339,2,1,41,32800,687,1,0,143,0,4,287,0 +sqwlkq,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (P2SH20)",509,67,2,1,337,269600,1805,8,0,1179,6,8,621,0 +ltlhp7,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (P2SH32)",509,79,2,1,337,269600,1829,8,0,1179,6,8,645,0 +unhdgg,"OP_EVAL: ((2 2 +)) 4 = (nonP2SH)",217,47,2,1,47,37600,205,1,0,164,0,2,5,0 +k0n4m0,"OP_EVAL: ((2 2 +)) 4 = (P2SH20)",221,67,2,1,51,40800,777,1,0,178,2,6,49,0 +htr8ly,"OP_EVAL: ((2 2 +)) 4 = (P2SH32)",221,79,2,1,51,40800,801,1,0,178,2,6,73,0 +e4e5a7,"OP_EVAL: ((2 2 -)) 0 = (nonP2SH)",217,47,2,1,47,37600,205,1,0,164,0,2,5,0 +hruz2c,"OP_EVAL: ((2 2 -)) 0 = (P2SH20)",221,67,2,1,51,40800,777,1,0,178,2,6,49,0 +3k85wh,"OP_EVAL: ((2 2 -)) 0 = (P2SH32)",221,79,2,1,51,40800,801,1,0,178,2,6,73,0 +dhrw4u,"OP_EVAL: ((2 2 +)) 0 = (reject) (nonP2SH)",217,47,2,1,47,37600,205,1,0,164,0,2,5,0 +amgzuk,"OP_EVAL: ((2 2 +)) 0 = (reject) (P2SH20)",221,67,2,1,51,40800,777,1,0,178,2,6,49,0 +wwf9t6,"OP_EVAL: ((2 2 +)) 0 = (reject) (P2SH32)",221,79,2,1,51,40800,801,1,0,178,2,6,73,0 +8w6fdn,"OP_EVAL: ((2 2 -)) 4 = (reject) (nonP2SH)",217,47,2,1,47,37600,205,1,0,164,0,2,5,0 +d7dnrq,"OP_EVAL: ((2 2 -)) 4 = (reject) (P2SH20)",221,67,2,1,51,40800,777,1,0,178,2,6,49,0 +yq3l9q,"OP_EVAL: ((2 2 -)) 4 = (reject) (P2SH32)",221,79,2,1,51,40800,801,1,0,178,2,6,73,0 +f752ye,"OP_EVAL: ((2) 2 +) 4 = (nonP2SH)",217,47,2,1,47,37600,205,1,0,164,0,2,5,0 +p7k9r4,"OP_EVAL: ((2) 2 +) 4 = (P2SH20)",221,67,2,1,51,40800,777,1,0,178,2,6,49,0 +8wlyc3,"OP_EVAL: ((2) 2 +) 4 = (P2SH32)",221,79,2,1,51,40800,801,1,0,178,2,6,73,0 +5wkj9m,"OP_EVAL: (2 (2) +) 4 = (nonP2SH)",217,47,2,1,47,37600,205,1,0,164,0,2,5,0 +nk8gar,"OP_EVAL: (2 (2) +) 4 = (P2SH20)",221,67,2,1,51,40800,777,1,0,178,2,6,49,0 +djxgdg,"OP_EVAL: (2 (2) +) 4 = (P2SH32)",221,79,2,1,51,40800,801,1,0,178,2,6,73,0 +g9yna7,"OP_EVAL: (2 2 (+)) 4 = (nonP2SH)",217,47,2,1,47,37600,205,1,0,164,0,2,5,0 +sn7vfm,"OP_EVAL: (2 2 (+)) 4 = (P2SH20)",221,67,2,1,51,40800,777,1,0,178,2,6,49,0 +tretgr,"OP_EVAL: (2 2 (+)) 4 = (P2SH32)",221,79,2,1,51,40800,801,1,0,178,2,6,73,0 +a5ysvz,"OP_EVAL: (2 2 (+)) 4 (=) (nonP2SH)",217,49,2,1,47,37600,205,1,0,164,0,2,5,0 +tu46ks,"OP_EVAL: (2 2 (+)) 4 (=) (P2SH20)",223,67,2,1,53,42400,779,1,0,185,2,6,51,0 +3wzem7,"OP_EVAL: (2 2 (+)) 4 (=) (P2SH32)",223,79,2,1,53,42400,803,1,0,185,2,6,75,0 +3nh97u,"OP_EVAL: Concatenated instructions (nonP2SH)",213,51,2,1,43,34400,406,1,0,150,0,4,6,0 +x862er,"OP_EVAL: Concatenated instructions (P2SH20)",221,67,2,1,51,40800,982,1,0,178,2,8,54,0 +t0w3wf,"OP_EVAL: Concatenated instructions (P2SH32)",221,79,2,1,51,40800,1006,1,0,178,2,8,78,0 +mehmuj,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (nonP2SH)",214,46,2,1,44,35200,202,1,0,154,0,2,2,0 +fmcfv5,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (P2SH20)",217,67,2,1,47,37600,773,1,0,164,2,6,45,0 +za04h4,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (P2SH32)",217,79,2,1,47,37600,797,1,0,164,2,6,69,0 +x2h6mx,"OP_EVAL: Fibonacci to 13 (nonP2SH)",212,65,2,1,42,33600,615,1,0,147,0,6,15,0 +qjd6nk,"OP_EVAL: Fibonacci to 13 (P2SH20)",234,67,2,1,64,51200,1205,1,0,224,2,10,77,0 +vcrwzq,"OP_EVAL: Fibonacci to 13 (P2SH32)",234,79,2,1,64,51200,1229,1,0,224,2,10,101,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.standard_limits.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.standard_limits.json new file mode 100644 index 00000000..1987d0ea --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.standard_limits.json @@ -0,0 +1,59 @@ +{ +"3agzq4":[43,34400,201,"OP_EVAL: Works (nonP2SH)"], +"upu678":[45,36000,1027,"OP_EVAL: Works (P2SH20)"], +"wg3zzk":[45,36000,1051,"OP_EVAL: Works (P2SH32)"], +"wh2rs3":[41,32800,100,"OP_EVAL: Requires a stack item (nonP2SH)"], +"d6xj3f":[44,35200,927,"OP_EVAL: Requires a stack item (P2SH20)"], +"rxuqyk":[44,35200,951,"OP_EVAL: Requires a stack item (P2SH32)"], +"lxatqx":[45,36000,203,"OP_EVAL: Can be nested (nonP2SH)"], +"mj3peu":[47,37600,1029,"OP_EVAL: Can be nested (P2SH20)"], +"sa46fz":[47,37600,1053,"OP_EVAL: Can be nested (P2SH32)"], +"9wmek7":[47,37600,205,"OP_EVAL: Can be nested (2x) (nonP2SH)"], +"4aw04y":[49,39200,1031,"OP_EVAL: Can be nested (2x) (P2SH20)"], +"eqrq96":[49,39200,1055,"OP_EVAL: Can be nested (2x) (P2SH32)"], +"kfpjqk":[305,244000,461,"OP_EVAL: Can be nested (99x) (nonP2SH)"], +"98wkgz":[307,245600,1287,"OP_EVAL: Can be nested (99x) (P2SH20)"], +"zywwcx":[307,245600,1311,"OP_EVAL: Can be nested (99x) (P2SH32)"], +"05fpsr":[309,247200,465,"OP_EVAL: Control stack limited to depth of 100 (nonP2SH)"], +"4xfv3c":[311,248800,1291,"OP_EVAL: Control stack limited to depth of 100 (P2SH20)"], +"c8frkn":[311,248800,1315,"OP_EVAL: Control stack limited to depth of 100 (P2SH32)"], +"g3u8du":[41,32800,685,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (nonP2SH)"], +"4cvzpw":[335,268000,2569,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (P2SH20)"], +"9782kk":[335,268000,2593,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (P2SH32)"], +"ekqyxw":[41,32800,687,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (nonP2SH)"], +"sqwlkq":[337,269600,2573,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (P2SH20)"], +"ltlhp7":[337,269600,2597,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (P2SH32)"], +"unhdgg":[47,37600,205,"OP_EVAL: ((2 2 +)) 4 = (nonP2SH)"], +"k0n4m0":[51,40800,1033,"OP_EVAL: ((2 2 +)) 4 = (P2SH20)"], +"htr8ly":[51,40800,1057,"OP_EVAL: ((2 2 +)) 4 = (P2SH32)"], +"e4e5a7":[47,37600,205,"OP_EVAL: ((2 2 -)) 0 = (nonP2SH)"], +"hruz2c":[51,40800,1033,"OP_EVAL: ((2 2 -)) 0 = (P2SH20)"], +"3k85wh":[51,40800,1057,"OP_EVAL: ((2 2 -)) 0 = (P2SH32)"], +"dhrw4u":[47,37600,205,"OP_EVAL: ((2 2 +)) 0 = (reject) (nonP2SH)"], +"amgzuk":[51,40800,1033,"OP_EVAL: ((2 2 +)) 0 = (reject) (P2SH20)"], +"wwf9t6":[51,40800,1057,"OP_EVAL: ((2 2 +)) 0 = (reject) (P2SH32)"], +"8w6fdn":[47,37600,205,"OP_EVAL: ((2 2 -)) 4 = (reject) (nonP2SH)"], +"d7dnrq":[51,40800,1033,"OP_EVAL: ((2 2 -)) 4 = (reject) (P2SH20)"], +"yq3l9q":[51,40800,1057,"OP_EVAL: ((2 2 -)) 4 = (reject) (P2SH32)"], +"f752ye":[47,37600,205,"OP_EVAL: ((2) 2 +) 4 = (nonP2SH)"], +"p7k9r4":[51,40800,1033,"OP_EVAL: ((2) 2 +) 4 = (P2SH20)"], +"8wlyc3":[51,40800,1057,"OP_EVAL: ((2) 2 +) 4 = (P2SH32)"], +"5wkj9m":[47,37600,205,"OP_EVAL: (2 (2) +) 4 = (nonP2SH)"], +"nk8gar":[51,40800,1033,"OP_EVAL: (2 (2) +) 4 = (P2SH20)"], +"djxgdg":[51,40800,1057,"OP_EVAL: (2 (2) +) 4 = (P2SH32)"], +"g9yna7":[47,37600,205,"OP_EVAL: (2 2 (+)) 4 = (nonP2SH)"], +"sn7vfm":[51,40800,1033,"OP_EVAL: (2 2 (+)) 4 = (P2SH20)"], +"tretgr":[51,40800,1057,"OP_EVAL: (2 2 (+)) 4 = (P2SH32)"], +"a5ysvz":[47,37600,205,"OP_EVAL: (2 2 (+)) 4 (=) (nonP2SH)"], +"tu46ks":[53,42400,1035,"OP_EVAL: (2 2 (+)) 4 (=) (P2SH20)"], +"3wzem7":[53,42400,1059,"OP_EVAL: (2 2 (+)) 4 (=) (P2SH32)"], +"3nh97u":[43,34400,406,"OP_EVAL: Concatenated instructions (nonP2SH)"], +"x862er":[51,40800,1238,"OP_EVAL: Concatenated instructions (P2SH20)"], +"t0w3wf":[51,40800,1262,"OP_EVAL: Concatenated instructions (P2SH32)"], +"mehmuj":[44,35200,202,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (nonP2SH)"], +"fmcfv5":[47,37600,1029,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (P2SH20)"], +"za04h4":[47,37600,1053,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (P2SH32)"], +"x2h6mx":[42,33600,615,"OP_EVAL: Fibonacci to 13 (nonP2SH)"], +"qjd6nk":[64,51200,1461,"OP_EVAL: Fibonacci to 13 (P2SH20)"], +"vcrwzq":[64,51200,1485,"OP_EVAL: Fibonacci to 13 (P2SH32)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.standard_results.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.standard_results.json new file mode 100644 index 00000000..3fac4e12 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.standard_results.json @@ -0,0 +1,59 @@ +{ +"3agzq4":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"upu678":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"wg3zzk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"wh2rs3":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"d6xj3f":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"rxuqyk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"lxatqx":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"mj3peu":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"sa46fz":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"9wmek7":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"4aw04y":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"eqrq96":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"kfpjqk":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"98wkgz":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"zywwcx":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"05fpsr":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"4xfv3c":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"c8frkn":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"g3u8du":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"4cvzpw":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"9782kk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"ekqyxw":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"sqwlkq":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"ltlhp7":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"unhdgg":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"k0n4m0":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"htr8ly":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"e4e5a7":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"hruz2c":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"3k85wh":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"dhrw4u":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"amgzuk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"wwf9t6":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"8w6fdn":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"d7dnrq":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"yq3l9q":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"f752ye":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"p7k9r4":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"8wlyc3":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"5wkj9m":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"nk8gar":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"djxgdg":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"g9yna7":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"sn7vfm":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"tretgr":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"a5ysvz":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"tu46ks":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"3wzem7":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"3nh97u":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"x862er":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"t0w3wf":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"mehmuj":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"fmcfv5":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"za04h4":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"x2h6mx":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"qjd6nk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"vcrwzq":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.standard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.standard_stats.csv new file mode 100644 index 00000000..edf98bbb --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.standard_stats.csv @@ -0,0 +1,58 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +3agzq4,"OP_EVAL: Works (nonP2SH)",213,45,2,1,43,34400,201,1,0,21,0,2,1,0 +upu678,"OP_EVAL: Works (P2SH20)",215,67,2,1,45,36000,1027,1,0,22,2,6,43,0 +wg3zzk,"OP_EVAL: Works (P2SH32)",215,79,2,1,45,36000,1051,1,0,22,2,6,67,0 +wh2rs3,"OP_EVAL: Requires a stack item (nonP2SH)",211,46,2,1,41,32800,100,1,0,20,0,1,0,0 +d6xj3f,"OP_EVAL: Requires a stack item (P2SH20)",214,67,2,1,44,35200,927,1,0,22,2,5,43,0 +rxuqyk,"OP_EVAL: Requires a stack item (P2SH32)",214,79,2,1,44,35200,951,1,0,22,2,5,67,0 +lxatqx,"OP_EVAL: Can be nested (nonP2SH)",215,45,2,1,45,36000,203,1,0,22,0,2,3,0 +mj3peu,"OP_EVAL: Can be nested (P2SH20)",217,67,2,1,47,37600,1029,1,0,23,2,6,45,0 +sa46fz,"OP_EVAL: Can be nested (P2SH32)",217,79,2,1,47,37600,1053,1,0,23,2,6,69,0 +9wmek7,"OP_EVAL: Can be nested (2x) (nonP2SH)",217,45,2,1,47,37600,205,1,0,23,0,2,5,0 +4aw04y,"OP_EVAL: Can be nested (2x) (P2SH20)",219,67,2,1,49,39200,1031,1,0,24,2,6,47,0 +eqrq96,"OP_EVAL: Can be nested (2x) (P2SH32)",219,79,2,1,49,39200,1055,1,0,24,2,6,71,0 +kfpjqk,"OP_EVAL: Can be nested (99x) (nonP2SH)",477,45,2,1,305,244000,461,7,0,152,0,2,261,0 +98wkgz,"OP_EVAL: Can be nested (99x) (P2SH20)",479,67,2,1,307,245600,1287,7,0,153,2,6,303,0 +zywwcx,"OP_EVAL: Can be nested (99x) (P2SH32)",479,79,2,1,307,245600,1311,7,0,153,2,6,327,0 +05fpsr,"OP_EVAL: Control stack limited to depth of 100 (nonP2SH)",481,45,2,1,309,247200,465,7,0,154,0,2,265,0 +4xfv3c,"OP_EVAL: Control stack limited to depth of 100 (P2SH20)",483,67,2,1,311,248800,1291,7,0,155,2,6,307,0 +c8frkn,"OP_EVAL: Control stack limited to depth of 100 (P2SH32)",483,79,2,1,311,248800,1315,7,0,155,2,6,331,0 +g3u8du,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (nonP2SH)",211,337,2,1,41,32800,685,1,0,20,0,4,285,0 +4cvzpw,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (P2SH20)",507,67,2,1,335,268000,2569,8,0,167,6,8,617,0 +9782kk,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (P2SH32)",507,79,2,1,335,268000,2593,8,0,167,6,8,641,0 +ekqyxw,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (nonP2SH)",211,339,2,1,41,32800,687,1,0,20,0,4,287,0 +sqwlkq,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (P2SH20)",509,67,2,1,337,269600,2573,8,0,168,6,8,621,0 +ltlhp7,"OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (P2SH32)",509,79,2,1,337,269600,2597,8,0,168,6,8,645,0 +unhdgg,"OP_EVAL: ((2 2 +)) 4 = (nonP2SH)",217,47,2,1,47,37600,205,1,0,23,0,2,5,0 +k0n4m0,"OP_EVAL: ((2 2 +)) 4 = (P2SH20)",221,67,2,1,51,40800,1033,1,0,25,2,6,49,0 +htr8ly,"OP_EVAL: ((2 2 +)) 4 = (P2SH32)",221,79,2,1,51,40800,1057,1,0,25,2,6,73,0 +e4e5a7,"OP_EVAL: ((2 2 -)) 0 = (nonP2SH)",217,47,2,1,47,37600,205,1,0,23,0,2,5,0 +hruz2c,"OP_EVAL: ((2 2 -)) 0 = (P2SH20)",221,67,2,1,51,40800,1033,1,0,25,2,6,49,0 +3k85wh,"OP_EVAL: ((2 2 -)) 0 = (P2SH32)",221,79,2,1,51,40800,1057,1,0,25,2,6,73,0 +dhrw4u,"OP_EVAL: ((2 2 +)) 0 = (reject) (nonP2SH)",217,47,2,1,47,37600,205,1,0,23,0,2,5,0 +amgzuk,"OP_EVAL: ((2 2 +)) 0 = (reject) (P2SH20)",221,67,2,1,51,40800,1033,1,0,25,2,6,49,0 +wwf9t6,"OP_EVAL: ((2 2 +)) 0 = (reject) (P2SH32)",221,79,2,1,51,40800,1057,1,0,25,2,6,73,0 +8w6fdn,"OP_EVAL: ((2 2 -)) 4 = (reject) (nonP2SH)",217,47,2,1,47,37600,205,1,0,23,0,2,5,0 +d7dnrq,"OP_EVAL: ((2 2 -)) 4 = (reject) (P2SH20)",221,67,2,1,51,40800,1033,1,0,25,2,6,49,0 +yq3l9q,"OP_EVAL: ((2 2 -)) 4 = (reject) (P2SH32)",221,79,2,1,51,40800,1057,1,0,25,2,6,73,0 +f752ye,"OP_EVAL: ((2) 2 +) 4 = (nonP2SH)",217,47,2,1,47,37600,205,1,0,23,0,2,5,0 +p7k9r4,"OP_EVAL: ((2) 2 +) 4 = (P2SH20)",221,67,2,1,51,40800,1033,1,0,25,2,6,49,0 +8wlyc3,"OP_EVAL: ((2) 2 +) 4 = (P2SH32)",221,79,2,1,51,40800,1057,1,0,25,2,6,73,0 +5wkj9m,"OP_EVAL: (2 (2) +) 4 = (nonP2SH)",217,47,2,1,47,37600,205,1,0,23,0,2,5,0 +nk8gar,"OP_EVAL: (2 (2) +) 4 = (P2SH20)",221,67,2,1,51,40800,1033,1,0,25,2,6,49,0 +djxgdg,"OP_EVAL: (2 (2) +) 4 = (P2SH32)",221,79,2,1,51,40800,1057,1,0,25,2,6,73,0 +g9yna7,"OP_EVAL: (2 2 (+)) 4 = (nonP2SH)",217,47,2,1,47,37600,205,1,0,23,0,2,5,0 +sn7vfm,"OP_EVAL: (2 2 (+)) 4 = (P2SH20)",221,67,2,1,51,40800,1033,1,0,25,2,6,49,0 +tretgr,"OP_EVAL: (2 2 (+)) 4 = (P2SH32)",221,79,2,1,51,40800,1057,1,0,25,2,6,73,0 +a5ysvz,"OP_EVAL: (2 2 (+)) 4 (=) (nonP2SH)",217,49,2,1,47,37600,205,1,0,23,0,2,5,0 +tu46ks,"OP_EVAL: (2 2 (+)) 4 (=) (P2SH20)",223,67,2,1,53,42400,1035,1,0,26,2,6,51,0 +3wzem7,"OP_EVAL: (2 2 (+)) 4 (=) (P2SH32)",223,79,2,1,53,42400,1059,1,0,26,2,6,75,0 +3nh97u,"OP_EVAL: Concatenated instructions (nonP2SH)",213,51,2,1,43,34400,406,1,0,21,0,4,6,0 +x862er,"OP_EVAL: Concatenated instructions (P2SH20)",221,67,2,1,51,40800,1238,1,0,25,2,8,54,0 +t0w3wf,"OP_EVAL: Concatenated instructions (P2SH32)",221,79,2,1,51,40800,1262,1,0,25,2,8,78,0 +mehmuj,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (nonP2SH)",214,46,2,1,44,35200,202,1,0,22,0,2,2,0 +fmcfv5,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (P2SH20)",217,67,2,1,47,37600,1029,1,0,23,2,6,45,0 +za04h4,"OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (P2SH32)",217,79,2,1,47,37600,1053,1,0,23,2,6,69,0 +x2h6mx,"OP_EVAL: Fibonacci to 13 (nonP2SH)",212,65,2,1,42,33600,615,1,0,21,0,6,15,0 +qjd6nk,"OP_EVAL: Fibonacci to 13 (P2SH20)",234,67,2,1,64,51200,1461,1,0,32,2,10,77,0 +vcrwzq,"OP_EVAL: Fibonacci to 13 (P2SH32)",234,79,2,1,64,51200,1485,1,0,32,2,10,101,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.vmb_tests.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.vmb_tests.json new file mode 100644 index 00000000..a3e1f7f4 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.eval.vmb_tests.json @@ -0,0 +1,57 @@ +[["3agzq4","OP_EVAL: Works (nonP2SH)","","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000020151000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000162",1], +["upu678","OP_EVAL: Works (P2SH20)","","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000401510162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9140f4d7845db968f2a81b530b6f3c1d6246d4c7e0187",1], +["wg3zzk","OP_EVAL: Works (P2SH32)","","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000401510162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2039361160903c6695c6804b7157c7bd10013e9ba89b1f954243bc8e3990b08db987",1], +["wh2rs3","OP_EVAL: Requires a stack item (nonP2SH)","","OP_EVAL OP_1","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac1027000000000000026251",1], +["d6xj3f","OP_EVAL: Requires a stack item (P2SH20)","","OP_EVAL OP_1","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000003026251000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a91410f6fc4033682caf298b1275debc0e3b5bdafd9487",1], +["rxuqyk","OP_EVAL: Requires a stack item (P2SH32)","","OP_EVAL OP_1","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000003026251000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa20afa0f4f07b809e2c520a092ac1e354dcc22013f9f3bdddeca78d5ae66bdd00f787",1], +["lxatqx","OP_EVAL: Can be nested (nonP2SH)","< OP_EVAL>","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000403015162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000162",1], +["mj3peu","OP_EVAL: Can be nested (P2SH20)","< OP_EVAL>","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006030151620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9140f4d7845db968f2a81b530b6f3c1d6246d4c7e0187",1], +["sa46fz","OP_EVAL: Can be nested (P2SH32)","< OP_EVAL>","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006030151620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2039361160903c6695c6804b7157c7bd10013e9ba89b1f954243bc8e3990b08db987",1], +["9wmek7","OP_EVAL: Can be nested (2x) (nonP2SH)","<< OP_EVAL> OP_EVAL>","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006050301516262000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000162",1], +["4aw04y","OP_EVAL: Can be nested (2x) (P2SH20)","<< OP_EVAL> OP_EVAL>","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000080503015162620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9140f4d7845db968f2a81b530b6f3c1d6246d4c7e0187",1], +["eqrq96","OP_EVAL: Can be nested (2x) (P2SH32)","<< OP_EVAL> OP_EVAL>","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000080503015162620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2039361160903c6695c6804b7157c7bd10013e9ba89b1f954243bc8e3990b08db987",1], +["kfpjqk","OP_EVAL: Can be nested (99x) (nonP2SH)","< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< OP_1 > OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000fd08014d05014d01014cfe4cfb4cf84cf54cf24cef4cec4ce94ce64ce34ce04cdd4cda4cd74cd44cd14cce4ccb4cc84cc54cc24cbf4cbc4cb94cb64cb34cb04cad4caa4ca74ca44ca14c9e4c9b4c984c954c924c8f4c8c4c894c864c834c804c7d4c7a4c774c744c714c6e4c6b4c684c654c624c5f4c5c4c594c564c534c504c4d4b49474543413f3d3b39373533312f2d2b29272523211f1d1b19171513110f0d0b090705030151626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000162",1], +["98wkgz","OP_EVAL: Can be nested (99x) (P2SH20)","< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< OP_1 > OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000fd0a014d05014d01014cfe4cfb4cf84cf54cf24cef4cec4ce94ce64ce34ce04cdd4cda4cd74cd44cd14cce4ccb4cc84cc54cc24cbf4cbc4cb94cb64cb34cb04cad4caa4ca74ca44ca14c9e4c9b4c984c954c924c8f4c8c4c894c864c834c804c7d4c7a4c774c744c714c6e4c6b4c684c654c624c5f4c5c4c594c564c534c504c4d4b49474543413f3d3b39373533312f2d2b29272523211f1d1b19171513110f0d0b0907050301516262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9140f4d7845db968f2a81b530b6f3c1d6246d4c7e0187",1], +["zywwcx","OP_EVAL: Can be nested (99x) (P2SH32)","< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< OP_1 > OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000fd0a014d05014d01014cfe4cfb4cf84cf54cf24cef4cec4ce94ce64ce34ce04cdd4cda4cd74cd44cd14cce4ccb4cc84cc54cc24cbf4cbc4cb94cb64cb34cb04cad4caa4ca74ca44ca14c9e4c9b4c984c954c924c8f4c8c4c894c864c834c804c7d4c7a4c774c744c714c6e4c6b4c684c654c624c5f4c5c4c594c564c534c504c4d4b49474543413f3d3b39373533312f2d2b29272523211f1d1b19171513110f0d0b0907050301516262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2039361160903c6695c6804b7157c7bd10013e9ba89b1f954243bc8e3990b08db987",1], +["05fpsr","OP_EVAL: Control stack limited to depth of 100 (nonP2SH)","< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< OP_1 > OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000fd0c014d09014d05014d01014cfe4cfb4cf84cf54cf24cef4cec4ce94ce64ce34ce04cdd4cda4cd74cd44cd14cce4ccb4cc84cc54cc24cbf4cbc4cb94cb64cb34cb04cad4caa4ca74ca44ca14c9e4c9b4c984c954c924c8f4c8c4c894c864c834c804c7d4c7a4c774c744c714c6e4c6b4c684c654c624c5f4c5c4c594c564c534c504c4d4b49474543413f3d3b39373533312f2d2b29272523211f1d1b19171513110f0d0b09070503015162626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000162",1], +["4xfv3c","OP_EVAL: Control stack limited to depth of 100 (P2SH20)","< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< OP_1 > OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000fd0e014d09014d05014d01014cfe4cfb4cf84cf54cf24cef4cec4ce94ce64ce34ce04cdd4cda4cd74cd44cd14cce4ccb4cc84cc54cc24cbf4cbc4cb94cb64cb34cb04cad4caa4ca74ca44ca14c9e4c9b4c984c954c924c8f4c8c4c894c864c834c804c7d4c7a4c774c744c714c6e4c6b4c684c654c624c5f4c5c4c594c564c534c504c4d4b49474543413f3d3b39373533312f2d2b29272523211f1d1b19171513110f0d0b090705030151626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9140f4d7845db968f2a81b530b6f3c1d6246d4c7e0187",1], +["c8frkn","OP_EVAL: Control stack limited to depth of 100 (P2SH32)","< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< OP_1 > OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL> OP_EVAL >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000fd0e014d09014d05014d01014cfe4cfb4cf84cf54cf24cef4cec4ce94ce64ce34ce04cdd4cda4cd74cd44cd14cce4ccb4cc84cc54cc24cbf4cbc4cb94cb64cb34cb04cad4caa4ca74ca44ca14c9e4c9b4c984c954c924c8f4c8c4c894c864c834c804c7d4c7a4c774c744c714c6e4c6b4c684c654c624c5f4c5c4c594c564c534c504c4d4b49474543413f3d3b39373533312f2d2b29272523211f1d1b19171513110f0d0b090705030151626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2039361160903c6695c6804b7157c7bd10013e9ba89b1f954243bc8e3990b08db987",1], +["g3u8du","OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (nonP2SH)","","<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF < OP_1 > OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac1027000000000000fd230151634d1c0151634d150151634d0e0151634d070151634d000151634cfa51634cf451634cee51634ce851634ce251634cdc51634cd651634cd051634cca51634cc451634cbe51634cb851634cb251634cac51634ca651634ca051634c9a51634c9451634c8e51634c8851634c8251634c7c51634c7651634c7051634c6a51634c6451634c5e51634c5851634c5251634c4c51634751634251633d51633851633351632e51632951632451631f51631a51631551631051630b5163065163015162686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268",1], +["4cvzpw","OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (P2SH20)","","<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF < OP_1 > OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000fd26014d230151634d1c0151634d150151634d0e0151634d070151634d000151634cfa51634cf451634cee51634ce851634ce251634cdc51634cd651634cd051634cca51634cc451634cbe51634cb851634cb251634cac51634ca651634ca051634c9a51634c9451634c8e51634c8851634c8251634c7c51634c7651634c7051634c6a51634c6451634c5e51634c5851634c5251634c4c51634751634251633d51633851633351632e51632951632451631f51631a51631551631051630b5163065163015162686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9140e786e84d687f680ee2defefa98fbfb2551521cc87",1], +["9782kk","OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100 (P2SH32)","","<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF < OP_1 > OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000fd26014d230151634d1c0151634d150151634d0e0151634d070151634d000151634cfa51634cf451634cee51634ce851634ce251634cdc51634cd651634cd051634cca51634cc451634cbe51634cb851634cb251634cac51634ca651634ca051634c9a51634c9451634c8e51634c8851634c8251634c7c51634c7651634c7051634c6a51634c6451634c5e51634c5851634c5251634c4c51634751634251633d51633851633351632e51632951632451631f51631a51631551631051630b5163065163015162686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa209213c73e6f683841f969cc7c3a81856ce8e2fc194d60d8a3b99088cbe594247487",1], +["ekqyxw","OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (nonP2SH)","","<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF < OP_EVAL > OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac1027000000000000fd250151634d1e0151634d170151634d100151634d090151634d020151634cfc51634cf651634cf051634cea51634ce451634cde51634cd851634cd251634ccc51634cc651634cc051634cba51634cb451634cae51634ca851634ca251634c9c51634c9651634c9051634c8a51634c8451634c7e51634c7851634c7251634c6c51634c6651634c6051634c5a51634c5451634c4e51634951634451633f51633a51633551633051632b51632651632151631c51631751631251630d51630851630301516262686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268",1], +["sqwlkq","OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (P2SH20)","","<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF < OP_EVAL > OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000fd28014d250151634d1e0151634d170151634d100151634d090151634d020151634cfc51634cf651634cf051634cea51634ce451634cde51634cd851634cd251634ccc51634cc651634cc051634cba51634cb451634cae51634ca851634ca251634c9c51634c9651634c9051634c8a51634c8451634c7e51634c7851634c7251634c6c51634c6651634c6051634c5a51634c5451634c4e51634951634451633f51633a51633551633051632b51632651632151631c51631751631251630d51630851630301516262686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9147ea26c5327f4ca1372846568cc453c37469d7d9b87",1], +["ltlhp7","OP_EVAL: Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100 (P2SH32)","","<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF <<1> OP_IF < OP_EVAL > OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF> OP_EVAL OP_ENDIF","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000fd28014d250151634d1e0151634d170151634d100151634d090151634d020151634cfc51634cf651634cf051634cea51634ce451634cde51634cd851634cd251634ccc51634cc651634cc051634cba51634cb451634cae51634ca851634ca251634c9c51634c9651634c9051634c8a51634c8451634c7e51634c7851634c7251634c6c51634c6651634c6051634c5a51634c5451634c4e51634951634451633f51633a51633551633051632b51632651632151631c51631751631251630d51630851630301516262686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268626862686268000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa204bdac534931924b6a74c729c007b449c89c209b87f086e8d7f07416d96b6767c87",1], +["unhdgg","OP_EVAL: ((2 2 +)) 4 = (nonP2SH)","< OP_EVAL>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006050352529362000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000003625487",1], +["k0n4m0","OP_EVAL: ((2 2 +)) 4 = (P2SH20)","< OP_EVAL>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05035252936203625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a91408112bfa18b35e910a8aba6e6de69a8315ba2b1487",1], +["htr8ly","OP_EVAL: ((2 2 +)) 4 = (P2SH32)","< OP_EVAL>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05035252936203625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa20dc930fc5a711fc279fd34e30b32b8956cdebb9b9eb802a0384156763ca29f62087",1], +["e4e5a7","OP_EVAL: ((2 2 -)) 0 = (nonP2SH)","< OP_EVAL>","OP_EVAL OP_0 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006050352529462000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000003620087",1], +["hruz2c","OP_EVAL: ((2 2 -)) 0 = (P2SH20)","< OP_EVAL>","OP_EVAL OP_0 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05035252946203620087000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a914857ca23f2a2e18aa384b8c5ac6f63b0aec780dba87",1], +["3k85wh","OP_EVAL: ((2 2 -)) 0 = (P2SH32)","< OP_EVAL>","OP_EVAL OP_0 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05035252946203620087000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa20b3cddf016565bec54819caa17dd34d4cba50ab26b50a9e54c7f7a35b78c5c9d787",1], +["dhrw4u","OP_EVAL: ((2 2 +)) 0 = (reject) (nonP2SH)","< OP_EVAL>","OP_EVAL OP_0 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006050352529362000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000003620087",1], +["amgzuk","OP_EVAL: ((2 2 +)) 0 = (reject) (P2SH20)","< OP_EVAL>","OP_EVAL OP_0 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05035252936203620087000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a914857ca23f2a2e18aa384b8c5ac6f63b0aec780dba87",1], +["wwf9t6","OP_EVAL: ((2 2 +)) 0 = (reject) (P2SH32)","< OP_EVAL>","OP_EVAL OP_0 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05035252936203620087000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa20b3cddf016565bec54819caa17dd34d4cba50ab26b50a9e54c7f7a35b78c5c9d787",1], +["8w6fdn","OP_EVAL: ((2 2 -)) 4 = (reject) (nonP2SH)","< OP_EVAL>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006050352529462000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000003625487",1], +["d7dnrq","OP_EVAL: ((2 2 -)) 4 = (reject) (P2SH20)","< OP_EVAL>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05035252946203625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a91408112bfa18b35e910a8aba6e6de69a8315ba2b1487",1], +["yq3l9q","OP_EVAL: ((2 2 -)) 4 = (reject) (P2SH32)","< OP_EVAL>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05035252946203625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa20dc930fc5a711fc279fd34e30b32b8956cdebb9b9eb802a0384156763ca29f62087",1], +["f752ye","OP_EVAL: ((2) 2 +) 4 = (nonP2SH)","< OP_EVAL OP_2 OP_ADD>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006050152625293000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000003625487",1], +["p7k9r4","OP_EVAL: ((2) 2 +) 4 = (P2SH20)","< OP_EVAL OP_2 OP_ADD>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05015262529303625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a91408112bfa18b35e910a8aba6e6de69a8315ba2b1487",1], +["8wlyc3","OP_EVAL: ((2) 2 +) 4 = (P2SH32)","< OP_EVAL OP_2 OP_ADD>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05015262529303625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa20dc930fc5a711fc279fd34e30b32b8956cdebb9b9eb802a0384156763ca29f62087",1], +["5wkj9m","OP_EVAL: (2 (2) +) 4 = (nonP2SH)"," OP_EVAL OP_ADD>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006055201526293000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000003625487",1], +["nk8gar","OP_EVAL: (2 (2) +) 4 = (P2SH20)"," OP_EVAL OP_ADD>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05520152629303625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a91408112bfa18b35e910a8aba6e6de69a8315ba2b1487",1], +["djxgdg","OP_EVAL: (2 (2) +) 4 = (P2SH32)"," OP_EVAL OP_ADD>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05520152629303625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa20dc930fc5a711fc279fd34e30b32b8956cdebb9b9eb802a0384156763ca29f62087",1], +["g9yna7","OP_EVAL: (2 2 (+)) 4 = (nonP2SH)"," OP_EVAL>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006055252019362000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000003625487",1], +["sn7vfm","OP_EVAL: (2 2 (+)) 4 = (P2SH20)"," OP_EVAL>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05525201936203625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a91408112bfa18b35e910a8aba6e6de69a8315ba2b1487",1], +["tretgr","OP_EVAL: (2 2 (+)) 4 = (P2SH32)"," OP_EVAL>","OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a05525201936203625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa20dc930fc5a711fc279fd34e30b32b8956cdebb9b9eb802a0384156763ca29f62087",1], +["a5ysvz","OP_EVAL: (2 2 (+)) 4 (=) (nonP2SH)"," OP_EVAL>","OP_EVAL OP_4 OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006055252019362000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac1027000000000000056254018762",1], +["tu46ks","OP_EVAL: (2 2 (+)) 4 (=) (P2SH20)"," OP_EVAL>","OP_EVAL OP_4 OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000c055252019362056254018762000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a914561e4152d26c4b3f3ccdce064848df32e558f3a187",1], +["3wzem7","OP_EVAL: (2 2 (+)) 4 (=) (P2SH32)"," OP_EVAL>","OP_EVAL OP_4 OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000c055252019362056254018762000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa203792323eec33a2504c0ed50a705a1427bc6dd79667292058f48224d43fc6d92387",1], +["3nh97u","OP_EVAL: Concatenated instructions (nonP2SH)",""," OP_CAT OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000020152000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac1027000000000000070252937e625487",1], +["x862er","OP_EVAL: Concatenated instructions (P2SH20)",""," OP_CAT OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a0152070252937e625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9141a95b061b153b5e42aed40f35a0eeb9bf15feeb187",1], +["t0w3wf","OP_EVAL: Concatenated instructions (P2SH32)",""," OP_CAT OP_EVAL OP_4 OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000a0152070252937e625487000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa201438ec023cb2a8672e8966cbfb1c3d2fa1038075cf8e146e5b191098f7751a5587",1], +["mehmuj","OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (nonP2SH)","","OP_EVAL OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000302c176000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac1027000000000000026287",1], +["fmcfv5","OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (P2SH20)","","OP_EVAL OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000602c176026287000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a914f30c994820910b0982da97b0252101c2f8d4c5dc87",1], +["za04h4","OP_EVAL: Exposes evaluated instructions to OP_ACTIVEBYTECODE (P2SH32)","","OP_EVAL OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000602c176026287000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa20434bf79d327c4e548d8636aec2e3eb57b2427c3dd4ff4ab292015fd6495e283287",1], +["x2h6mx","OP_EVAL: Fibonacci to 13 (nonP2SH)","<6>","<0> <1> OP_ROT OP_ENDIF OP_EVAL> OP_EVAL OP_NIP <13> OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000156000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000001500517b0d8c6b7c78936c7363c16700686262775d87",1], +["qjd6nk","OP_EVAL: Fibonacci to 13 (P2SH20)","<6>","<0> <1> OP_ROT OP_ENDIF OP_EVAL> OP_EVAL OP_NIP <13> OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000017561500517b0d8c6b7c78936c7363c16700686262775d87000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9143dbbc6b3c94d6c8ea1a9beea11799d935cd0a19b87",1], +["vcrwzq","OP_EVAL: Fibonacci to 13 (P2SH32)","<6>","<0> <1> OP_ROT OP_ENDIF OP_EVAL> OP_EVAL OP_NIP <13> OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000017561500517b0d8c6b7c78936c7363c16700686262775d87000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa20164f3a2283e4616cde7437dd22ce1530b75750dafd1ca3b0acd1eed1f47bf9f887",1]] \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.nonstandard_limits.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.nonstandard_limits.json new file mode 100644 index 00000000..3b99dff1 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.nonstandard_limits.json @@ -0,0 +1,11 @@ +{ +"pwran7":[43,34400,302,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (nonP2SH)"], +"ll48n6":[48,38400,875,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (P2SH20)"], +"earn55":[48,38400,899,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (P2SH32)"], +"m30e80":[43,34400,301,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (nonP2SH)"], +"06ty9d":[48,38400,874,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (P2SH20)"], +"xf7k9u":[48,38400,898,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (P2SH32)"], +"838k9p":[42,33600,502,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (nonP2SH)"], +"pqydxn":[59,47200,1087,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (P2SH20)"], +"ug0w55":[59,47200,1111,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (P2SH32)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.nonstandard_results.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.nonstandard_results.json new file mode 100644 index 00000000..23a040a3 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.nonstandard_results.json @@ -0,0 +1,11 @@ +{ +"pwran7":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"ll48n6":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"earn55":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"m30e80":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"06ty9d":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"xf7k9u":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"838k9p":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"pqydxn":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"ug0w55":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.nonstandard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.nonstandard_stats.csv new file mode 100644 index 00000000..b02a8ffd --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.nonstandard_stats.csv @@ -0,0 +1,10 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +pwran7,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (nonP2SH)",213,48,2,1,43,34400,302,1,0,150,0,3,2,0 +ll48n6,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (P2SH20)",218,67,2,1,48,38400,875,1,0,168,2,7,47,0 +earn55,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (P2SH32)",218,79,2,1,48,38400,899,1,0,168,2,7,71,0 +m30e80,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (nonP2SH)",213,48,2,1,43,34400,301,1,0,150,0,3,1,0 +06ty9d,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (P2SH20)",218,67,2,1,48,38400,874,1,0,168,2,7,46,0 +xf7k9u,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (P2SH32)",218,79,2,1,48,38400,898,1,0,168,2,7,70,0 +838k9p,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (nonP2SH)",212,60,2,1,42,33600,502,1,0,147,0,5,2,0 +pqydxn,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (P2SH20)",229,67,2,1,59,47200,1087,1,0,206,2,9,59,0 +ug0w55,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (P2SH32)",229,79,2,1,59,47200,1111,1,0,206,2,9,83,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.standard_limits.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.standard_limits.json new file mode 100644 index 00000000..32f069d2 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.standard_limits.json @@ -0,0 +1,11 @@ +{ +"pwran7":[43,34400,302,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (nonP2SH)"], +"ll48n6":[48,38400,1131,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (P2SH20)"], +"earn55":[48,38400,1155,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (P2SH32)"], +"m30e80":[43,34400,301,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (nonP2SH)"], +"06ty9d":[48,38400,1130,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (P2SH20)"], +"xf7k9u":[48,38400,1154,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (P2SH32)"], +"838k9p":[42,33600,502,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (nonP2SH)"], +"pqydxn":[59,47200,1343,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (P2SH20)"], +"ug0w55":[59,47200,1367,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (P2SH32)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.standard_results.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.standard_results.json new file mode 100644 index 00000000..9e855471 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.standard_results.json @@ -0,0 +1,11 @@ +{ +"pwran7":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"ll48n6":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"earn55":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"m30e80":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"06ty9d":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"xf7k9u":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"838k9p":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"pqydxn":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"ug0w55":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.standard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.standard_stats.csv new file mode 100644 index 00000000..be2098f0 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.standard_stats.csv @@ -0,0 +1,10 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +pwran7,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (nonP2SH)",213,48,2,1,43,34400,302,1,0,21,0,3,2,0 +ll48n6,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (P2SH20)",218,67,2,1,48,38400,1131,1,0,24,2,7,47,0 +earn55,"OP_BEGIN/OP_UNTIL: loop until the first 0x01 (P2SH32)",218,79,2,1,48,38400,1155,1,0,24,2,7,71,0 +m30e80,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (nonP2SH)",213,48,2,1,43,34400,301,1,0,21,0,3,1,0 +06ty9d,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (P2SH20)",218,67,2,1,48,38400,1130,1,0,24,2,7,46,0 +xf7k9u,"OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (P2SH32)",218,79,2,1,48,38400,1154,1,0,24,2,7,70,0 +838k9p,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (nonP2SH)",212,60,2,1,42,33600,502,1,0,21,0,5,2,0 +pqydxn,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (P2SH20)",229,67,2,1,59,47200,1343,1,0,29,2,9,59,0 +ug0w55,"OP_BEGIN/OP_UNTIL: Fibonacci to 13 (P2SH32)",229,79,2,1,59,47200,1367,1,0,29,2,9,83,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.vmb_tests.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.vmb_tests.json new file mode 100644 index 00000000..f14a8711 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.loops.vmb_tests.json @@ -0,0 +1,9 @@ +[["pwran7","OP_BEGIN/OP_UNTIL: loop until the first 0x01 (nonP2SH)","<1> <1>","OP_BEGIN OP_DUP OP_UNTIL OP_DROP","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000025151000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000465766675",1], +["ll48n6","OP_BEGIN/OP_UNTIL: loop until the first 0x01 (P2SH20)","<1> <1>","OP_BEGIN OP_DUP OP_UNTIL OP_DROP","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000751510465766675000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a914b1a0d396c749da19214e584416f727d91dc1d33987",1], +["earn55","OP_BEGIN/OP_UNTIL: loop until the first 0x01 (P2SH32)","<1> <1>","OP_BEGIN OP_DUP OP_UNTIL OP_DROP","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000751510465766675000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2035ed540fc66538c78f0089d4c58ccfc6ddfd4a84dc016c7b8411998da8fac22087",1], +["m30e80","OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (nonP2SH)","<1> <0>","OP_BEGIN OP_DUP OP_UNTIL OP_DROP","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000025100000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000465766675",1], +["06ty9d","OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (P2SH20)","<1> <0>","OP_BEGIN OP_DUP OP_UNTIL OP_DROP","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000751000465766675000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a914b1a0d396c749da19214e584416f727d91dc1d33987",1], +["xf7k9u","OP_BEGIN/OP_UNTIL: infinite loops fail after exhausting repeated bytes limit (P2SH32)","<1> <0>","OP_BEGIN OP_DUP OP_UNTIL OP_DROP","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000751000465766675000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2035ed540fc66538c78f0089d4c58ccfc6ddfd4a84dc016c7b8411998da8fac22087",1], +["838k9p","OP_BEGIN/OP_UNTIL: Fibonacci to 13 (nonP2SH)","<6>","<0> <1> OP_ROT OP_BEGIN OP_1SUB OP_TOALTSTACK OP_SWAP OP_OVER OP_ADD OP_FROMALTSTACK OP_IFDUP OP_NOT OP_UNTIL OP_NIP <13> OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000156000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000001000517b658c6b7c78936c739166775d87",1], +["pqydxn","OP_BEGIN/OP_UNTIL: Fibonacci to 13 (P2SH20)","<6>","<0> <1> OP_ROT OP_BEGIN OP_1SUB OP_TOALTSTACK OP_SWAP OP_OVER OP_ADD OP_FROMALTSTACK OP_IFDUP OP_NOT OP_UNTIL OP_NIP <13> OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000012561000517b658c6b7c78936c739166775d87000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a914b7595f98a92e9923f66f1446eefdf3901766610a87",1], +["ug0w55","OP_BEGIN/OP_UNTIL: Fibonacci to 13 (P2SH32)","<6>","<0> <1> OP_ROT OP_BEGIN OP_1SUB OP_TOALTSTACK OP_SWAP OP_OVER OP_ADD OP_FROMALTSTACK OP_IFDUP OP_NOT OP_UNTIL OP_NIP <13> OP_EQUAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000012561000517b658c6b7c78936c739166775d87000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa203dd30a3417750f0fa56c3176e22f83c9ad5975ad2bc9a01cf081c9bf3008d50387",1]] \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.nonstandard_limits.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.nonstandard_limits.json new file mode 100644 index 00000000..1f49cd10 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.nonstandard_limits.json @@ -0,0 +1,4 @@ +{ +"a3h4p9":[260,208000,81141,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures, 41-byte commitment (nonP2SH)"], +"vjfze6":[240,192000,81122,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures, 41-byte commitment (nonP2SH)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.nonstandard_results.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.nonstandard_results.json new file mode 100644 index 00000000..a3af96c6 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.nonstandard_results.json @@ -0,0 +1,4 @@ +{ +"a3h4p9":"Transaction violates token validation: excessive token commitment length. A token commitment exceeds the consensus limit of 40 bytes. Excessive token commitment length: 41", +"vjfze6":"Transaction violates token validation: excessive token commitment length. A token commitment exceeds the consensus limit of 40 bytes. Excessive token commitment length: 41" +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.nonstandard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.nonstandard_stats.csv new file mode 100644 index 00000000..168f1433 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.nonstandard_stats.csv @@ -0,0 +1,3 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +a3h4p9,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures, 41-byte commitment (nonP2SH)",567,298,1,0,260,208000,81141,6,3,910,27,10,413,0 +vjfze6,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures, 41-byte commitment (nonP2SH)",547,298,1,0,240,192000,81122,6,3,840,27,10,394,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.standard_limits.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.standard_limits.json new file mode 100644 index 00000000..985a8d20 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.standard_limits.json @@ -0,0 +1,4 @@ +{ +"a3h4p9":[260,208000,84597,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures, 41-byte commitment (nonP2SH)"], +"vjfze6":[240,192000,84578,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures, 41-byte commitment (nonP2SH)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.standard_results.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.standard_results.json new file mode 100644 index 00000000..a3af96c6 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.standard_results.json @@ -0,0 +1,4 @@ +{ +"a3h4p9":"Transaction violates token validation: excessive token commitment length. A token commitment exceeds the consensus limit of 40 bytes. Excessive token commitment length: 41", +"vjfze6":"Transaction violates token validation: excessive token commitment length. A token commitment exceeds the consensus limit of 40 bytes. Excessive token commitment length: 41" +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.standard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.standard_stats.csv new file mode 100644 index 00000000..f0e7f2b9 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.standard_stats.csv @@ -0,0 +1,3 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +a3h4p9,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures, 41-byte commitment (nonP2SH)",567,298,1,0,260,208000,84597,6,3,130,27,10,413,0 +vjfze6,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures, 41-byte commitment (nonP2SH)",547,298,1,0,240,192000,84578,6,3,120,27,10,394,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.vmb_tests.json b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.vmb_tests.json new file mode 100644 index 00000000..eb9ea2b0 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_invalid/chip.p2s.vmb_tests.json @@ -0,0 +1,2 @@ +[["a3h4p9","Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures, 41-byte commitment (nonP2SH)","<0> ","<3> <0x04a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f> <0x04c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53> <0x0469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f> OP_3 OP_CHECKMULTISIG","0200000001010000000000000000000000000000000000000000000000000000000000000000000000db00483045022100eb6a82201caaaf6c13d6e25ea1e29791c627fee4c37c6d64bf3519c01bab04c20220187e2d790916995ee716344b7bbdc0119d6032ddcd351bf491889ceaeb63e68861483045022100a9c50fd23c1e7883347bc472dd82ea910f6e369a598f47eff814d00d46c453f602202fde0bfbf8eb11c52f22b4ab6bb08f424eef838d85947789f53e0013dff88e8a61473044022017d69242864eefa9da036e20d7e335ba32598225376db43ce1a022750c16dbe7022074fa6d06f1d9bdf4df975992ef8b9e734d34a712a8a453941bfdaa1d0775aa346100000000013705000000000000fd1e01ef04030201000000000000000000000000000000000000000000000000040302017229ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae00000000","016e07000000000000fd1e01ef04030201000000000000000000000000000000000000000000000000040302017229ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae"], +["vjfze6","Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures, 41-byte commitment (nonP2SH)","<0b111> ","<3> <0x04a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f> <0x04c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53> <0x0469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f> OP_3 OP_CHECKMULTISIG","0200000001010000000000000000000000000000000000000000000000000000000000000000000000c757416c3d8d9f3da44e602c4398001896b6741deca1180cfbf5e1103620cac20d194f6f5a28ff9285ac395f672fb87de4b8d03f617d5831a238a582d28a406e02c7a3614140a3c79578a38d0dbc63403478f5fd10e3dac37db02586c3aa55cd7c7684e5ecdca8d020f763f215ba4d080f2f70ec5e64a84fc0519e61f6506c0077a9f22369614142b9001b4a73858b7d5753e47fc7ccfd7147f187d326069bf720c95f0e11e71f7ecbea376284f4a538a9c8cc86ca7a44fdfb4cd2f086da85a52e79574098515c6100000000013705000000000000fd1e01ef04030201000000000000000000000000000000000000000000000000040302017229ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae00000000","016e07000000000000fd1e01ef04030201000000000000000000000000000000000000000000000000040302017229ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae"]] \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.nonstandard_limits.json b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.nonstandard_limits.json new file mode 100644 index 00000000..f498a82c --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.nonstandard_limits.json @@ -0,0 +1,4 @@ +{ +"3agzq4":[43,34400,201,"OP_EVAL: Works (nonP2SH)"], +"0ehr72":[45,36000,203,"OP_EVAL: Can be nested (nonP2SH)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.nonstandard_results.json b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.nonstandard_results.json new file mode 100644 index 00000000..2b48109d --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.nonstandard_results.json @@ -0,0 +1,4 @@ +{ +"3agzq4":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"0ehr72":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.nonstandard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.nonstandard_stats.csv new file mode 100644 index 00000000..c14e411b --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.nonstandard_stats.csv @@ -0,0 +1,3 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +3agzq4,"OP_EVAL: Works (nonP2SH)",213,45,2,1,43,34400,201,1,0,150,0,2,1,0 +0ehr72,"OP_EVAL: Can be nested (nonP2SH)",215,45,2,1,45,36000,203,1,0,157,0,2,3,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.standard_limits.json b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.standard_limits.json new file mode 100644 index 00000000..f498a82c --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.standard_limits.json @@ -0,0 +1,4 @@ +{ +"3agzq4":[43,34400,201,"OP_EVAL: Works (nonP2SH)"], +"0ehr72":[45,36000,203,"OP_EVAL: Can be nested (nonP2SH)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.standard_results.json b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.standard_results.json new file mode 100644 index 00000000..bd0b6969 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.standard_results.json @@ -0,0 +1,4 @@ +{ +"3agzq4":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN).", +"0ehr72":"Unable to verify standard transaction: standard transactions may only spend standard output types. Source output 1 is non-standard: locking bytecode does not match a standard pattern: P2PKH, P2PK, P2SH, P2MS, or arbitrary data (OP_RETURN)." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.standard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.standard_stats.csv new file mode 100644 index 00000000..d37d40e0 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.standard_stats.csv @@ -0,0 +1,3 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +3agzq4,"OP_EVAL: Works (nonP2SH)",213,45,2,1,43,34400,201,1,0,21,0,2,1,0 +0ehr72,"OP_EVAL: Can be nested (nonP2SH)",215,45,2,1,45,36000,203,1,0,22,0,2,3,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.vmb_tests.json b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.vmb_tests.json new file mode 100644 index 00000000..261a867b --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_nonstandard/chip.eval.vmb_tests.json @@ -0,0 +1,2 @@ +[["3agzq4","OP_EVAL: Works (nonP2SH)","< OP_1 >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e78500000000010000000000000000000000000000000000000000000000000000000000000001000000020151000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000162",1], +["0ehr72","OP_EVAL: Can be nested (nonP2SH)","< < OP_1 OP_EVAL > >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000403025162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac10270000000000000162",1]] \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.nonstandard_limits.json b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.nonstandard_limits.json new file mode 100644 index 00000000..bfaa0b1b --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.nonstandard_limits.json @@ -0,0 +1,6 @@ +{ +"upu678":[45,36000,771,"OP_EVAL: Works (P2SH20)"], +"wg3zzk":[45,36000,795,"OP_EVAL: Works (P2SH32)"], +"32pq0g":[47,37600,773,"OP_EVAL: Can be nested (P2SH20)"], +"mtedjn":[47,37600,797,"OP_EVAL: Can be nested (P2SH32)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.nonstandard_results.json b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.nonstandard_results.json new file mode 100644 index 00000000..f276d8e5 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.nonstandard_results.json @@ -0,0 +1,6 @@ +{ +"upu678":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"wg3zzk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"32pq0g":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"mtedjn":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.nonstandard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.nonstandard_stats.csv new file mode 100644 index 00000000..50e02aa5 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.nonstandard_stats.csv @@ -0,0 +1,5 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +upu678,"OP_EVAL: Works (P2SH20)",215,67,2,1,45,36000,771,1,0,157,2,6,43,0 +wg3zzk,"OP_EVAL: Works (P2SH32)",215,79,2,1,45,36000,795,1,0,157,2,6,67,0 +32pq0g,"OP_EVAL: Can be nested (P2SH20)",217,67,2,1,47,37600,773,1,0,164,2,6,45,0 +mtedjn,"OP_EVAL: Can be nested (P2SH32)",217,79,2,1,47,37600,797,1,0,164,2,6,69,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.standard_limits.json b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.standard_limits.json new file mode 100644 index 00000000..874c424e --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.standard_limits.json @@ -0,0 +1,6 @@ +{ +"upu678":[45,36000,1027,"OP_EVAL: Works (P2SH20)"], +"wg3zzk":[45,36000,1051,"OP_EVAL: Works (P2SH32)"], +"32pq0g":[47,37600,1029,"OP_EVAL: Can be nested (P2SH20)"], +"mtedjn":[47,37600,1053,"OP_EVAL: Can be nested (P2SH32)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.standard_results.json b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.standard_results.json new file mode 100644 index 00000000..f276d8e5 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.standard_results.json @@ -0,0 +1,6 @@ +{ +"upu678":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"wg3zzk":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"32pq0g":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation.", +"mtedjn":"Unable to verify transaction: error in evaluating input index 1: Program called an unassigned, reserved operation." +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.standard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.standard_stats.csv new file mode 100644 index 00000000..e2bb9dad --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.standard_stats.csv @@ -0,0 +1,5 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +upu678,"OP_EVAL: Works (P2SH20)",215,67,2,1,45,36000,1027,1,0,22,2,6,43,0 +wg3zzk,"OP_EVAL: Works (P2SH32)",215,79,2,1,45,36000,1051,1,0,22,2,6,67,0 +32pq0g,"OP_EVAL: Can be nested (P2SH20)",217,67,2,1,47,37600,1029,1,0,23,2,6,45,0 +mtedjn,"OP_EVAL: Can be nested (P2SH32)",217,79,2,1,47,37600,1053,1,0,23,2,6,69,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.vmb_tests.json b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.vmb_tests.json new file mode 100644 index 00000000..84bc59e6 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.eval.vmb_tests.json @@ -0,0 +1,4 @@ +[["upu678","OP_EVAL: Works (P2SH20)","< OP_1 >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000401510162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9140f4d7845db968f2a81b530b6f3c1d6246d4c7e0187",1], +["wg3zzk","OP_EVAL: Works (P2SH32)","< OP_1 >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785000000000100000000000000000000000000000000000000000000000000000000000000010000000401510162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2039361160903c6695c6804b7157c7bd10013e9ba89b1f954243bc8e3990b08db987",1], +["32pq0g","OP_EVAL: Can be nested (P2SH20)","< < OP_1 OP_EVAL > >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006030251620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000017a9140f4d7845db968f2a81b530b6f3c1d6246d4c7e0187",1], +["mtedjn","OP_EVAL: Can be nested (P2SH32)","< < OP_1 OP_EVAL > >","OP_EVAL","020000000201000000000000000000000000000000000000000000000000000000000000000000000064417dfb529d352908ee0a88a0074c216b09793d6aa8c94c7640bb4ced51eaefc75d0aef61f7685d0307491e2628da3d4f91e86329265a4a58ca27a41ec0b8910779c32103a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7850000000001000000000000000000000000000000000000000000000000000000000000000100000006030251620162000000000100000000000000000a6a08766d625f7465737400000000","0210270000000000001976a91460011c6bf3f1dd98cff576437b9d85de780f497488ac102700000000000023aa2039361160903c6695c6804b7157c7bd10013e9ba89b1f954243bc8e3990b08db987",1]] \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.nonstandard_limits.json b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.nonstandard_limits.json new file mode 100644 index 00000000..44b1da69 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.nonstandard_limits.json @@ -0,0 +1,4 @@ +{ +"nlslve":[259,207200,81140,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures (nonP2SH)"], +"20d42l":[240,192000,81122,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures (nonP2SH)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.nonstandard_results.json b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.nonstandard_results.json new file mode 100644 index 00000000..339fc51a --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.nonstandard_results.json @@ -0,0 +1,4 @@ +{ +"nlslve":true, +"20d42l":true +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.nonstandard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.nonstandard_stats.csv new file mode 100644 index 00000000..8babf4ef --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.nonstandard_stats.csv @@ -0,0 +1,3 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +nlslve,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures (nonP2SH)",565,297,1,0,259,207200,81140,6,3,906,27,10,412,0 +20d42l,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures (nonP2SH)",546,297,1,0,240,192000,81122,6,3,840,27,10,394,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.standard_limits.json b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.standard_limits.json new file mode 100644 index 00000000..04253d64 --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.standard_limits.json @@ -0,0 +1,4 @@ +{ +"nlslve":[259,207200,84596,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures (nonP2SH)"], +"20d42l":[240,192000,84578,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures (nonP2SH)"] +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.standard_results.json b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.standard_results.json new file mode 100644 index 00000000..339fc51a --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.standard_results.json @@ -0,0 +1,4 @@ +{ +"nlslve":true, +"20d42l":true +} \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.standard_stats.csv b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.standard_stats.csv new file mode 100644 index 00000000..fcca765d --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.standard_stats.csv @@ -0,0 +1,3 @@ +Test ID,Description,Transaction Length,UTXOs Length,UTXO Count,Tested Input Index,Density Control Length,Maximum Operation Cost,Operation Cost,Maximum SigChecks,SigChecks,Maximum Hash Digest Iterations,Hash Digest Iterations,Evaluated Instructions,Stack Pushed Bytes,Arithmetic Cost +nlslve,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures (nonP2SH)",565,297,1,0,259,207200,84596,6,3,129,27,10,412,0 +20d42l,"Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures (nonP2SH)",546,297,1,0,240,192000,84578,6,3,120,27,10,394,0 \ No newline at end of file diff --git a/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.vmb_tests.json b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.vmb_tests.json new file mode 100644 index 00000000..663c181b --- /dev/null +++ b/src/lib/vmb-tests/generated/bch_2025_standard/chip.p2s.vmb_tests.json @@ -0,0 +1,2 @@ +[["nlslve","Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures (nonP2SH)","<0> ","<3> <0x04a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f> <0x04c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53> <0x0469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f> OP_3 OP_CHECKMULTISIG","0200000001010000000000000000000000000000000000000000000000000000000000000000000000da0047304402205581d7a2c9d277282ccc919d677185cca3d29820b2d4f74213bc8cac462628cf02201af4e5c4ea5ee5184259d8f5229bbf7343c2fc552caef096f45c16b2b3e983f861483045022100beb9e62dfc13a0c0060354873ed2aa5cd9faa3b09b3256ae3e1fb185f1179a8a022031ff2da6a88d375f7f8bcd7d60500f65095f3fe152be0ff07c91109221d6c8eb614730440220422ed4136db06f007549f19601e23937af3d808c799ad89986680552f7c36a9d022056d0b0a1e97e25b8bc40ffb846ccc44559d752e1dbc8201689fd404cf838fab36100000000013405000000000000fd1d01ef04030201000000000000000000000000000000000000000000000000040302017228ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae00000000","016a07000000000000fd1d01ef04030201000000000000000000000000000000000000000000000000040302017228ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae"], +["20d42l","Pay to Script: Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures (nonP2SH)","<0b111> ","<3> <0x04a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f> <0x04c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53> <0x0469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f> OP_3 OP_CHECKMULTISIG","0200000001010000000000000000000000000000000000000000000000000000000000000000000000c75741fd1923149494b7fb1234bc77c219d08765b152eb17c2ba3d7efcb3b705faa46f2383c5da4d426e86f836a772669915896674beafe75b5ebaa2bc0fc1c8a7bc56614105b978b29c6cffc3f59b25b390549908324662f0b59e3d39b55c91c4035f6c1569146fdfeae1e8ef7fe471f49d38a50bbc58bc568834a425f1eb3ca773a9e7206141be0bc9365ae24f805c70e8c2bac75164fd7c4032c04e8590155b16cbd7fdd3e4e74f20f867c0264aaea9fd982b66325c76593b46f817d478c86ae0a140df6d846100000000013405000000000000fd1d01ef04030201000000000000000000000000000000000000000000000000040302017228ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae00000000","016a07000000000000fd1d01ef04030201000000000000000000000000000000000000000000000000040302017228ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccffffffffffffffff7f534104a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e7852d36fd6c935c2991135538d820cdabe8523cf0c2d5078f9070b6658b5e083f6f4104c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd4e56a5f51b754c2f35f95353ff5fd44855e6b28b39ab794d6b354dc2d3629e53410469fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f806935a40050f95ea2de0c9e277eb673c88931a774e03425fa513e5da4bf7459f53ae"]] \ No newline at end of file diff --git a/src/lib/vmb-tests/run-live-bch-vmb-test.spec.helper.ts b/src/lib/vmb-tests/run-live-bch-vmb-test.spec.helper.ts index 13c15b02..054d1ce7 100644 --- a/src/lib/vmb-tests/run-live-bch-vmb-test.spec.helper.ts +++ b/src/lib/vmb-tests/run-live-bch-vmb-test.spec.helper.ts @@ -3,20 +3,20 @@ // TODO: finish this simple wallet CLI import { randomBytes } from 'node:crypto'; -import { writeFileSync } from 'node:fs'; -import { resolve } from 'node:path'; import { assertSuccess, binsAreEqual, binToHex, cashAddressToLockingBytecode, + cashAssemblyToBin, createCompilerBch, - createVirtualMachineBch, + createVirtualMachineBch2025, decodeTransactionUnsafe, deriveHdPrivateNodeFromSeed, encodeHdPrivateKey, encodeTransaction, + hashTransaction, hdPrivateKeyToIdentifier, hdPrivateKeyToP2pkhCashAddress, hdPrivateKeyToP2pkhLockingBytecode, @@ -25,6 +25,8 @@ import { lockingBytecodeToBase58Address, lockingBytecodeToCashAddress, stringify, + stringifyDebugTraceSummary, + summarizeDebugTrace, walletTemplateToCompilerConfiguration, } from '../lib.js'; @@ -49,7 +51,7 @@ To generate an address, provide the CashAddress prefix and the xprv of the HD ke # Generate the transaction(s) ==================== Command: yarn wallet generate - E.g.: yarn wallet generate out/transactions.json xprv9s21ZrQH143K2JbpEjGU94NcdKSASB7LuXvJCTsxuENcGN1nVG7QjMnBZ6zZNcJaiJogsRaLaYFFjs48qt4Fg7y1GnmrchQt1zFNu6QVnta 020000... + E.g.: yarn wallet generate xprv9s21ZrQH143K2JbpEjGU94NcdKSASB7LuXvJCTsxuENcGN1nVG7QjMnBZ6zZNcJaiJogsRaLaYFFjs48qt4Fg7y1GnmrchQt1zFNu6QVnta 020000... For , provide the full, encoded funding transaction. The generate command will use the first output paying to index 0 of the provided address. `; @@ -153,7 +155,9 @@ if (typeof keyId === 'string') { console.log('\n', keyId); process.exit(1); } -const fundingTransaction = decodeTransactionUnsafe(hexToBin(arg3)); +const fundingTransactionBin = hexToBin(arg3); +const fundingTxId = hashTransaction(fundingTransactionBin); +const fundingTransaction = decodeTransactionUnsafe(fundingTransactionBin); const fundingLockingBytecode = hdPrivateKeyToP2pkhLockingBytecode({ addressIndex: fundingAddressIndex, hdPrivateKey, @@ -182,7 +186,8 @@ const fundingUtxo = fundingTransaction.outputs[fundingUtxoIndex]!; console.log('Funding UTXO:', stringify(fundingUtxo)); -const outputAddress = 'bitcoincash:qq2pq6z974lrdq8s0zkrl79efs3xap98fqvz9f30fl'; +// const outputAddress = 'bitcoincash:qq2pq6z974lrdq8s0zkrl79efs3xap98fqvz9f30fl'; +const outputAddress = 'bchtest:qrz7khw7pml90zzgzrf7ttdp934d56sxkyxgwhre99'; const outputLockingBytecode = cashAddressToLockingBytecode(outputAddress); if (typeof outputLockingBytecode === 'string') { console.log( @@ -192,18 +197,34 @@ if (typeof outputLockingBytecode === 'string') { } const fundingUtxoValue = Number(fundingUtxo.valueSatoshis); -const expectedInputTransactionSizeBytes = 1000; -const setupOutputValue = fundingUtxoValue - expectedInputTransactionSizeBytes; -const finalOutputValue = setupOutputValue - expectedInputTransactionSizeBytes; +const setupSizeBytes = 183; +const setupOutputValue = fundingUtxoValue - setupSizeBytes; +const testSizeBytes = 106; +const finalOutputValue = setupOutputValue - testSizeBytes; + +const setupTxId = + 'bec7a1507cc76495f005dcc71652cbb388c9adb10da7acdf89caa56c0c45da9e'; +const setupUtxoIndex = 0; + +const finalOutputBytecode = binToHex( + assertSuccess(cashAssemblyToBin('OP_RETURN <"BigInt">')), +); const configuration = walletTemplateToCompilerConfiguration({ entities: { owner: { variables: { key: { type: 'HdKey' } } } }, scenarios: { setupTx: { + data: { hdKeys: { hdPrivateKeys: { owner: hdPrivateKey } } }, sourceOutputs: [ { lockingBytecode: ['slot'], valueSatoshis: fundingUtxoValue }, ], transaction: { - inputs: [{ unlockingBytecode: ['slot'] }], + inputs: [ + { + outpointIndex: fundingUtxoIndex, + outpointTransactionHash: fundingTxId, + unlockingBytecode: ['slot'], + }, + ], outputs: [ { lockingBytecode: { script: 'testLock' }, @@ -213,14 +234,21 @@ const configuration = walletTemplateToCompilerConfiguration({ }, }, testSpend: { + data: { hdKeys: { hdPrivateKeys: { owner: hdPrivateKey } } }, sourceOutputs: [ { lockingBytecode: ['slot'], valueSatoshis: setupOutputValue }, ], transaction: { - inputs: [{ unlockingBytecode: ['slot'] }], + inputs: [ + { + outpointIndex: setupUtxoIndex, + outpointTransactionHash: setupTxId, + unlockingBytecode: ['slot'], + }, + ], outputs: [ { - lockingBytecode: binToHex(outputLockingBytecode.bytecode), + lockingBytecode: finalOutputBytecode, valueSatoshis: finalOutputValue, }, ], @@ -239,14 +267,19 @@ const configuration = walletTemplateToCompilerConfiguration({ script: '\n', unlocks: 'p2pkhLock', }, - - testLock: { lockingType: 'p2sh20', script: '' }, - testUnlock: { script: '<1>', unlocks: 'testLock' }, + testLock: { + lockingType: 'p2sh20', + script: + '<0xffffffffffffffff> OP_MUL <0x0100000000000000ffffffffffffff3f> OP_EQUAL', + }, + testUnlock: { + script: '<0xffffffffffffffff>', + unlocks: 'testLock', + }, }, - supported: ['BCH_2022_05'], + supported: ['BCH_2023_05', 'BCH_2025_05'], }); const compiler = createCompilerBch(configuration); - const setupTx = compiler.generateScenario({ debug: true, scenarioId: 'setupTx', @@ -264,7 +297,7 @@ if (typeof setupTx.scenario === 'string') { process.exit(1); } -const vm = createVirtualMachineBch(true); +const vm = createVirtualMachineBch2025(true); const firstProgram = { sourceOutputs: [fundingUtxo], transaction: setupTx.scenario.program.transaction, @@ -272,15 +305,83 @@ const firstProgram = { const testFirstTx = vm.verify(firstProgram); if (testFirstTx !== true) { console.log(`First transaction is invalid: ${testFirstTx}`); - vm.debug({ ...firstProgram, inputIndex: 0 }); + const trace = vm.debug({ ...firstProgram, inputIndex: fundingUtxoIndex }); + console.log(stringifyDebugTraceSummary(summarizeDebugTrace(trace))); + process.exit(1); +} + +const encodedSetupTx = encodeTransaction(setupTx.scenario.program.transaction); +const newSetupTxId = hashTransaction(encodedSetupTx); + +if (newSetupTxId !== setupTxId) { + console.error('Update "setupTxId" to:', newSetupTxId); process.exit(1); } -const encodedTx = encodeTransaction(setupTx.scenario.program.transaction); +if (setupSizeBytes !== encodedSetupTx.length) { + console.error( + `Set "setupSizeBytes" to the new value: ${encodedSetupTx.length}`, + ); + process.exit(1); +} -console.log(stringify(encodedTx)); +console.log(` +First TX ID: ${setupTxId} +Hex: ${binToHex(encodedSetupTx)} +`); -const outputAbsolutePath = `${resolve('temp')}/vmb_tests_live.json`; -writeFileSync(outputAbsolutePath, JSON.stringify(encodedTx), { - encoding: 'utf8', +const secondTx = compiler.generateScenario({ + debug: true, + scenarioId: 'testSpend', + unlockingScriptId: 'testUnlock', }); + +if (typeof secondTx === 'string') { + console.log(`Error while generating setupTransaction: ${secondTx}`); + process.exit(1); +} +if (typeof secondTx.scenario === 'string') { + console.log( + `Error while generating setupTransaction.scenario - ${secondTx.scenario}`, + ); + process.exit(1); +} + +// eslint-disable-next-line @typescript-eslint/no-non-null-assertion +const setupUtxo = setupTx.scenario.program.transaction.outputs[setupUtxoIndex]!; + +console.log('Setup UTXO:', stringify(setupUtxo)); + +const secondProgram = { + sourceOutputs: [setupUtxo], + transaction: secondTx.scenario.program.transaction, +}; + +const encodedSecondTx = encodeTransaction( + secondTx.scenario.program.transaction, +); +const secondTxId = hashTransaction(encodedSetupTx); + +console.log(` + Second TX ID: ${secondTxId} + Hex: ${binToHex(encodedSecondTx)} + `); + +console.log('verifying second transaction:'); + +const testSecondTx = vm.verify(secondProgram); + +const trace = vm.debug({ ...secondProgram, inputIndex: setupUtxoIndex }); +console.log(stringifyDebugTraceSummary(summarizeDebugTrace(trace))); + +if (testSecondTx !== true) { + console.log(`Second transaction is invalid: ${testSecondTx}`); + process.exit(1); +} + +if (testSizeBytes !== encodedSecondTx.length) { + console.error( + `Set "testSizeBytes" to the new value: ${encodedSecondTx.length}`, + ); + process.exit(1); +} diff --git a/src/lib/vmb-tests/sources/chip.eval.ts b/src/lib/vmb-tests/sources/chip.eval.ts new file mode 100644 index 00000000..db4ec90d --- /dev/null +++ b/src/lib/vmb-tests/sources/chip.eval.ts @@ -0,0 +1,65 @@ +import { range } from '../../format/format.js'; +import type { VmbTestDefinitionGroup } from '../../lib.js'; + +export default [ + [ + 'OP_EVAL', + [ + [``, `OP_EVAL`, 'Works', ['chip_eval']], + [``, `OP_EVAL OP_1`, 'Requires a stack item', ['chip_eval_invalid']], + [`< OP_EVAL>`, `OP_EVAL`, 'Can be nested', ['chip_eval']], + [`<< OP_EVAL> OP_EVAL>`, `OP_EVAL`, 'Can be nested (2x)', ['chip_eval']], + [ + `< ${range(99) + .map(() => '<') + .join('')} OP_1 ${range(99) + .map(() => '> OP_EVAL') + .join('')} >`, + `OP_EVAL`, + 'Can be nested (99x)', + ['chip_eval'], + ], + [ + `< ${range(100) + .map(() => '<') + .join('')} OP_1 ${range(100) + .map(() => '> OP_EVAL') + .join('')} >`, + `OP_EVAL`, + 'Control stack limited to depth of 100', + ['chip_eval_invalid'], + ], + [ + ``, + `${range(50) + .map(() => '<1> OP_IF <') + .join('')} OP_1 ${range(50) + .map(() => '> OP_EVAL OP_ENDIF') + .join('')}`, + 'Nesting with OP_IF/OP_ENDIF to depth 100', + ['chip_eval', '2026_nop2sh_nonstandard'], + ], + [ + ``, + `${range(50) + .map(() => '<1> OP_IF <') + .join('')} OP_EVAL ${range(50) + .map(() => '> OP_EVAL OP_ENDIF') + .join('')}`, + 'Nesting with OP_IF/OP_ENDIF to depth 100, attempt OP_EVAL at 100', + ['chip_eval_invalid'], + ], + [`< OP_EVAL>`, `OP_EVAL OP_4 OP_EQUAL`, '((2 2 +)) 4 =', ['chip_eval']], + [`< OP_EVAL>`, `OP_EVAL OP_0 OP_EQUAL`, '((2 2 -)) 0 =', ['chip_eval']], + [`< OP_EVAL>`, `OP_EVAL OP_0 OP_EQUAL`, '((2 2 +)) 0 = (reject)', ['chip_eval_invalid']], + [`< OP_EVAL>`, `OP_EVAL OP_4 OP_EQUAL`, '((2 2 -)) 4 = (reject)', ['chip_eval_invalid']], + [`< OP_EVAL OP_2 OP_ADD>`, `OP_EVAL OP_4 OP_EQUAL`, '((2) 2 +) 4 =', ['chip_eval']], + [` OP_EVAL OP_ADD>`, `OP_EVAL OP_4 OP_EQUAL`, '(2 (2) +) 4 =', ['chip_eval']], + [` OP_EVAL>`, `OP_EVAL OP_4 OP_EQUAL`, '(2 2 (+)) 4 =', ['chip_eval']], + [` OP_EVAL>`, `OP_EVAL OP_4 OP_EVAL`, '(2 2 (+)) 4 (=)', ['chip_eval']], + [``, ` OP_CAT OP_EVAL OP_4 OP_EQUAL`, 'Concatenated instructions', ['chip_eval']], + [``, `OP_EVAL OP_EQUAL`, 'Exposes evaluated instructions to OP_ACTIVEBYTECODE', ['chip_eval']], + [`<6>`, `<0> <1> OP_ROT OP_ENDIF OP_EVAL> OP_EVAL OP_NIP <13> OP_EQUAL`, 'Fibonacci to 13', ['chip_eval']], + ], + ], +] as const satisfies VmbTestDefinitionGroup[]; diff --git a/src/lib/vmb-tests/sources/chip.loops.ts b/src/lib/vmb-tests/sources/chip.loops.ts index c61c227e..584cd317 100644 --- a/src/lib/vmb-tests/sources/chip.loops.ts +++ b/src/lib/vmb-tests/sources/chip.loops.ts @@ -2,10 +2,11 @@ import type { VmbTestDefinitionGroup } from '../../lib.js'; export default [ [ - 'CHIP-2021-05-loops', + 'OP_BEGIN/OP_UNTIL', [ ['<1> <1>', 'OP_BEGIN OP_DUP OP_UNTIL OP_DROP', 'loop until the first 0x01', ['chip_loops']], ['<1> <0>', 'OP_BEGIN OP_DUP OP_UNTIL OP_DROP', 'infinite loops fail after exhausting repeated bytes limit', ['chip_loops_invalid']], + ['<6>', '<0> <1> OP_ROT OP_BEGIN OP_1SUB OP_TOALTSTACK OP_SWAP OP_OVER OP_ADD OP_FROMALTSTACK OP_IFDUP OP_NOT OP_UNTIL OP_NIP <13> OP_EQUAL', 'Fibonacci to 13', ['chip_loops']], ], ], ] as const satisfies VmbTestDefinitionGroup[]; diff --git a/src/lib/vmb-tests/sources/chip.p2s.ts b/src/lib/vmb-tests/sources/chip.p2s.ts new file mode 100644 index 00000000..2c769031 --- /dev/null +++ b/src/lib/vmb-tests/sources/chip.p2s.ts @@ -0,0 +1,74 @@ +import { secp256k1 } from '../../crypto/crypto.js'; +import { assertSuccess, binToHex, hexToBin } from '../../format/format.js'; +import type { VmbTestDefinitionGroup } from '../../lib.js'; + +const key1Compressed = hexToBin('03a524f43d6166ad3567f18b0a5c769c6ab4dc02149f4d5095ccf4e8ffa293e785'); +const key1Uncompressed = assertSuccess(secp256k1.uncompressPublicKey(key1Compressed)); +const key2Compressed = hexToBin('03c23083dccdc50247ebc5725c88d6d550cc49c9cb94e4bd4c485a1c6715a5dbfd'); +const key2Uncompressed = assertSuccess(secp256k1.uncompressPublicKey(key2Compressed)); +const key3Compressed = hexToBin('0369fb8ddd38ab04cfb912a76c1bde5c7d0c1415ff4caf199461878d5fb03dc3f8'); +const key3Uncompressed = assertSuccess(secp256k1.uncompressPublicKey(key3Compressed)); + +const longestTokenPrefix = { amount: '9223372036854775807', category: '0102030400000000000000000000000000000000000000000000000001020304', nft: { capability: 'minting', commitment: 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' } } as const; + +const oneBeyondLongestTokenCommitment2025 = { amount: '9223372036854775807', category: '0102030400000000000000000000000000000000000000000000000001020304', nft: { capability: 'minting', commitment: 'ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdd' } } as const; + +export default [ + [ + 'Pay to Script', + [ + [ + `<0> `, + `<3> <0x${binToHex(key1Uncompressed)}> <0x${binToHex(key2Uncompressed)}> <0x${binToHex(key3Uncompressed)}> OP_3 OP_CHECKMULTISIG`, + 'Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures', + ['nop2sh_standard', 'p2sh_ignore'], + { + sourceOutputs: [{ lockingBytecode: ['slot'], token: longestTokenPrefix, valueSatoshis: 1_898 }], + transaction: { + inputs: [{ unlockingBytecode: ['slot'] }], + outputs: [{ lockingBytecode: { script: ['copy'] }, token: longestTokenPrefix, valueSatoshis: 1_332 }], + }, + }, + ], + [ + `<0b111> `, + `<3> <0x${binToHex(key1Uncompressed)}> <0x${binToHex(key2Uncompressed)}> <0x${binToHex(key3Uncompressed)}> OP_3 OP_CHECKMULTISIG`, + 'Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures', + ['nop2sh_standard', 'p2sh_ignore'], + { + sourceOutputs: [{ lockingBytecode: ['slot'], token: longestTokenPrefix, valueSatoshis: 1_898 }], + transaction: { + inputs: [{ unlockingBytecode: ['slot'] }], + outputs: [{ lockingBytecode: { script: ['copy'] }, token: longestTokenPrefix, valueSatoshis: 1_332 }], + }, + }, + ], + [ + `<0> `, + `<3> <0x${binToHex(key1Uncompressed)}> <0x${binToHex(key2Uncompressed)}> <0x${binToHex(key3Uncompressed)}> OP_3 OP_CHECKMULTISIG`, + 'Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), ECDSA signatures, 41-byte commitment', + ['chip_p2s', 'nop2sh_standard', 'p2sh_ignore'], + { + sourceOutputs: [{ lockingBytecode: ['slot'], token: oneBeyondLongestTokenCommitment2025, valueSatoshis: 1_902 }], + transaction: { + inputs: [{ unlockingBytecode: ['slot'] }], + outputs: [{ lockingBytecode: { script: ['copy'] }, token: oneBeyondLongestTokenCommitment2025, valueSatoshis: 1_335 }], + }, + }, + ], + [ + `<0b111> `, + `<3> <0x${binToHex(key1Uncompressed)}> <0x${binToHex(key2Uncompressed)}> <0x${binToHex(key3Uncompressed)}> OP_3 OP_CHECKMULTISIG`, + 'Maximum length BCH_2025_05 standard UTXO and output (3-of-3 bare multisig, uncompressed keys), Schnorr signatures, 41-byte commitment', + ['chip_p2s', 'nop2sh_standard', 'p2sh_ignore'], + { + sourceOutputs: [{ lockingBytecode: ['slot'], token: oneBeyondLongestTokenCommitment2025, valueSatoshis: 1_902 }], + transaction: { + inputs: [{ unlockingBytecode: ['slot'] }], + outputs: [{ lockingBytecode: { script: ['copy'] }, token: oneBeyondLongestTokenCommitment2025, valueSatoshis: 1_335 }], + }, + }, + ], + ], + ], +] as const satisfies VmbTestDefinitionGroup[]; diff --git a/src/lib/vmb-tests/sources/chip.pow.ts b/src/lib/vmb-tests/sources/chip.pow.ts new file mode 100644 index 00000000..163a217c --- /dev/null +++ b/src/lib/vmb-tests/sources/chip.pow.ts @@ -0,0 +1,15 @@ +import type { VmbTestDefinitionGroup } from '../../lib.js'; + +export default [ + [ + 'OP_POW', + [ + ['<2>', '<0> OP_POW <1> OP_EQUAL', '2 ** 0 === 1', ['chip_pow']], + ['<2>', '<0> OP_POW', '2 ** 0', ['chip_pow']], + ['', 'OP_POW', 'No stack items', ['chip_pow_invalid']], + ['<2>', 'OP_POW', '1 stack item', ['chip_pow_invalid']], + ['<2>', '<32> OP_POW <4_294_967_296> OP_EQUAL', '2 ** 32', ['chip_pow']], + ['<3>', '<32> OP_POW <1_853_020_188_851_841> OP_EQUAL', '3 ** 32', ['chip_pow']], + ], + ], +] as const satisfies VmbTestDefinitionGroup[]; diff --git a/src/lib/vmb-tests/vmb-tests.spec.helper.ts b/src/lib/vmb-tests/vmb-tests.spec.helper.ts index 8fa8c94e..f30f82b6 100644 --- a/src/lib/vmb-tests/vmb-tests.spec.helper.ts +++ b/src/lib/vmb-tests/vmb-tests.spec.helper.ts @@ -52,10 +52,16 @@ export const vms = { ...baseVms, bch_chip_bigint_nonstandard: baseVms.bch_2025_nonstandard, bch_chip_bigint_standard: baseVms.bch_2025_standard, + bch_chip_eval_nonstandard: baseVms.bch_2026_nonstandard, + bch_chip_eval_standard: baseVms.bch_2026_standard, bch_chip_limits_nonstandard: baseVms.bch_2025_nonstandard, bch_chip_limits_standard: baseVms.bch_2025_standard, bch_chip_loops_nonstandard: baseVms.bch_2026_nonstandard, bch_chip_loops_standard: baseVms.bch_2026_standard, + bch_chip_p2s_nonstandard: baseVms.bch_2026_nonstandard, + bch_chip_p2s_standard: baseVms.bch_2026_standard, + bch_chip_pow_nonstandard: baseVms.bch_spec_nonstandard, + bch_chip_pow_standard: baseVms.bch_spec_standard, /* eslint-enable @typescript-eslint/naming-convention, camelcase */ }; export const isVm = (vmId: string): vmId is keyof typeof vms =>