Right, it would almost certainly be orphaned immediately. Which is probably why we haven't seen a lot of 3-MB blocks mined. In fact, I'm pretty sure we've seen exactly one >1-MB block mined (and that was unintentional, the result of a software bug that was quickly fixed) -- and that block was in fact orphaned immediately. Mining a block that's orphaned because it's out of step with current consensus is a very expensive mistake to make. Miners who make too many of those mistakes won't stay in business long. But even in the rare scenario where it happens, are we really imagining that it's going to cause someone to lose money? I guess if that >1-MB block had included a payment for goods to a seller using BU with an EB=2 setting, and that seller had waited for exactly one confirmation before shipping the goods, and that seller had been relying solely on his own EB=2 node to determine such confirmation, and the buyer of goods had successfully double-spent that transaction so that it never made it into the main chain -- then yeah, I guess that guy lost money.Scenario #1: In our current situation, you're running BU with EB=4MB, AD=6. You see a payment to you appear in a 3 MB block. According to the software you're running, this block is valid, so it looks like the payment has 1 valid confirmation. This ignores that if someone really did mine a 3 MB block today, it would almost certainly be orphaned by the majority chain. Ideally you want your software to be able to distinguish between a block that is almost certainly going to be orphaned, and a block that is almost certainly going to be accepted. The EC algorithm with these settings doesn't do this.
Well, that certainly sounds better than running a Core node (equivalent to EB=1, AD=infinity). That would permanently fork you off the network in the event of a block size limit increase of which you were unaware. But again, I think the scenario you're imagining is a little silly. You're a sophisticated enough Bitcoin user to be running your own full node (which you evidently rely on as your sole source for information about the state of the network), but you're so out of the loop that you're not aware that the network is coordinating a block size limit increase? Because I don't think there's any realistic scenario (certainly involving a non-malicious hash power majority) where a limit increase isn't going to be well-coordinated and publicized to the ecosystem well in advance.Scenario #2: Let's say you want to avoid the situation above, so you decide to set EB=1MB temporarily and keep AD=6. This will protect you from being tricked by a rogue miner who isn't in consensus with the mining majority. However, if miners do agree to raise the block size, it'll be about an hour (6 blocks) before you realize this. If a block of 3 MB is mined which will eventually be accepted, then your node will reject it for an hour. If another miner sends you a 1 MB block containing a payment to you during this time, your software will lead you to mistakenly believe that this block will be confirmed.
Well, if a hash power majority is acting maliciously, Bitcoin's entire security model has broken down. So we're in trouble. And in that case, there are many easier and more destructive attacks for them to pull off than mining oversized blocks! Same goes for a malicious large hash power minority. And if we're talking about a large minority that's gone rogue, you can defend against the improbable attack you're describing by using an appropriate AD setting.Scenario #3: Same situation as in #2, except this time a large group of rogue miners start producing a long string of 100 MB blocks. Once this chain becomes 6 blocks longer than the original chain, your node will accept it. When you set AD, you actually meant "accept larger blocks after 6 confirmations, assuming the block size is reasonable." Yet EC gives you no way to accept reasonably larger blocks but reject unreasonably larger blocks, without leaving yourself vulnerable to situation #1.
BU isn't fundamentally incompatible with the two Schelling points you propose. It sounds like you want the Schelling point defining the "current block size limit" to always be "solid" and well-defined. And I tend to think it WILL almost always be solid-feeling (simply because of the incentives), but the nature of Bitcoin is such that there's an inherent amount of indeterminacy surrounding the Schelling points defining the "current protocol." But, practically speaking, I don't see this as a problem. Miners have a very strong incentive to make sure that changes are well-coordinated and signaled in advance to avoid unnecessary disruption to the network.There are two better approaches...
https://github.com/BitcoinUnlimited/BitcoinUnlimited/pull/398(A) Adjust the block size using in-protocol communication as the default. An example is Jeff Garzik's BIP 100. The economic majority agrees on a protocol by which block size increases will be made. The rules are flexible but also hard coded, so that nodes can follow along. If the mining majority and economic majority wants to increase block size, there is no short term period where full nodes are out of step with the economic majority.
@go1111111 So my main objection to your post is that, at least from my perspective, BU doesn't have an "EC algorithm." BU simply provides a set of tools -- of which the optional AD feature is the least important!
There is a consensus algorithm implemented in the code. That's what I'm calling the EC algorithm. It uses EB and AD to decide whether/when to accept blocks.@go1111111
EC isn't an algorithm. Quoting Anthony from BU Slack "EC is a term similar to 'the economic majority.' It's descriptive of how bitcoin works, not prescriptive of how it should work."
The miners need not be trying to harm Bitcoin. Maybe they're just trying to drive smaller miners out of business so they can more easily form a cartel and enjoy higher profits.Well, if a hash power majority is acting maliciously, Bitcoin's entire security model has broken down. So we're in trouble.
The larger the AD setting is, the more out of sync users will be during a real block size increase. As I discussed in my post, we don't need to make this kind of tradeoff if we use a better algorithm.And if we're talking about a large minority that's gone rogue, you can defend against the improbable attack you're describing by using an appropriate AD setting.
In other words, practically speaking AD won't actually be useful. I agree with that.But, practically speaking, I don't see this as a problem. Miners have a very strong incentive to make sure that changes are well-coordinated and signaled in advance to avoid unnecessary disruption to the network.
I think that would be much better than the current EB/AD combo. The ability to use BU settings for long term coordination would be a big step forward.My proposal would be for miners to signal (something like) "EB1/FE8@500000" which means "my current block size limit is 1 MB and I intend to change this to 8 MB starting at block 500,000." The BU code would be written such that it would in fact increase EB to 8 at 500,000.
I've been saying for a while that I think a lot of BU's early marketing which emphasized the AD feature way too much was flawed. But that's just marketing. And I've also said that I think BU should have made AD explicitly optional (via on/off toggle) rather than relying on ability to set AD to an effectively infinite value. But again that really just comes down to making BU easier to market because practically speaking there's no difference. If a disgruntled minority is really convinced the hash power majority has gone over a cliff re: block size, they can certainly use plain-vanilla BU (with an effectively infinite AD setting) to allow themselves to be forked onto a minority chain, thereby allowing their chain to go to trading against the majority chain and forcing a "market referendum." If the minority is right and their chain becomes more highly valued by the market, it should quickly become the longest chain (because hash power ultimately follows price). Moreover, that will wipe out the previously-longer chain (assuming those following the big-block chain didn't add in a more restrictive / "soft fork" element to allow it to persist indefinitely as a minority chain). Having said that, I think that's a really, really unlikely scenario. If it ever really makes sense to not follow the hash power majority, Bitcoin is operating in a severe failure mode such that an emergency PoW-change is probably warranted. (And I personally don't think it will ever make sense to not follow the hash power majority over something as trivial as block size! Which is why it doesn't belong in the "consensus layer" as described here.)You can say AD is optional, but that's not how BU has been marketed. (Also last I checked, not using it required a hack of setting its value super high, which shows that using AD is the intended use case). People only talk about how AD is optional when other people are pointing out its flaws.
But they're not really easy to avoid! (Or at least, they're not all easy to avoid in a deterministic sense. Again, practically speaking, I don't think they're an issue at all). The fundamental problem is inherent in the speculative nature of Bitcoin's "protocol." It's in your interests to only accept blocks that you anticipate that others will accept (and thus to reject blocks that you anticipate that others will reject). But it also makes sense to be prepared to revise your predictions about what others will accept based on new information about what they're actually doing. The AD feature is just an (optional and flexibly configurable) emergency fail-safe that allows you to make sure that you will ultimately, automatically, track the most-proof-of-work chain regardless of block size.@Roger_Murdock, I agree with you that the problematic scenarios I outlined are not super critical, but it's still easy to avoid them, so why not? It looks careless that EC has no way to deal with those issues, and gives the impression that the EC algorithm in general is not well thought through.
Ok, but Bitcoin's entire security model is premised on the notion that the hash power majority will be incentivized to act in an intelligently profit-seeking manner, and that this includes acting to protect the health and integrity of the network.The miners need not be trying to harm Bitcoin. Maybe they're just trying to drive smaller miners out of business so they can more easily form a cartel and enjoy higher profits.
As I've written before, "emergent (i.e.,decentralized) consensus" is just a buzzword. It's not a new model; it's the way Bitcoin has always worked and the only way it could work. To me, EC doesn't imply AD! Rather, as I see it, people are simply using the term "EC" to highlight the fact that the network's actual stakeholders are free to converge on Schelling points other than those "hard-coded" into clients by volunteer "devs." EC is thus the idea that in cases of controversy, we should "get the devs out of the way" and attempt to reduce the friction associated with the stakeholders' negotiation of that controversy.It'd be one thing if AD was just one of many potential settings that BU offered, but AD has been showcased as the centerpiece of BU's EC algorithm. It's the only thing distinguishing EC from a plain configurable block size.
I don't think it will be terribly useful in practice, but I think it's still potentially useful (especially for non-mining nodes). Having said that, I'm a bit on the fence as to whether including AD at all was a mistake. It's certainly been a major FUD vector and source of confusion. On the other hand, if we hadn't included it, I imagine the attack would have been: "BU doesn't guarantee convergence! The blockchain will splinter permanently into a thousand pieces as people set their EB settings all over the place in an arbitrary, uncoordinated manner." I don't think there's any winning when it comes to a lot of BU's most vocal detractors.In other words, practically speaking AD won't actually be useful. I agree with that.
Sure, although I tend to think most real coordination will occur out-of-band. Having said that, I see BU's entire philosophy as one of empowering the users. So if there are additional tools that a significant number of users would actually find helpful vis-a-vis block size, then we should definitely give serious consideration to including them. Having said that, I also think "the block size issue" has been made infinitely more complicated than it needed to be. So I don't think the real problem is that the network's stakeholders don't have adequate tools; I think the real problem is that the process of routing around Core's entrenched status as "the reference client," moving toward a healthier multi-implementation governance environment, and countering all of the absurd propaganda and censorship is such a slow and painful one.I think that would be much better than the current EB/AD combo. The ability to use BU settings for long term coordination would be a big step forward.
How on earth does this happen? You are describing 51% of miners taking control of the chain. One can easily set their client to change their settings dynamically if they see something ridiculous like this. The EC/AD settings are signals and not smart contracts that automatically activate if certain things happen.Same situation as in #2, except this time a large group of rogue miners start producing a long string of 100 MB blocks. Once this chain becomes 6 blocks longer than the original chain, your node will accept it
EC, as you put it, is a signalling mechanism, not a set of laws everyone is agreeing to follow.Yet EC gives you no way to accept reasonably larger blocks but reject unreasonably larger blocks, without leaving yourself vulnerable to situation #1.
(emphasis added)You joke, but flocking/herding behavior is trivially exploitable; and some common techniques in animal husbandry work by introducing super-stimulus pseudo-leaders or controlling just the leading animals, and by doing so moving around the whole flock/herd (usually to their detriment and our benefit).
I asked Greg if that was a confession, but he hasn't replied.Off to the slaughter you go.
Sorry, I have to correct you on the BUIP link (what you linked was an initial call-for-interest post from last year):...@freetrader has just written a BUIP to make it easier to disable AD...
I think the edge case dynamics would need to be sketched out to make sure they add up correctly, Iike I say, I haven't thought this through. Nevertheless in the above scenario you have 70% of the network signalling for an 8MB increase, with 30% whose activation threshold has been passed. (They are ready to mine on any block <8M - Yet the hardfork has not happened yet as they themselves are unlikely to mine a block that would risk forking.) note it is actively their choice to have set the 65% threshold opposing the 75%@lunar
Let's assume 40% of the hash power signals FE8@75% and 30% signals FE8@65%. Would the 30% activate (because 40% + 30% > 65%) or would the other 40% not count towards activation because they're not also signalling 65%?