Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion data/projects/bitcoinfuzz.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ fund: general
announcementLink: '/blog/bruno-garcia-receives-lts-grant'
---

`bitcoinfuzz` is a differential fuzzing harness for Bitcoin implementations and libraries. It builds multiple modules side by side, feeds them the same randomized inputs, and compares how they parse, validate, and serialize data. That catches crashes, consensus edge cases, and behavior mismatches before they ship downstream.
`bitcoinfuzz` is a differential [fuzzing](/topics/fuzzing) harness for Bitcoin implementations and libraries. It builds multiple modules side by side, feeds them the same randomized inputs, and compares how they parse, validate, and serialize data. That catches crashes, consensus edge cases, and behavior mismatches before they ship downstream.

The public repository already covers a broad set of Bitcoin, Lightning, and library modules, along with a separate public [corpora](https://github.com/bitcoinfuzz/corpora) repository for shared fuzz inputs. Public work on the repo shows the direction clearly. Earlier fuzzing exposed a critical NBitcoin consensus bug through script evaluation, and newer public pull requests add differential `libbitcoinkernel` modules, the first Utreexo target with `rustreexo`, `libwally-core`, `bitcoin-s`, and a `verify_script` target across Bitcoin Core, `btcd`, and NBitcoin.

Expand Down
28 changes: 28 additions & 0 deletions data/topics/fuzzing.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
title: 'Fuzzing'
summary: 'Automated testing that feeds malformed or randomized inputs into software to expose crashes, logic bugs, and inconsistent behavior.'
category: 'Open Source'
aliases:
[
'fuzz testing',
'fuzzer',
'fuzzers',
'differential fuzzing',
'coverage-guided fuzzing',
]
---

**Fuzzing** is an automated testing technique that feeds software large numbers of unexpected, malformed, or randomized inputs and watches what breaks. A good fuzz target treats every crash, hang, assertion failure, memory error, or inconsistent result as a bug worth investigating.

Modern fuzzers usually mutate a seed corpus, keep inputs that reach new code paths, and then keep iterating. That makes fuzzing especially good at finding edge cases that are tedious to cover by hand. It is widely used on parsers, network protocols, script engines, wallet logic, and other code that has to handle untrusted input safely.

Some fuzzers focus on one implementation at a time. **Differential fuzzing** compares two or more implementations with the same input and flags mismatches in parsing, validation, or serialization. That matters in Bitcoin and Lightning, where consensus and interoperability depend on separate codebases agreeing on the same rules.

OpenSats funds projects that use fuzzing to harden critical freedom tech. [bitcoinfuzz](/projects/bitcoinfuzz) focuses on cross-implementation testing in the Bitcoin stack, and other grantees use fuzzing to improve protocol libraries, node software, and security tooling.

## References

- [Wikipedia: Fuzzing](https://en.wikipedia.org/wiki/Fuzzing)
- [Google OSS-Fuzz](https://google.github.io/oss-fuzz/)
- [Bitcoin Core fuzzing docs](https://github.com/bitcoin/bitcoin/blob/master/doc/fuzzing.md)
- [bitcoinfuzz/bitcoinfuzz](https://github.com/bitcoinfuzz/bitcoinfuzz)
Loading