Spot the difference between how stakeholders can coordinate to fork to 2MB in a Core world vs. in an adjustable-blocksize-cap (ABC) client world:
- Core: miners and nodes coordinate to mod their Core code to increase the cap to 2MB
- ABC clients: miners and nodes coordinate to adjust their client settings to increase the cap to 2MB
Where is any extra power handed to miners? Where is any power taken away from nodes? How is the situation with ABC clients any different than under Core? We can point only to the difference in convenience, and even that was bound to be erased sooner or later by an enterprising developer (and now by several development teams).
What does it tell you that Core and its supporters are up in arms about a change that merely makes something more convenient for users
and couldn't be prevented from happening anyway? Attacking the adjustable blocksize feature in BU and Classic as "dangerous" is a kind of trap, as it is an implicit admission that Bitcoin was being protected only by a small barrier of inconvenience, and a completely temporary one at that. If this was such a "danger" or such a vector for an "attack," how come we never heard about it before?
And even if we accept the remarkable premise that somehow this small inconvenience was the chewing gum and bailing wire holding the network together, it already would imply that letting stakeholders make their own choices is dangerous and that the only way to keep Bitcoin working is to spoonfed stances on controversial consensus settings to all user.
Even if we accept the improbable premise that inconvenience is the great bastion holding Bitcoin together and
the paternalistic premise that stakeholders need to be fed consensus using a spoon of inconvenience, we still must ask, who shall do the spoonfeeding?
Core accepts these two amazing premises and further declares that Core alone shall be allowed to do the spoonfeeding. Or rather, if you really want to you can be spoonfed by other implementation clients like libbitcoin and btcd as long as they are all feeding you the same stances on controversial consensus settings as Core does.
Core and many of its supporters consider anyone trying to feed you anything else an outright attack on Bitcoin itself (examples: XT feeding you BIP101, the old Classic feeding you 2MB). More remarkable still, these people also consider anyone refusing to spoonfed you anything
as an attack (examples: BU, new Classic, and other ABC clients).
This all of course implies the only non-attack is to vest all control and authority in the Core developers, specifically a few committers and the maintainer of a single repository. This mindset that considers everything else an "attack" is implicitly a centralized governance model, not specifically because Core
is centralized but because all dev teams are.
The kind of adversarial thinking bitcoiners are familiar with easily demonstrates that any single dev team is ripe for co-option. The only protection against one team holding the community over a barrel on controversial matters is to have many mature competing teams, and better still would be if none of these teams try to bake their own coders' stances on controversies into the code offerings by hiding the control panel for those settings away from the user.
Such practices manage to be both childish and paternalistic, while lacking any material and sustainable effect of saving supposedly hapless stakeholders from making the wrong decision on controversial matters.
It is high time the community see central planning and abuse of power for what it is, and reject both:
- Throw off central planning by removing petty "inconvenience walls" (such as baked-in, dev-recommended blocksize caps) that interfere with stakeholders coordinating choices amongst themselves on controversial matters, without forcing those who disagree with the dev teams recommendations to switch dev teams
- Make such abuse of power impossible by encouraging many competing implementations to grow and blossom
Jorge Timón submitted by
on Jan 12 2016:
After talking to some people about libconsensus in the last Hong Kong
conference I realized that my initial plan of exposing one more thing
at a time would actually probably slow things down.
There's still a promised pdf with pictures that will be released, and
actually drafting the UML pictures helped realize that the whole
explanation could be much simpler if #7091 was merged first as the
last step in phase 1 (that phase has so many contributors that I will
probably never get finished documenting it). Matt Corallo's idea of
exposing VerifyScript() through a C API certainly helped a lot in
cementing the more-minimal-than-earlier dependencies (thanks to Cory
Fields among many other people before him) that are not part of the
incomplete but existing libbitcoinconsensus library.
Given this success in protecting encapsulation by exposing things in a
new library, my instinct was to expose more things: VerifyHeader(),
VerifyTx() and VerifyBlock() [in that order].
But all those three new functions depend on storage in one way or
another. That was part of my reasoning to expose VerifyHeader() first,
because I believe there will be less discussion on a common interface
for the stored longest chain than for the utxo view (which may depend
on other transactions spent within the same block).
In any case, I realized we should finish putting all the consensus
critical code in the libconsensus lib and then worry about its "final"
Therefore I changed the goal of the phase 2 in my libconsensus
encapsulation planning from "expose VerifyHeader() in the existing
libconsensus library" to "build all the consensus critical code within
the existing libconsensus library, even if we don't expose anything
else". I believe this is much feasible for a single Bitcoin Core
release cycle and also more of a priority. Other implementations
experimenting with libconsensus like https://github.com/libbitcoin/libbitcoin-consensus
will have the
chance to compare their reimplementations with the future complete
libbitcoinconsensus without having to worry about the C API, which
ideally they will help to define.
I repeat, the goal of phase 2 in my upcoming libconsensus
encapsulation plan is to fully decouple libconsensus from Bitcoin
In phase 3, we can refine the storage interfaces and focus on a
quasi-final C API.
In phase 4, we can refine and take out code that doesn't belong in
libconsensus like CTxOut::GetDustThreshold() in
primitives/transaction.h and move all those consensus files to the
consensus folder before creating a separate sub-repository like for
libsecp256k1. Note that most of the file-moving work can be in
parallel to phases 2 and 3 and, in fact, by any new developer that is
willing to exchange rebase-patience for meaningless github stats (I'll
do it if nobody else wants, but I'm more than happy to delegate there:
I have more than enough github meaningless stats already).
As said, the document with pictures and the update to #6714 are still
promised, but until they're ready, merging/reviewing #7091, #7287,
7310 and #7311 could do a great deal to make later steps in
libconsensus phase 2 more readable.
Most reviewers probably don't need to see any "big picture" to tell
whether certain functions on Bitcoin Core are consensus-critical or
not, or whether consensus critical code needs to depend on util.o or
But I wouldn't be writing to the mailing list without a plan with
further words nor pictures if I didn't had what I believe is a
complete implementation of what I just defined as "libconsensus phase
Phase 3 should finish long pending discussions like "should
libconsensus be C++14 or plain C" which should NOT delay phase 2.
Phase 4 should be mostly trivial: rename files to the target dir and
move the remaining unused code out of libconsensus.
Phase 5 should make Bitcoin Core eat its own dog food and use
libbitcoinconsensus oonly by its generic C API (I'm sorry if this
looks too far away for me to even think about detailing it).
The work in progress branch (but hopefully being finished, nit and
merged within the 0.12.99 cycle) can be found in: https://github.com/jtimon/bitcoin/commits/libconsensus-f2
Before sipa asks, signing code may make it into a new library but
SHOULDN'T BE PART OF LIBBITCOINCONSENSUS. Ideally, all exposed
functions will return true or false and an error string. It is based
on last-0.12.99 3cd836c1 but by popular demand I can open it as a
"DEPENDENT-tagged" PR linking to smaller steps and keeping track of
steps done. Analogous to the about to be replaced (for a simpler and
more maintainable example of testchain) #6382. If people like
Wladimir, Cory and Pieter cannot see that I've been able to reduce my
overall cry-for-review noise thanks to github adoption of emacs'
org-mode's [ ] vs [X] I can alwways leave those "big picture" branches
as "private" branches out of the pull request count.
I expect to publish a phase 3 branch very shortly. But as said I
expect a lot of discussion on the API part, so I don't expect big
movements in phase 3 until phase 2 is done (as said phase 4 is
orthogonal to anything, this time git will say "verified MOVEONLY" for
To finish this long mail, if you are new to free software and would
like to get familiarized with Bitcoin Core development in particular,
moving one file is a simple task that you can always besure you can do
The way I plan to hand this to you, you won't need to convince anyone
to publicly confirm that your "MOVEONLY" commit being legit, because
all your remaining work will be to build on one platform (ideally you
should do a gitian build, but embarrassingly enough for someone
touching consensus code I just trust travis ) and trust travis (as
said, that's what I do from my laptop, but I plan to buy my own
building machine [and maybe outsource it for free in some protocol
that hasn't been invented, sorry again for the distraction]) and fix
the includes that have stopped working.
I intend to create an issue to move all the files in this list one by one: https://github.com/bitcoin/bitcoin/pull/7091/files#diff-480477e89f9b6ddafb30c4383dcdd705R250
But don't hesitate to contact me if are eager for moving some files,
because I believe we can save a few lines of total diff if we chose
the order of the movements properly.
Sorry, I forgot many people read this list again.
Happy to answer any question.
Specially about https://github.com/jtimon/bitcoin/commits/libconsensus-f2 original: http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-January/012235.html
Translated into simpler terms, this decision ensures that Libbitcoin will become accessible to other cryptocurrencies and popular Bitcoin. Litecoin Features. In a new tweet, the president of the Bitcoin Association Switzerland and founder of Libbitcoin announced that Litecoin has been officially implemented into Libbitcoin. Hashrate Bitcoin VS Bitchcoin. As we can see, Bitcoin has a power of hash – the hashrate – and therefore a much greater security than any other competing network. Minors using compatible machines could very well move from one network to another because Bitcoin and its copies (BitcoinCash, etc.) use the same security algorithm. It's not a bug (yet) because VS2017 is not yet supported. However I do expect this support very soon. Just guessing but it may be that VS is not treating the file as UTF8. "Solution and project files to build the Bitcoin Core applications (except Qt dependent ones) with Visual Studio 2017 can be found in the build_msvc directory." Does it mean that I can't build bitcoin-qt.exe with VS? If yes, then why do we need libbitcoin-qt.vcxproj file in build_msvc? – Ilya Maximencko Oct 9 '18 at 14:20 Open the Bitcoin Core GUI console or use bitcoin-cli for the Bitcoin Core commands; Use bx aka Libbitcoin-explorer as a handy complement; Let's spend a P2SH-P2WPKH output (embedded Segwit) and create a new P2WPKH output. Working with P2SH now is a bit premature as we are dedicated this topic to part three of this guide.
Litecoin LTC is one of the behemoths of crypto. A consistent fixture as a top 10 cryptocurrency, Litecoin was created to improve upon the bitcoin protocol. T... Arca Chief Investment Officer Jeff Dorman on the outlook for cryptocurrency. FOX Business Network (FBN) is a financial news channel delivering real-time info... What is the difference between Bitcoin and "blockchain"? Blockchains are only one of the foundational technologies. In an attempt to co-opt the interest arou... Libbitcoin is the longest running Bitcoin implementation after Satoshi’s original prototype. It has evolved since 2011 into a comprehensive C++ Bitcoin developer toolkit, including a highly ... Google Trends is sponsored by Mack Weldon. Go to https://www.mackweldon.com and get 20% off using promo code “trends” Back in '91 I made the bold call to inv...