Author

Topic: The Soft Fork Deception (Read 1402 times)

member
Activity: 100
Merit: 16
October 30, 2016, 04:42:16 AM
#8
I sent a reply to the mailing list post yesterday, but I still don't see it on the mailing list archive, so I'm not sure what's going on there.

Quote
Andrew <[email protected]>   Sat, Oct 29, 2016 at 8:08 AM UTC
To: Andrew C <[email protected]>
Cc: Bitcoin Protocol Discussion <[email protected]>
Hi

Thanks for the responses (although they don't quite answer my question about what the philosophy/reasoning was for those quite forceful soft forks we have made in the past).

I spoke in some other channels, and it seems that the current state of segregated witness is not as bad as I feared. Apparently, segwit transactions will remain optional (even after a 95% vote lock in), and hard forks can only arise if miners take funds from the anyone-can-spend outputs without respecting that they may not be authorized to according to segwit. It's still a risk, just not as bad as I thought.

But the next question is, why allow even this risk? What is the gain? You gain just small savings on the size, if all you care about is state of outputs without signatures. And if you care about both, you are actually increasing the amount of data needed per transaction: in the block, you store the state _plus_ links to the signatures, and in the segwit data, you store the signatures. So this may actually decrease the incentive for people to verify the signatures.

I would propose an alternative: Don't use anyone-can-spend outputs, but instead use segwit only for complicated mulisig transactions (P2WPKH nested in BIP16 P2SH) and future transactions that may require huge signatures (like confidential transactions). That way, we don't create the opportunity for more hard forking events, and we still get a boost in capacity and choice of what parts to verify.

Or even alternatively, you can keep the anyone-can-spend with special meaning for segwit, but use it a use-at-your own risk. Miners can steal the coins, but they don't have much of an incentive to (it would damage the value of Bitcoin), and these transaction can have less fees, since they take up a bit less space. If you want to be more safe, then use transactions with signed scriptSigs.

If we really want to boost the capacity, then I would recommend other block extensions such as the Subchains proposal I made: https://bitcointalksearch.org/topic/scaling-bitcoin-with-subchains-1083345. Note that this is not the same as Peter R's subchains, and it is probably a form of "sharding"). Lightning will also help, obviously.

I also think people should look at the big picture here. If we want a truly decentralized system, we need to get in the decentralized mindset. In the ideal case of perfect decentralization, every one is a miner. Everyone mines a little, everyone verifies a little, everyone signs a little, everyone relays a little. So when you soft fork and say you are giving more power to the validators and you are taking freedom away from the miners, this no longer makes sense once we have decentralization: taking freedom away from the miners will also mean taking freedom away from the validators i.e. all users. It will no longer be as easy as a phone call to two mining pool admins in order to resolve the hard fork (BIP 66). In a decentralized system, rules change fluidly, incrementally, smoothly, and not as step functions in the form of software releases at instants of time.

Now, you may argue that the tightened rules we've made so far were essentially bug fixes, or just clearing up a vague idea that already existed. For example, I think nLockTime existed before OP_CHECKLOCKTIMEVERIFY. But still, we should be careful, since any extra rule is an extra hard fork attack vector waiting to happen.

I believe I made a mistake by saying that P2WPKH nested in BIP16 P2SH can be enforced without risking a hard fork, because there are no actual signatures in the scriptSig (actually meant to say P2WSH nested in BIP16 P2SH. Right?

But can anyone comment on what they think about restricting segwit only to P2WSH nested in BIP16 P2SH, which means complicated transactions such as multi-sig transactions, smart contracts, confidential transactions. This will help to reduce the attack surface of a hard fork, and really, seg wit seems to only be useful for these larger types of transactions. As I mentioned in my reply, if you are fully validating, segwit actually increases the amount of space required per transaction, and also creates more of an incentive to not fully validate and simply look at the state of the ouputs rather than also checking the signatures.

Any other comments welcome also.
staff
Activity: 4284
Merit: 8808
October 29, 2016, 01:25:06 AM
#7
Softforks, by definition, result in some transactions by users who do not upgrade to be invalid.
There are more than two possible states, invalid or valid. Transactions can also be 'non-standard' meaning nodes will not create, relay, or mine them. But if they happen to (somehow) show up in a block, they'll accept them.  In effect, a non-standard transaction is one doing something that a node knows it doesn't fully understand, but still doesn't break the rules... so it won't facilitate it but it also won't reject it.

The community developed softforks in modern times take the form of only making things invalid which were already non-standard. So no transactions by users who do not upgrade will be made invalid.

Quote
The miners can undo a soft fork with the support of 50% of the hashrate (although they will likely require more).
Not so-- even if 90% (or 99%!) of the hashrate were to start violating the softfork, the nodes that understand it would view it like they view any other hardfork: They'd just ignore their blocks, and to them it would be precisely equal to the miners shutting off.

Quote
My concern about SegWit is that users who do not actively upgrade will not be able to fully validate any blocks (and their included transactions) that included one or more SegWit transactions. I believe this makes these nodes to be not full with the nodes thinking they are full nodes, which I believe is very bad.

In community developed softforks nodes _know_ when rules have activated that they don't understand, and they complain to the user loudly: Picture.  If a user wanted to set up their node to just shut off when such a warning happened they could.  The nodes also continue to validate all the things they always validated, anti-inflation, anti-doublespending, locktimes, etc.. even for the new transactions.  Plus the non-upgraded user won't be getting any payments that themselves use the new rules, because their wallet doesn't generate addresses that use them.

So in a softfork: Everyone gets a choice to upgrade or not and can choose _WHEN_ they upgrade... e.g. at a time when its convient to them. If they use software which is customized or no longer maintained, they can still 'upgrade' it by simply sticking it behind a stock upgraded node.  If they'd like to shut off at activation time until they get a chance to upgrade, they can do that too.  If like most people, the changes aren't immediately relevant to them-- they don't need to worry about them... and can just upgrade when they get around to refreshing their systems.  In a softfork there need be no actual split of the chain (there wasn't in the last one, for example).

Meanwhile hardforks are almost certain to split the chain even if just accidentally. They force users to upgrade at a particular time, and there is no easy upgrade: if your software is unmaintained you are just out of luck. They also carry more long term risk politically, they can effectively redefine the system-- assign ownership of coins to other parties--.  There is no relatively safe do nothing opportunity-- which punishes people using alternative implementations. Look how far behind xt/classic have been on prior softforks: only implementing them months after they were deployed. A frequent cadence of hardforks would make one many development teams completely infeasible.

So in any case, I think it is clearly the case that what you propose is strictly inferior. If you'd like your node to shut down when upgrades happen, set that up-- but basically no one wants that. Losing the ability to 'upgrade' customized systems by putting them behind upgraded gateways is a massive loss of flexibility and increase in cost/risk... especially since you can't control the timing of a hardfork and can't roll it back if your deployment goes poorly.
copper member
Activity: 2996
Merit: 2374
October 29, 2016, 12:21:42 AM
#6
Softforks, by definition, result in some transactions by users who do not upgrade to be invalid. The miners can undo a soft fork with the support of 50% of the hashrate (although they will likely require more).

My concern about SegWit is that users who do not actively upgrade will not be able to fully validate any blocks (and their included transactions) that included one or more SegWit transactions. I believe this makes these nodes to be not full with the nodes thinking they are full nodes, which I believe is very bad.

As a result of the above, I believe the best course of action would be to implement SegWit via a hard fork (assuming it has an overwhelming consensus).
full member
Activity: 217
Merit: 259
October 28, 2016, 01:07:09 PM
#5
Did you know that BIP-66 (which you mentioned) was an important security fix?  Before that soft fork, it was possible to fork 64-bit miners from 32-bit miners by mining a transaction with a certain malicious signature.

Also note that reverting a soft fork is a hard fork.
full member
Activity: 219
Merit: 102
October 28, 2016, 12:11:19 PM
#4

Quote
Soft forks make previously valid things invalid, hard forks make
previously invalid things valid.

This is probably the most succinct and understandable explanation that has never been stated about bitcoin.
member
Activity: 100
Merit: 16
October 28, 2016, 12:07:07 PM
#3
OK, I received a response from G Maxwell and achow101, and there is one thing I may have been overlooking. See here: https://www.reddit.com/r/Bitcoin/comments/59pt66/bitcoin_core_0131_released/d9bikfu/.

I still need time to think about it, as it is quite an important step we are taking.
staff
Activity: 3458
Merit: 6793
Just writing some code
October 28, 2016, 10:28:56 AM
#2
Please stop spreading FUD. Please do your research and fully understand everything before you go and make bold claims like this.

I have sent you a very detailed response: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-October/013266.html
member
Activity: 100
Merit: 16
October 28, 2016, 04:45:09 AM
#1
Hi here is my post to the mailing list: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-October/013263.html

Everyone needs to be aware of this. I support 1 MB blocks and I support Seg Wit, but I do NOT support the forceful way in which Seg Wit is being deployed. It will inevitably lead to a hard fork.

Here is confirmation that my fear is true: https://www.reddit.com/r/Bitcoin/comments/59kflj/its_becoming_clear_to_me_that_a_lot_of_people/d9adb14/
Quote
No, the attack blocks would, but the attacking miners would still accept segwit transactions, so segwit would not "become a hard fork"-- only the removal of it would be.
-nullc (Gregory Maxwell)

Edit:  I may be wrong on something here, but I still need to think about it. See posts below.
Jump to: