MCPcopy Index your code
hub / github.com/petertodd/python-bitcoinlib / _BinOp

Function _BinOp

bitcoin/core/scripteval.py:285–352  ·  view source on GitHub ↗
(opcode, stack, err_raiser)

Source from the content-addressed store, hash-verified

283}
284
285def _BinOp(opcode, stack, err_raiser):
286 if len(stack) < 2:
287 err_raiser(MissingOpArgumentsError, opcode, stack, 2)
288
289 bn2 = _CastToBigNum(stack[-1], err_raiser)
290 bn1 = _CastToBigNum(stack[-2], err_raiser)
291
292 # We don't pop the stack yet so that OP_NUMEQUALVERIFY can raise
293 # VerifyOpFailedError with a correct stack.
294
295 if opcode == OP_ADD:
296 bn = bn1 + bn2
297
298 elif opcode == OP_SUB:
299 bn = bn1 - bn2
300
301 elif opcode == OP_BOOLAND:
302 bn = int(bn1 != 0 and bn2 != 0)
303
304 elif opcode == OP_BOOLOR:
305 bn = int(bn1 != 0 or bn2 != 0)
306
307 elif opcode == OP_NUMEQUAL:
308 bn = int(bn1 == bn2)
309
310 elif opcode == OP_NUMEQUALVERIFY:
311 bn = int(bn1 == bn2)
312 if not bn:
313 err_raiser(VerifyOpFailedError, opcode)
314 else:
315 # No exception, so time to pop the stack
316 stack.pop()
317 stack.pop()
318 return
319
320 elif opcode == OP_NUMNOTEQUAL:
321 bn = int(bn1 != bn2)
322
323 elif opcode == OP_LESSTHAN:
324 bn = int(bn1 < bn2)
325
326 elif opcode == OP_GREATERTHAN:
327 bn = int(bn1 > bn2)
328
329 elif opcode == OP_LESSTHANOREQUAL:
330 bn = int(bn1 <= bn2)
331
332 elif opcode == OP_GREATERTHANOREQUAL:
333 bn = int(bn1 >= bn2)
334
335 elif opcode == OP_MIN:
336 if bn1 < bn2:
337 bn = bn1
338 else:
339 bn = bn2
340
341 elif opcode == OP_MAX:
342 if bn1 > bn2:

Callers 1

_EvalScriptFunction · 0.85

Calls 2

err_raiserFunction · 0.85
_CastToBigNumFunction · 0.85

Tested by

no test coverage detected