Bitcoin ABC 0.32.4
P2P Digital Currency
test_iguana.py
Go to the documentation of this file.
1# Copyright (c) 2024 The Bitcoin developers
2# Distributed under the MIT software license, see the accompanying
3# file COPYING or http://www.opensource.org/licenses/mit-license.php.
4"""Test the Iguana Script debugger."""
5
6import os
7import subprocess
8
9from test_framework.hash import hash160
10from test_framework.key import ECKey
11from test_framework.messages import COutPoint, CTransaction, CTxIn
12from test_framework.script import (
13 OP_2DUP,
14 OP_ADD,
15 OP_CHECKSIG,
16 OP_CHECKSIGVERIFY,
17 OP_DROP,
18 OP_DUP,
19 OP_EQUAL,
20 OP_HASH160,
21 OP_NOP,
22 OP_NOT,
23 OP_TOALTSTACK,
24 CScript,
25)
26from test_framework.signature_hash import (
27 SIGHASH_ALL,
28 SIGHASH_FORKID,
29 SignatureHashForkId,
30)
31
32
33def iguana(*args, expected_stderr="", expected_returncode=None):
34 if expected_returncode is None:
35 expected_returncode = 255 if expected_stderr else 0
36
37 command = [os.environ["IGUANA_BIN"], *args]
38 if emulator := os.environ.get("EMULATOR", None):
39 command.insert(0, emulator)
40
41 child = subprocess.Popen(
42 command,
43 stdout=subprocess.PIPE,
44 stderr=subprocess.PIPE,
45 )
46 actual_stdout, actual_stderr = child.communicate()
47 assert actual_stderr.decode() == expected_stderr
48 assert child.returncode == expected_returncode
49 return actual_stdout.decode()
50
51
53 assert iguana("-version").startswith(
54 f"Iguana v{os.environ['CMAKE_PROJECT_VERSION']}"
55 )
56
57
59 assert iguana("-?").startswith("Usage: iguana")
60
61
63 iguana(
64 "-invalidarg",
65 expected_stderr="Error parsing command line arguments: Invalid parameter -invalidarg\n",
66 )
67
68
70 iguana(
71 "-format=doesntexist",
72 expected_stderr="Unsupported output format doesntexist\n",
73 )
74
75
77 tx = CTransaction()
78 iguana(
79 "-tx=" + tx.serialize().hex(),
80 "-inputindex=0",
81 "-scriptpubkey=",
82 "-value=0",
83 expected_stderr="Transaction doesn't have input index 0\n",
84 )
85
86
88 tx = CTransaction()
89 tx.vin = [CTxIn(COutPoint(), CScript([b"\x31", OP_DUP]))]
90
91 def run(fmt, expected_stderr):
92 return iguana(
93 "-tx=" + tx.serialize().hex(),
94 "-inputindex=0",
95 "-scriptpubkey=",
96 "-value=0",
97 f"-format={fmt}",
98 expected_stderr=expected_stderr,
99 expected_returncode=255,
100 )
101
102 assert (
103 run(
104 "human",
105 expected_stderr="scriptSig failed execution: Only push operators allowed in signatures\n",
106 )
107 == """\
108======= scriptSig =======
109 Stack (0 items): (empty stack)
110OP 0: 0x01 31
111 Stack (1 item):
112 0: 31
113OP 1: OP_DUP
114"""
115 )
116 assert (
117 run("csv", "")
118 == """\
119scriptName,index,opcode,stack 0,
120scriptSig,0,0x31,"31",
121scriptSig,1,OP_DUP,
122scriptSig failed execution: Only push operators allowed in signatures
123"""
124 )
125
126
128 tx = CTransaction()
129 tx.vin = [CTxIn(COutPoint(), CScript([b"\x31"]))]
130
131 def run(fmt):
132 return iguana(
133 "-tx=" + tx.serialize().hex(),
134 "-inputindex=0",
135 "-scriptpubkey=",
136 "-value=0",
137 f"-format={fmt}",
138 )
139
140 assert (
141 run("human")
142 == """\
143======= scriptSig =======
144 Stack (0 items): (empty stack)
145OP 0: 0x01 31
146======= scriptPubKey =======
147 Stack (1 item):
148 0: 31
149Script executed without errors
150"""
151 )
152 assert (
153 run("csv")
154 == """\
155scriptName,index,opcode,stack 0,
156scriptSig,0,0x31,"31",
157#sigChecks,0
158Script executed without errors
159"""
160 )
161
162
164 tx = CTransaction()
165 tx.vin = [CTxIn(COutPoint(), CScript(b"\x01"))]
166
167 def run(fmt, expected_stderr):
168 return iguana(
169 "-tx=" + tx.serialize().hex(),
170 "-inputindex=0",
171 "-scriptpubkey=",
172 "-value=0",
173 f"-format={fmt}",
174 expected_stderr=expected_stderr,
175 expected_returncode=255,
176 )
177
178 assert (
179 run(
180 "human",
181 expected_stderr="scriptSig failed execution: Invalidly encoded opcode\n",
182 )
183 == """\
184======= scriptSig =======
185 Stack (0 items): (empty stack)
186"""
187 )
188 assert (
189 run("csv", "")
190 == """\
191scriptName,index,opcode,
192scriptSig failed execution: Invalidly encoded opcode
193"""
194 )
195
196
198 tx = CTransaction()
199 tx.vin = [CTxIn(COutPoint(), CScript([b"\x31", b"\x32"]))]
200 script_pub_key = CScript([OP_ADD, b"\x63", OP_EQUAL])
201
202 def run(fmt):
203 return iguana(
204 "-tx=" + tx.serialize().hex(),
205 "-inputindex=0",
206 "-scriptpubkey=" + script_pub_key.hex(),
207 "-value=0",
208 f"-format={fmt}",
209 )
210
211 assert (
212 run("human")
213 == """\
214======= scriptSig =======
215 Stack (0 items): (empty stack)
216OP 0: 0x01 31
217 Stack (1 item):
218 0: 31
219OP 1: 0x01 32
220======= scriptPubKey =======
221 Stack (2 items):
222 0: 31
223 1: 32
224OP 0: OP_ADD
225 Stack (1 item):
226 0: 63
227OP 1: 0x01 63
228 Stack (2 items):
229 0: 63
230 1: 63
231OP 2: OP_EQUAL
232 Stack (1 item):
233 0: 01
234Script executed without errors
235"""
236 )
237 assert (
238 run("csv")
239 == """\
240scriptName,index,opcode,stack 0,stack 1,
241scriptSig,0,0x31,"31",
242scriptSig,1,0x32,"31","32",
243scriptPubKey,0,OP_ADD,"63",
244scriptPubKey,1,0x63,"63","63",
245scriptPubKey,2,OP_EQUAL,"01",
246#sigChecks,0
247Script executed without errors
248"""
249 )
250
251
253 tx = CTransaction()
254 tx.vin = [CTxIn(COutPoint(), CScript([b"\x31"]))]
255 script_pub_key = CScript([OP_EQUAL])
256 stdout = iguana(
257 "-tx=" + tx.serialize().hex(),
258 "-inputindex=0",
259 "-scriptpubkey=" + script_pub_key.hex(),
260 "-value=0",
261 expected_stderr="scriptPubKey failed execution: Operation not valid with the current stack size\n",
262 )
263 assert (
264 stdout
265 == """\
266======= scriptSig =======
267 Stack (0 items): (empty stack)
268OP 0: 0x01 31
269======= scriptPubKey =======
270 Stack (1 item):
271 0: 31
272OP 0: OP_EQUAL
273"""
274 )
275
276
278 tx = CTransaction()
279 tx.vin = [CTxIn(COutPoint(), CScript([b"\x31"]))]
280 script_pub_key = CScript([OP_DROP])
281 stdout = iguana(
282 "-tx=" + tx.serialize().hex(),
283 "-inputindex=0",
284 "-scriptpubkey=" + script_pub_key.hex(),
285 "-value=0",
286 expected_stderr="scriptPubKey failed execution: Script evaluated without error but finished with a false/empty top stack element\n",
287 )
288 assert (
289 stdout
290 == """\
291======= scriptSig =======
292 Stack (0 items): (empty stack)
293OP 0: 0x01 31
294======= scriptPubKey =======
295 Stack (1 item):
296 0: 31
297OP 0: OP_DROP
298"""
299 )
300
301
303 tx = CTransaction()
304 tx.vin = [CTxIn(COutPoint(), CScript([b"\x31"]))]
305 script_pub_key = CScript([OP_NOT])
306 stdout = iguana(
307 "-tx=" + tx.serialize().hex(),
308 "-inputindex=0",
309 "-scriptpubkey=" + script_pub_key.hex(),
310 "-value=0",
311 expected_stderr="scriptPubKey failed execution: Script evaluated without error but finished with a false/empty top stack element\n",
312 )
313 assert (
314 stdout
315 == """\
316======= scriptSig =======
317 Stack (0 items): (empty stack)
318OP 0: 0x01 31
319======= scriptPubKey =======
320 Stack (1 item):
321 0: 31
322OP 0: OP_NOT
323"""
324 )
325
326
328 tx = CTransaction()
329 script_pub_key = CScript([1])
330 tx.vin = [CTxIn(COutPoint(), CScript([0]))]
331 stdout = iguana(
332 "-tx=" + tx.serialize().hex(),
333 "-inputindex=0",
334 "-scriptpubkey=" + script_pub_key.hex(),
335 "-value=0",
336 expected_stderr="scriptPubKey failed execution: Stack size must be exactly one after execution\n",
337 )
338 assert (
339 stdout
340 == """\
341======= scriptSig =======
342 Stack (0 items): (empty stack)
343OP 0: OP_0
344======= scriptPubKey =======
345 Stack (1 item):
346 0: ""
347OP 0: OP_1
348 Stack (2 items):
349 0: ""
350 1: 01
351"""
352 )
353
354
356 redeem_script = CScript([OP_TOALTSTACK, b"\x63", OP_EQUAL])
357 tx = CTransaction()
358 tx.vin = [CTxIn(COutPoint(), CScript([b"\x63", b"alt!", bytes(redeem_script)]))]
359 script_hash = hash160(redeem_script)
360 script_pub_key = CScript([OP_HASH160, script_hash, OP_EQUAL])
361
362 def run(fmt):
363 return iguana(
364 "-tx=" + tx.serialize().hex(),
365 "-inputindex=0",
366 "-scriptpubkey=" + script_pub_key.hex(),
367 "-value=0",
368 f"-format={fmt}",
369 )
370
371 assert (
372 run("human")
373 == f"""\
374======= scriptSig =======
375 Stack (0 items): (empty stack)
376OP 0: 0x01 63
377 Stack (1 item):
378 0: 63
379OP 1: 0x04 {b"alt!".hex()}
380 Stack (2 items):
381 0: 63
382 1: {b"alt!".hex()}
383OP 2: 0x04 {redeem_script.hex()}
384======= scriptPubKey =======
385 Stack (3 items):
386 0: 63
387 1: {b"alt!".hex()}
388 2: {redeem_script.hex()}
389OP 0: OP_HASH160
390 Stack (3 items):
391 0: 63
392 1: {b"alt!".hex()}
393 2: {script_hash.hex()}
394OP 1: 0x14 {script_hash.hex()}
395 Stack (4 items):
396 0: 63
397 1: {b"alt!".hex()}
398 2: {script_hash.hex()}
399 3: {script_hash.hex()}
400OP 2: OP_EQUAL
401 Stack (3 items):
402 0: 63
403 1: {b"alt!".hex()}
404 2: 01
405======= redeemScript =======
406 Stack (2 items):
407 0: 63
408 1: {b"alt!".hex()}
409OP 0: OP_TOALTSTACK
410 Stack (1 item):
411 0: 63
412 Altstack (1 item):
413 0: {b"alt!".hex()}
414OP 1: 0x01 63
415 Stack (2 items):
416 0: 63
417 1: 63
418 Altstack (1 item):
419 0: {b"alt!".hex()}
420OP 2: OP_EQUAL
421 Stack (1 item):
422 0: 01
423 Altstack (1 item):
424 0: {b"alt!".hex()}
425Script executed without errors
426"""
427 )
428 assert (
429 run("csv")
430 == f"""\
431scriptName,index,opcode,stack 0,stack 1,stack 2,stack 3,altstack 0,
432scriptSig,0,0x63,"63",
433scriptSig,1,0x{b"alt!".hex()},"63","{b"alt!".hex()}",
434scriptSig,2,0x{redeem_script.hex()},"63","{b"alt!".hex()}","{redeem_script.hex()}",
435scriptPubKey,0,OP_HASH160,"63","{b"alt!".hex()}","{script_hash.hex()}",
436scriptPubKey,1,0x{script_hash.hex()},"63","{b"alt!".hex()}","{script_hash.hex()}","{script_hash.hex()}",
437scriptPubKey,2,OP_EQUAL,"63","{b"alt!".hex()}","01",
438redeemScript,0,OP_TOALTSTACK,"63",,,,"{b"alt!".hex()}",
439redeemScript,1,0x63,"63","63",,,"{b"alt!".hex()}",
440redeemScript,2,OP_EQUAL,"01",,,,"{b"alt!".hex()}",
441#sigChecks,0
442Script executed without errors
443"""
444 )
445
446
448 redeem_script = CScript([OP_CHECKSIG])
449 tx = CTransaction()
450 tx.vin = [CTxIn(COutPoint(), CScript([b"wrong", b"sig", bytes(redeem_script)]))]
451 script_pub_key = CScript([OP_HASH160, hash160(redeem_script), OP_EQUAL])
452 stdout = iguana(
453 "-tx=" + tx.serialize().hex(),
454 "-inputindex=0",
455 "-scriptpubkey=" + script_pub_key.hex(),
456 "-value=0",
457 expected_stderr="redeemScript failed execution: Non-canonical DER signature\n",
458 )
459 assert (
460 stdout
461 == """\
462======= scriptSig =======
463 Stack (0 items): (empty stack)
464OP 0: 0x05 77726f6e67
465 Stack (1 item):
466 0: 77726f6e67
467OP 1: 0x03 736967
468 Stack (2 items):
469 0: 77726f6e67
470 1: 736967
471OP 2: 0x01 ac
472======= scriptPubKey =======
473 Stack (3 items):
474 0: 77726f6e67
475 1: 736967
476 2: ac
477OP 0: OP_HASH160
478 Stack (3 items):
479 0: 77726f6e67
480 1: 736967
481 2: 17be79cf51aa88feebb0a25e9d6a153ead585e59
482OP 1: 0x14 17be79cf51aa88feebb0a25e9d6a153ead585e59
483 Stack (4 items):
484 0: 77726f6e67
485 1: 736967
486 2: 17be79cf51aa88feebb0a25e9d6a153ead585e59
487 3: 17be79cf51aa88feebb0a25e9d6a153ead585e59
488OP 2: OP_EQUAL
489 Stack (3 items):
490 0: 77726f6e67
491 1: 736967
492 2: 01
493======= redeemScript =======
494 Stack (2 items):
495 0: 77726f6e67
496 1: 736967
497OP 0: OP_CHECKSIG
498"""
499 )
500
501
503 redeem_script = CScript([OP_ADD])
504 tx = CTransaction()
505 tx.vin = [
506 CTxIn(COutPoint(), CScript([b"111111111", b"222222222", bytes(redeem_script)]))
507 ]
508 script_hash = hash160(redeem_script)
509 script_pub_key = CScript([OP_HASH160, script_hash, OP_EQUAL])
510 stdout = iguana(
511 "-tx=" + tx.serialize().hex(),
512 "-inputindex=0",
513 "-scriptpubkey=" + script_pub_key.hex(),
514 "-value=0",
515 expected_stderr="redeemScript failed execution: Integer overflow\n",
516 )
517 assert (
518 stdout
519 == f"""\
520======= scriptSig =======
521 Stack (0 items): (empty stack)
522OP 0: 0x09 313131313131313131
523 Stack (1 item):
524 0: 313131313131313131
525OP 1: 0x09 323232323232323232
526 Stack (2 items):
527 0: 313131313131313131
528 1: 323232323232323232
529OP 2: 0x01 93
530======= scriptPubKey =======
531 Stack (3 items):
532 0: 313131313131313131
533 1: 323232323232323232
534 2: 93
535OP 0: OP_HASH160
536 Stack (3 items):
537 0: 313131313131313131
538 1: 323232323232323232
539 2: {script_hash.hex()}
540OP 1: 0x14 {script_hash.hex()}
541 Stack (4 items):
542 0: 313131313131313131
543 1: 323232323232323232
544 2: {script_hash.hex()}
545 3: {script_hash.hex()}
546OP 2: OP_EQUAL
547 Stack (3 items):
548 0: 313131313131313131
549 1: 323232323232323232
550 2: 01
551======= redeemScript =======
552 Stack (2 items):
553 0: 313131313131313131
554 1: 323232323232323232
555OP 0: OP_ADD
556"""
557 )
558
559
561 redeem_script = CScript([OP_NOP])
562 tx = CTransaction()
563 tx.vin = [CTxIn(COutPoint(), CScript([bytes(redeem_script)]))]
564 script_pub_key = CScript([OP_HASH160, hash160(redeem_script), OP_EQUAL])
565 stdout = iguana(
566 "-tx=" + tx.serialize().hex(),
567 "-inputindex=0",
568 "-scriptpubkey=" + script_pub_key.hex(),
569 "-value=0",
570 expected_stderr="redeemScript failed execution: Script evaluated without error but finished with a false/empty top stack element\n",
571 )
572 assert (
573 stdout
574 == """\
575======= scriptSig =======
576 Stack (0 items): (empty stack)
577OP 0: 0x01 61
578======= scriptPubKey =======
579 Stack (1 item):
580 0: 61
581OP 0: OP_HASH160
582 Stack (1 item):
583 0: 994355199e516ff76c4fa4aab39337b9d84cf12b
584OP 1: 0x14 994355199e516ff76c4fa4aab39337b9d84cf12b
585 Stack (2 items):
586 0: 994355199e516ff76c4fa4aab39337b9d84cf12b
587 1: 994355199e516ff76c4fa4aab39337b9d84cf12b
588OP 2: OP_EQUAL
589 Stack (1 item):
590 0: 01
591======= redeemScript =======
592 Stack (0 items): (empty stack)
593OP 0: OP_NOP
594"""
595 )
596
597
599 redeem_script = CScript([0])
600 tx = CTransaction()
601 tx.vin = [CTxIn(COutPoint(), CScript([bytes(redeem_script)]))]
602 script_pub_key = CScript([OP_HASH160, hash160(redeem_script), OP_EQUAL])
603 stdout = iguana(
604 "-tx=" + tx.serialize().hex(),
605 "-inputindex=0",
606 "-scriptpubkey=" + script_pub_key.hex(),
607 "-value=0",
608 expected_stderr="redeemScript failed execution: Script evaluated without error but finished with a false/empty top stack element\n",
609 )
610 assert (
611 stdout
612 == """\
613======= scriptSig =======
614 Stack (0 items): (empty stack)
615OP 0: 0x01 00
616======= scriptPubKey =======
617 Stack (1 item):
618 0: 00
619OP 0: OP_HASH160
620 Stack (1 item):
621 0: 9f7fd096d37ed2c0e3f7f0cfc924beef4ffceb68
622OP 1: 0x14 9f7fd096d37ed2c0e3f7f0cfc924beef4ffceb68
623 Stack (2 items):
624 0: 9f7fd096d37ed2c0e3f7f0cfc924beef4ffceb68
625 1: 9f7fd096d37ed2c0e3f7f0cfc924beef4ffceb68
626OP 2: OP_EQUAL
627 Stack (1 item):
628 0: 01
629======= redeemScript =======
630 Stack (0 items): (empty stack)
631OP 0: OP_0
632"""
633 )
634
635
637 redeem_script = CScript([0, 1])
638 tx = CTransaction()
639 tx.vin = [CTxIn(COutPoint(), CScript([bytes(redeem_script)]))]
640 script_pub_key = CScript([OP_HASH160, hash160(redeem_script), OP_EQUAL])
641 stdout = iguana(
642 "-tx=" + tx.serialize().hex(),
643 "-inputindex=0",
644 "-scriptpubkey=" + script_pub_key.hex(),
645 "-value=0",
646 expected_stderr="redeemScript failed execution: Stack size must be exactly one after execution\n",
647 )
648 assert (
649 stdout
650 == """\
651======= scriptSig =======
652 Stack (0 items): (empty stack)
653OP 0: 0x02 0051
654======= scriptPubKey =======
655 Stack (1 item):
656 0: 0051
657OP 0: OP_HASH160
658 Stack (1 item):
659 0: 5cbe818a2be9df5479d201af59df9c0bdfaaf21e
660OP 1: 0x14 5cbe818a2be9df5479d201af59df9c0bdfaaf21e
661 Stack (2 items):
662 0: 5cbe818a2be9df5479d201af59df9c0bdfaaf21e
663 1: 5cbe818a2be9df5479d201af59df9c0bdfaaf21e
664OP 2: OP_EQUAL
665 Stack (1 item):
666 0: 01
667======= redeemScript =======
668 Stack (0 items): (empty stack)
669OP 0: OP_0
670 Stack (1 item):
671 0: ""
672OP 1: OP_1
673 Stack (2 items):
674 0: ""
675 1: 01
676"""
677 )
678
679
681 key = ECKey()
682 key.set(b"12345678" * 4, True)
683 redeem_script = CScript([OP_2DUP, OP_CHECKSIGVERIFY] * 3 + [OP_CHECKSIG])
684 script_hash = hash160(redeem_script)
685 script_pub_key = CScript([OP_HASH160, script_hash, OP_EQUAL])
686 tx = CTransaction()
687 tx.vin = [CTxIn(COutPoint())]
688 amount = 1999
689 sighash = SignatureHashForkId(
690 redeem_script, tx, 0, SIGHASH_ALL | SIGHASH_FORKID, amount
691 )
692 sig = key.sign_schnorr(sighash) + b"\x41"
693 pubkey = key.get_pubkey().get_bytes()
694 tx.vin[0].scriptSig = CScript([sig, pubkey, bytes(redeem_script)])
695 stdout = iguana(
696 "-tx=" + tx.serialize().hex(),
697 "-inputindex=0",
698 "-scriptpubkey=" + script_pub_key.hex(),
699 "-value=1999",
700 expected_stderr="redeemScript failed execution: Input SigChecks limit exceeded\n",
701 )
702 assert (
703 stdout
704 == f"""\
705======= scriptSig =======
706 Stack (0 items): (empty stack)
707OP 0: 0x41 {sig.hex()}
708 Stack (1 item):
709 0: {sig.hex()}
710OP 1: 0x21 {pubkey.hex()}
711 Stack (2 items):
712 0: {sig.hex()}
713 1: {pubkey.hex()}
714OP 2: 0x07 {redeem_script.hex()}
715======= scriptPubKey =======
716 Stack (3 items):
717 0: {sig.hex()}
718 1: {pubkey.hex()}
719 2: {redeem_script.hex()}
720OP 0: OP_HASH160
721 Stack (3 items):
722 0: {sig.hex()}
723 1: {pubkey.hex()}
724 2: {script_hash.hex()}
725OP 1: 0x14 {script_hash.hex()}
726 Stack (4 items):
727 0: {sig.hex()}
728 1: {pubkey.hex()}
729 2: {script_hash.hex()}
730 3: {script_hash.hex()}
731OP 2: OP_EQUAL
732 Stack (3 items):
733 0: {sig.hex()}
734 1: {pubkey.hex()}
735 2: 01
736======= redeemScript =======
737 Stack (2 items):
738 0: {sig.hex()}
739 1: {pubkey.hex()}
740OP 0: OP_2DUP
741 Stack (4 items):
742 0: {sig.hex()}
743 1: {pubkey.hex()}
744 2: {sig.hex()}
745 3: {pubkey.hex()}
746OP 1: OP_CHECKSIGVERIFY
747 Stack (2 items):
748 0: {sig.hex()}
749 1: {pubkey.hex()}
750OP 2: OP_2DUP
751 Stack (4 items):
752 0: {sig.hex()}
753 1: {pubkey.hex()}
754 2: {sig.hex()}
755 3: {pubkey.hex()}
756OP 3: OP_CHECKSIGVERIFY
757 Stack (2 items):
758 0: {sig.hex()}
759 1: {pubkey.hex()}
760OP 4: OP_2DUP
761 Stack (4 items):
762 0: {sig.hex()}
763 1: {pubkey.hex()}
764 2: {sig.hex()}
765 3: {pubkey.hex()}
766OP 5: OP_CHECKSIGVERIFY
767 Stack (2 items):
768 0: {sig.hex()}
769 1: {pubkey.hex()}
770OP 6: OP_CHECKSIG
771 Stack (1 item):
772 0: 01
773Number of sigChecks: 4
774"""
775 )
def test_script_pub_key_empty_stack()
Definition: test_iguana.py:277
def test_script_sig_invalid_opcode_encoding()
Definition: test_iguana.py:163
def test_script_pub_key_false_stack()
Definition: test_iguana.py:302
def test_redeem_script_false()
Definition: test_iguana.py:598
def test_help()
Definition: test_iguana.py:58
def test_script_pub_key_success()
Definition: test_iguana.py:197
def test_parse_error()
Definition: test_iguana.py:62
def test_redeem_script_error()
Definition: test_iguana.py:447
def test_redeem_script_success()
Definition: test_iguana.py:355
def test_version()
Definition: test_iguana.py:52
def test_sig_push_only()
Definition: test_iguana.py:87
def test_redeem_script_cleanstack()
Definition: test_iguana.py:636
def test_invalid_format()
Definition: test_iguana.py:69
def test_redeem_script_exception()
Definition: test_iguana.py:502
def test_script_sig_success()
Definition: test_iguana.py:127
def test_redeem_script_input_sigchecks()
Definition: test_iguana.py:680
def test_script_pub_key_failure()
Definition: test_iguana.py:252
def test_script_pub_key_cleanstack()
Definition: test_iguana.py:327
def test_invalid_inputindex()
Definition: test_iguana.py:76
def test_redeem_script_empty_stack()
Definition: test_iguana.py:560
def iguana(*args, expected_stderr="", expected_returncode=None)
Definition: test_iguana.py:33