BIP-379: add test vectors from rust-miniscript #2240

pull guggero wants to merge 1 commits into bitcoin:master from guggero:bip379-test-vectors changing 16 files +76076 −1
  1. guggero commented at 9:11 AM on August 6, 2026: contributor

    The BIP-379 currently has a TBD in the test vector section. I have extracted a bunch of test vectors from the rust-miniscript project, either directly or by slightly modifying test code to dump them into text/TSV files. They have been very helpful for re-implementation in another language, so I think they should be made easily available here.

  2. jonatack added the label Proposed BIP modification on Aug 6, 2026
  3. jonatack added the label Pending acceptance on Aug 6, 2026
  4. jonatack commented at 6:29 AM on August 7, 2026: member

    Concept ACK. It may be handy to provide a file here that runs/verifies the test vectors.

  5. bip379: add test vectors from rust-miniscript 9334aa2168
  6. guggero force-pushed on Aug 7, 2026
  7. guggero commented at 8:58 AM on August 7, 2026: contributor

    Concept ACK. It may be handy to provide a file here that runs/verifies the test vectors.

    That's a great idea. I've added that in the latest push. Output looks like this:

    $ cd bip-0379; go run main.go
    Checking the BIP379 test vectors in . against
    github.com/btcsuite/btcd/descriptors/miniscript.
    
    Testing vectors in valid_from_alloy.txt       [positive]: 5896/5896 done (type column not compared)
    Testing vectors in valid_8f1e8_from_alloy.txt [positive]: 3492/3492 done (type column not compared)
    Testing vectors in malleable_from_alloy.txt   [positive/negative]: 7024/7024 + 7024/7024 done
    Testing vectors in conflict_from_alloy.txt    [positive]: 1773/1773 done (1586 of them are rejected by the sanity checks)
    Testing vectors in edge_cases.txt             [positive]: 42/42 done
    Testing vectors in opcodes.txt                [positive]: 18185/18185 done (type and op count columns not compared)
    Testing vectors in invalid.txt                [negative]: 5574/5574 done
    Testing vectors in props_from_rust.tsv        [positive]: 8198/8198 done (op_count and exec_stack columns not compared)
    Testing vectors in props_from_rust_tap.tsv    [positive/negative]: 6728/6728 + 1470/1470 done (op_count and exec_stack columns not compared)
    Testing vectors in scripts_from_rust.tsv      [positive]: 8198/8198 done
    Testing vectors in scripts_from_rust_tap.tsv  [positive/negative]: 6728/6728 + 1470/1470 done
    Testing vectors in redeem.json                [positive/negative]: 12/12 + 34/34 done (each spend is executed in the script engine)
    
    All 81848 vectors passed (0 skipped).
    
    
    
  8. murchandamus commented at 10:25 PM on August 17, 2026: member
  9. sipa commented at 8:16 PM on August 19, 2026: member

    I tried to run these tests through the Bitcoin Core miniscript implementation, but quickly hit the problem that the typing rules are inplemented inconsistently. This isn't a problem in production, because the differences are all within expressions that are invalid (for the correctness-related typing rules) or malleable (for the malleability-related typing rules) anyway, but it does mean that exact type tests like the ones in malleable_from_alloy.txt enforce than strictly needed.

    In fact, rust-miniscript, Bitcoin Core, and the BIP text are all inconsistent with each other, in minor irrelevant ways. If we want to go the direction of having strict test vectors (which I support), I think we also need to first align all implementations and specifications. My suggestion would be to make everything match the BIP text. I have an (LLM written) patch for Bitcoin Core to make it do that (which passes all its unit & fuzz tests) which I'm happy to PR, but someone else will need to do the same for rust-bitcoin. It differs from the BIP in one rule: the thresh rule for the "unique dissatisfiable" e rule in the BIP is that all children are s, while rust-miniscript (and Bitcoin Core, so far) additionally (and superfluously) require that all children are e.

  10. jonatack commented at 8:57 PM on August 19, 2026: member

    My suggestion would be to make everything match the BIP text.

    (non-author) approach ACK


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bips. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-08-20 04:10 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me