Note from translation author (klebs):

Greetings folks!

It seems to me that this translation task is now parallelized.

As it currently stands, I have modularized the codebase into units, each much smaller than the original 300k+ lines of code and hopefully more manageable.

My hope is that the modular structure will be easier to read, easier to work with, easier to integrate with, and easier to use -- for everybody on the planet.


After setting the scaffold, I started going through the crates one by one, translating roughly in alphabetical order.

I was learning quite a bit from doing this, and thought deeply about rearranging my overall development efforts towards finishing each crate translation in turn.

However, for a while, I was unsure whether or not it would simply be better to post this work back to the community.

Ultimately, as you can see, I opted to post it.

I feel sharing this work is more aligned with the ethos of the original project.

Plus, since the translation task is now parallelized, I think we can probably finish the translation much faster together than I ever could have done alone and on my own.

Basing this calculation on the number of folks contributing to the current rust-bitcoin project (90+ by my last count), we could probably finish this translation together in a number of weeks if we all decided to work together.


I am hopeful that the energy I spent on this translation is found useful.

I will make one disclaimer: by myself I can not guarantee total correctness.

That said, I have attempted to keep everything (from a functional and logical perspective) exactly the same as the way I found it, in commit ab25ef8c7f767258d5fe44f53b35ad8bd51ed5cd from the original bitcoin c++ codebase.

This may, of course, be independently verified.

Specifically, I cannot guarantee total correctness at this stage because most of the function bodies are still rust scaffolding around todo!() blocks and commented c++ code.

I cannot guarantee that there are no typos.

My hope is that through deep integration and testing, we will be able to discover and work out these kinks.

I hope that this process challenges and strengthens the antifragility properties of the bitcoin system itself.

I stand to benefit, as do all of us, from an incorruptable financial protocol for money.

The more successful antifragility tests the bitcoin system withstands and overcomes, the better for all.

The functionality of the codebase itself will become testable once the rest of the program is translated (hopefully collaboratively, and in parallel).

I have included all tests/benchmarks/fuzzes from the original project (at the noted c++ commit)


Please see the TODO file for notes on how best I imagine the challenge of translation completion can be tackled.

Please see the CHOMPER file for notes on a transpiler I have developed for this purpose.

I do plan to come back to this project, though I have some other work to attend to for a few months at least (as of January 2023).

One day, I hope that we and the rust programs we write will be able to speak bitcoin with each other.

All my best,

-klebs