
Study & contribute to Bitcoin and lightning open source

Hands on, guided learning to make you confident in bitcoin development.

List of good first issues from curated bitcoin FOSS projects

Interactive AI chat to learn about Bitcoin technology and its history

Technical Bitcoin search engine

Daily summary of key Bitcoin tech development discussions and updates

Engaging Bitcoin dev intro for coders using technical texts and code challenges

Review technical Bitcoin transcripts and earn sats
Why is 2 better than 1? easier for some customers of the library.
3. do both
1. optional dependency
2. more config testing + small runtime overhead (negligible compared to entire hash)
4. copy-paste code from core to secp.
we have linking anyways - we could just link in library + make it
What's the scope? just sha or other hash primitives? or other stuff? chacha too. maybe later.
scenario 1:
libhash is required dependency of secp25621
is it just sha2? rimpemd? sip hash? murmur3?
narrow scope to just sha256
sha256 (pure sha256, leave merkle tree stuff in bitcoin core?)
if it’s just pure sha256 + modern arch/fast - shouldn’t we expose it? copying just pure sha256 (not merkle tree specific) - putting it in libsecp + transliterate to C + run benchmarks.
so many options.
copy-pasting won’t hurt. add an API. before copying, we need CPU detection.
we can copy + arch optimisation + expose.
20% of CPU time in ECDSA is hashing.
motivation = performance (1% schnorr verification + 20% ecdsa performance)
provide different nonce function for ecdsa in libsecp itself
better compatibility for hardware wallet - don’t remove it.
set_context_hash_function in self tests for people who want to bring their own sha256
sign_fast function in libsecp for ECDSA
one shot + streaming API options for hash
we have our own sha256 - use a particular way of representing state - maybe different from how libsecp sha256 uses to represent state.
Community-maintained archive to unlocking knowledge from technical Bitcoin transcripts




