<div dir="ltr">Responding to &quot;28 days is not long enough&quot; :<div><br></div><div>I keep seeing this claim made with no evidence to back it up.  As I said, I surveyed several of the biggest infrastructure providers and the btcd lead developer and they all agree &quot;28 days is plenty of time.&quot;</div><div><br></div><div>For individuals... why would it take somebody longer than 28 days to either download and restart their bitcoind, or to patch and then re-run (the patch can be a one-line change MAX_BLOCK_SIZE from 1000000 to 2000000)?</div><div><br></div><div>For the Bitcoin Core project:  I&#39;m well aware of how long it takes to roll out new binaries, and 28 days is plenty of time.</div><div><br></div><div>I suspect there ARE a significant percentage of un-maintained full nodes-- probably 30 to 40%. Losing those nodes will not be a problem, for three reasons:</div><div>1) The network could shrink by 60% and it would still have plenty of open connection slots</div><div>2) People are committing to spinning up thousands of supports-2mb-nodes during the grace period.</div><div>3) We could wait a year and pick up maybe 10 or 20% more.</div><div><br></div><div>I strongly disagree with the statement that there is no cost to a longer grace period. There is broad agreement that a capacity increase is needed NOW.</div><div><br></div><div>To bring it back to bitcoin-dev territory:  are there any TECHNICAL arguments why an upgrade would take a business or individual longer than 28 days?</div><div><br></div><div><br></div><div>Responding to Luke&#39;s message:</div><div><br></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">On Sat, Feb 6, 2016 at 1:12 AM, Luke Dashjr via bitcoin-dev<br>
&lt;<a href="mailto:bitcoin-dev@lists.linuxfoundation.org">bitcoin-dev@lists.linuxfoundation.org</a>&gt; wrote:<br>
&gt; On Friday, February 05, 2016 8:51:08 PM Gavin Andresen via bitcoin-dev wrote:<br>
&gt;&gt; Blog post on a couple of the constants chosen:<br>
&gt;&gt;   <a href="http://gavinandresen.ninja/seventyfive-twentyeight" rel="noreferrer" target="_blank">http://gavinandresen.ninja/seventyfive-twentyeight</a><br>
&gt;<br>
&gt; Can you put this in the BIP&#39;s Rationale section (which appears to be mis-named<br>
&gt; &quot;Discussion&quot; in the current draft)?<br></div></div></blockquote><div><br></div><div>I&#39;ll rename the section and expand it a little. I think standards documents like BIPs should be concise, though (written for implementors), so I&#39;m not going to recreate the entire blog post there.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">
&gt;<br>
&gt;&gt; Signature operations in un-executed branches of a Script are not counted<br>
&gt;&gt; OP_CHECKMULTISIG evaluations are counted accurately; if the signature for a<br>
&gt;&gt; 1-of-20 OP_CHECKMULTISIG is satisified by the public key nearest the top<br>
&gt;&gt; of the execution stack, it is counted as one signature operation. If it is<br>
&gt;&gt; satisfied by the public key nearest the bottom of the execution stack, it<br>
&gt;&gt; is counted as twenty signature operations. Signature operations involving<br>
&gt;&gt; invalidly encoded signatures or public keys are not counted towards the<br>
&gt;&gt; limit<br>
&gt;<br>
&gt; These seem like they will break static analysis entirely. That was a noted<br>
&gt; reason for creating BIP 16 to replace BIP 12. Is it no longer a concern? Would<br>
&gt; it make sense to require scripts to commit to the total accurate-sigop count<br>
&gt; to fix this?<br></div></div></blockquote><div><br></div><div>After implementing static counting and accurate counting... I was wrong. Accurate/dynamic counting/limiting is quick and simple and can be completely safe (the counting code can be told the limit and can &quot;early-out&quot; validation).</div><div><br></div><div>I think making scripts commit to a total accurate sigop count is a bad idea-- it would make multisignature signing more complicated for zero benefit.  E.g. if you&#39;re circulating a partially signed transaction to that must be signed by 2 of 5 people, you can end up with a transaction that requires 2, 3, 4, or 5 signature operations to validate (depending on which public keys are used to do the signing).  The first signer might have no idea who else would sign and wouldn&#39;t know the accurate sigop count.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">
&gt;<br>
&gt;&gt; The amount of data hashed to compute signature hashes is limited to<br>
&gt;&gt; 1,300,000,000 bytes per block.<br>
&gt;<br>
&gt; The rationale for this wasn&#39;t in your blog post. I assume it&#39;s based on the<br>
&gt; current theoretical max at 1 MB blocks? Even a high-end PC would probably take<br>
&gt; 40-80 seconds just for the hashing, however - maybe a lower limit would be<br>
&gt; best?<br></div></div></blockquote><div><br></div><div>It is slightly more hashing than was required to validate block number 364,422.</div><div><br></div><div>There are a couple of advantages to a very high limit:</div><div><br></div><div>1) When the fork is over, special-case code for dealing with old blocks can be eliminated, because all old blocks satisfy the new limit.</div><div><br></div><div>2) More importantly, if the limit is small enough it might get hit by standard transactions, then block creation code (CreateNewBlock() / getblocktemplate / or some external transaction-assembling software) will have to solve an even more complicated bin-packing problem to optimize for fees paid.</div><div><br></div><div>In practice, the 20,000 sigop limit will always be reached before MAX_BLOCK_SIGHASH.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">
&gt;<br>
&gt;&gt; Miners express their support for this BIP by ...<br>
&gt;<br>
&gt; But miners don&#39;t get to decide hardforks. How does the economy express their<br>
&gt; support for it? What happens if miners trigger it without consent from the<br>
&gt; economy?<br></div></div></blockquote><div><br></div><div>&quot;The economy&quot; does support this.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">
&gt;<br>
&gt; If you are intent on using the version bits to trigger the hardfork, I suggest<br>
&gt; rephrasing this such that miners should only enable the bit when they have<br>
&gt; independently confirmed economic support (this means implementations need a<br>
&gt; config option that defaults to off).<br></div></div></blockquote><div><br></div><div>Happy to add words about economic majority.</div><div><br></div><div>Classic will not implement a command-line option (the act of running Classic is &quot;I opt in&quot;), but happy to add one for a pull request to Core, assuming Core would not see such a pull request as having any hostile intent.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">
&gt;<br>
&gt;&gt; SPV (simple payment validation) wallets are compatible with this change.<br>
&gt;<br>
&gt; Would prefer if this is corrected to &quot;Light clients&quot; or something. Actual SPV<br>
&gt; wallets do not exist at this time, and would not be compatible with a<br>
&gt; hardfork.<br></div></div></blockquote><div><br></div><div>Is there an explanation of SPV versus &quot;Light Client&quot; written somewhere more permanent than a reddit comment or forum post that I can point to?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">
&gt;<br>
&gt;&gt; In the short term, an increase is needed to continue the current economic<br>
&gt;&gt; policies with regards to fees and block space, matching market expectations<br>
&gt;&gt; and preventing market disruption.<br>
&gt;<br>
&gt; IMO this sentence is the most controversial part of your draft, and it<br>
&gt; wouldn&#39;t suffer a loss to remove it (or at least make it subjective).<br></div></div></blockquote><div><br></div><div>Happy to remove.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">
&gt; I would also prefer to see any hardfork:<br>
&gt;<br>
&gt; 1. Address at least the simple tasks on the hardfork wishlist (eg, enable some<br>
&gt;    disabled opcodes; fix P2SH for N-of-&gt;15 multisig; etc).<br></div></div></blockquote><div><br></div><div>Those would be separate BIPs. (according to BIP 1, smaller is better)</div><div><br></div><div>After this 2MB bump, I agree we need to agree on a process for the next hard fork to avoid all of the unnecessary drama.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">
&gt; 2. Be deployed as a soft-hardfork so as not to leave old nodes entirely<br>
&gt;    insecure.</div></div></blockquote></div><div class="gmail_extra"><br></div>I haven&#39;t been paying attention to all of the &quot;soft-hardfork/hard-softfork/etc&quot; terminology so have no idea what you mean. Is THAT written up somewhere?<br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>--<br>Gavin Andresen<br></div><div><br></div></div></div></div></div>
</div></div>