chaincodelabs / onboarding-to-bitcoin-core Goto Github PK
View Code? Open in Web Editor NEWThe missing onboarding guide to Bitcoin Core
Home Page: https://bitcoincore.academy
The missing onboarding guide to Bitcoin Core
Home Page: https://bitcoincore.academy
Not sure if this is just a difference in OS.
I noticed ../.autogen.sh, on the latest pull, is just named ../autogen.sh for me on MacOs.
Same with the configure commands ../configure --regular options
This repo currently does not have any CI/CD. It is a manual build and deploy process. If the person(s) responsible for managing this repo are unavailable then no code changes can be deployed.
main/master
branch for this repoasciidoctor -r asciidoctor-diagram index.adoc
. Something like this could be a good starting pointIf steps 1 and 2 are inappropriate then Github Actions could still be used to deploy the built index.html
to the current hosting location, but will require some extra Github Actions and some access keys to be added to this repository secrets under the admin Settings page.
We could also add a section on test coverage.
This is tracked here and can be a good way for new contributors to "find something useful" to improve?
In section-1 under the heading Organisation fail-safe:
Though the link says “Discussion about moving away from bitcoin,” I think the link provided, though it is a discussion, has many parts irrelevant to the link’s topic. I would suggest two alternatives:
Overall, great doc. I'll capture general feedback here and also open a PR for nits/spelling.
BerkeleyDB is unmaintained and on a deprecation path from Core. Might be worth linking to the proposed deprecation plan: bitcoin/bitcoin#20160
IIRC, sqlite wallets cannot create legacy wallets, only descriptors (it's enforced when creating wallets BDB is on a deprecation path - might be worth mentioning and also
adding a link to the deprecation timeline
wallet/
doc, perhaps mention bech32m? i believe it will be a supported descriptor in the next release (23.0). Ping @lsilva01coinselection.cpp / spend.cpp
codebase and it can be very confusing reading through the code if you don't know what an outputGroup is or what they are solving forAvailableCoins
works, ill send them. Yours are mostly correct mod a few nitshmu when you get to this section, happy to help/review! I use it in my setup and have also dug into the internals for the 22.0 testing guide
The guide mentions that
they should be determining the mergability of changes based primarily on the reviews and discussions of other Contributors on the GitHub PR, or less commonly, the #bitcoin-core-dev mailing list.
The bitcoin-core-dev list has been a notification-only list for a while. Only moderators can post. This is also reflected in the blurb. it was never used for discussion while it could be, so at some point we decided to change the purpose.
There's some discussion on the bitcoin-dev (no -core) list but this usually applies to topics that generally affect bitcoin, not bitcoin-core specific project issues. There's only github and the #bitcoin-core-dev IRC channel for that. Do you maybe mean that?
When using:
# Clean current source dir in case it was already configured
make distclean
# Make new build dir
mkdir build && cd build
# Run normal build sequence with amended path
../autogen.sh
../configure --your-normal-options-here
make -j `nproc
test_runner.py
is copied to the bitcoin/build/test/funcional
directory, but not all the individual functional tests, the file config.ini
gets generated in bitcioin/build/test
directory, allowing test_runner.py
to be run with test/fuctional/test_runner.py
from the bitcoin/build
directory without any problem.
However, if you want to run the individual functional test, you have to do it from the bitcoin/test/functional
directory, but if you do that, it cannot find the config.ini
file. Even if you run ../../test/functional/p2p_headers_sync_with_minchainwork.py
from the bitcoin/build/test
directory, where config.ini
is located, it's looking for it on the bitcoin/test
subdirectory.
FileNotFoundError: [Errno 2] No such file or directory: '/Users/... .../bitcoin/test/config.ini'
via sipa:
"first party malleation: signature length descriptor is extended to 5 bytes".
"First party malleability" is kind of weird term... the signer doesn't really need to malleate - they can also just create another signature."
You could move sections like:
Decentralized Dev
Bitcoin Core Dev Process and Doc
Reviews
Commit Messages
Continuous Integration
Getting Started with Development
Into a new 02_development-process.adoc
, and the remaining material in the current 02
renamed to 03
, update number accordingly. Exercises in 01
that are related to the development process can be moved to this new section.
After doing this, the overview-and-architecture
section can now be focused on just that, and material within it expanded on.
We should find a way to work #13 (comment) in.
This document as well as https://github.com/chaincodelabs/bitcoin-core-onboarding are based on a specific reference of the codebase. Throughout the onboarding documentation there are links that are referenced more than once. I was thinking that moving all the links to variables would remove duplicate links but more importantly would make easier any additions to the documentation along with easier upgradability in case of future migration to a newer version of the codebase.
I've started playing along with the idea, initially for Regions but as it is referencing the same commit, is easy to just have the same source of truth for everything. My idea is something like
:commit: 4b5659c6b115315c9fd2902b4edd4b960a5e066e
:link: https://github.com/bitcoin/bitcoin/blob/{commit}/src
// files
:net_processing_h: {link}/net_processing.h
:net_processing_cpp: {link}/net_processing.cpp
:validation_cpp: {link}/validation.cpp
:validation_h: {link}/validation.h
...
// net_processing.{h,cpp}
:PeerManagerImpl: {net_processing_cpp}#L227
:m_chainman: {net_processing_cpp}#L335
...
// validation.{h,cpp}
:ConnectBlock: {validation_cpp}#L1802
:ConnectTip: {validation_cpp}#L2460
:ActivateBestChainStep: {validation_cpp}#L2596
which could be imported on every doc with
include::links.adoc[]
The only problem with this is that including asciidoc files is not working on GitHub which is an issue for people reading the documentation from within GitHub and not from the website. To be able to work for GitHub it would need all the variables to be presented in each file, which complicates the maintenance process. A solution to that could be adding asciidoctor-reducer as a pre-commit hook.
I wanted to get some feedback to understand if others see value on this and if the GitHub limitation is consider a forbidding factor.
Currently the whole website is "checkpointed" at one commit ("This document was created from Bitcoin Core at commit 4b5659c6").
This may be good enough for now, but as the website gets increasingly outdated, it may discourage people from updating it, since it requires the entirety to be updated. Maybe it would be better to "checkpoint" each chapter separately, so that (for example) wallet people can update "their" chapter while leaving other chapters untouched?
This is a feature request split into two parts:
In the current docs there is a sentence:
There is a PR [open](https://github.com/bitcoin/bitcoin/pull/19602) which aims to permit migration of legacy wallets → descriptor form. But for now (2022) it’s still relevant to have stuff related to legacy wallet in documentation.
This PR is now merged: bitcoin/bitcoin#19602
It's probably worth adding a different explanation there about the migration of legacy wallets?
In Tests overview, it would be great to short mention we have stress test
in Core? It's into the functional test (to not rewrite same code) but we can consider it a different category of test.
The build system is an integral part of bitcoin core. Priorities for the build system and what dependencies we want bitcoin core to use have historically led to heavy refactoring of the code. The philosophy behind the build system also touches on ideas of development behind bitcoin core is to be treated as is security oriented software. It is also how we get reproducible binaries which is pretty important to talk about.
Looking for concept ack as it could be deemed info on the build system is not necessary for onboarding. Happy to take this on and open a PR if consensus.
I would much appreciate feedback on this question to help me improve them.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.