Skip to content

bip375: import DLEQ and secp256k1lab from BIP374 instead of vendoring - #2309

Open
jonatack wants to merge 3 commits into
bitcoin:masterfrom
jonatack:2026-09-bip375-import-DLEQ-from-BIP374-instead-of-vendoring
Open

jonatack wants to merge 3 commits into
bitcoin:masterfrom
jonatack:2026-09-bip375-import-DLEQ-from-BIP374-instead-of-vendoring

Conversation

@jonatack

@jonatack jonatack commented Sep 25, 2026 •

Copy link
Copy Markdown
Member

bip-0375/deps/dleq.py copied the dleq_* functions from bip-0374/reference.py, depends on it, and could go out of sync (#2262, #2304). Replace it with a loader so the validator always uses the current bip-0374/reference.py.

After that change, the local bip-0375/deps/secp256k1lab copy is unused. Drop the vendored tree, remove its README entry, and point test_runner.py at bip-0374/secp256k1lab/src with an existence check.

This leaves a single source of truth for both the DLEQ functions and the shared secp256k1lab dependency.

Added a note in BIP 374 to indicate 375 is downstream and should be tested before any functional changes to 374's reference.py or its secp256k1lab subtree.

To run the tests:

python bip-0375/test_runner.py

@jonatack

Copy link
Copy Markdown
Member Author

cc BIP authors @andrewtoth, @achow101, @josibake for feedback

bip-0375/deps/dleq.py was a copy of bip-0374/reference.py
and could go out of sync. Replace the copy with a loader so
the validator always uses the current BIP-374 reference.py.
@jonatack
jonatack force-pushed the 2026-09-bip375-import-DLEQ-from-BIP374-instead-of-vendoring branch from 7a95e2a to 503119d Compare September 27, 2026 17:59
@jonatack

Copy link
Copy Markdown
Member Author

Rebased following merge of #2286.

@macgyver13

Copy link
Copy Markdown
Contributor

tACK 503119d

@fametrano

Copy link
Copy Markdown
Contributor

I suggest also dropping bip-0375/deps/secp256k1lab in this PR, with its README entry, and pointing its path in test_runner.py to bip-0374/secp256k1lab/src. I tried this locally and the 43 tests pass. The path change is needed: with the copy dropped and the path unchanged, importing validator.inputs before deps.dleq fails with ModuleNotFoundError: No module named 'secp256k1lab'.

At 503119d that copy is no longer used. deps/dleq.py loads bip-0374/reference.py, which puts bip-0374/secp256k1lab/src at the front of sys.path. This happens before the validator's first secp256k1lab import. So the validator already runs on BIP-374's copy, as python3 -v bip-0375/test_runner.py shows. The tests pass either way because the two copies are identical today. If they drift apart, no test will notice, and the README will still list the unused copy as a dependency.

@murchandamus murchandamus added Proposed BIP modification PR by non-owner to update BIP content Pending acceptance This BIP modification requires sign-off by the champion of the BIP being modified labels Nov 3, 2026
After the dleq.py loader, the local secp256k1lab copy is unused.
Point test_runner.py at bip-0374/secp256k1lab/src (with existence check),
remove the README entry, and delete the vendored tree. Tests still pass.
Suggested by fametrano in bitcoin#2309.

Co-authored-by: Ferdinando Ametrano <ferdinando@ametrano.net>
@jonatack

jonatack commented Nov 4, 2026

Copy link
Copy Markdown
Member Author

@fametrano good suggestion; done.

@jonatack jonatack changed the title bip375: import DLEQ from BIP-374 instead of vendoring bip375: import DLEQ and secp256k1lab from BIP-374 instead of vendoring Nov 4, 2026
@jonatack jonatack changed the title bip375: import DLEQ and secp256k1lab from BIP-374 instead of vendoring bip375: import DLEQ and secp256k1lab from BIP374 instead of vendoring Nov 4, 2026
@jonatack

jonatack commented Nov 4, 2026

Copy link
Copy Markdown
Member Author

Per an offline suggestion from @macgyver13, added a note in 374 to indicate 375 is downstream and should be tested before any functional changes to 374's reference.py or its secp256k1lab subtree.

@fametrano fametrano left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK 8f9b1f3

The removed bip-0375/deps/secp256k1lab is the same git tree as bip-0374/secp256k1lab on master (f9ecfa0a), and deps/dleq.py already got BIP 374's copy through bip-0374/reference.py, so pointing test_runner.py there leaves the validator on the same code. Nothing else in the repository refers to the removed copy, and the note added to BIP 374 describes the dependency as it now is. On this head all 43 BIP 375 tests pass.

@macgyver13

Copy link
Copy Markdown
Contributor

As jonatack described above, I suggested the note in BIP-374 after reconsidering the responsibility this change places on its authors. @theStack @RubenSomsen @andrewtoth, are you OK with BIP-374 asking contributors to run BIP-375's tests before functional changes to reference.py or its secp256k1lab subtree?

If so, I support 8f9b1f3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Pending acceptance This BIP modification requires sign-off by the champion of the BIP being modified Proposed BIP modification PR by non-owner to update BIP content

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants